誤った安心感。これはナンセンスです。
いくつかの基本的なタイプ。OCamlにはバイトとバイト配列がありますが、組み込みのユニコード文字列、16ビット整数、符号なし整数、32ビット浮動小数点数、ベクトルまたは行列はありません。サードパーティのライブラリはこれらの一部を提供します。
サイレント整数オーバーフロー。変わらないが、それは問題ではなかった。
モジュールの不変性。関数とモジュールは変更可能であるべきであるという彼の推奨は、Lispへの厳しい反論であり、本当に悪い考えです。include
必要に応じてモジュールを置き換えることはできますが、もちろん変更することはできません。
ポリモーフィズムにより、実行時タイプエラーが発生します。これはOCamlの大きな問題であり、修正されていません。型がポリモーフィックな等価性を進化させると、関数のような型に遭遇すると比較とハッシュが失敗し始め、問題のデバッグは非常に困難になります。F#には、この問題に対する優れたソリューションがあります。
マクロはありません。皮肉なことに、彼がこのOCamlを書いたとき、実際にはマクロを完全にサポートしていましたが、今では機能を引き出すことにしました。
ラッパー。これは実際の問題であり、修正されていません。try ... finally
OCaml言語にはまだ構造がなく、stdlibにそれを実装するラッパーもありません。
場所。変化はありませんが、問題はありません。
地獄の命名フィールドを記録します。モジュールを使用してコードを適切に構造化します。
構文。変化はありませんが、問題はありません。
ポリモーフィズムなし。彼が書いたとき、これはほとんどナンセンスであり、何も変わっていません。
一貫性のない関数セット。OCamlにはまだcons
機能がありません。それはいいです。私の言語でLispのものを欲しくない、ありがとう。
動的変数はありません。OCamlについては良いことでした。OCamlについてはまだ良いことです。
オプションの〜引数は吸う。オプションの引数は揺れ動く。Microsoftにバッジを付けて、F#にオプションの引数を追加してもらいました。
部分的な引数アプリケーションの不整合。え?
算術の読みやすさ。これは、8年前にOCamlの使用を停止してから変更されました。どうやら今あなたができるInt64.((q * n - s * s) / (n - 1L))
。
サイレント名の競合解決。彼は、あなたがLispでするように、REPLで本格的なソフトウェア開発をしようとしていました。OCamlでそれをしないでください。REPLに依存するファイルとバッチコンパイルは、テスト、使い捨てコードの実行、インタラクティブなテクニカルコンピューティングにのみ使用してください。
評価の順序。彼が書いたとき、これは間違っていました。評価の順序はOCamlでは定義されていません。
オブジェクトの入出力はありません。彼は、この「問題」をすでに解決したサードパーティのライブラリを引用しました。
コンパイラは最初のエラーの後に停止します。え?
ネイティブにコンパイルされた実行可能ファイルのスタックトレースはありません。修繕。
デバッガーは吸う。デバッガーを使用したことはありません。静的型チェックは、ほとんどすべてのバグをキャッチします。
GCは吸います。1つの大きな問題を除いて、OCamlのGCが優れていることがわかりました。グローバルロックは並列プログラミングを妨げます。
暗黙の前方宣言はありません。相互再帰は、すべてのMLで設計上明示的です。唯一の奇妙な点は、type
デフォルトでは定義が再帰的であるのに対し、let
バインディングはデフォルトでは非再帰的であるということです。
関数ラウンドはありません。OCamlにはまだ標準のstdlibがありますが、Jane St's Coreなどのサードパーティのライブラリが提供round
しています。
リスト。List.map
まだ末尾再帰ではありません。このような深刻なバグを修正するパッチを提出し、リリースに登場するまで何年も待たなければなりませんでした。もちろん、リストは不変です。そして、そうあるべきです。
スピード。大きなポリモーフィックバリアントのコンパイル時間が修正されたと思います。
パターンマッチング。現実に対する希望の勝利。Lispコミュニティはこれをすることに失敗しました。したがって、私の10番目のルール:十分に複雑なLispプログラムには、OCamlのパターンマッチコンパイラの半分の、アドホックで、非公式に指定され、バグが多い実装が含まれています。
ただし、ライブラリコールとしてトップレベルからプリティプリンタを呼び出して、必要なタイプ情報を提供できます。また、きれいなプリンターを自動生成するために、データ構造に注釈を付けるために使用できるマクロがありました。