PicPick 歷史版本列表
PicPick 是一個全功能的屏幕捕捉應用程序的 Windows,直觀的圖像編輯器,顏色選擇器,調色板,像素尺,量角器,十字線,白板和更多。用戶友好和充滿創造您的形象的功能,適用於軟件開發商,平面設計師和家庭用戶。 PicPick 包括一切有關圖形設計,所以它將不僅節省您的磁盤空間,而且還節省時間和金錢.PicPick 功能:捕獲任何內容 截屏的整個屏幕,一個活動的窗口,滾動窗口和任何特定區域的... PicPick 軟體介紹更新時間:2022-09-30
更新細節:
更新時間:2022-09-21
更新細節:
更新時間:2022-09-20
更新細節:
What's new in this version:
Improvements:
Cloud projects now support uploading your own files:
We added support for uploading your own files from your device for Cloud projects on the web-app:
- You can now upload your own files when working on the web-app, when your project is saved as a Cloud project
- This means the web-app can be used without limits to build any game you could build on the desktop app
Newsletter and user accounts:
- Add the possibility to receive the GDevelop newsletter from the User Profile and on the Signup dialog
- We encourage everyone to check this to receive the newsletter where we'll present new features but also showcase community members, games or community events
- Improve Signup and Edit profile dialogs to show when a username is not available
User experience improvements:
- Add announcements and news in the homepage community tab so that it's easy to follow the news from the community
- "Urgent" announcements will also be displayed at the top of the home page (which can be dismissed)
- Change the name of exports to be based on the name and version of the game (available for english character set only at the moment)
- Improve SVG display in Resource Store for dark themes
- Add a link in the new version dialog to open the release notes on GitHub, to benefit from browser automatic translations
- Rename object variables expression names to differentiate between number and text variables
- Add missing translations for some messages shown when renaming an object
- Display a super thin or invisible scrollbars for the toolbar and tabs, according to the browser
- Improve display of black icons on dark themes
Updated Premium plans for cloud services:
- We updated the free and premium subscriptions: each tier benefits from Cloud Projects, Online Leaderboards, Automated Builds, Player Feedback, Game Analytics and more
Other improvements:
Improve game templates visibility:
- Add 2 new actions in the Desktop menu "Create an empty project" and "Create a project from a template"
- Templates are now displayed at the top of the Build section
- The button "Create a project" in the Build section now directly opens a blank project
- Remove the limit of 16k tiles in a tilemap
- This includes an upgrade to the PixiJS tilemap extension to version 3.2.2
- Add "Educational" tag for games on Liluo.io
- We now distribute versions of GDevelop for macOS for Apple Silicon and for arm64 builds of Linux, which can be downloaded from the website as with other versions
- Add a new expression: Pi number (3.1415...)
New Extensions:
Reviewed extensions:
- Camera impulse
- It can be used to simulate earthquakes or impacts
Community extensions:
Clock:
- This extension converts a text object to Time/Date/Month
UpdateChecker:
- This extension checks if the version of the game on Liluo.io is different from the current game version. This allows for a basic update check for PC and mobile builds of games
Pushable/Pullable Box:
- This extension allows the user to convert an object to a pushable or/and pullable box. This new extension replaces the now out-of-date "Pushable Box" extension
Time Detector:
This extension by @MudkipWorld detects the current:
- Time of the day
- Day of the week
- Month of the year
Record movements:
- This extension allows the user to record objects' movements and recall them back to make a reverse time mechanic
References:
- This extension allows to make a variable that is a reference to another
ObjectPickingTools:
- This extension adds actions and conditions for more fine grained control over object picking
Geolocation extension:
- This extension allows to get precise geolocation data from the player
Flip Gravity:
- This extension allow to flip platformer character gravity upside down
Extensions updates:
Sprite Based Lighting:
- Follow extension's best practices and prevent unexpected behaviors
ToogleSwitch, AutoTyping, CursorType, ObjectSpaner:
- Fix useless "Change" prefixes in actions full name
Make it rain:
- Updated description
ScreenShaking:
- Use noise based shaking, fix an issue when scrolling and add multi-layer features
Draggable Slider:
- Fixed SetMinValue and SetMaxValue (descriptions were swapped)
Add expressions for more properties and some actions:
Expressions:
- Length of track
- Thickness of track
- Height of thumb
Actions:
- Change the opacity of halo when pressed or hovered
BoidsMovement:
- Fix a crash at a scene change
New asset packs:
- Void Collection by FoozleCC
- Skullcup by Wesxdz
- Lucid Icon pack by Leo Red
Examples:
- New game example Plinko
- The Plinko example showcases the physics behavior and how it along with other tools, like the object shake extension, can create a fun and juicy game
It also features:
- Physics engine 2.0
- Object shake
- Particles
- Simple scoring system
- Leaderboard
- Text input object(For leaderboard name)
- Ball Cup Boom (v1.0.3): Modified vibration to 25 ms
Fixed:
- Fix tile maps layer filtering
- Fix browser automatic translations crashing the app
- Update "Submit New Extension" link to redirect to new submission format
- Fix useless "Change" prefix in some actions name
- Fix the action to tween the number of a scene variable
- Fix the wording of the layer field when the layer is not optional (though it has a default value: the base layer)
- Fix points coordinates inputs not losing focus when moving points on the preview
- Fix Safari/iOS unable to load some images in the app
- Fix parameter to specify the P2P port not being an expression
- Fix the name of the "End Opacity" condition of the particle emitters
- Fix tile maps with rectangular tiles
更新時間:2022-09-16
更新細節:
What's new in this version:
Improvements:
Cloud projects now support uploading your own files:
We added support for uploading your own files from your device for Cloud projects on the web-app:
- You can now upload your own files when working on the web-app, when your project is saved as a Cloud project
- This means the web-app can be used without limits to build any game you could build on the desktop app
Newsletter and user accounts:
- Add the possibility to receive the GDevelop newsletter from the User Profile and on the Signup dialog
- We encourage everyone to check this to receive the newsletter where we'll present new features but also showcase community members, games or community events
- Improve Signup and Edit profile dialogs to show when a username is not available
User experience improvements:
- Add announcements and news in the homepage community tab so that it's easy to follow the news from the community
- "Urgent" announcements will also be displayed at the top of the home page (which can be dismissed)
- Change the name of exports to be based on the name and version of the game (available for english character set only at the moment)
- Improve SVG display in Resource Store for dark themes
- Add a link in the new version dialog to open the release notes on GitHub, to benefit from browser automatic translations
- Rename object variables expression names to differentiate between number and text variables
- Add missing translations for some messages shown when renaming an object
- Display a super thin or invisible scrollbars for the toolbar and tabs, according to the browser
- Improve display of black icons on dark themes
Updated Premium plans for cloud services:
- We updated the free and premium subscriptions: each tier benefits from Cloud Projects, Online Leaderboards, Automated Builds, Player Feedback, Game Analytics and more
Other improvements:
Improve game templates visibility:
- Add 2 new actions in the Desktop menu "Create an empty project" and "Create a project from a template"
- Templates are now displayed at the top of the Build section
- The button "Create a project" in the Build section now directly opens a blank project
- Remove the limit of 16k tiles in a tilemap
- This includes an upgrade to the PixiJS tilemap extension to version 3.2.2
- Add "Educational" tag for games on Liluo.io
- We now distribute versions of GDevelop for macOS for Apple Silicon and for arm64 builds of Linux, which can be downloaded from the website as with other versions
- Add a new expression: Pi number (3.1415...)
New Extensions:
Reviewed extensions:
- Camera impulse
- It can be used to simulate earthquakes or impacts
Community extensions:
Clock:
- This extension converts a text object to Time/Date/Month
UpdateChecker:
- This extension checks if the version of the game on Liluo.io is different from the current game version. This allows for a basic update check for PC and mobile builds of games
Pushable/Pullable Box:
- This extension allows the user to convert an object to a pushable or/and pullable box. This new extension replaces the now out-of-date "Pushable Box" extension
Time Detector:
This extension by @MudkipWorld detects the current:
- Time of the day
- Day of the week
- Month of the year
Record movements:
- This extension allows the user to record objects' movements and recall them back to make a reverse time mechanic
References:
- This extension allows to make a variable that is a reference to another
ObjectPickingTools:
- This extension adds actions and conditions for more fine grained control over object picking
Geolocation extension:
- This extension allows to get precise geolocation data from the player
Flip Gravity:
- This extension allow to flip platformer character gravity upside down
Extensions updates:
Sprite Based Lighting:
- Follow extension's best practices and prevent unexpected behaviors
ToogleSwitch, AutoTyping, CursorType, ObjectSpaner:
- Fix useless "Change" prefixes in actions full name
Make it rain:
- Updated description
ScreenShaking:
- Use noise based shaking, fix an issue when scrolling and add multi-layer features
Draggable Slider:
- Fixed SetMinValue and SetMaxValue (descriptions were swapped)
Add expressions for more properties and some actions:
Expressions:
- Length of track
- Thickness of track
- Height of thumb
Actions:
- Change the opacity of halo when pressed or hovered
BoidsMovement:
- Fix a crash at a scene change
New asset packs:
- Void Collection by FoozleCC
- Skullcup by Wesxdz
- Lucid Icon pack by Leo Red
Examples:
- New game example Plinko
- The Plinko example showcases the physics behavior and how it along with other tools, like the object shake extension, can create a fun and juicy game
It also features:
- Physics engine 2.0
- Object shake
- Particles
- Simple scoring system
- Leaderboard
- Text input object(For leaderboard name)
- Ball Cup Boom (v1.0.3): Modified vibration to 25 ms
Fixed:
- Fix tile maps layer filtering
- Fix browser automatic translations crashing the app
- Update "Submit New Extension" link to redirect to new submission format
- Fix useless "Change" prefix in some actions name
- Fix the action to tween the number of a scene variable
- Fix the wording of the layer field when the layer is not optional (though it has a default value: the base layer)
- Fix points coordinates inputs not losing focus when moving points on the preview
- Fix Safari/iOS unable to load some images in the app
- Fix parameter to specify the P2P port not being an expression
- Fix the name of the "End Opacity" condition of the particle emitters
- Fix tile maps with rectangular tiles
更新時間:2022-09-15
更新細節:
What's new in this version:
Newsletter and user accounts:
- Add the possibility to receive the GDevelop newsletter from the User Profile and on the Signup dialog.
- We encourage everyone to check this to receive the newsletter where we'll present new features but also showcase community members, games or community events!
- Improve Signup and Edit profile dialogs to show when a username is not available.
User experience improvements:
- Add announcements and news in the homepage community tab so that it's easy to follow the news from the community
- "Urgent" announcements will also be displayed at the top of the home page (which can be dismissed)
- Change the name of exports to be based on the name and version of the game (available for english character set only at the moment)
- Improve SVG display in Resource Store for dark themes
- Add a link in the new version dialog to open the release notes on GitHub, to benefit from browser automatic translations
- Rename object variables expression names to differentiate between number and text variables
- Add missing translations for some messages shown when renaming an object.
- Display a super thin or invisible scrollbars for the toolbar and tabs, according to the browser.
Updated Premium plans for cloud services:
- We updated the free and premium subscriptions: each tier benefits from Cloud Projects, Online Leaderboards, Automated Builds, Player Feedback, Game Analytics and more
- Read the blog post for a full description of the updates and online services unlocked by the updated (and the existing) plans
- Other improvements
Improve game templates visibility:
- Add 2 new actions in the Desktop menu "Create an empty project" and "Create a project from a template"
- Templates are now displayed at the top of the Build section
- The button "Create a project" in the Build section now directly opens a blank project
- Remove the limit of 16k tiles in a tilemap
- This includes an upgrade to the PixiJS tilemap extension to version 3.2.2
- Add "Educational" tag for games on Liluo.io
- We now distribute versions of GDevelop for macOS for Apple Silicon and for arm64 builds of Linux, which can be downloaded from the website as with other versions
Extensions, assets, and examples:
New Extensions:
Reviewed extensions:
- Camera impulse
- It can be used to simulate earthquakes or impacts
Community extensions:
Clock:
- This extension converts a text object to Time/Date/Month
UpdateChecker:
- This extension checks if the version of the game on Liluo.io is different from the current game version. This allows for a basic update check for PC and mobile builds of games.
Pushable/Pullable Box:
- This extension allows the user to convert an object to a pushable or/and pullable box. This new extension replaces the now out-of-date "Pushable Box" extension
Time Detector:
This extension detects the current:
- Time of the day
- Day of the week
- Month of the year
Record movements:
- This extension allows the user to record objects' movements and recall them back to make a reverse time mechanic
References:
- This extension allows to make a variable that is a reference to another
ObjectPickingTools:
- This extension adds actions and conditions for more fine grained control over object picking
Geolocation extension:
- This extension allows to get precise geolocation data from the player
- Flip Gravity: This extension allow to flip platformer character gravity upside down
Extensions updates:
Sprite Based Lighting:
- Follow extension's best practices and prevent unexpected behaviors (Thanks @VegeTato)
ToogleSwitch, AutoTyping, CursorType, ObjectSpaner:
- Fix useless "Change" prefixes in actions full name
Make it rain:
- Updated description
ScreenShaking:
- Use noise based shaking, fix an issue when scrolling and add multi-layer features
Draggable Slider:
Add expressions for more properties and some actions:
Expressions:
- Length of track
- Thickness of track
- Height of thumb
Actions:
- Change the opacity of halo when pressed or hovered
Draggable Slider:
- Fixed SetMinValue and SetMaxValue (descriptions were swapped)
New asset packs:
- Void Collection by FoozleCC
- Skullcup by Wesxdz
- Lucid Icon pack by Leo Red
Examples:
- Ball Cup Boom (v1.0.3): Modified vibration to 25 ms
Fixed:
- Fix tile maps layer filtering
- Fix browser automatic translations crashing the app
- Update "Submit New Extension" link to redirect to new submission format
- Fix useless "Change" prefix in some actions name
- Fix the action to tween the number of a scene variable
- Fix the wording of the layer field when the layer is not optional (though it has a default value: the base layer)
- Fix points coordinates inputs not losing focus when moving points on the preview
- Fix Safari/iOS unable to load some images in the app
- Fix parameter to specify the P2P port not being an expression
- Fix the name of the "End Opacity" condition of the particle emitters
更新時間:2022-09-14
更新細節:
What's new in this version:
Fixed:
Interaction:
- Terminal will now use the tab's active title for Export Text
- The Emoji picker, PinYin IME or any other IME will no longer drift off the bottom of the screen
Accessibility:
- The Command Palette has become much chattier, announcing (to a screen reader) the name of the selected item
- Asking for INT_MAX characters via UIA will no longer wig us out or try to send you multiple gigabytes of null bytes
- However, it remains impolite to ask for INT_MAX characters via ITextPattern::GetText
Performance:
- Terminal is now 1.2 megabytes smaller on disk (uncompressed) thanks to not using RTTI
Reliability:
Fixed a number of crashes (smaller number than that in Preview), not all of which were common or user-impacting:
- Attempted a fix for the SignalTextChanged crash
- Attempted another fix, this time for the _refreshSizeUnderLock crash
- Fixed a crash in _WritePseudoWindowCallback
- Fixed a crash on exit with the command palette open
- Fixed a race condition in UpdatePatternLocations
- Fixed two race conditions around pseudo window visibility
- Fixed a crash in NVDA, caused by us considering a specific text range invalid
- Terminal should now more reliably appear in the context menu
更新時間:2022-09-11
更新細節:
更新時間:2022-09-11
更新細節:
更新時間:2022-08-18
更新細節:
What's new in this version:
New language features:
- Mutable struct fields may now be annotated as const to prevent changing them after construction, providing for greater clarity and optimization ability of these objects
- Type annotations can now be added to global variables to make accessing them type stable
- Empty n-dimensional arrays can now be created using multiple semicolons inside square brackets, e.g. [;;;] creates a 0×0×0 Array
- try-blocks can now optionally have an else-block which is executed right after the main body only if no errors were thrown
- @inline and @noinline can now be placed within a function body, allowing one to annotate anonymous function
- @inline and @noinline can now be applied to a function at callsite or block to enforce the involved function calls to be (or not to be inlined
- , ?, and ? are now allowed as identifier characters
- Support for Unicode 14.0.0
- Module(:name, false, false can be used to create a module that contains no names (it does not import Base or Core and does not contain a reference to itself
Language changes:
- Newly-created Task objects (@spawn, @async, etc. now adopt the world age for methods from their parent Task upon creation, instead of using the global latest world at start. This is done to enable inference to eventually optimize these calls. Places that wish for the old behavior may use Base.invokelatest
- Unbalanced Unicode bidirectional formatting directives are now disallowed within strings and comments, to mitigate the "trojan source" vulnerability
- Base.ifelse is now defined as a generic function rather than a builtin one, allowing packages to extend its definition
- Every assignment to a global variable now first goes through a call to convert(Any, x (or convert(T, x respectively if a type T has been declared for the global. This means great care should be taken to ensure the invariant convert(Any, x === x always holds, as this change could otherwise lead to unexpected behavior
- Builtin functions are now a bit more like generic functions, and can be enumerated with methods
Compiler/Runtime improvements:
- Bootstrapping time has been improved by about 25%
- The LLVM-based compiler has been separated from the run-time library into a new library, libjulia-codegen. It is loaded by default, so normal usage should see no changes. In deployments that do not need the compiler (e.g. system images where all needed code is precompiled, this library (and its LLVM dependency can simply be excluded
- Conditional type constraints are now be forwarded interprocedurally (i.e. propagated from caller to callee. This allows inference to understand e.g. Base.ifelse(isa(x, Int, x, 0 returns ::Int-value even if the type of x is not known
- Julia-level SROA (Scalar Replacement of Aggregates has been improved: allowing elimination of getfield calls with constant global fields enabling elimination of mutable structs with uninitialized fields improving performance and handling more nested getfield calls
- Abstract call sites can now be inlined or statically resolved as long as the call site has a single matching method
- Inference now tracks various effects such as side-effectful-ness and nothrow-ness on a per-specialization basis. Code heavily dependent on constant propagation should see significant compile-time performance improvements and certain cases (e.g. calls to uninlinable functions that are nevertheless effect free should see runtime performance improvements. Effects may be overwritten manually with the Base.@assume_effects macro
Command-line option changes:
- The default behavior of observing @inbounds declarations is now an option via auto in --check-bounds=yes|no|auto
- New option --strip-metadata to remove docstrings, source location information, and local variable names when building a system image
- New option --strip-ir to remove the compiler's IR (intermediate representation of source code when building a system image. The resulting image will only work if --compile=all is used, or if all needed code is precompiled
- When the program file is - the code to be executed is read from standard in
- Multi-threading changes:
- Threads.@threads now defaults to a new :dynamic schedule option which is similar to the previous behavior except that iterations will be scheduled dynamically to available worker threads rather than pinned to each thread. This behavior is more composable with (possibly nested @spawn and @threads loops
Build system changes:
New library functions:
- New function eachsplit(str for iteratively performing split(str
- New function allequal(itr for testing if all elements in an iterator are equal
- hardlink(src, dst can be used to create hard links
- setcpuaffinity(cmd, cpus can be used to set CPU affinity of sub-processes
- diskstat(path=pwd( can be used to return statistics about the disk
- New @showtime macro to show both the line being evaluated and the @time report
- The LazyString and the lazy"str" macro were added to support delayed construction of error messages in error paths
New library features:
- @time and @timev now take an optional description to allow annotating the source of time reports, e.g. @time "Evaluating foo" foo(
- range accepts either stop or length as a sole keyword argument
- precision and setprecision now accept a base keyword argument
- TCP socket objects now expose closewrite functionality and support half-open mode usage
- extrema now accepts an init keyword argument
- Iterators.countfrom now accepts any type that defines +
Standard library changes:
- Keys with value nothing are now removed from the environment in addenv
- Iterators.reverse (and hence last now supports eachline iterators
- The length function on certain ranges of certain element types no longer checks for integer overflow in most cases. The new function checked_length is now available, which will try to use checked arithmetic to error if the result may be wrapping. Or use a package such as SaferIntegers.jl when constructing the range
- Intersect returns a result with the eltype of the type-promoted eltypes of the two inputs
- Iterating an Iterators.Reverse now falls back on reversing the eachindex iterator, if possible
InteractiveUtils:
- New macro @time_imports for reporting any time spent importing packages and their dependencies, highlighting compilation and recompilation time as percentages per import[#45064].
LinearAlgebra:
- The BLAS submodule now supports the level-2 BLAS subroutine spr!
- cholesky[!] now supports LinearAlgebra.PivotingStrategy (singleton type values as its optional pivot argument: the default is cholesky(A, NoPivot( (vs. cholesky(A, RowMaximum(; the former Val{true/false}-based calls are deprecated
- The standard library LinearAlgebra.jl is now completely independent of SparseArrays.jl, both in terms of the source code as well as unit testing As a consequence, sparse arrays are no longer (silently returned by methods from LinearAlgebra applied to Base or LinearAlgebra objects. Specifically, this results in the following breaking changes:
- Concatenations involving special "sparse" matrices (*diagonal now return dense matrices; As a consequence, the D1 and D2 fields of SVD objects, constructed upon getproperty calls are now dense matrices.
- arg similar(::SpecialSparseMatrix, ::Type, ::Dims returns a dense zero matrix. As a consequence, products of bi-, tri- and symmetric tridiagonal matrices with each other result in dense output. Moreover, constructing 3-arg similar matrices of special "sparse" matrices of (nonstatic matrices now fails for the lack of zero(::Type{Matrix{T}}.
Printf:
- Now uses textwidth for formatting %s and %c widths
Profile:
- CPU profiling now records sample metadata including thread and task. Profile.print( has a new groupby kwarg that allows grouping by thread, task, or nested thread/task, task/thread, and threads and tasks kwargs to allow filtering. Further, percent utilization is now reported as a total or per-thread, based on whether the thread is idle or not at each sample. Profile.fetch( includes the new metadata by default. For backwards compatibility with external profiling data consumers, it can be excluded by passing include_meta=false
- The new Profile.Allocs module allows memory allocations to be profiled. The stack trace, type, and size of each allocation is recorded, and a sample_rate argument allows a tunable amount of allocations to be skipped, reducing performance overhead
- A fixed duration cpu profile can now be triggered by the user during running tasks without Profile being loaded first and the report will show during execution. On MacOS & FreeBSD press ctrl-t or raise a SIGINFO. For other platforms raise a SIGUSR1 i.e. % kill -USR1 $julia_pid. Not currently available on windows
REPL:
- RadioMenu now supports optional keybindings to directly select options
- (x, y followed by TAB displays all methods that can be called with arguments x, y, .... (The space at the beginning prevents entering help-mode. MyModule.?(x, y limits the search to MyModule. TAB requires that at least one argument have a type more specific than Any; use SHIFT-TAB instead of TAB to allow any compatible methods
- New err global variable in Main set when an expression throws an exception, akin to ans. Typing err reprints the exception information
SparseArrays:
- The code for SparseArrays has been moved from the Julia repo to the external repo
- New sparse concatenation functions sparse_hcat, sparse_vcat, and sparse_hvcat return SparseMatrixCSC output independent from the types of the input arguments. They make concatenation behavior available, in which the presence of some special "sparse" matrix argument resulted in sparse output by multiple dispatch. This is no longer possible after making LinearAlgebra.jl independent from SparseArrays.jl
Logging:
- The standard log levels BelowMinLevel, Debug, Info, Warn, Error, and AboveMaxLevel are now exported from the Logging stdlib
Unicode:
- Added function isequal_normalized to check for Unicode equivalence without explicitly constructing normalized strings
- The Unicode.normalize function now accepts a chartransform keyword that can be used to supply custom character mappings, and a Unicode.julia_chartransform function is provided to reproduce the mapping used in identifier normalization by the Julia parser
Test:
- @test_throws "some message" triggers_error( can now be used to check whether the displayed error text contains "some message" regardless of the specific exception type. Regular expressions, lists of strings, and matching functions are also supported
- @testset foo( can now be used to create a test set from a given function. The name of the test set is the name of the called function. The called function can contain @test and other @testset definitions, including to other function calls, while recording all intermediate test results
- TestLogger and LogRecord are now exported from the Test stdlib
Distributed:
- SSHManager now supports workers with csh/tcsh login shell, via addprocs( option shell=:csh
更新時間:2022-08-18
更新細節:
What's new in this version:
New language features:
- Mutable struct fields may now be annotated as const to prevent changing them after construction, providing for greater clarity and optimization ability of these objects
- Type annotations can now be added to global variables to make accessing them type stable
- Empty n-dimensional arrays can now be created using multiple semicolons inside square brackets, e.g. [;;;] creates a 0×0×0 Array
- try-blocks can now optionally have an else-block which is executed right after the main body only if no errors were thrown
- @inline and @noinline can now be placed within a function body, allowing one to annotate anonymous function
- @inline and @noinline can now be applied to a function at callsite or block to enforce the involved function calls to be (or not to be inlined
- , ?, and ? are now allowed as identifier characters
- Support for Unicode 14.0.0
- Module(:name, false, false can be used to create a module that contains no names (it does not import Base or Core and does not contain a reference to itself
Language changes:
- Newly-created Task objects (@spawn, @async, etc. now adopt the world age for methods from their parent Task upon creation, instead of using the global latest world at start. This is done to enable inference to eventually optimize these calls. Places that wish for the old behavior may use Base.invokelatest
- Unbalanced Unicode bidirectional formatting directives are now disallowed within strings and comments, to mitigate the "trojan source" vulnerability
- Base.ifelse is now defined as a generic function rather than a builtin one, allowing packages to extend its definition
- Every assignment to a global variable now first goes through a call to convert(Any, x (or convert(T, x respectively if a type T has been declared for the global. This means great care should be taken to ensure the invariant convert(Any, x === x always holds, as this change could otherwise lead to unexpected behavior
- Builtin functions are now a bit more like generic functions, and can be enumerated with methods
Compiler/Runtime improvements:
- Bootstrapping time has been improved by about 25%
- The LLVM-based compiler has been separated from the run-time library into a new library, libjulia-codegen. It is loaded by default, so normal usage should see no changes. In deployments that do not need the compiler (e.g. system images where all needed code is precompiled, this library (and its LLVM dependency can simply be excluded
- Conditional type constraints are now be forwarded interprocedurally (i.e. propagated from caller to callee. This allows inference to understand e.g. Base.ifelse(isa(x, Int, x, 0 returns ::Int-value even if the type of x is not known
- Julia-level SROA (Scalar Replacement of Aggregates has been improved: allowing elimination of getfield calls with constant global fields enabling elimination of mutable structs with uninitialized fields improving performance and handling more nested getfield calls
- Abstract call sites can now be inlined or statically resolved as long as the call site has a single matching method
- Inference now tracks various effects such as side-effectful-ness and nothrow-ness on a per-specialization basis. Code heavily dependent on constant propagation should see significant compile-time performance improvements and certain cases (e.g. calls to uninlinable functions that are nevertheless effect free should see runtime performance improvements. Effects may be overwritten manually with the Base.@assume_effects macro
Command-line option changes:
- The default behavior of observing @inbounds declarations is now an option via auto in --check-bounds=yes|no|auto
- New option --strip-metadata to remove docstrings, source location information, and local variable names when building a system image
- New option --strip-ir to remove the compiler's IR (intermediate representation of source code when building a system image. The resulting image will only work if --compile=all is used, or if all needed code is precompiled
- When the program file is - the code to be executed is read from standard in
- Multi-threading changes:
- Threads.@threads now defaults to a new :dynamic schedule option which is similar to the previous behavior except that iterations will be scheduled dynamically to available worker threads rather than pinned to each thread. This behavior is more composable with (possibly nested @spawn and @threads loops
Build system changes:
New library functions:
- New function eachsplit(str for iteratively performing split(str
- New function allequal(itr for testing if all elements in an iterator are equal
- hardlink(src, dst can be used to create hard links
- setcpuaffinity(cmd, cpus can be used to set CPU affinity of sub-processes
- diskstat(path=pwd( can be used to return statistics about the disk
- New @showtime macro to show both the line being evaluated and the @time report
- The LazyString and the lazy"str" macro were added to support delayed construction of error messages in error paths
New library features:
- @time and @timev now take an optional description to allow annotating the source of time reports, e.g. @time "Evaluating foo" foo(
- range accepts either stop or length as a sole keyword argument
- precision and setprecision now accept a base keyword argument
- TCP socket objects now expose closewrite functionality and support half-open mode usage
- extrema now accepts an init keyword argument
- Iterators.countfrom now accepts any type that defines +
Standard library changes:
- Keys with value nothing are now removed from the environment in addenv
- Iterators.reverse (and hence last now supports eachline iterators
- The length function on certain ranges of certain element types no longer checks for integer overflow in most cases. The new function checked_length is now available, which will try to use checked arithmetic to error if the result may be wrapping. Or use a package such as SaferIntegers.jl when constructing the range
- Intersect returns a result with the eltype of the type-promoted eltypes of the two inputs
- Iterating an Iterators.Reverse now falls back on reversing the eachindex iterator, if possible
InteractiveUtils:
- New macro @time_imports for reporting any time spent importing packages and their dependencies, highlighting compilation and recompilation time as percentages per import[#45064].
LinearAlgebra:
- The BLAS submodule now supports the level-2 BLAS subroutine spr!
- cholesky[!] now supports LinearAlgebra.PivotingStrategy (singleton type values as its optional pivot argument: the default is cholesky(A, NoPivot( (vs. cholesky(A, RowMaximum(; the former Val{true/false}-based calls are deprecated
- The standard library LinearAlgebra.jl is now completely independent of SparseArrays.jl, both in terms of the source code as well as unit testing As a consequence, sparse arrays are no longer (silently returned by methods from LinearAlgebra applied to Base or LinearAlgebra objects. Specifically, this results in the following breaking changes:
- Concatenations involving special "sparse" matrices (*diagonal now return dense matrices; As a consequence, the D1 and D2 fields of SVD objects, constructed upon getproperty calls are now dense matrices.
- arg similar(::SpecialSparseMatrix, ::Type, ::Dims returns a dense zero matrix. As a consequence, products of bi-, tri- and symmetric tridiagonal matrices with each other result in dense output. Moreover, constructing 3-arg similar matrices of special "sparse" matrices of (nonstatic matrices now fails for the lack of zero(::Type{Matrix{T}}.
Printf:
- Now uses textwidth for formatting %s and %c widths
Profile:
- CPU profiling now records sample metadata including thread and task. Profile.print( has a new groupby kwarg that allows grouping by thread, task, or nested thread/task, task/thread, and threads and tasks kwargs to allow filtering. Further, percent utilization is now reported as a total or per-thread, based on whether the thread is idle or not at each sample. Profile.fetch( includes the new metadata by default. For backwards compatibility with external profiling data consumers, it can be excluded by passing include_meta=false
- The new Profile.Allocs module allows memory allocations to be profiled. The stack trace, type, and size of each allocation is recorded, and a sample_rate argument allows a tunable amount of allocations to be skipped, reducing performance overhead
- A fixed duration cpu profile can now be triggered by the user during running tasks without Profile being loaded first and the report will show during execution. On MacOS & FreeBSD press ctrl-t or raise a SIGINFO. For other platforms raise a SIGUSR1 i.e. % kill -USR1 $julia_pid. Not currently available on windows
REPL:
- RadioMenu now supports optional keybindings to directly select options
- (x, y followed by TAB displays all methods that can be called with arguments x, y, .... (The space at the beginning prevents entering help-mode. MyModule.?(x, y limits the search to MyModule. TAB requires that at least one argument have a type more specific than Any; use SHIFT-TAB instead of TAB to allow any compatible methods
- New err global variable in Main set when an expression throws an exception, akin to ans. Typing err reprints the exception information
SparseArrays:
- The code for SparseArrays has been moved from the Julia repo to the external repo
- New sparse concatenation functions sparse_hcat, sparse_vcat, and sparse_hvcat return SparseMatrixCSC output independent from the types of the input arguments. They make concatenation behavior available, in which the presence of some special "sparse" matrix argument resulted in sparse output by multiple dispatch. This is no longer possible after making LinearAlgebra.jl independent from SparseArrays.jl
Logging:
- The standard log levels BelowMinLevel, Debug, Info, Warn, Error, and AboveMaxLevel are now exported from the Logging stdlib
Unicode:
- Added function isequal_normalized to check for Unicode equivalence without explicitly constructing normalized strings
- The Unicode.normalize function now accepts a chartransform keyword that can be used to supply custom character mappings, and a Unicode.julia_chartransform function is provided to reproduce the mapping used in identifier normalization by the Julia parser
Test:
- @test_throws "some message" triggers_error( can now be used to check whether the displayed error text contains "some message" regardless of the specific exception type. Regular expressions, lists of strings, and matching functions are also supported
- @testset foo( can now be used to create a test set from a given function. The name of the test set is the name of the called function. The called function can contain @test and other @testset definitions, including to other function calls, while recording all intermediate test results
- TestLogger and LogRecord are now exported from the Test stdlib
Distributed:
- SSHManager now supports workers with csh/tcsh login shell, via addprocs( option shell=:csh