Dynamic language built for fast numerical computing introduces lower-level alternative to Array that delivers significant speedups and more maintainable code. Credit: Jamesboy Nuchaikong / Shutterstock A new version of the dynamically typed, high-performance Julia language for numerical computing has been released. Julia 1.11 features a new Memory type, a lower-level container that provides an alternative to Array. Downloadable from julialang.org, Julia 1.11 was released October 7 following two alphas, two betas, and four release candidates. Introduced with Julia 1.11, the Memory type has less overhead and a faster constructor than Array, making it a good choice for situations that do not need all the features of Array, according to release notes. Most of the Array type now is implemented in Julia on top of Memory as well, thus leading to significant speedups for functions such as push!, along with more maintainable code. Also in Julia 1.11, public is a new keyword. Symbols marked with public are considered public API, while symbols marked with export also are now treated as public API. The difference between export and public is that public names do not become available when using a package module. Additionally, tab completion has become more powerful and gains inline hinting when there is a singular completion available that can be completed with tab. Julia overall is billed as providing capabilities such as asynchronous I/O, metaprogramming, profiling, and a package manger. Other features in Julia 1.11: The entry point for Julia has been standardized to Main.main(args). The @time macro now will report any lock contention within the call being timed, as a number of lock conflicts. ScopedValue implements dynamic scope with inheritance across tasks. Manifest.toml files can now be renamed in the format Manifest-v{major}.{minor}.toml to be potentially picked up by the given Julia version. Code coverage and malloc tracking no longer are generated during the package pre-compilation stage. During these modes, pkgimage caches now are used for packages that are not being tracked. This means coverage testing will by default use pkimage caches for all other packages than the package being tested, likely meaning faster execution. At pre-compilation, atexit hooks now run before saving the output file, thus allowing users to safely tear down background state and clean up other resources when the program wants to start exiting. Specifying a path in JULIA_DEPOT_PATH now results in the expansion of empty strings to omit the default user depot. Pre-compilation cache files now are relocatable and their validity is verified through a content hash in their source files instead of their mtime. Unicode 15.1 is supported. Related content feature What is Rust? Safe, fast, and easy software development Unlike most programming languages, Rust doesn't make you choose between speed, safety, and ease of use. Find out how Rust delivers better code with fewer compromises, and a few downsides to consider before learning Rust. By Serdar Yegulalp Nov 20, 2024 11 mins Rust Programming Languages Software Development how-to Kotlin for Java developers: Classes and coroutines Kotlin was designed to bring more flexibility and flow to programming in the JVM. Here's an in-depth look at how Kotlin makes working with classes and objects easier and introduces coroutines to modernize concurrency. By Matthew Tyson Nov 20, 2024 9 mins Java Kotlin Programming Languages news F# 9 adds nullable reference types Latest version of Microsoft’s functional .NEt programming language provides a type-safe way to handle reference types that can have null as a valid value. By Paul Krill Nov 18, 2024 3 mins Microsoft .NET Programming Languages Software Development news Go language evolving for future hardware, AI workloads The Go team is working to adapt Go to large multicore systems, the latest hardware instructions, and the needs of developers of large-scale AI systems. By Paul Krill Nov 15, 2024 3 mins Google Go Generative AI Programming Languages Resources Videos