Skip to content

Releases: Largo/ironruby

IronRuby 4.0.1

Choose a tag to compare

@github-actions github-actions released this 02 Oct 08:07
1672d83

IronRuby 4.0.1 fixes pipes and sockets on macOS, where Puma could not start,
IO#write_nonblock on sockets, which cut large responses short, and a SQLite crash on
Linux. All of them were found by @rubys while serving Rails
apps that Roundhouse transpiles to plain Ruby.

Download

Self-contained: unpack one and run ir.sh / ir.cmd, irb, igem. No .NET to install.

  • Windows x64: ironruby-4.0.1-win-x64.zip, with Windows Forms, WPF and
    Samples\Notepad\notepad.cmd
  • Linux x64: ironruby-4.0.1-linux-x64.tar.gz
  • macOS arm64: ironruby-4.0.1-osx-arm64.tar.gz

SHA256SUMS lists the checksums.

Fixes

  • Pipes to child processes work on macOS (#12). Backticks, %x(), IO.popen and
    Open3 failed with Errno::EINVAL: IronRuby passed Linux's value of O_CLOEXEC to
    pipe2, and macOS numbers the flag differently. On macOS, core/io/pipe_spec,
    core/kernel/backtick_spec and library/open3 now pass.
  • Socket addresses on macOS and the BSDs (#13). Every address the kernel returned
    (getsockname, accept, recvfrom) raised unknown address family: 528, because a BSD
    sockaddr starts with a length byte; Puma could not bind. On macOS, ruby/spec
    library/socket errors fall from 838 to 178.
  • IO#write_nonblock on a socket returns what the kernel took (#14). It claimed the
    whole string even when the kernel accepted only part of it, and the rest was lost: Puma
    responses larger than the socket's send buffer arrived truncated, on Linux and macOS.
    CI now checks that what write_nonblock claims is what the peer receives, on Linux and
    Windows (#15); Winsock takes a non-blocking send whole or refuses it, so Windows did not
    lose bytes.
  • SQLite no longer crashes on Linux once another library has loaded the system SQLite
    (SQLitePCL.raw#682), libvips
    through ruby-vips for one. SQLitePCLRaw's libe_sqlite3.so is linked without
    -Bsymbolic, so its calls into itself could bind to the other copy, and
    SQLite3::Database.new segfaulted. The Linux archive now carries a libe_sqlite3.so
    built from the same SQLite 3.53.3 with the same compile options, linked -Bsymbolic.
    The release build checks that SQLite reports the same version and options from both, and
    that the rebuilt one still answers with the system's libsqlite3 preloaded. Windows and
    macOS were not affected.

Linux and Windows behave as in 4.0.0 apart from #14. The full status is in the
README.

Also new

  • Issues are open.
  • The launch video
    has music now, and plays inline in the README as a teaser.

Music in the launch video: Edvard Grieg, In the Hall of the Mountain King, played by the
Czech National Symphony Orchestra for Musopen; public domain, from
classicals.de.

What's Changed

  • README: the launch video plays inline by @Largo in #10
  • Launch video: In the Hall of the Mountain King by @Largo in #11
  • IO#write_nonblock on a socket returns what the kernel took by @rubys in #14
  • Socket: read a packed sockaddr's family where macOS and the BSDs keep it by @rubys in #13
  • Process: O_CLOEXEC is 0x1000000 on macOS, so pipes to a child open there by @rubys in #12
  • CI: write_nonblock on a socket claims only what the peer receives (#14) by @Largo in #15
  • IronRuby 4.0.1 by @Largo in #16

New Contributors

  • @rubys made their first contribution in #14

Full Changelog: v4.0.0...v4.0.1

IronRuby 4.0.0

Choose a tag to compare

@github-actions github-actions released this 01 Oct 22:00
00b5e2a

IronRuby is back: Ruby 4.0 on .NET 8 and 10. The last release of IronRuby was 1.1.3,
for Ruby 1.9.2 on .NET Framework 4, in 2011. 4.0.0 implements Ruby 4.0, parses it with
prism (CRuby's own parser), and runs on Linux, Windows and
macOS.

IronRuby 4.0, the 55-second launch video

Download

The archives below are self-contained: unpack one and run ir.sh / ir.cmd, irb,
igem. No .NET to install.

  • Windows x64: ironruby-4.0.0-win-x64.zip, with Windows Forms, WPF and
    Samples\Notepad\notepad.cmd, a Windows Notepad written in Ruby
  • Linux x64: ironruby-4.0.0-linux-x64.tar.gz
  • macOS arm64: ironruby-4.0.0-osx-arm64.tar.gz (untested)

SHA256SUMS lists the checksums; ironruby-4-launch.mp4 is the launch video.

What is in it

  • Ruby 4.0 syntax, read by prism: pattern matching, endless methods, it, keyword
    arguments, ... forwarding. prism's syntax tree is decoded by a generated C# loader
    (152 node classes) and lowered onto IronRuby's AST and the DLR.
  • ruby/spec at CRuby 4.0.6: spec/language 2,934 examples and spec/library 6,398,
    both with 0 failures; spec/command_line and spec/security at 0 as well; spec/core
    21 of 23,136, 20 of them ObjectSpace.each_object.
  • A method JIT and OSR, on by default, specializing on the types a program uses:
    integer and float loops, fib and mandelbrot run in 0.27–0.74× CRuby's time. The
    geomean over all 50 benchmarks is 3.25×: method calls, strings and arrays are 2–4×, and
    raise and fibers are far behind.
  • irb 1.16.0 and reline 0.6.3, the ones CRuby 4.0 ships, with highlighting, completion
    and history. RubyGems 4.0.16 and Bundler, installing over real TLS. Ruby 4.0's standard
    library and its pure-Ruby bundled gems ship in the box.
  • Rails 8.1 boots and serves requests through Rack, with nokogiri, a C extension,
    stubbed; ActiveRecord has no adapter yet, as sqlite3, pg and mysql2 are native.
  • .NET is right there: require "System.Windows.Forms" or "PresentationFramework".
    Samples/Notepad is
    Windows Notepad in 1,365 lines of Ruby, with a test that drives it in CI.
  • irubyc packages a Ruby program as an application, as one executable
    (--single-file), or as a plugin DLL a .NET host loads (--library).

Not yet

zlib, Win32OLE and readline on Windows, C extensions in general (no nokogiri, no
database drivers), and macOS is built but untested. The
README has the full status.

Thanks to everyone who built IronRuby at Microsoft and in IronLanguages, and to the prism
and ruby/spec projects, without which none of this would be measurable.

Music in the launch video: Edvard Grieg, In the Hall of the Mountain King, played by the
Czech National Symphony Orchestra for Musopen; public domain, from
classicals.de.

What's Changed

  • A Ruby string prefers System::String over System::Byte[] in overload resolution by @Largo in #4
  • A Ruby string prefers System::String over System::Boolean in overload resolution by @Largo in #5
  • Clear the CI build warnings (142 compiler warnings, NuGet, Node 20) by @Largo in #6
  • Time: a zone name loaded from a dump is dumped again and printed by %Z by @Largo in #7
  • Windows Forms and WPF on .NET 8: ship the Windows Desktop runtime by @Largo in #3
  • Samples/Notepad: Windows Notepad in Ruby, on Windows Forms, with a test CI runs by @Largo in #8
  • IronRuby 4.0.0: version, downloads, social card and launch video by @Largo in #9

Full Changelog: v4.0.0-preview1...v4.0.0

IronRuby 4.0.0-preview1

Pre-release

Choose a tag to compare

@github-actions github-actions released this 30 Sep 08:51
4be4022

What's Changed

  • Binary releases: self-contained archives for Linux, Windows and macOS by @Largo in #1
  • IronRuby 4.0: the version follows the Ruby version it implements by @Largo in #2

New Contributors

  • @Largo made their first contribution in #1

Full Changelog: https://github.com/Largo/ironruby/commits/v4.0.0-preview1