10 ポイント 投稿者 xguru 2023-11-18 | 3件のコメント | WhatsAppで共有
  • 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件のコメント

 
ahwjdekf 2023-11-18

RustでRustに似たものを作った ??

 
regentag 2023-11-18

パッケージ管理がGitHub依存というのは少し気になりますね。インターネットに接続できない環境ももう少し考慮してほしいです……

 
xguru 2023-11-18
Hacker Newsの意見
  • Inkoの並行性モデルはErlangとPonyに着想を得ており、軽量プロセスを使用する。

    • プロセスは互いに分離されており、メッセージを通じて通信する。
    • プロセスとメッセージはクラスとメソッドで定義され、コンパイラが型検査によって正しさを保証する。
    • データはプロセス間で唯一の所有権を保ったまま送信されるため、データレースは発生せず、ディープコピーの必要もなくなる。
    • 複数プロデューサー・複数コンシューマーのチャネルをサポートしており、プロセス間で明示的な参照なしに通信できる。
  • Inkoパッケージを追加するにはGitHubリポジトリを作成する必要がある。

    • InkoのパッケージマネージャーはGitLabなど他のGitリポジトリもサポートしているが、一覧はGitHubリポジトリを使って構成されている。
    • コミュニティがMicrosoft製品とGitに依存したがる傾向に対する懸念が示されている。
  • Inkoに関する議論へのリンク:

    • "Show HN: Inko 0.10.0 – build concurrent software with confidence"(2022年9月、コメント3件)
    • "Inko 0.5.0 released, featuring the first steps towards a self-hosting compiler"(2019年9月、コメント7件)
    • "Inko (a gradually-typed object-oriented programming language) 0.4.0 released"(2019年5月、コメント1件)
    • "Show HN: Inko – A safe and concurrent object-oriented programming language"(2018年8月、コメント45件)
  • Rustとの類似性についての疑問:

    • InkoがRustと十分似ているなら、RustではなくInkoを選ぶ理由は何かという質問。
    • Rustでは難しい、あるいは面倒なプログラムを、Inkoなら簡単に書ける例が必要だという指摘。
  • Inkoへの関心と、Golangのようになってほしいという期待:

    • InkoはGitLabから始まったように見え、Golangのようになってほしいという期待とともに、GCの必要性にも言及。
    • Gleamとの違いは何か、またJVMエコシステムを活用できる方法への関心。
  • Inkoという名前はテルグ語で「もう一つ」という意味だという面白い豆知識の共有。

  • Rustとの文法上の違いに関する議論:

    • RustとInkoの文法上の違いについての詳細な比較。
    • 関数宣言、ジェネリクス表現など細かな違いへの言及。
  • Inkoの設計判断に対する好意的な評価:

    • C/Java系言語に似た文法により、多くの人にとって親しみやすい。
    • エラー処理セクションの命名判断に疑問が呈されている。
  • 事前ビルド済みバイナリの必要性への言及:

    • LLVMの問題によるコンパイルの難しさと、その結果としてInkoへの関心が薄れたことへの言及。
  • 関連する議論へのリンクが追加で提供されている。