多くのプログラミング言語のステートメントがセミコロンで終了するのはなぜですか?


130

別の記号ではなくセミコロンが行末記号として選択された理由はありますか?

この決定の背景にある歴史を知り、その答えが将来の決定に影響を与える洞察につながることを願っています。


6
アーランとプロローグはフルストップを使用します。
デイブクラーク

13
プログラミング言語はいくつ知っていますか。セミコロンを使用しない言語がたくさんあります。
ニビル

50
答えは「セミコロンのASCII値は、80文字のパンチカードの最後の文字として使用した場合に特に耐久性があります」のようなものになると確信します。
ライアントンプソン

22
あなたの質問は十分ではありません。本当の質問は、「なぜシンボルなのか?」
コンラッドルドルフ

5
それはqwertyキーボードのホーム行にあるからですか?
WIM

回答:


132

英語では、ステートメントのリスト内の項目を区切るためにセミコロンが使用されます。たとえば、

彼女は3人の男を見ました。ニュージーランドから来たジェイミー。牛乳屋の息子ジョン。とジョージ、慢な男。

プログラミングするとき、複数のステートメントを分離し、完全なストップを使用することは、小数点と簡単に混同される可能性があります。セミコロンを使用すると、通常の英語の句読点に近いままで、個々のプログラムステートメントを分離する解析しやすい方法が提供されます。

追加して編集
メモリが高価で処理が遅く、最初のプログラミング言語が考案されていた初期には、処理のためにプログラムを個別のステートメントに分割する必要がありました。一部の言語では、キャリッジリターンがステートメント区切り文字として機能できるように、各ステートメントを行に配置する必要がありました。他の言語では、テキストレイアウトにより自由な形式を使用できるため、特定の区切り文字が必要でした。この文字は、おそらく英語での使用との類似性のためにセミコロンとして選択されました(これは推測である必要があります;私は当時そこにいませんでした)そして、それは他の句読点との競合を生じなかったため数学的またはその他の構文上の目的に必要なマークと記号。

もう一度編集する
ターミネーター文字の必要性は、言語テキストを解析するための要件に戻ります。初期のコンパイラは、アセンブリ言語で、または場合によっては直接手作りのバイナリマシン命令で記述されていました。ステートメントの終わりを識別し、処理されるテキストのチャンクを区切る特殊文字を使用すると、処理がはるかに簡単になります。上記で述べたように、他の言語では復帰または括弧が使用されています。Algol、Pascal、Ada、BCPL、B、C、PL / M、およびその他の言語ファミリーでは、たまたまセミコロンが使用されています。誰がこの特定のキャラクターを最初に使用したかについては、私が覚えているほど歴史にさかのぼりません。その選択と採用は、

  • その使用は、通常の英語の句読点での使用を反映しています。
  • 他の文字(たとえば、フルストップ)は既に一般的に使用されているため、混乱を招く可能性があります(フルストップは小数点としても使用されます)。
  • 目に見える句読点文字により、自由形式のコードレイアウトが可能です。
  • 派生言語またはそれ以降の言語で同様の区切り文字を使用することは、以前の言語を使用したすべてのプログラマーが習得した知識に基づいています。

最後の発言として、これらの回答とコメントに費やした時間は、セミコロンを使用してこの方法で使用する最初の言語を設計するときにステートメントを終了することを決定するよりも多くあったと思います。


19
完全に正しいわけではありません。セミコロンは文をブロックに分割します。各ブロックは作業文である必要がありますが、セミコロンを使用して、2つの文の間に強いリンクがあることを示します。コンマとフルストップの中間にあるため、実際にストップポイントになりますが、1つの文を次の文にリンクします。上記の文は次のようになります。「彼女は3人の男を見ました。ジェイミー:ニュージーランドから来た人、ジョン:牛乳屋の息子、ジョージ:慢な男」。セミコロンの使用は、コンマに置き換えることができます。話題から少し外れますが、要点は本質的に同じです。ステートメントを分割します。
alex.p

40
@ alex.pは、実際にはコンマの代わりに使用できるセミコロンの使用であり、それによって文が混乱する可能性があるため、これが正しくなります。
リャサル

