0

Dには、コンパイラのスイートにさらに別の優れた機能、つまり純粋関数への副作用のない呼び出しを禁止する機能を追加する可能性があると思います。

例えば

auto s = "a";
toStringz(a);

次のようにエラーが発生するはずです

a == "";

現在DMDでエラーが発生している

Error: == has no effect in expression (s == "")

このような機能は、プログラマーがインプレース(変異)セマンティクスを期待しているときに、誤って非変異アルゴリズムを呼び出すことを防ぎます。これにより、関数にGCCなどの属性を明示的にタグ付けする必要がなくなり__attribute((warn_unused_result))ます__attribute((const))

DMDのtodoリストにそのような機能はありますか?

4

2 に答える 2

3

DMDの公式TODOリストはありません。その開発は主にボランティアの作業に基づいており、一部の拡張リクエストはBugzillaで「事前承認済み」タグを取得しますが、この機能をいつ実装できるか、またはまったく実装されるかについては何も伝えていません。

現在取り組むべきもっと深刻な問題がたくさんあることを考えると、私は、マイナーが近くの年に実装した何かを期待することはほとんどできません。

また、あなたの質問は実際には提案のように見え、公式のDMD / Phobosバグジラに適しています:http://d.puremagic.com/issues/

于 2013-03-02T11:43:25.093 に答える
0

問題は、Dがテンプレートを多用していることです。テンプレートまたはその引数のいずれかを常に制御できるとは限りません。例えば:

class Foo{
    /*...*/
    pure int foo(){
        /*...*/
    }
    /*...*/
}

void bar(T)(T arg){
    /*...*/
    arg.foo();
    /*...*/
}

barこれで、Foo引数を使用して呼び出すことはできません。fooこれは、純粋さを削除する(コードを壊したり、パフォーマンスを低下させたりする可能性があります)か、結果を変数barに格納するように変更することで修正(ハッキング)できますfoo()(これも、その値を使用しないため、また、foosリターンタイプは無効であるか、さらに悪い場合があります-structデストラクタを使用します(呼び出しはの実行の最後に延期されますbar)そしてもちろん-それは変更できる場合Fooまたはbar...

于 2013-03-02T16:39:11.447 に答える