2009-11-02 16 views
8

他のC#開発者が、csc.exeのコンパイラ指令で、空白の種類によってコードブロックが作成されるHaskellやPythonを重要なものにする改善があるのだろうかと思います。PythonやHaskellのようなC#の重要な空白?

これは確かにC-style languagesから巨大な出発のだろうが、C#が最終的には(まだ中括弧とセミコロンを持っているでしょう)CILまでコンパイルされているので、それは本当にコンパイラだけの解析トリックであるように私には思えますどちらの方法でも処理できます(つまり、重要な空白を扱うこともできないこともあります)。 curliesやセミコロンは、しばしばC#&への参入障壁であるため、実際にはヘルパーを解析しているだけで、Haskell/Pythonでは取り除くことができます。

F#はこれを#lightコンパイラ指令で処理します。これはLightweight syntax option in F# 1.1.12.3で読むことができます。

私は同じことをC#で見ていきたいと思います:#SigSpaceまたはsomesuchという指示は、空白の点で(例として)Haskellファイルのようにソースを扱うように指示します。

標準C#:

public void WhiteSpaceSig() 
{ 
    List<string> names = new List<string>(); 
    List<string> colors = new List<string>(); 

    foreach (string name in names) 
    { 
     foreach (string color in colors) 
     { 
      // bla bla bla 
     } 
    } 
} 

重要な空白:

#SigSpace 

    public void WhiteSpaceSig() 

     List<string> names = new List<string>() 
     List<string> colors = new List<string>() 

     foreach (string name in names) 
      foreach (string color in colors) 
       // bla bla bla 

私はC#でこれを望んでいることを言っていないんだけど、私はトレードオフが何であるかに興味があります。私の推測では、ほとんどのC#開発者は構文に慣れているので、人工的なものを見ることはできません(最終的にはコードを読みやすくするかもしれませんが)。

+2

私はPythonを使用したいと思うようなコードを読み書きしたいと思ったら。あなたにとっては涼しいかもしれませんが、他の開発者は完全に非標準的なので、痛みを感じるでしょう。 –

+1

F#では "#light"を使用しません。これは単にデフォルトです。 – Brian

+1

"IL(中括弧とセミコロンはまだあります)" - ここで深刻な誤解があることを恐れています。 C#はILバイトコードにコンパイルされます。これは一連のオペコードなどです。そのレベルには中カッコやセミコロンはありません(C#レベルでコーディングする開発者にとっては役に立たないでしょう)。ILASMのテキストILフォーマットでも、多くのC#レベルの構造体には中括弧やセミコロンは使用されません。なぜなら、C#コーダーとは関係がないからです。 – itowlson

答えて

3

あなたはKirill Osenkovの論文、Designing, implementing and integrating a structured C# code editorに興味があるかもしれません。

基本的な考え方は、中括弧は定義されているC#言語の一部ですが、エディタはそれらを表示する必要はないということです。 Osenkovは、ブレースのペアをインデントとして表現するSharpDevelopのエディターコントロールを実装し、プログラマーがコードの構造をより迅速に処理できるようにしました。良い例を見るには、リンクされた文書の113ページにジャンプしてください。

2

番号は、読者側の曖昧さをなくします。人間は、さまざまな種類の空白を区別することはできません(つまり、それについて考える - 「異なる種類の空白」!)。そして人間によって、私は私を意味します。だから私はC#が好きです。

いくつかの言語には、いくつかの種類のあいまいさを抱く哲学があります。 C#はそれらの1つではありません。

+0

さまざまな種類の空白を使用するPython開発者について私は知らない。あなたは?私はこれが想像上の問題だと思う。 –

+0

@gnibblerタブ、空白、改行はすべて空白 –

+3

@Rexです。空白と改行を区別するのに問題がありますか? –

0

これはC#ではなく、Iron Pythonのような別の言語になります。

+2

シンタックスと構文を混同しています。 –

+2

いいえ、彼はそうではありません - 文法は言語を作るものの大部分です。 –

11

この構文が必要な場合は、C#ではなくIronPythonまたはBooを使用してください。

C#を微調整しようとする代わりに言語を実装する方が良いようです。あなたが言ったように、それらはすべて同じILにコンパイルされるので、本質的に新しい言語文法を実装するための良い、きれいな構文を変更する理由はありません。

0

これがオプションだった場合は、決して使用しません。

具体的には、Visual Studioが中括弧を解析してブロック崩壊/展開を許可する方法が好きです。中カッコの横にキャレットを置くと、対応する閉じ/開き中括弧がハイライト表示されます。

人間の可読性も問題です。ホワイトスペースを区別するよりも、単語間の中括弧を区別する方が簡単です。

1

C#/ Java開発者として、私のキャリア全体を見て、重要な空白を持つC#コードを見てみると、ナットが欲しいと思います。

ブラケットに慣れていれば、コードを読みやすくすることができ、実際にコードが何をしているのか理解するのに役立ちます。

3

主にPython開発者として、ブロックを区切るために重要な空白を採用する言語が増えてきたことを知りたいと思います。

ニュースグループを検索すると、C、C++、C#、Javaなどの開発者の意見がたくさんあります。私の気持ちは、彼らの多くが本当に中括弧を好むということです。

スタイルが混在していると痛いでしょう。

私は定期的にあまりにも中括弧言語を使用するので、私は両側

+2

あなたはそうしたいと思います。私はそれが迷惑であると感じ、非常に主観的に思えます。 –

2
私は悪いことは何も考えることができない

を見ることができます!

特に2つのオプションがあります。あなたが誰かのコードを読んでいるときは、その意味を理解するために両方の表記法に慣れていなければなりません。天国は2人の間で切り替えることを禁じます。

これはすべての一貫性を取り除き、より多くのWTFSを叫ぶ多くの開発者につながります。

それから、大括弧と大括弧の聖戦がありますが、私もコメントしません。

0

私は30年以上前に私の会社が開発したプログラミング言語を使用しています。私たちは絶えずこのような質問を交わしています。変更や追加は、改善のチャンスだけでなく、誤解や誤解の可能性もあります。

最高の場合でも、これで問題は解決しません。コードブロック識別子の任意のセットを別のものと取引するだけで、どんな利益も無効になります(たとえ確立されていない新しい構文があれば)。

よく知られているよく確立されたルールセットと、あまり知られていないルールとの間で取引されています。誤解や誤解の可能性があります。これをオプションとして追加するだけで、同じコードを書くための2つの構文を持つことができ、同じ開発者チームでも作業できるようになりました。

関連する問題