13
セミコロンに関する重要な情報:theoatmeal.com/comics/semicolon
エドジェームズ

7
@ alex.p:Ianの使用は間違っていると言っているように見えますが、セミコロンの使用方法に関する彼の説明は不完全だと言っているかもしれません。彼が間違っていると言っているなら、あなたは完全に間違っています。彼のセミコロンの使用は完全に慣習的であり、あなたが与える例よりもはるかに一般的だと思います。あなたが単に彼が徹底的な説明をしていないと言っているのなら、なぜそれが言及すれば本当に価値があるのか​​分かりません。
iconoclast

17
@イアン「これは推測に違いない、私は当時そこにいなかった」あなたはそこにセミコロンを(正しく)使用する絶好の機会を逃した:)
トラビスクリスチャン

70

多くの言語は、Cをモデルにした構文を使用します(Bをモデルにした-@Crollsterに感謝します)。コメントからわかるように、このような言語の長いチェーンがあります... BはPL / Iに触発され、ALGOL ;が区切り文字として使用されていました。

Cではステートメントの終了記号はであるため;、これらの言語はそれに続きます。

なぜそれがCでステートメントターミネーターとして選ばれたのか-おそらく「相互依存ステートメントを示すために英語での使用のため。

Cは、文字セットに使用できるメモリの量が限られていたPDP-11でも発明されたため、言語の発明者はこれらの制約内で作業する必要がありました。


8
Cは、その前身である「B」で使用されているセミコロンを使用するという慣習に従いました。
クロールスター

8
Bは、その前身である「PL / I」で使用されているセミコロンを使用するという慣習に従っただけです。)
Skomski

15
@Skomski-どちらが続きましたか?私はその最後のカメが来るのを待っています;)
オーデッド

26
-1; さあ、みんな大いに影響力のあるALGOLを忘れましたか?あなたが言及している他のすべての前に、文の区切りとしてセミコロンがありました。(しかし、それがどこか他の場所からアイデアをとったかどうかはわかりません)
-hugomg

13
@Oded-ずっとカメだとわかると思います。* 8 ')
マークブース

54

FORTRANは、キャリッジリターンを使用してステートメントを記述しました。COBOLは期間を使用しました。LISPは何も使用せず、すべてに括弧を使用しました。ALGOLは、セミコロンを使用してステートメントを分離した最初の言語です。PASCALはセミコロンを使用してステートメントを分離し、ALGOLのリードに従いました。

PL / Iはセミコロンを使用してステートメントを終了しました。違いがあり、PASCALで簡単に確認できます。Adaは、ALGOLではなく、この1つの項目でPL / Iのリードに従いました。

ステートメントセパレーターまたはターミネーターとしてのセミコロンは、便利な表記法としてコンピューターサイエンスコミュニティですぐに受け入れられました。私の知る限り、後続のブロック構造化言語はすべて、ALGOLのリードに従い、セミコロンを使用してステートメントを分離または終了しました。

何年も前に、BCPLはセミコロンキャリッジリターンの両方をステートメントの区切り記号/区切り記号として使用したと言われましたが、自分で言語を使用したことはなく、これを確認できません。ある時点で、ステートメントを分離または終了するためのキャリッジリターンの使用がBCPLの子孫から削除されました。BCPLはBを生み、BはCを生み、CはC ++、Java、Dを生み、PASCALやAdaよりも十分に考え抜かれていないものがたくさんあります。


2
セミコロンまたは改行の使用が最近再び現れていることに注意してください。Javascript、Lua、Go、およびHaskellは、構文的に有効であれば、改行で暗黙的なセミコロンを使用します。そしてもちろん、区切り文字として改行を保持するいくつかの言語。ここでシェルとPythonが思い浮かびます。
ジャン・ヒューデック

2
+1「PASCALやAdaよりもかなりよく考え抜かれていない
アディティア

2
Algol 60の前駆体であるAlgol 58は、セミコロンを使用していました。当時は、入力デバイスが非常に制限されていたため、言語の公開形式と実際の入力形式がしばしば区別されていたことに注意してください。大文字のみなどです。他の言語の数。
ダンハルバート

