2009-12-12 7 views
7

は私が いくつかの機能プログラミング構成でデバッグ性が低下しますか?

  • 内部クラスは
  • クロージャブロック/ラムダ関数

    1. 匿名クラス(彼らは匿名であり、デバッガはうまくそれをトレースすることはできませんので)次の機能がdebuggabilityを減らすことを聞いた

    これは本当ですか?

  • +0

    匿名のクラスと内部クラスの「関数型プログラミング構造体」はいつからですか? –

    +0

    そうではありません。タイトルは完全に兆候ではありませんが、私は人々がポイントを持っていると思います。 – user855

    答えて

    1

    これは明らかに真実ではないでしょうか。はい、追加のデバッグサポートなしでは、これらの構造は少し難しいかもしれません。多くの言語で、デバッガは言語の意味を理解していないため、実際には匿名ではありません。代わりに、プログラムの最終形式(.exeとPDBの組み合わせ)を理解しています。ほとんどの匿名のコンストラクトは最終的には最終的なプログラムで具体的な形を取ります(.Netの実装では非常に真実です)。

    はまた、これらの機能を実装する言語は、多くの場合、彼らのために、より良いデバッグサポートを実装するために時間がかかります。どちらの言語がDebuggerDisplay属性を追加し、インクルードは、デバッグサポートを高めるために発生匿名型に.ToString上書き

    1. 例えばC#とVBを取ります。実装は少し異なりますが、結果はほとんど同じです。
    2. 内部クラスは、デバッグの点で非常に特別なものではなく、必要としない
    3. VBとC#は、Visual Studio 2008で多くの時間を費やし、追加の作業はラムダ式を「ほどく」とフリーキャプチャ表示ならば多くの元の地方リストの一部としての変数。関数をデバッグする方がはるかに簡単になる
    2

    本質的にデバッグ性が低下するかどうかは言うまでもありません。無名関数が例外をスローした場合でも、スタックトレースを出力できます。 DrSchemeは何かが起きたときにあなたのコードの上に赤い矢印を描き、スタックトレースを表現し、無名の関数をうまく処理します。しかし、SchemeやHaskellのような言語をデバッグするのに、EclipseのようなJavaのように多くの努力が払われているわけではありませんので、デバッグツールはおそらく悪化しています。

    そして、JaredParが言ったように、Visual Studioは、このとC#で良い仕事をしているようです。あなたが記載されている

    1

    機能は、それらを処理するために設計されていますデバッガの問題が発生することはありません。あなたのデバッガが、基本的にCとあまり変わらないものをデバッグしようとしているとすれば、問題があるかもしれません。

    ここで、実際にはになると、デバッガの頭痛の原因となる機能的な言語のほうが遅延評価が多用されます。ハスケルは特にこの点で問題がある。

    0

    私は特に私の観点から、これが事実であるとは思いません。私はScalaの機能的な機能を使用しています。ScalaはJava Virtual Machine上で動作するようにコンパイルしています。 Intellijのようなデバッガはこれを適切に処理します。

    は、いくつかのコード構築物はあなたが正常に期待する方法とは異なる方法で提示されている、と述べました。一部のケースでは、内部クラスとして機能ブロックが表示されます。リストは、先頭のエンティティとテールリストとして表示されます(または、逆の場合もあります - これで始まったばかりです)。

    6

    あなたが呼び出した特定の機能については、すでにいくつかの良い答えがあります。

    一般的に、私はいくつかのFP機能は、より多くのFPスタイルでのプログラミングの面と同様に、少なくともデバッグ経験と「対話」していると言います。たとえば、高次関数を使用すると、ポイントフリーのスタイルでプログラムできます。そうすると、識別子の数が少なくなります。デバッガの 'locals'ウィンドウで簡単に検査できるものが少なくなります。閉鎖は、あなたが体に踏み込むまで、通常は不透明です。

    FPはまた、制御フローを変更したり、コントロールフローを変更したりするインバースコントロールの構造体(lazy evaluationはちょうど1つ、 'map'または 'iter'ではなく 'foreach'シングルステッピング 'が機能します。

    FPが一般的になるにつれて、私はデバッグツールが改善し続けることを期待しています。あるFPが「本質的に」デバッグするのが難しいかどうかはわかりませんが、たとえそれが本当であっても、FPが最初の場所でデバッグする必要性が低いことを忘れないでください。 :)

    関連する問題