2012-02-03 4 views
2

友人と、Simpという新しい言語を作成しています。それは、シンプルだが現代的なスクリプト言語で、直感的でわかりやすい構文でなければなりません。短い例を以下に示します。言語デザイン:2つの値を比較するときの暗黙的な変換

var sum = 0 
for i in 3..999 { 
    if (i % 3 == 0) or (i % 5 == 0) { 
     sum += i 
    } 
} 
say sum 

2つの値を比較するときに暗黙的な変換を使用する必要がある場合は、問題はありません。具体的には、次のプログラム出力はどうすればよいでしょうか?

# 1. 
say (1 == '1') 

# 2. 
var x = 1 
switch (x) { 
    case '1': say true; break; 
    case 1: say false; break; 
} 

# 3. 
if ('1') say true; 
else say false; 

1.出力trueの場合、我々はおそらく、あまりにも種類をチェック===オペレータを含める必要があります。しかし私はそのオペレーターの大ファンではない。

2つの異なるタイプが比較されるため、エラーが発生する場合は問題ありません。もう少しタイピングすると(1 == int('1'))、問題が解決され、コードが明確になります。しかし、その場合、2.3.の動作方法は?

どのような解決策をお勧めしますか?

答えて

2

非常に主観的です。このサイトの誰もがこの質問に回答した場合、すべての回答は異なるでしょう。あなたが望むものに依存します。既存の言語の問題を解決するのではなく、新しい言語を学習体験として作っているようです。何も間違っているわけではありませんが、あなたはこれに就くつもりです。「これはどういう意味でしょう?あなたが何らかの目標を設定しなければ、多くの問題があります。

ポールグレアムは、最高のデザインが自分のデザインから来るという哲学を支持しています。 Cプログラミング言語は、発明者が他のものよりもむしろそれらを最初に設計したために人気があった。ちなみに、これは他人に人気がありました。一方、COBOLは、非プログラマがそれを理解し、プログラマが使用できるように、コミティによって設計されました。結局のところ、プログラマー以外はそれを読むことができず、プログラマーはそれを嫌っていました。

これを念頭に置いて、あなたにふさわしいと感じる言語を作成する目標を設定し、他人の意見にあまり重視しないでください。特定の意思決定を行った後で、使用していない言語を使用している場合は、その理由を尋ねて、それを楽しむまで必要な変更を行います。

この例では、===演算子が嫌いです。それを含めないでください。

他のパラダイムをまだ調べていない場合は、それを調べると効果的かもしれません。一般的な必須/オブジェクト指向言語に存在する深さと概念的な品質は、かなり限定的である可能性がある。あまり深くないというわけではなく、あなたがそれらのパラダイムから知っていることをすべて踏襲すれば、あなたはこの新しい言語に含めることができる非常に小さな概念のサブセットに自分自身を限定するでしょう。

+0

ありがとうございました。おそらくタイプをチェックするために '=='を使うでしょう。しかし、単純に 'if(x){}'は 'x'で暗黙の変換を行い、' '"、[]、0'はfalseに評価します。したがって、 'if(x){}'が 'if(x == true){}'よりも厳密に厳密になることはありません。たぶん、私たちは '{}'のカッコも取り除きますが、それは別の話です:-)。 – clime

+0

Btw。私と私の友人、私たちはどちらもハッスケルが大好き!それは目立つようになるでしょう:-)。本当にクールなものに近いと思う。あなたの指が私たちのために交差してください:-)。 – clime

+0

ハハ、確かに!あなたがまだこれについて作業していることを知っておいてよかったです。何が来るのを楽しみにしています – TheIronKnuckle

関連する問題