5
@kevincline:ボーイング777が一般的に使用されていると思いますか?その飛行機を飛ばすアビオニクスソフトウェアのすべての行は、エイダで書かれています。
ジョンR.ストローム

2
@kevincline Skype:Delphi(Pascal)で書かれています。Microsoftはこれを取得後に変更しようとしましたが、正常に移植できなかったため、Delphiライセンスを購入しています。アメリカでテレビを見たことがありますか?このステーションはおそらく、Delphiで書かれたWideOrbitのソフトウェアで動作します。彼らは大きなマージンで市場のリーダーです。テーマパークに行ったことはありますか?チケットシステムがDelphiで記述されている可能性は十分にあります。パスカルはいたるところにあります。多くの人が競合他社が見つけられないように静かにしようとするほど強力な競争上の優位性を提供するだけです。
メイソンウィーラー

14

なぜ他のシンボルはありませんか?

いくつかの言語では他の記号が使用されています。たとえば、古いバージョンのBASICでは代わりにコロンが使用されています。

ただし、いくつかの例外を無視すると、2つの主な理由があると思います。1つ目は、明確なものを単に探していることです。通常のパーサーでは、現在のステートメントの解析を続行できないほど深刻なエラーが発生した場合、通常はステートメントターミネーターまでスキップしてパーサーを再起動することで、パーサーの同期を取り戻そうとします。次のステートメントの始まり。そのためには、通常はコードの他の場所では発生しない何かが必要であり、セミコロンはたまたま他の意味がほとんど付与されていないシンボルであるため、この目的専用にするのは非常に簡単です。

2番目の理由はいくぶん似ていますが、コードを読んだり使用したりする人を対象にしています。繰り返しますが、実際に使用するシンボルはそれほど重要ではないという事実に戻ります。読者が特定の目的のために見慣れている記号を使用することで、可能な場合に、それを使用することで得られる読みやすさには大きな利点があります。これは、Cが完全な構文であることを意味するものではなく、他のすべてがそれに追従する必要があるという意味ではありませんが、その構文のスタイルに十分な人々が精通していることを意味します。ほぼ同じ構文です。

これは、他のほとんどのプログラムを設計するのとよく似ていることに注意してください。何らかのウィンドウを使用するプログラムを作成する場合は、ターゲットプラットフォームのネイティブ機能を使用するようにします。実施する決定の多くは大部分がarbitrary意的であり、機能を大幅に失うことなく異なる方法で行うことができますが、同様に、機能を大幅に向上させずにそれらを変更すると、ユーザーを混乱させるだけで有用なことはできません。同じ基本原則が、「言語のステートメントを終了する(または分離する)もの」に適用されます。「スクロールバーはどのように表示されるべきか」、または「ツリーコントロールはどのように機能しますか?」これらのすべての場合において、決定はほとんどarbitrary意的であり、均一性はそれ自体で実質的な利点を提供します。

プログラミングの前にはほとんどの人が慣れているような方法で、多くの言語で同じことが起こると付け加えます。なぜ誰もが「+」を使用して加算を示し、「-」を使用して減算を示すのですか?シンボルの形状は重要ではありませんが、各シンボルに同じ意味を適用することに同意する全員が重要です。


非常に良い点(+1)ですが、「ほとんど任意」の部分にはまったく同意できません。私は非常に間違いなく、より直感的なものと、あまり直感的でないものがあると思います。Windowsがウィンドウを閉じるためにXを使用する場合、描画する既存のシンボリズムがいくつか(おそらく漠然としか接続されていない)存在します。また、OS Xの色の使用には、強力な象徴性があります。(M $ WindowsがX WindowsからXを盗んだかもしれないという瞬間は無視しています。使用したことを思い出せないからです。)
iconoclast

3
@Brandon:GUIデザインのすべての部分がarbitrary意的であると言うつもりはありませんでした-たぶん、 "most"ではなく "some"と言ったほうがいいでしょう。「ウィンドウを閉じる」アイコンの特定の形状を定義したのはXではなく、個々のウィンドウマネージャー次第です。
ジェリーコフィン

私の記憶の限りでは、元のダートマスBASICはキャリッジリターンのみを使用してステートメントを終了しました(つまり、1行に1つのステートメント)。私はTHINKコロンで区切られた行に複数のステートメントは、マイクロソフトの延長でした。
ジョンR.ストローム

