日本語版
最新ニュース
科学&テクノロジー

Haskell の本番環境での 8 年間の後に、OCaml で 8 か月

私は実稼働環境で Haskell を 8 年間使用してきました。私は本番環境で OCaml を 8 か月間使用してきました。 これら 2 つの言語を比較してみましょう。 Haskell はおそらく、私がこれまで見てきたすべての言語の中で最も洗練された構文を持っています (Haskell では依存的に型付けされたコードがすぐに醜くなる可能性があるため、おそらく Idris の方が優れています)。 できるだけ少ない文字数で自分のアイデアを表現できるのは、とても楽しいことです。 OCaml も ML ファミリーの言語であることは素晴らしいことですが、それでも、Haskell はより暗黙的です。 いくつかの例を比較してください。 文字列内のすべての数値の合計 標準ライブラリのみを使用する ハスケル -- strSum "100 -42 15" = 73 strSum :: String…

Haskell の本番環境での 8 年間の後に、OCaml で 8 か月

1733193890
2024-12-03 02:14:00

私は実稼働環境で Haskell を 8 年間使用してきました。私は本番環境で OCaml を 8 か月間使用してきました。

これら 2 つの言語を比較してみましょう。

Haskell はおそらく、私がこれまで見てきたすべての言語の中で最も洗練された構文を持っています (Haskell では依存的に型付けされたコードがすぐに醜くなる可能性があるため、おそらく Idris の方が優れています)。

できるだけ少ない文字数で自分のアイデアを表現できるのは、とても楽しいことです。

OCaml も ML ファミリーの言語であることは素晴らしいことですが、それでも、Haskell はより暗黙的です。

いくつかの例を比較してください。

文字列内のすべての数値の合計

標準ライブラリのみを使用する

ハスケル

ストライプAPI クライアントライブラリ:

  • ハスケル: 13
  • OCaml: 1 (最後の変更は 8 年前なので、ほぼゼロです)

Haskell で解決策が見つかるかもしれません。しかし、多くの場合、あなたは発見するでしょう 多すぎる 解決策を考えても、どれを選択すればよいのかわかりません。

Haskell でライブラリを選択することは、習得する必要がある別のスキルになります。ハスケラーズ 推奨事項をブログに投稿することもできます 図書館の選び方について!そして、このジレンマに何度も直面することになります。

多くの場合、新しい Haskell ライブラリは、別の問題を解決するためではなく作成されます。

でも作者がそう言いたかったから 違う書き方をする (さまざまな抽象化を使用する、新しい機能を試すなど。LinearTypes に基づく新しいストリーミング ライブラリを望まない人はいないでしょうか?)。

GitHub API クライアントを作成して大量の JSON を解析するのは楽しいことではありません。

しかし、デザインするのは楽しいです コモナドを備えたロガー

Haskell ツールは最も物議を醸す感情を呼び起こします。まるで感情のジェットコースターのようです。

  • 🤩 フーグルは最高です!型シグネチャだけを使用してエコシステム全体を検索できます。
  • 😨 待って、なぜビルド ツールのエラー メッセージがひどいのですか。動作中のプロジェクトのビルド プランが見つからなかったということはどういう意味ですか?
  • 🤩 すべての依存関係に対するグローバルなコンテンツアドレス指定可能なストレージは、非常に素晴らしいアイデアです。
  • 😨 パッケージを変更したので IDE を再コンパイルする必要があるとはどういう意味ですか?
  • 🤩 パッケージドキュメント内のすべてのコードスニペットを自動的にテストできます!!!
  • 😨 待って、なぜ私が使用しているこのバージョンの標準ライブラリにドキュメントがまったくないのですか?

等々。

Haskell ツールを使用することは、常に次の量子重ね合わせの中にいるようなものです。 「そのような健全な Haskell ツールがないのに、どうやって他の PL を使用するのですか??」 そして 「これらのユーザビリティの必需品なしで、ハスケラーはどうやってそのように生活できるのでしょうか??」


一方、OCaml は異なる方法でヒットします。そのエコシステムは小さいため、実際に何かが機能していることを見つけるたびに驚かれます。

たとえば、言語サーバー プロトコル (LSP) に基づく OCaml 用の VSCode プラグインは、そのまま使用できます。何も問題はありませんでした。それ ちょうど動作します ™️

OCaml ツールを使い始めるときの人間工学は最高ではないかもしれませんが、簡単で堅牢です。そして、彼らはほとんどの時間働いています。


