HN 日本語サマリー

← 一覧へ戻る
プログラミング

Crystal 1.22.0 リリース

Crystal 1.22.0 Is Released (crystal-lang.org)

147 pointsby ksec68 コメント

要約

プログラミング言語Crystalのバージョン1.22.0がリリースされました。主な変更点として、標準ストリームがSIGPIPEシグナルをエミュレートするようになり、パイプエラー時の終了動作が変更されました。また、DWARF解析のパフォーマンス向上、全ターゲットでのネイティブイベントループのサポート、LLVM 23 & 24への対応、aarch64-linuxターゲットのTier 1昇格などが含まれます。

全文翻訳

Crystal 1.22.0 がリリースされました!

ハイライト

いくつかの新機能とバグ修正を含む新しいCrystalリリース1.22.0を発表します。

プリビルドパッケージはGitHub Releasesおよび公式の配布チャネルで入手可能です。インストール手順については、crystal-lang.org/installをご覧ください。

統計

このリリースには、33人のコントリビューターによる1.21.1以降の251件の変更が含まれています。言語の改善に貢献してくれたすべてのコントリビューターに感謝します!❤️

変更点

以下に、言語、コンパイラ、stdlibにおける最も注目すべき変更点をリストアップします。詳細については、完全なチェンジログをご覧ください。

STDOUTまたはSTDERRへの書き込みがEPIPEで失敗した場合、Crystalプロセスは直ちに終了します。これはSIGPIPEシグナルのデフォルトの動作に非常に似ています。以前は、失敗した書き込みはIO::Errorを発生させ、通常はエラーメッセージを表示して終了していました。このエラーメッセージは削除されました(#17335)。

STDOUT.exit_on_broken_pipe = falseでこの動作を無効にすることができます。

感謝、@straight-shoota

定数に型宣言を付けることができるようになりました(#16951)。これは、定数と型宣言の組み合わせが期待どおりに機能します。

module Foo
  BAR : Int32 = 1
  BAZ : String = ""
  QUX : Int64 = 123 # 123 を Int64 に自動キャスト
end

感謝、@stakach

ターゲットaarch64-linux-gnuとaarch64-linux-muslがTier 2からTier 1に移行しました。唯一の欠点は公式ビルドが不足していたことでしたが、1.19からそれが解消されました。

Process.forkは1.0より前から非推奨となっており、今回削除されました(#17367)。

感謝、@straight-shoota

  • コンパイル時にテキスト操作を可能にする新しいマクロが登場しました:StringLiteral#bytesize(#17176)、NumberLiteral#chr(#17169)、およびRangeLiteral#eachはCharLiteralをサポートします(#17170)。

感謝、@straight-shoota

新しい定数Crystal::ALL_FLAGSとCrystal::USER_FLAGSにより、コンパイル時フラグにアクセスできるようになりました(#17392)。

感謝、@straight-shoota

DWARF解析を完全に再構築し、パフォーマンスを向上させ、メモリ使用量を削減しました。DWARFパーサーはオンデマンドでセクションをスキャンし(#17283)、効率的なインデックステーブルを一度構築します(#17410, #17455)。これにより、ルックアップが非常に高速になります。デコードされたバックトレース行はLRUキャッシュにキャッシュされます(#17285)。

DWARF 5の機能であるDW_FORM_addrx<n>およびDW_FORM_strx<n>のサポートも追加されました(#17445)。

感謝、@ysbaddaden

HTTPに関する多数の改善とバグ修正をマージしました。

  • #remote_addressと#local_addressがHTTP::RequestからHTTP::Contextに移動しました(#17196)。
  • HTTP::Headers#mergeを追加しました(#17326)。
  • IO::MemoryをHTTPボディでContent-Lengthヘッダーと共にシリアライズします(#17388)。

バグ修正:

  • 未認識のHTTP Transfer-Encodingヘッダー(#17140)、無効なContent-Encoding(#17262)、および無効なHTTPトレーラー(#17337)を拒否します。
  • [破壊的変更] HTTP::Request#body=および#content_length=の戻り値を修正しました(#17257, #17273)。
  • HTTP.parse_headers_and_bodyがwithout_zlibで例外を発生させないように修正しました(#17272)。
  • HTTP::WebSocketHandler(#17235)、HTTP::Request(#17255,#17304, #17374, #17310, #17312, #17258)、HTTP::Headersの名前(#17317)のプロパティを検証します。
  • リクエスト中のIO::Error時にHTTP::Clientをクローズします(#17318)。
  • Content-Encoding: deflateを修正しました(#17261)。
  • HTTP::Request.from_ioが空のヘッダー名を解析する問題を修正しました(#17254)。
  • HTTP::Request#form_params?が無効なContent-Typeを無視するように修正しました(#17256)。

感謝 @straight-shoota, @hahwul, @jgaskins, @Sija

すべてのターゲットで、システムセレクターに直接基づくネイティブイベントループをサポートし、デフォルトで使用するようになりました。

Solarisでepoll(#17370)、その他のBSDターゲットでkqueue(#17421, #17420)を有効にしました。libeventはフォールバックとして引き続き利用可能ですが、現在は厳密にオプトインであり、技術的に廃止される方向です。次のリリースで非推奨になる見込みです。

感謝、@ysbaddaden

OpenSSLバインディングでのカーネルTLSサポートをデフォルトで有効にしました(#17059)。

感謝、@ysbaddaden

その他
  • File.exists?(#17307)およびFile::Info.readable?、.writable?、.executable?は、follow_symlinks: false引数を受け取るようになりました(#17391)。
  • Char::Reader.new(Bytes)を追加しました(#17428)。
  • Time::Span#to_nanosecondsなどを追加しました(#17190)。
  • GC.syscall(&)を追加しました(#17150)。
  • musl-libcで-static-pieとリンクした場合のバックトレースを修正しました(#17316)。

感謝、@straight-shoota, @ysbaddaden

  • インスタンス変数とクラス変数を大文字化しました(#17160)。

  • HTTP::Request#local_addressおよび#remote_address(#17260)。

  • LLVM::Type#sizeおよび#alignment(#17494)。

  • LLVM 23.1および24.0のサポート(#17432)。

  • markd 0.6.0を更新しました(#17269)。

感謝、@straight-shoota, @hertzdevil

配布スクリプトを更新しました(#17178)。これにより、パッケージ依存関係、Dockerベースイメージなどがアップグレードされます。

感謝、@straight-shoota

これは、aarch64-windows-msvcのビルドを初めて特集したリリースです。

感謝、@hertzdevil

Crystalは、RFC 30で前方互換性ポリシーを確立しました。Crystal 1.22をビルドするには、ステージ0コンパイラが1.14以上である必要があります。


感謝

84codesおよびその他のスポンサーの継続的なサポートのおかげで、これらすべてを実現することができました。開発ペースを維持・向上させるためには、寄付やスポンサーシップが不可欠です。OpenCollectiveをご利用ください。

直接スポンサーになりたい場合や、Crystalを支援する他の方法を見つけたい場合は、crystal@manas.techにご連絡ください。事前に感謝申し上げます!

貢献する