7

セミコロンは元々、Algol 60で終端記号ではなくステートメント区切り記号として提案されていました。

Algol 60より前は、存在する唯一の高水準プログラミング言語はFortranでした。Fortranでは、各ステートメントを別々の行に置く必要がありました。doループのように、複数行にわたるステートメントは奇妙と見なされ、「ステートメントブロック」と見なされました。

Algol 60の設計者は、ステートメントが階層構造(if-then-else、do-loop、caseステートメントなど)を必要とし、それらが相互にネストできることを認識しました。したがって、各ステートメントが別々の行にあるという考えは、もはや意味をなさない。フォームS1のステートメントの順次構成。S2; ...; Snはオプションでbegin - end括弧で囲まれ、複合ステートメントと呼ばれ、Algol 60で想定されているステートメントの階層構造に適合します。したがって、ここではセミコロンは明らかにターミネーターではなくステートメントセパレーターです。

これにより、実際に問題が発生しました。Algol 60には、何も記述しないことで示される「空のステートメント」もありました。したがって、セミコロンがS1を終了しているように表示される「begin S1; end」と書くことができます。しかし、Algol 60コンパイラーは、S1とそれに続く目に見えない空のステートメントとの間のセパレーターとして実際にそれを扱いました。これらの微妙さは、実際のプログラマーにとっては少々多かった。AssemblyやFortranのような行指向言語に慣れていた彼らは、セミコロンをステートメントの終止符として本当に考えていました。プログラムが書き出されると、通常、セミコロンがステートメントの最後に置かれます。

    a [i]:= 0;
    i:= i + 1

セミコロンは最初のステートメントの終端文字のように見えました。プログラマーがセミコロンをターミネーターとして扱った場合、次のようなステートメントは構文エラーになります。

    i> 0の場合
      a [i]:= 0;
    他に
      a [i]:= 1;

セミコロンが「if」を終了するため、「else」がぶら下がります。プログラマーは完全に混乱していました。

そのため、IBMの行指向Fortranの後継であるPL / Iは、セミコロンをセパレーターではなくステートメントターミネーターにすることを決定しました。プログラマーはその選択に満足していました。プログラミング言語の大部分がそれに続きました。(Pascalはこの傾向に抵抗しましたが、後継のAdaはそれをあきらめました。)

[注記追加:プログラミング言語の比較に関するウィキペディアの記事には、さまざまなプログラミング言語でのセミコロンの処理方法をまとめた表があります。]


6

これはかなり純粋な推測作業ですが、ASCII値に制限された標準のQWERTYキーボードを見ると、終了/分離の自然な文字は。!?、:;になります。およびキャリッジリターン。それらの!?:複数のキーを取得するために直ちに失格する必要があり、ステートメントの終了は非常に一般的なことです。ピリオドは小数点と容易に混同されるため、初期コンピューターのスペースが限られているため、ピリオドは不必要にターミネーターになるために失格になります。コードの行が画面上の1行に表示できる長さよりも長くなる可能性がある場合、キャリッジリターンは失格となります。または、次の行に継続を作成するために追加の文字が必要になるため、再び複雑になります。これは去ります; これらのオプションは、書面でより頻繁に使用されます。セミコロンが選択されるのは、入力が簡単で、意味が制限された文字に意味を追加し、特殊ケースが実際には使用されないので複雑ではないため、混乱が少ないためです。

セミコロンが選ばれたのは、それが怠inessさとシンプルさに基づいた最高のキャラクターだったからです。


ここには良い点があります。Iのみ再単語のようなものに(証明することは困難である)「選ばれた」でしょう「それは怠惰とシンプルに基づいて最良のキャラクターだったので...セミコロンは勝った」
ブヨ

2
ほとんどない。ステートメントターミネータ/セパレータとしてのセミコロンは、ASCIIに先行するALGOL(1958)で始まりました(作業は1960年に開始され、最初のリリース1963、メジャーリリース1967、最後に1986年に更新されました)。
ジョンR.ストローム

@ JohnR.Strohmそれは私にとってニュースですが、これはすべて私にとってかなり古代の歴史です
リャサル

