5

私は Elixir を学んでいます。ツール 'dialyzer' を使用すると、静的分析を行うことができます。関数定義に、関数が期待するパラメーターの型指定と関数が返す出力の注釈を付けます。これは完全にオプションですが、可能な限り最大限に使用する場合、古き良き静的型付けとどのように一致するのでしょうか?

4

3 に答える 3

7

私の印象では、dialyzer は静的型付けほど正確ではありません。つまり、エラーが報告されるはずなのに、報告されないことがあります。

プラス面としては、ダイアライザーが不平を言う場合、ほとんどの場合、それは私のせいです. 多くの場合、エラーは通常、typespec が正しくないことが原因です。

したがって、dialyzer は静的型付けほど優れたツールではないと思いますが、それでも役に立ちます。特に、typespecs はドキュメントとして役立つため、非常に便利です。最近転職しましたが、参加したプロジェクトは複雑な Erlang プロジェクトです。型仕様のおかげで、コードベースを簡単に見つけることができました。

したがって、私のアドバイスは、より大きなプロジェクトでは typespec を使用することです。エクスポートされた (公開された) 関数とレコードに対してのみそれらを記述します。これは、あまり時間をかけずに大きな助けになります。私は通常、最初にコードを動作させ、満足のいくものになったら仕様を追加し、dialyzer を実行してすべてが問題ないことを確認します。

于 2014-05-10T07:07:40.973 に答える
2

静的型付けはバグのクラス全体を処理しますが、dialyzer のような静的分析ツールは、コードの潜在的な落とし穴についてより多くのことを教えてくれます。仕様を最大限に活用したと仮定すると、少なくとも Go や C# などの言語と比較して、dialyzer はおそらく静的型付けよりも便利です。Haskell のようなはるかに強力な型システムを備えたものは、静的分析ですが、Go のような単純な型システムを持つ言語ほどではありません。ただし、静的解析は静的型システムと組み合わせると最も役立ちます。Erlang と Elixir はどちらも動的言語であるため、静的解析でできることは限られています。とはいえ、ダイアライザーは非常に強力で便利であり、一貫して使用すれば、それ以上ではないにしても、少なくとも同じレベルの保護を提供するはずです。

ダイアライザーのドキュメント ( http://www.erlang.org/doc/man/dialyzer.html ) を参照してください。Erlang と Elixir に関して、このツールに期待できることについて詳しく説明されています。 . うまくいけば、それは役に立ちます!

于 2014-05-10T06:38:13.150 に答える
1

1 つには、静的型付けがコンパイル フェーズに組み込まれているため、見逃すことはありません。一方、静的分析は、開発者が自発的に実行する必要があるものです。

同様に、Elixir では何かに注釈を付ける必要はありません。それは完全にプログラマーの裁量に委ねられています。静的に型付けされた言語では、これを避けることは不可能です。

あなたの質問は幅広いので、厳密に答えるのは難しいと思います。これを Programmers.Stackechange に置きたいと思うかもしれません。

于 2014-05-09T11:54:11.663 に答える