Skip to content

v0.6.5

Latest
Compare
Choose a tag to compare
@github-actions github-actions released this 15 Oct 00:37
· 51 commits to main since this release
v0.6.5
388940d

v0.6.5 release

Please, read the getting started guide for flashing instructions.

Important note: this version uses a different partitioning layout for ESP32 Elixir images (and dedicated images) that have room for additional Elixir modules. Make sure to use updated tooling and offsets.

Known Issues

  • i2c:write_bytes on ESP32 seems not working, use i2c:write_byte instead.

Added

  • ESP32: add a new Elixir release "flavor" with a bigger boot.avm partition that has room for
    Elixir standard library modules
  • ESP32: --boot option to mkimage.sh tool
  • Add erlang:atom_to_binary/1 that is equivalent to erlang:atom_to_binary(Atom, utf8)
  • Support for Elixir String.Chars protocol, now functions such as Enum.join are able to take
    also non string parameters (e.g. Enum.join([1, 2], ",")
  • Support for Elixir Enum.at/3
  • Add support for is_bitstring/1 construct which is used in Elixir protocols runtime.
  • Add support to Elixir Enumerable protocol also for Enum.all?, Enum.any?, Enum.each,
    Enum.filter, Enum.flat_map, Enum.reject, Enum.chunk_by and Enum.chunk_while
  • Support for maps:merge_with/3
  • Support for lists:last/1 and lists:mapfoldl/3
  • Add support to Elixir for Process.send/2 Process.send_after/3/4 and Process.cancel_timer/1
  • Add support for handle_continue callback in gen_server
  • Support for Elixir List.Chars protocol
  • Support for gen_server:start_monitor/3,4
  • Support for code:ensure_loaded/1
  • Support for io_lib:latin1_char_list/1
  • Add support to Elixir for Keyword.split/2
  • Support for binary:split/3 and string:find/2,3
  • Support for large tuples (more than 255 elements) in external terms.
  • Support for io:put_chars/2
  • Support for lists:nthtail/2
  • Support for Elixir IO.chardata_to_string/1
  • Support for Elixir List.duplicate/2
  • Support for binary:copy/1,2
  • Support for directory listing using POSIX APIs: (atomvm:posix_opendir/1,
    atomvm:posix_readdir/1, atomvm:posix_closedir/1).
  • ESP32: add support for esp_adc ADC driver, with Erlang and Elixir examples
  • Add handler for ESP32 network driver STA mode beacon_timeout (event: 21), see issue
    #1100
  • Support for mounting/unmounting storage on ESP32 (such as SD or internal flash) using
    esp:mount/4 and esp:umount/1
  • Support for binary_to_integer/2
  • Support for binary:decode_hex/1 and binary:encode_hex/1,2
  • Support for Elixir Base.decode16/2 and Base.encode16/2
  • Make external term serialize functions available without using externalterm_to_binary so terms
    can be written directly to a buffer.
  • Support for erlang:list_to_integer/2
  • Add externalterm_to_term_copy that can be safely used from NIFs taking temporary buffers

Changed

  • ESP32: Elixir library is not shipped anymore with esp32boot.avm. Use elixir_esp32boot.avm
    instead
  • Enum.find_index and Enum.find_value support Enumerable and not just lists
  • Install AtomVM libraries source code and binaries for better dialyzer integration
  • Made the device_config properties list in spi:open/1 optional (defaults to []), so you can use the function with only a bus_config

Fixed

  • ESP32: content of boot.avm partition is not truncated anymore
  • ESP32: Fixed gpio:set_int to accept any pin, not only pin 2
  • Fix memory corruption in unicode:characters_to_binary
  • Fix handling of large literal indexes and large extended literal indexes
  • unicode:characters_to_list: fixed bogus out_of_memory error on some platforms such as ESP32
  • Fix crash in Elixir library when doing inspect(:atom)
  • General inspect() compliance with Elixir behavior (but there are still some minor differences)
  • Fix several uses of free on prevously released memory on ESP32, under certain error condition using
    network:start/1, that would lead to a hard crash of the VM.
  • Fix a bug in ESP32 network driver where the low level driver was not being stopped and resoureces were not freed
    when network:stop/0 was used, see issue #643
  • uart:open/1,2 now works with uppercase peripheral names