v0.7.0-alpha.0 #2218
bettio
announced in
Announcements
v0.7.0-alpha.0
#2218
Replies: 1 comment
-
|
Great news! Thanks! I just noticed that the link to the getting started guide is returning a 404. |
Beta Was this translation helpful? Give feedback.
0 replies
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
-
v0.7.0-alpha.0 release
This is an alpha release, the first pre-release on the road to v0.7.0. It represents over two year of development and introduces several groundbreaking features. While we have taken care to test thoroughly, APIs may still evolve before the stable release. If you need maximum stability for production deployments, we recommend staying on v0.6.x. That said, we encourage you to try v0.7.0-alpha.0 and report any issues you encounter, your feedback is invaluable in shaping the stable release.
OTP-28 and OTP-29 are now supported. This is a major improvement over v0.6.6 which did not include OTP-28 support. On macOS, Homebrew and MacPorts default to OTP-28 or later, so this release works out of the box with default system installations. You can use asdf or mise to manage multiple Erlang/OTP versions if needed.
Please read the getting started guide for flashing instructions.
Highlights
Distributed Erlang
AtomVM now supports the Erlang distribution protocol, allowing AtomVM nodes running on microcontrollers to connect to standard BEAM nodes or other AtomVM instances via message passing. This release includes:
erl_epmdclient implementationioandio_libfunctions)This enables powerful use cases: debugging an MCU directly from a standard OTP shell, coordinating multiple microcontrollers via message passing, and building mixed clusters of BEAM and AtomVM nodes. TLS distribution is not yet available.
JIT Compilation and Multiple Execution Modes
AtomVM now supports four execution strategies:
The JIT compiler is itself written in Erlang. Supported JIT architectures include RISC-V32, ARM v6-M (Cortex-M0+), x86_64, and aarch64.
Big Integer Support
AtomVM now supports integers up to 256-bit (sign + 256-bit magnitude). All arithmetic operations (
+,-,*,div,rem,abs, etc.) and all bitwise operations (band,bor,bxor,bnot,bsl,bsr) work with big integers. Serialization viabinary_to_term/1andterm_to_binary/1,2is also supported.Cryptographic Operations
A comprehensive
cryptomodule has been added:crypto:generate_key/2,crypto:compute_key/4)crypto:sign/4,crypto:verify/5)crypto:hash_init/update/final,crypto:mac_init/update/final)crypto:crypto_one_time_aead)crypto:pbkdf2_hmac/5)AVM_USE_LIBSODIUM=ON)ETS
A limited but functional implementation of the OTP
etsinterface is now available, including support forset,bag, andduplicate_bagtable types with operations such asinsert,lookup,delete,member,update_counter,update_element, and more.Expanded Hardware Support
Elixir Improvements
GenServerandSupervisorsupportFunction.exandProtocol.exfor improved Elixir 1.18 supportProcess.link/1andProcess.unlink/1Basemodule-DATOMVM_ELIXIR_SUPPORT=onWebAssembly
AtomVM's Emscripten/WASM port continues to improve. Pre-built binaries are available for both Node.js and browser environments. This release powers projects like Popcorn, which runs Elixir directly in the browser, including the Elixir Language Tour.
POSIX File and Directory Operations
New POSIX functions for file I/O (
seek,pread,pwrite,fsync,ftruncate,rename,stat,fstat) and directory operations (mkdir,rmdir) are now available on supported platforms.Upgrade Notes
If upgrading from v0.6.x, please review the UPDATING.md file. Key changes:
init:boot/1is now used as the entry point if it exists. It automatically starts the kernel application and callsstart/0from the identified startup module. Users who were manually starting the kernel application (typically for distribution) must stop doing so. Startingnet_kernelis still required.is_pid/1tois_port/1.bsloverflow checking: Bitshift left now checks for overflows. Mask values before shifting: e.g.(Value band 0xF) bsl 252.binary_to_integer/list_to_integer: No longer raiseoverflow: they raisebadargwhen the result exceeds 256 bits.idf.py -DATOMVM_ELIXIR_SUPPORT=on set-target ${CHIP}instead of copying partition files.externaltermmodule has been renamed toexternal_termwith a completely new API.network_fsmmodule has been removed.Pre-built Binaries
Pre-built binaries are available for download from this release page:
All binaries include SHA256 checksums for verification.
Added
etsinterfacecode:all_loaded/0andcode:all_available/0erlang:loaded/0erlang:split_binary/2inet:getaddr/2atomvm:get_creation/0, equivalent toerts_internal:get_creation/0erlang:fun_info/2anderlang:fun_info/1registered_nameinerlang:process_info/2andProcess.info/2net:gethostname/0on platforms with gethostname(3).socket:getopt/2supervisor:terminate_child/2,supervisor:restart_child/2andsupervisor:delete_child/2esp:partition_read/3, and documentation foresp:partition_erase_range/2/3andesp:partition_write/3atomvm:subprocess/4to perform pipe/fork/execve on POSIX platformserl_epmdclient implementation to epmd usingsocketmodulerecv,recvfromandaccept.ets:update_counter/3andets:update_counter/4.erlang:+/1lists:append/1andlists:append/2erlang:spawn_monitor/1,erlang:spawn_monitor/3lists:dropwhile/2.float/1BIF.erlang:get/0anderlang:erase/0.erlang:unique_integer/0anderlang:unique_integer/1lists:flatmap/2io:fwrite/1,2,3andio:format/3as well as few io functions required by remote shellcode:is_loaded/1andcode:which/1io_libfunctions includingio_lib:fwrite/2andio_lib:write_atom/1init:get_argument/1,init:get_plain_arguments/0andinit:notify_when_started/1application:get_env/2erlang:module_loaded/1binary:longest_common_prefix/1binary:replace/3,binary:replace/4binary:match/2andbinary:match/3supervisor:which_children/1andsupervisor:count_children/1monitored_byinprocess_info/2current_stacktraceinprocess_infoerlang:list_to_bitstringlists:keyfind,lists:keymemberandlists:memberas NIFsAVM_PRINT_PROCESS_CRASH_DUMPSoptionlists:ukeysort/2binary_to_term/1andterm_to_binary/1,2proc_libsysesp:timer_get_time/0esp_dacmodule, exposing DAC oneshot mode on ESPs that support itenif_make_resource_binary)Range:size/1ledcfunctions for esp32 platformnetwork:sta_connect/0,1andnetwork:sta_disconnect/0to ESP32 network driver.disconnectedeventsnetwork:sta_status/0to get the current connection state of the sta interface.-DATOMVM_ELIXIR_SUPPORT=onconfiguration optioninetfunctions:ntoa/1,parse_address/1,parse_ipv4_address/1,parse_ipv4strict_address/1is_integer/3BIF, introduced with OTP-29base64:encode/2andbase64:decode/2functions, that take in addition also a map with encoding/decoding options, also Elixir(url_)encode64/(url_)decode64have been added toBase.nanosecondandnativetime unit support toerlang:system_time/1,erlang:monotonic_time/1, andcalendar:system_time_to_universal_time/2erlang:system_time/0,erlang:monotonic_time/0, andos:system_time/0,1NIFsfilename:join/1andfilename:split/1crypto:generate_key/2,crypto:compute_key/4,crypto:sign/4andcrypto:verify/5crypto:hash_init/1,crypto:hash_update/2andcrypto:hash_final/1crypto:crypto_init/3,crypto:crypto_init/4,crypto:crypto_update/2andcrypto:crypto_final/1crypto:crypto_one_time_aead/6andcrypto:crypto_one_time_aead/7crypto:pbkdf2_hmac/5andcrypto:hash_equals/2crypto:mac/4,crypto:mac_init/3,crypto:mac_update/2,crypto:mac_final/1andcrypto:mac_finalN/2crypto:info_lib/0erlang:crc32/1,erlang:crc32/2anderlang:crc32_combine/3AVM_USE_LIBSODIUM=ON)bagandduplicate_bagtable types inetsets:insert_new/2,ets:member/2,ets:lookup_element/4,ets:delete_object/2,ets:take/2,ets:update_element/3andets:update_element/4atomvm:posix_seek/3,atomvm:posix_pread/3,atomvm:posix_pwrite/3,atomvm:posix_fsync/1,atomvm:posix_ftruncate/2,atomvm:posix_rename/2,atomvm:posix_stat/1,atomvm:posix_fstat/1atomvm:posix_mkdir/1,atomvm:posix_rmdir/1Changed
"spi2"instead of deprecatedhspizlib:compress/1init:boot/1if it exists. It starts the kernel application and callsstart/0from the identified startup module. Users who started kernel application (typically for distribution) must no longer do it. Startingnet_kernelis still required.+,-,*,div,rem,abs, etc.) now support integers up to 256-bitband,bor,bxor,bnot,bsl,bsr) now support integers up to 256-bitbslnow properly checks for overflowbinary_to_integer/1no longer accepts binaries such as<<"0xFF">>or<<" 123">>binary_to_integerandlist_to_integerdo not raise anymoreoverflowerror, they raise insteadbadarg.idf.py menuconfig.boot.avmin the partition table.idf.py flashtask.externaltermmodule was renamed toexternal_termand it has a completely new APIFixed
gen_serverinternal messages to match OTP so it works across erlang distributionphy_initpartition on ESP32 to store wifi calibration for faster connections.lists:duplicate/2.list_to_integer, it was likely buggy with integers close to INT64_MAXone_for_allstrategy.one_for_onechild fails to restart.make_ref/0on 32 bits platforms.OP_BS_CREATE_BINerlang:raise/33rd argument supportRemoved
network_fsmThis discussion was created from the release v0.7.0-alpha.0.
Beta Was this translation helpful? Give feedback.
All reactions