6
これは素晴らしい理論ですが、現実には、70年代に近代的なキーボード入力が登場するまで、キーパンチにはセミコロンに到達するためにシフトキーが必要でした。(wiki記事の下部にいくつかの良い写真があります:en.wikipedia.org/wiki/Keypunch)それは、自然な英語のルールに基づいている可能性が最も高く、同時に流行した流行です。(私は50代後半のすべての言語を含めます:LISPを除くALGOL、FORTRAN、COBOL、およびSQL。)ALGOLのセミコロンは、使用されている多くの英語の規則の1つに過ぎず、BASICは後でさらに拡張されます。
SilverbackNet

@SilverbackNetは、「純粋な推測作業」がここでの答えの基礎となるべきではない理由です。
user1717828

6

それは主にarbitrary意的な選択です。一部の言語は他の選択を行っています。COBOLは、.文字でステートメントを終了します。FORTRAN、BASIC、およびPythonは通常、ステートメントを改行で終了します(複数行ステートメント用の特別な構文を使用)。そして、Lispはその文を括弧で囲んでいます。

主な理由;は、ステートメントの区切り記号/終了記号として非常に人気があります。今日の人気のある言語のほとんどは、その規則を使用したALGOLに基づいているからです。

別のシンボルの代わりに?

他にどんなシンボルを選ぶことができますか?

ASCII文字#$ @ [] ^ _ `{|}〜は、ISO 646のような初期の文字エンコーディングに常に存在するとは限りませんでした。

()*+-/<=>通常、文字は数学演算子として使用され、ステートメントのターミネータとして使用された場合、解析のあいまいさが生じます。

product = a * b *  // If '*' were a statement terminator,
c * d *            // Are there two factors, or four?

同様の問題はとに適用され'"通常は文字列の区切り文字として使用されます。,、通常は関数の引数を分離する.ために使用され、、通常は小数点として(またはのような構造の区切り文字として)使用されsome_struct.some_fieldます。

それは去り!%&:;?ます。

選択する!か、?おそらく技術的な問題を引き起こすことはありませんが、英語の意味はプログラムに間違った雰囲気を与えます。

print(x)?  # Yes, you should.
           # It's an IMPERATIVE language; stop questioning my commands.
print(x)!  # OK!  You don't have to shout!

これ&は、文の区切り記号(終端記号ではない)としてより賢明な選択です。

do_thing_a() &
do_thing_b()

事のAを行うためのコマンドとして読み取ることができますし、次いで事B.しかし、ほとんどの言語を行う&オペレータは、論理的またはビット単位としてそれを使用する代わりに。

この%記号は、(予想されるの代わりにinterest_rate = 2.99%変数を設定する)などのステートメントで混乱を引き起こす可能性があります。もちろん、よく知られている数学的な意味は、Cを剰余演算子として使用することを止めませんでした。2.990.0299%

だから、葉:;

: は賢明な選択であり、実際にBASICのほとんどの方言で行内ステートメント区切り文字として使用されます。

しかし;、英語の文法は側面にあります。文内の句を区切るために使用できます。


3

あなたの見出しの質問に答えるのではなく、あなたの暗黙の質問に集中する方が良いと思います:

この決定の背景にある歴史を知り、その答えがプログラミング言語の設計と実装における将来の決定に影響を与える洞察につながることを願っています。

プログラミング言語の設計と実装の歴史について学び、プロセスについてより深い洞察を得たい場合は、プログラミング言語歴史会議の議事録を始めるのに非常に良い場所です。(ただし、議事録にアクセスするにはACMメンバーシップが必要だと思います。)

多くのプログラミング言語のステートメントがセミコロンで終了するのはなぜですか?別の記号ではなくセミコロンが行末記号として選択された理由はありますか?

あなたの見出しの質問をHOPLの手順を読んで答えたいと思うかもしれない質問の例として、私は次の点を提供したいと思います:新しいプログラミング言語を設計する人々は、彼らが知っているものを考慮するので、通常そうします壊れた/不足している。彼らの新しい言語は、一方で、この欠陥を修正するように設計されています。一方、言語設計者は、他の言語からデザイン要素をコピーすることもできます。または、問題が発生しなかった要素を変更しません。

