ต้นกำเนิดของการเยื้องรหัส


31

ฉันสนใจที่จะรู้ว่าใครเป็นผู้แนะนำการเยื้องโค้ดรวมถึงเวลาและสถานที่ที่มีการเปิดตัว

ดูเหมือนว่าสำคัญอย่างยิ่งต่อการเข้าใจรหัส แต่มันไม่เป็นสากล ส่วนใหญ่ Fortran และรหัสพื้นฐานคือ (ไม่?) unindented และเดียวกันไปสำหรับ Cobol

ฉันค่อนข้างมั่นใจว่าฉันเคยเห็นรหัส Lisp เก่าที่เขียนเป็นข้อความต่อเนื่องและมีเส้น คุณต้องนับวงเล็บในหัวของคุณเพื่อวิเคราะห์มัน

ดังนั้นการปรับปรุงครั้งใหญ่นี้มาจากไหน? ฉันไม่เคยเห็นการกล่าวถึงต้นกำเนิดของมันเลย

นอกเหนือจากตัวอย่างดั้งเดิมของการใช้งานฉันยังมองหาการอภิปรายต้นฉบับของการเยื้อง


ฉันไม่แน่ใจว่ามันมีจุดกำเนิดเดียว นอกจากนี้สำหรับรหัสเริ่มต้นบางส่วนช่องว่างที่เกิดขึ้นจากช่องว่างนั้นจะเป็นปัญหา
Jack Aidley

1
อันที่จริงฟอร์แทรนถูกเยื้อง ในประเภทต่างๆ มันถูกจัดวางในคอลัมน์สิ่งแรกที่ถูกสงวนไว้สำหรับCตัวละครหากคุณแสดงความคิดเห็น
Jonathan Landrum

