- Concurrent ソフトウェアを簡単に構築でき、予測不能な性能、ランタイムエラー、データ競合、型エラーを心配せずに開発可能
- 自動メモリ管理、move semantics、静的型付け、型安全な並行性、効率的なエラー処理などの特徴
決定的な自動メモリ管理
- Inko はガベージコレクションに依存せず、単一所有権と move semantics に基づくメモリ管理を使用
- 所有された値はスコープを外れると削除され、不変または可変として borrow できる
- 単一所有権の採用により予測可能な動作と性能を提供し、ガベージコレクションの設定に時間を無駄にしない
Inko は安全
- Inko を使えば、NULL ポインタ、use-after-free、ランタイムエラー、データ競合など、他の言語でよく見られるエラーを心配する必要がない
- オプションのデータに対して Option 型を提供し、不変および可変参照をサポートすることで、必要に応じて変更を制限できる
並行性を簡単にする
- Inko は軽量プロセスを使用して並行性を実現し、Erlang と Pony に着想を得た並行モデルを採用
- プロセスは互いに分離され、メッセージを通じて通信し、コンパイラは型検査によって正確性を保証
- プロセス間でデータを転送する際にはデータの一意性を保証し、データ競合を不可能にする
エラー処理を正しく行う
- Inko は Joe Duffy の記事 "The Error Model" に着想を得たエラー処理方式を採用
- エラーは "Result" という代数的データ型で表現され、try と throw による構文上の簡潔さを提供
- 処理できない、または処理すべきでない重大なエラーについては、プログラムを停止させる "panics" をサポート
効率的
- Inko は C や Rust のような低水準言語と競合するのではなく、Ruby、Erlang、Go のような言語に対する魅力的な代替を目指している
- LLVM をバックエンドに使うネイティブコードコンパイラを採用し、高速なコンパイル時間と良好なランタイム性能のバランスを提供
- ネイティブコードは、プロセススケジューリングやノンブロッキング IO などを処理する Rust 製の小さなランタイムライブラリに静的リンクされる
パターンマッチング
- Inko はタプルや代数的データ型など、さまざまな型に対するパターンマッチングをサポート
- パターンマッチングは決定木にコンパイルされ、コンパイラは可能な限り小さなサイズを維持しようとする
- すべてのパターンが網羅されることをコンパイラが保証
3件のコメント
RustでRustに似たものを作った ??
パッケージ管理がGitHub依存というのは少し気になりますね。インターネットに接続できない環境ももう少し考慮してほしいです……
Hacker Newsの意見
Inkoの並行性モデルはErlangとPonyに着想を得ており、軽量プロセスを使用する。
Inkoパッケージを追加するにはGitHubリポジトリを作成する必要がある。
Inkoに関する議論へのリンク:
Rustとの類似性についての疑問:
Inkoへの関心と、Golangのようになってほしいという期待:
Inkoという名前はテルグ語で「もう一つ」という意味だという面白い豆知識の共有。
Rustとの文法上の違いに関する議論:
Inkoの設計判断に対する好意的な評価:
事前ビルド済みバイナリの必要性への言及:
関連する議論へのリンクが追加で提供されている。