特にその最後の部分は重要です:代わりに他のプログラミング言語の多くは、あなたはおそらくなかったの言語を見て、多くを学びます、というコピーされた理由は、プログラミング言語は、これまでのターミネータとしてセミコロンを使用する最初の一つであったとされて見つけることを試みるのではないコピーそれ。たとえば、SmalltalkはSimulaから多くのインスピレーションを得ましたが構文、特にステートメントターミネータとしてのセミコロンの使用をコピーします。ターミネータ(実際にはセパレータ)を完全なストップに変更し、セミコロンを他の何かに使用します。逆に、ステートメントターミネータとしてセミコロンを使用した最初の言語には、それ以前の言語で使用されていたものからこれを変更する理由があった可能性があります。また、ステートメントターミネータの概念全体を導入した(または他の言語とは独立して導入した)最初の言語であり、セミコロンが何らかの理由で使用され、現在では失われている可能性もあります。(他の回答者は誰もセミコロンが良い選択であった理由について改造された仮定を提供するのではなく、セミコロンを導入した人からの引用を掘り下げることができなかったため、後者がここに当てはまると思います。)ポイント、言語デザイナーが物事をコピー/保持した理由ではなく、物事を変更した理由を見ると、もっと学ぶことができると思います。人々がたいてい物事を変更するとき、彼らはたいていその変更を説明する必要がありますが、物事をコピーしたり同じものにしたりするときはそうしません。それがまさにその方法なのです!」


2

その可視性について。

初期のステートメント区切り文字は「。」でした COBOLおよび改行の場合と同様、FORTRANの復帰改行。

CRは、複数行にわたるステートメントのフローを困難にするという点で制限があります。

完全停止は、より興味深い問題を引き起こしました。脳がサブリミナルレベルでフルストップを処理する英語のテキストを読むとき、文章が終了したことを意識し、息を止めることができますが、実際には気づきません。それが合図した。また、多くのフォントでは「。」は、可能な限り最小の文字であり、単一ピクセルとしてレンダリングされる場合があります。欠落または余分な期間が、COBOLプログラムのエラーの最も一般的な原因になりました。

そのため、初期の誤りから学ぶことで、ALGOLは特定のターミネーターを選択します。このターミネーターは、ステートメントが複数の行にわたって流れることを可能にし、人間の読者が目に見えて簡単に気付くものを選びました。セミコロンは、一般的な英語では無意識に処理されないほど大きく、珍しいものです。


1

キャリッジリターン/改行以外の明示的なステートメントターミネータが必要なため、選択されたのは私の理解でした。80列の画面の時代には、実際には1行のコードが複数行にまたがっていたため、ステートメントターミネータに\ rまたは\ nを使用しても機能しませんでした。

セミコロンは、ロジック/数学ステートメントで使用されていないため便利です。そのため、それらはステートメントの実際の内容とは大幅に矛盾しません。


個人的には、80文字未満の行を維持するためのスタイル要件とともに、セミコロンの継続的な使用は、率直に言って愚かで時代錯誤だと思います。pythonのような言語は、理解しやすく簡潔なコードをより簡単に記述できることを広く実証しています。また、80文字より長い行に問題がある場合は、より大きなモニターが必要です。


3
暗黒時代には、「80カラムのスクリーン」はありませんでした。80列のパンチカードがあり、列の数が異なるプリンターがありました。(約130程度が一般的でした。)FORTRANはカードの最後でステートメントを終了しましたが、ステートメントを継続するために継続カードを許可しました。継続カードは、カードの列6にパンチされたキャラクターによってマークされました。(任意の文字が機能します。地域の慣習に応じて、通常、+記号または1桁の数字が表示されます。数字は複数の継続カードでカウントアップされます。)
John R. Strohm

1
Pythonのような言語は、Cの初期に存在したコンピューターには実行不可能でした。ステートメント終了文字を使用すると、解析がより簡単になります。数十年前のコンパイラーのメモリーとCPU負荷を減らすことは非常に重要でした 特に、秒単位でCPU時間を支払ったコンピューターでは。
ギガトロン

@Gigatron- キャリッジリターンを使用してステートメントを終了することのみに言及していましたが、Pythonの高レベルの側面には言及していませんでした。
偽の名前