กรณีที่มีการ จำกัด การเยื้องที่ใช้ในการเปลี่ยนความหมายทางความหมายของรหัส (นั่นคือการเปลี่ยนการเยื้องจะใส่ไว้ในลูปหรือเป็นส่วนหนึ่งของifa la F #) การเยื้องไม่ใช่คุณสมบัติภาษาจริงๆมันเป็นคุณสมบัติIDE ( และคอมไพเลอร์เล็กน้อยเพื่อละเว้นช่องว่างนำหน้า) ถูกต้อง @ แจ็ค - แต่เดิมโปรแกรมถูกต่อยกับการ์ดและการเยื้องไม่ได้มีอยู่ในที่จัดเก็บ Columnar RPG ไม่ได้ใช้การเยื้อง (และคุณมีอิสระเพียง 20 ตัวอักษรต่อบรรทัดเท่านั้น) แต่ IDE สามารถ "เบา" เยื้องรหัสสำหรับคุณได้
Clockwork-Muse

6
เมื่อคิดถึงเรื่องนี้ในชั่วข้ามคืนฉันคิดว่าการเยื้องระดับที่มีความหมายอาจมาก่อนการเขียนโปรแกรม การเยื้องมีแนวโน้มที่จะใช้ในรายการคำสั่งก่อนที่จะมีใครเขียนโปรแกรมคอมพิวเตอร์ ฉันพยายามตามตัวอย่าง
Jack Aidley

@ การเยื้องของ Clockwork-Muse เป็นคุณสมบัติภาษาใน COBOL จนกระทั่งประมาณ 20 ปีที่แล้ว ("พื้นที่", "พื้นที่ B" ฯลฯ )
Ross Patterson

คำตอบ:


21

ต้นกำเนิดของรหัสเยื้องอาจพบได้ในALGOL :

ALGOL แนะนำบล็อคโค้ดและbeginและendคู่เพื่อกำหนดขอบเขตและยังเป็นภาษาแรกที่ใช้นิยามฟังก์ชันซ้อนกันด้วยขอบเขตคำศัพท์


ฟังดูสมเหตุสมผล แต่ฉันสงสัยว่าการพยากรณ์ของ Lisp อาจไม่ได้มาก่อน ไม่ว่าจะเป็นวิธีใดฉันก็เจาะจงไปที่การเยื้อง
Daniel Mahler

4
@DanielMahler - เรียกดูคู่มือการเขียนโปรแกรม LISP 1และดูด้วยตัวคุณเอง โค้ดตัวอย่างบางส่วนมีการเยื้อง แต่ก็เป็นตัวอย่างที่ดีที่สุด โค้ดตัวอย่างส่วนใหญ่จะถูกปล่อยทิ้งไว้
David Hammen

@ DavidHammen นั่นต้องเป็นหนึ่งในเครื่องพิมพ์ดีดที่เลวร้ายที่สุด ... คุณคงคิดว่าพวกเขาแค่เขียนสิ่งทั้งหมด
Panzercrisis

6
ฉันไม่คิดว่าข้อความที่ยกมาจริงรองรับการใช้งาน / การดำรงอยู่ของการเยื้อง นั่นคือการสนับสนุนสำหรับรหัสการแบ่งส่วน Java ใช้เครื่องหมายวงเล็บ ( {}) เพื่อกำหนดขอบเขตบล็อกและคุณสามารถกำหนดฟังก์ชั่นที่ซ้อนกันได้ แต่นั่นไม่ได้บอกอะไรเลยเกี่ยวกับรหัสที่เยื้อง
Clockwork-Muse

12

รหัสที่เยื้องจะต้องมาถึงก่อนปี 1958 เนื่องจากเป็นปัจจุบัน - แต่ไม่ใช่แพร่หลาย - ใน LISP และ ALGOL เร็วที่สุดที่ฉันสามารถหาได้คือCOMTRANซึ่งเปิดตัวในปี 1957 แม้ว่าฉันจะสามารถค้นหาคู่มือ 1960เท่านั้น (ดูหน้า 90ish) การเยื้องนี้แตกต่างจากความคิดสมัยใหม่เนื่องจาก COMTRAN ขาดโครงสร้างบล็อกของภาษาส่วนใหญ่ตั้งแต่ ALGOL แต่ฉันคิดว่ามันควรจะนับ

ฉันสงสัยว่านี่ไม่ใช่ตัวอย่างแรกจริง ๆ แต่ฉันไม่พบตำแหน่งใด ๆ ก่อนหน้านี้

Updated

มันเกิดขึ้นกับฉันว่าการเยื้องระดับที่มีความหมายอาจมาก่อนการเขียนโปรแกรม การเยื้องมีแนวโน้มที่จะใช้ในรายการคำสั่งก่อนที่จะมีใครเขียนโปรแกรมคอมพิวเตอร์ น่าเสียดายที่ฉันไม่พบตัวอย่างที่ดีของสิ่งนี้


-1

การขยายความคิดเห็นของ Ross Patterson - คอมไพเลอร์ COBOL (หรืออย่างน้อยคอมไพเลอร์ของ IBM ซึ่งฉันใช้ในอาชีพก่อนเปิดระบบ) บังคับใช้การเยื้อง (พื้นที่ "A" และ "B" ที่เขากล่าวถึง) หากองค์ประกอบใด ๆ ที่จำเป็นต้องอยู่ในพื้นที่เหล่านี้ไม่ถูกต้องรหัสของคุณจะล้มเหลวในการรวบรวม อย่างไรก็ตามยิ่งไปกว่านั้นไม่จำเป็นต้องมีการเยื้องที่เฉพาะเจาะจง - สิ่งนี้มักจะนำไปสู่การยึดเกาะเมื่อปรับเปลี่ยนรหัสของนักพัฒนาคนอื่นที่มีสไตล์การเยื้องแตกต่างจากของคุณ - มารยาทจะแนะนำให้คุณทำตามรูปแบบที่มีอยู่ นอกจากนี้สไตล์ที่แตกต่างในแหล่งเดียวกันจะทำให้รุนแรงขึ้นในการดูเกือบ Tetris เหมือนในลักษณะ

เป็นเวลาหลายปีแล้วที่ฉันได้คิดเกี่ยวกับภาษาโคบอลและการเยื้องของมัน - ขอบคุณสำหรับการถามคำถามและให้การเดินทางเล็กน้อยในอดีต!

มาร์ตี้

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.