Asal-usul lekukan kode

31

Saya tertarik untuk mencari tahu siapa yang memperkenalkan indentasi kode, serta kapan dan di mana kode itu diperkenalkan.

Tampaknya sangat penting untuk pemahaman kode, tetapi itu tidak universal. Kebanyakan kode Fortran dan Basic adalah (tidak?), Dan hal yang sama berlaku untuk Cobol.

Saya cukup yakin saya bahkan telah melihat kode Lisp lama ditulis sebagai teks baris-terbungkus berkelanjutan. Anda harus menghitung tanda kurung di kepala Anda hanya untuk menguraikannya, apalagi memahaminya.

Jadi dari mana datangnya kemajuan besar seperti itu? Saya belum pernah melihat menyebutkan asalnya.

Terlepas dari contoh asli penggunaannya, saya juga mencari diskusi asli tentang lekukan.

Daniel Mahler
sumber
Saya tidak yakin itu memiliki satu titik asal. Juga, untuk beberapa kode awal, ruang yang diambil oleh spasi itu sendiri akan menjadi masalah.
Jack Aidley
1
Sebenarnya, FORTRAN sudah indentasi. Macam-macam. Itu diletakkan di kolom, yang pertama dicadangkan untuk Ckarakter jika Anda membuat komentar.
Jonathan Landrum
Kecuali kasus di mana lekukan digunakan untuk mengubah makna kode semantik (yaitu, di mana perubahan lekukan akan meletakkannya dalam loop atau sebagai bagian dari if, a la F #), lekukan sebenarnya bukan fitur bahasa, ini adalah fitur IDE ( dan sedikit di kompiler, untuk mengabaikan spasi terkemuka). @ Jack benar - program awalnya dipencet pada kartu, dan lekukan benar-benar tidak ada di penyimpanan (dan mungkin tidak sekarang, juga). RPG kolom tidak menggunakan indentasi (dan Anda hanya memiliki ~ 20 karakter gratis per baris), tetapi IDE dapat "melunakkan" indentasi kode untuk Anda.
Clockwork-Muse
6
Memikirkan hal ini dalam semalam, terpikir oleh saya bahwa pada tingkat tertentu indentasi mungkin sudah ada sebelum pemrograman. Lekukan itu kemungkinan digunakan dalam daftar instruksi sebelum siapa pun yang menulis program komputer. Saya mencoba memburu contoh.
Jack Aidley
@ Clockwork-Muse Indentation adalah fitur bahasa di COBOL hingga sekitar 20 tahun yang lalu ("A area", "B area", dll .).
Ross Patterson

Jawaban:

21

Asal-usul kode indentasi mungkin dapat ditemukan di ALGOL :

ALGOL memperkenalkan blok kode begindan endpasangan untuk membatasi mereka dan itu juga bahasa pertama yang mengimplementasikan definisi fungsi bersarang dengan lingkup leksikal.

Greg Hewgill
sumber
Kedengarannya masuk akal, meskipun saya bertanya-tanya apakah progn Lisp mungkin tidak didahulukan. Either way saya benar-benar setelah spesifik pada pengenalan lekukan.
Daniel Mahler
4
@DanielMahler - Jelajahi manual pemrograman LISP 1 dan buktikan sendiri. Beberapa kode contoh diindentasi, tetapi paling tidak serampangan. Sebagian besar kode contoh dibilas rata.
David Hammen
@ Davidvidam Itu pasti salah satu mesin tik terburuk ... Anda akan berpikir mereka hanya menulis semuanya secara manual.
Panzercrisis
6
Saya tidak berpikir teks yang dikutip sebenarnya mendukung penggunaan / keberadaan indentasi . Itu dukungan untuk kode bagian. Java menggunakan tanda kurung ( {}) untuk membatasi blok, dan Anda dapat mendefinisikan fungsi bersarang, tetapi itu tidak memberi tahu saya apa pun apakah kode tersebut benar-benar menjorok ke dalam.
Clockwork-Muse
12

Kode indentasi harus sudah tiba sebelum 1958, karena sudah ada - tetapi tidak ada di mana-mana - di LISP dan ALGOL. Yang paling awal saya dapat temukan adalah COMTRAN yang diperkenalkan pada tahun 1957, meskipun saya hanya dapat menemukan manual 1960 saja (lihat halaman 90ish). Lekukan ini berbeda dari konsepsi modern karena COMTRAN tidak memiliki struktur blok dari kebanyakan bahasa sejak ALGOL tapi saya pikir itu masih harus diperhitungkan.

Saya menduga bahwa ini sebenarnya bukan contoh pertama tetapi saya tidak dapat menemukan yang lebih awal.

Diperbarui

Terlintas dalam benak saya bahwa indentasi pada tingkat yang berarti mungkin ada sebelum pemrograman. Lekukan itu kemungkinan digunakan dalam daftar instruksi sebelum siapa pun yang menulis program komputer. Sayangnya saya tidak dapat menemukan contoh yang bagus tentang ini.

Jack Aidley
sumber
-1

Ekspansi komentar Ross Patterson - kompiler COBOL (atau setidaknya kompiler IBM, yang saya gunakan dalam karir sistem pra-terbuka saya) memperkuat indentasi (area "A" dan "B" yang ia sebutkan). Jika salah satu elemen yang diperlukan di area ini tidak ditempatkan dengan tepat, kode Anda akan gagal dikompilasi. Namun, lebih dari itu tidak ada lekukan khusus yang diperlukan - ini sering menyebabkan cengkeraman ketika memodifikasi kode pengembang lain yang gaya lekukannya berbeda dari Anda - etiket akan menyarankan Anda mengikuti pola yang ada saat menjaga perdamaian di antara rekan; selain itu, gaya berbeda di sumber yang sama akan memperburuk tampilan, hampir mirip Tetris.

Sudah bertahun-tahun sejak saya memikirkan COBOL dan lekukannya - terima kasih telah mengajukan pertanyaan dan memberikan sedikit perjalanan ke masa lalu!

Marty

Marty Power
sumber