コードインデントの起源


31

コードインデントを導入したユーザーと、導入された時期と場所を調べることに興味があります。

コードを理解することはとても重要に思えますが、普遍的ではありませんでした。ほとんどのFortranおよびBasicコードはインデントされていない(ですか?)ため、Cobolでも同じことが言えます。

連続した行折り返しのテキストとして書かれた古いLispコードを見たことさえあると確信しています。それを解析するためだけに頭の中の括弧を数える必要がありました。

では、このような大きな改善はどこから来たのでしょうか?私はその起源の言及を見たことがありません。

元の使用例とは別に、私はインデントの元の議論も探しています。


単一の原点があるかどうかはわかりません。また、一部の初期のコードでは、スペース自体が占めるスペースが問題でした。
ジャックエイドリー

1
実際、FORTRAN インデントされていました。ソートで。これは列に配置されC、コメントを作成する場合は最初にキャラクター用に予約されています。
ジョナサンランドラム

インデントを使用してコードのセマンティックな意味を変更する場合(つまり、インデントを変更するとループに入れられる、またはifF#の一部として)、インデントは実際には言語機能ではなく、IDE機能です(コンパイラーでは、先頭のスペースを無視します)。@Jackの権利-もともとプログラムはカードにパンチされていて、文字通りインデントはストレージに存在していませんでした(おそらく今もそうではないはずです)。Columnar RPGはインデントを使用しません(とにかく1行あたり〜20文字しか使用できません)が、IDEはコードを「ソフト」インデントできます。
時計仕掛けのミューズ

6
このことを一晩で考えてみると、意味のある程度のインデントはおそらくプログラミングよりも前のことになると思います。インデントは、コンピュータープログラムを作成する前に、命令リストで使用される可能性がありました。私は例を見つけようとしています。
ジャックエイドリー

@ Clockwork-Museインデントは、約20年前までCOBOLの言語機能でした(「Aエリア」、「Bエリア」など)。
ロスパターソン

回答:


21

インデントされたコードの起源はおそらくALGOLにあります:

ALGOLは、コードブロックと導入beginし、endそれらを区切るためのペアを、それはまたレキシカルスコープを持つネストされた関数定義を実装する最初の言語でした。


それは理にかなっているように思えますが、Lispの予言が最初に来たのではないかと思います。いずれにせよ、私は本当にインデントの導入に関する詳細を求めています。
ダニエルマーラー

4
@DanielMahler- LISP 1プログラミングマニュアルを参照し、自分で確認してください。サンプルコードの一部はインデントされていますが、せいぜい無計画です。サンプルコードのほとんどは左にフラッシュされています。
デビッドハンメン

@DavidHammenそれは最悪のタイプライターの一人だったに違いない...あなたは彼らが全部を手書きしたと思っていただろう。
パンツァークライシス

6
引用されたテキストが実際にインデントの使用/存在をサポートしているとは思わない。それはセクショニングコードのサポートです。Javaは括弧({})を使用してブロックを区切り、ネストされた関数を定義できますが、コードが実際にインデントされているかどうかはわかりません。
時計仕掛けミューズ

12

インデントされたコードは、LISPおよびALGOLに存在していましたが、ユビキタスではないため、1958年より前に到着したに違いありません。私が見つけることができる最も早いのは1957年に導入されたCOMTRANですが、1960年のマニュアルしか見つけることができません(90ページ参照)。COMTRANにはALGOL以降のほとんどの言語のブロック構造が欠けているため、このインデントは現代の概念とは異なりますが、それでも考慮すべきだと思います。

私はこれが実際に最初の例ではないのではないかと疑っていますが、以前のものを見つけることはできません。

更新しました

意味のある程度のインデントはおそらくプログラミングよりも前のことだと思いました。インデントは、コンピュータープログラムを作成する前に、命令リストで使用される可能性がありました。残念ながら、この良い例は見つかりません。


-1

Ross Pattersonのコメントの拡張-COBOLコンパイラー(または、少なくともIBMのコンパイラーで、オープン前のシステムキャリアで使用しました)は、インデントを強制しました(彼が言及する「A」および「B」領域)。これらの領域に配置する必要がある要素のいずれかが正確に配置されていないと、コードはコンパイルに失敗します。しかし、それ以上に特定のインデントは必要ありませんでした-これは、インデントのスタイルがあなたのものとは異なる別の開発者のコ​​ードを変更する際にしばしば不自由になりました-エチケットは、ピア間の平和を維持する既存のパターンに従うことを提案します; さらに、同じソース内の異なるスタイルは、見た目がほとんどテトリスのように見えて悪化します。

COBOLとそのインデントについて考えてから何年も経ちました-質問をして、過去へのちょっとした旅をしてくれてありがとう!

マーティ

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