全体像を把握するには、両方の言語で利用可能なツールを完全に比較した次の表を参照してください。

ツーリング比較表

これは最も頻繁に使用するツールであるため、ツールのコンパイラの側面を個別に強調したいと思います。

特にコンパイラの提案。

FP 言語を使用する場合、コンパイラはあなたの親友です。自分の仮定が正確に体系化されていない理由を理解するために、この情報に大きく依存しています。

したがって、コンパイラは、最もアクセスしやすい方法で情報を提示する必要があります。

私の見解では、Haskell コンパイラーのメッセージは、文脈に沿った冗長で気が散る情報が多く含まれ、冗長になる傾向があります。

一方、OCaml コンパイラのメッセージは非常に簡潔です。場合によっては簡潔すぎることもあります。

次の例を考えてみましょう。

Haskell: コンパイラ メッセージの例

エラーのあるプログラム

コンパイラの出力

Haskell コンパイラのエラー メッセージ

OCaml: コンパイラ メッセージの例

エラーのあるプログラム

コンパイラの出力

OCaml コンパイラのエラー メッセージ

これはほんの 1 つの例にすぎません (おそらく最良の例ではありません) が、さまざまな言語で情報が表示される方法と型がどのように機能するかが異なることがすでにわかります。

標準ライブラリについても別途言及する価値があると思います。

これは、ある言語での最初のプログラムを形作り、今後のあらゆる旅をガイドします。

優れた標準ライブラリは、PL の成功の基礎です。

貧弱な標準ライブラリは、より優れた標準ライブラリ (競合する無数の代替標準ライブラリを含む) をめぐる終わりのない自転車置き場の基礎となります。

私は、標準ライブラリにはバッテリーが組み込まれるべきだという考えの大支持者です。

Option のような型、UTF-8 文字列、Map と HashMap、JSON と XML パーサー、非同期プリミティブなどを提供してください。そうすれば、依存関係の追跡とビルド ツールの貧弱な実装を学習する必要がなくなります。 (システムをアラカルトで構築 依存関係トラッカーとビルド ツールのスペースを徹底的に分析したものです)。

Haskell と OCaml はどちらも、必要最低限の標準ライブラリを備えています。それらには小さな違いがあります(たとえば、Haskell には Map と HashMap が含まれていません。OCaml には空でないリストと Bitraversable がありません)。しかし、全体的には精神的には似ています。

Haskell標準ライブラリは次のように呼ばれます。 base OCaml 標準ライブラリと呼ばれます。まあ、それは単なる「標準ライブラリ」です。

ただし、顕著な違いが 1 つあります。 Haskell ドキュメントの品質は、経験豊富な開発者さえ驚かせることがあります。

Haskell には、ドキュメントからソースにジャンプする機能など、さらにいくつかの優れた機能がありますが、そのような機能は OCaml 用にもクックされていると聞きました 👀

List データ型 (FP の基本構造の 1 つ) のいくつかのドキュメント スニペットを比較してください。

ハスケル

Haskell: Data.List.head

ハスケルヘッド

ハスケル「!?」

ハスケルインデックス

OCaml

OCaml: List.hd

OCaml HD

OCaml: List.nth_opt

OCaml nth_opt

このような機能の結果は明らかなので、各機能についてエッセイを書く必要はないと主張するかもしれません。

私は例主導のドキュメントのファンで、ドキュメントで使用例を見るのが大好きです。これにより、API を最適な方法で活用する方法がすぐにわかります。

このブログ投稿を次のように締めくくりたいと思います。

どちらの言語も、実際の産業ニーズをサポートするために長い道のりを歩んできました。

主流の言語に比べればまだ小さいです。

特定の SDK の存在に大きく依存していない場合は、任意の SDK を選択して、次のアプリのコーディングを楽しく行うことができます 🧡

しかし、私は最近 OCaml を好んでいます。この言語を使用すると実際に何かを構築することに集中できると感じているからです。

以下のコメント セクション以外にも、このブログ投稿に関するディスカッションがさまざまな場所で見つかります。


このブログ投稿が気に入った場合は、GitHub スポンサーで私の活動をサポートするか、インターネットで私をフォローすることを検討してください。

#Haskell #の本番環境での #年間の後にOCaml #で #か月

執筆者について: nipponese

Nipponese News編集部は、国内外のニュースを日本語で分かりやすくお届けします。