1
@ Gigatron、LISP、特にIBM 704の初期の歴史を見てみたいと思うかもしれません。古代人ができること、石のナイフや熊の皮を使って作業することにも驚かれるかもしれません。
ジョンR.ストローム

1
@Gigatron:FORTRANは同じコンピューターで実行され、改行を使用してステートメントを分離します(複数行ステートメントの特別な構文を使用)。
dan04

0

ここに2つの質問があります:ALGOLがセミコロンを取得した理由と、他の言語がセミコロンを取得した理由。

最初の質問はすでに多くの方法でここで回答されています。

2番目のアルゴリズムとして、ALGOLはアルゴリズム作成用の擬似コード言語として非常に広く使用されていました。そのため、異なる言語のユーザーにとってセミコロンはすぐに自然になりました。そして当然、それらは若い言語のために取られました。


0

私は間違っているかもしれませんが、これは多くのアセンブラーでコメントを開始するためにセミコロンが使用され、通常は命令の後に置かれたという事実と関係があると思います。aの後のすべて;はコメントであり、命令自体の一部ではなくなりました。

次に、インタープリターで入力するときに指示を終了する必要があります。Enterキーを押すだけで短い命令(数式など)を終了し、式を計算する準備ができて結果を生成したことをインタープリターに伝えることができます。ただし、命令に複数行のコードを入力したい場合があります。そのための1つの方法は、Enterキーだけに依存するのではなく、特殊文字を命令の終了文字として使用することです。この方法では、Enterはまだインタープリターに送信していないため、ユーザーは一度に複数行のコードを入力できます。インタプリタがEnterで入力された行で終了文字を見つけた場合にのみ、最終的に実行して結果を計算します。

これらの2つのことを組み合わせると、終了文字のセミコロンは明らかな選択のように見えます。命令部分の終了位置とコメント部分の開始位置を示すため、インタープリターが行内で遭遇すると、フラッシュできることを認識しています。命令が終了したばかりなので、これまでバッファリングしていた式のすべての行を実行します。今はコメントになっています(次の行はコードで始まるため、少なくともこの行の最後までです)もう一度モード、新しい式/命令を開始します)。

もちろん、これは、命令ターミネーターとして再利用するというこのアイデアを思いついた人がコメントに使用したのは、実際にはセミコロンだったと仮定しています。それが他のキャラクターだったので、別の命令ターミネーターで終わるかもしれません。

Inb4:いいえ、これは歴史的な説明ではありません。これがセミコロンが生き返った実際の方法であるという証拠はありません。それは私がそれがおそらく起こったかもしれないと想像する方法です。


-1

ほとんどの言語はセミコロンを使用しました。セミコロンはすでにその目的で広く使用されており、変更が意味をなさないためです。

そして、その選択をする最初の言語を考慮して、代替手段を検討する必要があります。言語を設計するとき、必要な文字を使用可能にしたい場合、この時点の文字セットは6ビットでコード化され、多くの場合、いくつかのパターンが予約され、多くの場合、一部の文字がしっかりと定義されていません(これについては、 ISO-646の国家の変異体は-米国のバリアントはよく名前のASCIIの下に知っている- 「共通」などの文字のコードを再利用する[#または$、唯一の半分のコード位置がある場合のコンテキストで効果を確認します利用可能で、それらの半分以上を予約する文字と数字)。

おそらく他として直感的に文の区切り文字として使用できる文字(ありました.おそらく既にその基準のための唯一の深刻な候補である)と構文解析と字句の理論は精緻にまだあった時に字句や構文解析の困難を導入せずには(.今ではありません実数で使用するため問題ありません)。


-1

セミコロンを使用するもう1つの理由は、セミコロンが必要でないか、頻繁に使用しない文字の1つであるためです。

変数名または何かとしてより頻繁に使用し、セミコロンがキーワードまたは演算子として使用されていた場合、コンパイラのシンボルの競合であったため、そうでないシンボルを使用することが重要であると仮定しますコーディングでよく使用されます。

Cスタイルのプログラミング言語が普及したので、新しいプログラミング言語の作成者は車輪を再発明することを望みませんでした。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.