มีเหตุผลที่เลือกเซมิโคลอนเป็นเทอร์มิเนเตอร์บรรทัดแทนสัญลักษณ์อื่นหรือไม่?
ฉันต้องการทราบประวัติเบื้องหลังการตัดสินใจครั้งนี้และหวังว่าคำตอบจะนำไปสู่ข้อมูลเชิงลึกที่อาจมีอิทธิพลต่อการตัดสินใจในอนาคต
มีเหตุผลที่เลือกเซมิโคลอนเป็นเทอร์มิเนเตอร์บรรทัดแทนสัญลักษณ์อื่นหรือไม่?
ฉันต้องการทราบประวัติเบื้องหลังการตัดสินใจครั้งนี้และหวังว่าคำตอบจะนำไปสู่ข้อมูลเชิงลึกที่อาจมีอิทธิพลต่อการตัดสินใจในอนาคต
คำตอบ:
ในภาษาอังกฤษเครื่องหมายอัฒภาคจะใช้เพื่อแยกรายการในรายการคำสั่งตัวอย่างเช่น
เธอเห็นชายสามคน: เจมี่ซึ่งมาจากนิวซีแลนด์ จอห์นลูกชายของชายนม; และจอร์จเป็นคนประเภทผอมแห้ง
เมื่อการเขียนโปรแกรมคุณกำลังแยกจำนวนคำสั่งและการใช้การหยุดเต็มอาจสับสนได้ง่ายสำหรับจุดทศนิยม การใช้เครื่องหมายอัฒภาคให้วิธีแยกวิเคราะห์ข้อความโปรแกรมแต่ละรายการได้ง่ายในขณะที่ยังคงใกล้เคียงกับเครื่องหมายวรรคตอนภาษาอังกฤษปกติ
แก้ไขเพื่อเพิ่ม
ในช่วงแรก ๆ เมื่อหน่วยความจำมีราคาแพงการประมวลผลช้าและภาษาการเขียนโปรแกรมแรกถูกคิดค้นขึ้นมีความจำเป็นต้องแยกโปรแกรมออกเป็นคำสั่งแยกต่างหากสำหรับการประมวลผล บางภาษาต้องการให้แต่ละคำสั่งวางอยู่บนบรรทัดเพื่อให้การขึ้นบรรทัดใหม่สามารถทำหน้าที่เป็นตัวคั่นคำสั่ง ภาษาอื่น ๆ อนุญาตให้ใช้รูปแบบข้อความเพิ่มเติมได้ฟรีและจำเป็นต้องใช้อักขระตัวคั่นเฉพาะ ตัวละครนี้ถูกเลือกให้เป็นเซมิโคลอนส่วนใหญ่เป็นเพราะความคล้ายคลึงกับการใช้งานในภาษาอังกฤษ(สิ่งนี้จะเป็นการคาดคะเนฉันไม่ได้อยู่ที่นั่นในเวลานั้น)และเนื่องจากมันไม่ได้ขัดแย้งกับเครื่องหมายวรรคตอนอื่น ๆ เครื่องหมายและสัญลักษณ์ที่จำเป็นสำหรับวัตถุประสงค์ทางคณิตศาสตร์หรือวากยสัมพันธ์อื่น ๆ
แก้ไขอีกครั้ง
ความต้องการตัวอักขระยกเลิกบางตัวกลับไปเป็นข้อกำหนดในการแยกวิเคราะห์ข้อความภาษา คอมไพเลอร์ต้นถูกเขียนในภาษาแอสเซมบลีหรือในบางกรณีโดยตรงในคำแนะนำเครื่องไบนารีที่สร้างขึ้นด้วยมือ การมีอักขระพิเศษที่ระบุจุดสิ้นสุดของคำสั่งและคั่นส่วนข้อความที่กำลังประมวลผลทำให้การประมวลผลนั้นง่ายขึ้นมาก ดังที่ฉันได้กล่าวไว้ข้างต้นภาษาอื่น ๆ ได้ใช้การคืนหรือการขึ้นบรรทัดใหม่ อัลกอล, ปาสคาล, อาดา, BCPL, B, C, PL / M, และตระกูลภาษาอื่น ๆ เกิดขึ้นในการใช้เครื่องหมายอัฒภาค ในฐานะที่เป็นที่แรกที่ใช้ตัวละครนี้โดยเฉพาะฉันไม่ย้อนกลับไปในประวัติศาสตร์ที่จะจำได้มากพอ ทางเลือกและการยอมรับมันทำให้รู้สึกสมบูรณ์แบบ
เป็นคำพูดสุดท้ายฉันคิดว่ามีการใช้เวลากับคำตอบและความคิดเห็นเหล่านี้มากกว่าที่ใช้ในการตัดสินใจใช้เครื่องหมายอัฒภาคเพื่อจบประโยคเมื่อออกแบบภาษาแรกที่ใช้ด้วยวิธีนี้
หลายภาษาใช้ไวยากรณ์ที่สร้างขึ้นหลังจาก C (ซึ่งเป็นรูปแบบหลังจากB - ขอบคุณ @Crollster) ที่สามารถเห็นได้ในความคิดเห็นมีห่วงโซ่ยาวของภาษาดังกล่าว ... B เป็นแรงบันดาลใจจาก PL / I ซึ่งก่อนหน้านี้โดย ALGOL ที่ใช้;
เป็นตัวคั่น
เนื่องจากใน C คำสั่งยกเลิกคือ;
ภาษาเหล่านี้จึงตามหลังชุดสูท
สำหรับเหตุผลที่มันได้รับเลือกเป็นเทอร์มิงบใน C - อาจจะเป็นเพราะการใช้งานในภาษาอังกฤษ"เพื่อบ่งบอกถึงงบการพึ่งพาซึ่งกันและกัน"
C ถูกประดิษฐ์ขึ้นใน PDP-11 ในเวลาที่มีหน่วยความจำในจำนวน จำกัด สำหรับชุดอักขระดังนั้นผู้ประดิษฐ์ภาษาจึงต้องทำงานภายใต้ข้อ จำกัด เหล่านี้
FORTRAN ใช้ carriage return เพื่อวิเคราะห์งบ COBOL ใช้ระยะเวลา LISP ไม่ได้ใช้อะไรเลยพึ่งพาวงเล็บทุกอย่าง ALGOL เป็นภาษาแรกที่ใช้อัฒภาคเพื่อแยกข้อความ PASCAL ทำตามคำสั่งของ ALGOL โดยใช้เครื่องหมายอัฒภาคเพื่อแยกข้อความ
PL / ฉันใช้เครื่องหมายอัฒภาคเพื่อยุติคำสั่ง มีความแตกต่างและเห็นได้ง่ายใน PASCAL Ada ติดตาม PL / I ในรายการนี้แทนที่จะเป็น ALGOL
เครื่องหมายอัฒภาคเป็นตัวคั่นคำสั่งหรือตัวยุติได้รับการยอมรับอย่างรวดเร็วจากชุมชนวิทยาศาสตร์คอมพิวเตอร์ในฐานะที่เป็นประโยชน์และเท่าที่ฉันรู้ทุกภาษาที่มีโครงสร้างบล็อกตามมาจะเป็นไปตามคำสั่งของ ALGOL และใช้เซมิโคลอนเพื่อแยกหรือยุติคำ
ฉันได้รับการบอกเมื่อหลายปีก่อนว่า BCPL ใช้ทั้งอัฒภาคและการรับคืนเป็นตัวคั่นคำสั่ง / ตัวสิ้นสุด แต่ฉันไม่เคยใช้ภาษาของตัวเองและไม่สามารถตรวจสอบสิ่งนี้ได้ ในบางจุดการใช้งาน carriage return เพื่อแยกหรือยกเลิก statement ถูกทิ้งจากการสืบทอด BCPL BCPL begat B, B begat C, C begat C ++, Java, D และโฮสต์ทั้งหมดของสิ่งต่าง ๆ มีความคิดน้อยกว่า PASCAL และ Ada
ทำไมไม่มีสัญลักษณ์อื่นใด
มีบางภาษาที่ใช้สัญลักษณ์อื่น ๆ - BASIC รุ่นเก่าใช้โคลอนแทนตัวอย่างเช่น
อย่างไรก็ตามการละเว้นข้อยกเว้นบางประการฉันคิดว่ามีเหตุผลหลักสองประการ อย่างแรกคือคุณกำลังมองหาบางสิ่งที่ชัดเจน ในตัวแยกวิเคราะห์ทั่วไปหากคุณพบข้อผิดพลาดร้ายแรงพอที่คุณไม่สามารถแยกวิเคราะห์คำสั่งปัจจุบันได้โดยปกติคุณจะพยายามแยกวิเคราะห์คำให้ตรงกันโดยเพียงข้ามไปที่ตัวยุติคำสั่งแล้วเริ่มตัวแยกคำใหม่จาก จุดเริ่มต้นของคำสั่งต่อไป สำหรับสิ่งที่คุณต้องการสิ่งที่ปกติจะไม่เกิดขึ้นที่อื่นในรหัสและเครื่องหมายอัฒภาคเกิดขึ้นเป็นสัญลักษณ์ที่มีความหมายอื่น ๆ ที่แนบมาดังนั้นมันค่อนข้างง่ายที่จะอุทิศให้กับจุดประสงค์นี้
เหตุผลที่สองค่อนข้างคล้ายกัน แต่มุ่งไปที่คนที่อ่าน / ใช้รหัสมากขึ้น อีกครั้งมันกลับมาถึงความจริงที่ว่าสัญลักษณ์ที่คุณใช้ไม่ได้สำคัญอะไรมาก มีข้อได้เปรียบอย่างมากในการอ่านได้จากการใช้สัญลักษณ์ที่ผู้อ่านคุ้นเคยกับการมองเห็นเพื่อวัตถุประสงค์เฉพาะเมื่อใดและเป็นไปได้ นั่นไม่ได้หมายความว่า C เป็นไวยากรณ์ที่สมบูรณ์แบบและทุกอย่างอื่นควรทำตามอย่างซบเซา แต่ก็หมายความว่าคนจำนวนมากพอคุ้นเคยกับรูปแบบของไวยากรณ์นั้นซึ่งภาษาที่คล้ายกันจะมีกำไรมาก (และสูญเสียน้อยมาก) โดยทำตาม ไวยากรณ์เดียวกันโดยประมาณที่สามารถทำได้
ฉันทราบว่านี่เหมือนกับการออกแบบโปรแกรมอื่นเกือบทั้งหมด ถ้าฉันเขียนโปรแกรมที่ใช้ windows บางชนิดฉันจะลองใช้คุณสมบัติดั้งเดิมของแพลตฟอร์มเป้าหมาย การตัดสินใจหลายอย่างที่รวมอยู่ในนั้นจะเป็นไปตามอำเภอใจส่วนใหญ่และสามารถทำได้แตกต่างกันโดยไม่สูญเสียฟังก์ชันการทำงานที่สำคัญ - แต่อย่างเท่าเทียมกันการเปลี่ยนแปลงโดยไม่ได้รับประโยชน์อย่างมากจากการใช้งานเพียงแค่สร้างความสับสนให้ผู้ใช้ หลักการพื้นฐานเดียวกันนี้นำไปใช้กับ "สิ่งที่ควรยกเลิก (หรือแยก) งบในภาษา? เป็น "แถบเลื่อนควรมีลักษณะอย่างไร" หรือ "การควบคุมต้นไม้ควรทำงานอย่างไร" ในทุกกรณีการตัดสินใจส่วนใหญ่จะเป็นเรื่องที่ไม่แน่นอนและความสม่ำเสมอให้ประโยชน์อย่างมากในตัวของมันเอง
ฉันจะเพิ่มสิ่งเดียวกันนี้ให้เกิดขึ้นในหลาย ๆ ภาษาเช่นเดียวกับที่พวกเราส่วนใหญ่คุ้นเคยกับการเขียนโปรแกรมก่อนที่คนสองสามคนคิดเกี่ยวกับมัน ทำไมทุกคนใช้ "+" เพื่อระบุการบวกหรือ "-" เพื่อระบุการลบ เพราะรูปร่างของสัญลักษณ์นั้นไม่สำคัญมากนัก แต่ทุกคนยอมรับที่จะใช้ความหมายเดียวกันกับสัญลักษณ์แต่ละตัวมีความสำคัญมาก
เซมิโคลอนถูกเสนอครั้งแรกใน Algol 60 เป็นตัวคั่นคำสั่งไม่ใช่ตัวสิ้นสุด
ก่อนที่จะมี Algol 60 ภาษาการเขียนโปรแกรมระดับสูงเพียงภาษาเดียวคือ Fortran ซึ่งต้องการให้แต่ละคำสั่งแยกกัน ข้อความที่ประกอบไปด้วยหลายบรรทัดเช่น do-loops ถูกพิจารณาว่าเป็นเรื่องแปลกและพวกมันถูกมองว่าเป็น 'บล็อกข้อความ'
นักออกแบบของ Algol 60 ตระหนักว่าข้อความต้องการโครงสร้างแบบลำดับชั้น (ถ้าเป็นอย่างอื่น, do-loops, คำสั่ง case เป็นต้น) และพวกมันสามารถซ้อนกันได้ ดังนั้นความคิดของแต่ละประโยคที่อยู่บนบรรทัดที่แยกจากกันจึงไม่สมเหตุสมผลอีกต่อไป องค์ประกอบต่อเนื่องของข้อความในแบบฟอร์ม S1; S2; ... ; Sn ใส่ไว้ในวงเล็บเริ่มต้น - ท้ายเรียกว่าคำสั่งผสมและเข้ากับโครงสร้างลำดับชั้นของข้อความที่วาดโดย Algol 60 ดังนั้นที่นี่เครื่องหมายอัฒภาคชัดเจนว่าเป็นตัวคั่นคำสั่งไม่ใช่ตัวยุติ
ทำให้เกิดปัญหาในทางปฏิบัติ อัลกอล 60 ยังมี "คำแถลงที่ว่างเปล่า" ซึ่งเขียนแทนโดยไม่มีอะไรเลย ดังนั้นหนึ่งสามารถเขียน " เริ่มต้น S1; สิ้นสุด " ที่อัฒภาคปรากฏเป็นถ้ามันจะยุติ S1 แต่คอมไพเลอร์ Algol 60 ถือว่ามันเป็นตัวคั่นระหว่าง S1 และข้อความว่างเปล่าที่มองไม่เห็นที่ตามมา รายละเอียดปลีกย่อยเหล่านี้ค่อนข้างมากสำหรับโปรแกรมเมอร์ที่ใช้งานจริง เมื่อคุ้นเคยกับภาษาเชิงบรรทัดเช่นแอสเซมบลีและฟอร์แทรนพวกเขาคิดว่าเซมิโคลอนเป็นตัวสิ้นสุดของข้อความ เมื่อโปรแกรมถูกเขียนออกมาเซมิโคลอนจะถูกใส่ไว้ท้ายคำสั่งดังนี้:
a [i]: = 0; i: = i + 1
และเครื่องหมายอัฒภาคดูเหมือนว่าเทอร์มินัลสำหรับคำสั่งแรกจริงๆ หากโปรแกรมเมอร์ถือว่าเซมิโคลอนเป็นเทอร์มิเนเตอร์ดังนั้นข้อความเช่นนี้จะทำให้เกิดข้อผิดพลาดทางไวยากรณ์:
ถ้าฉัน> 0 แล้ว a [i]: = 0; อื่น a [i]: = 1;
เนื่องจากเครื่องหมายอัฒภาคยุติ "if" และดังนั้น "else" จะห้อยต่องแต่ง โปรแกรมเมอร์สับสนอย่างมาก
ดังนั้น PL / I ซึ่งเป็นทายาทของไอบีเอ็มกับสายที่มุ่งเน้น Fortran, ตัดสินใจที่จะทำให้อัฒภาคคำสั่งTerminatorมากกว่าคั่น โปรแกรมเมอร์มีความสุขกับตัวเลือกนั้น ภาษาการเขียนโปรแกรมส่วนใหญ่ตามหลังชุดสูท (ปาสกาลต่อต้านแนวโน้ม แต่ Ada ยอมแพ้ต่อมัน)
[เพิ่มหมายเหตุ: บทความ Wikipedia เกี่ยวกับการเปรียบเทียบภาษาโปรแกรมมีตารางที่ดีซึ่งสรุปว่าเซมิโคลอนนั้นใช้ในภาษาโปรแกรมต่างๆอย่างไร]
นี่เป็นการคาดเดาที่บริสุทธิ์มาก แต่การดูคีย์บอร์ด QWERTY มาตรฐาน จำกัด ค่า ASCII อักขระตามธรรมชาติสำหรับการยกเลิก / การแยกจะเป็น!!?,:; และผลตอบแทนการขนส่ง ของเหล่านั้น!: ควรถูกตัดสิทธิ์ทันทีเนื่องจากการรับหลาย ๆ คีย์และการยกเลิกข้อความจะเป็นสิ่งที่พบได้บ่อยมาก ช่วงเวลาจะถูกตัดสิทธิ์เนื่องจากพวกเขาสับสนกับทศนิยมอย่างง่ายดายซึ่งจะทำให้พวกเขามีความซับซ้อนเกินความจำเป็นที่จะต้องเป็นเทอร์มิเนเตอร์เนื่องจากมีพื้นที่ จำกัด ของคอมพิวเตอร์เริ่มต้น ผลตอบแทนการขนส่งจะถูกตัดสิทธิ์หลังจากบรรทัดของรหัสมีศักยภาพที่จะนานกว่าสิ่งที่สามารถแสดงในบรรทัดเดียวบนหน้าจอดังนั้นมันจะเป็นเรื่องยากมากขึ้นในการอ่านโปรแกรมเมื่อบรรทัดจะต้องเลื่อนในแนวนอน หรือต้องการอักขระเพิ่มเติมเพื่อสร้างความต่อเนื่องในบรรทัดถัดไปซึ่งเพิ่มความซับซ้อนอีกครั้ง ใบนี้และ; เป็นตัวเลือกของผู้ใช้บ่อยกว่าในการเขียนเมื่อเทียบกับ; ดังนั้นเครื่องหมายอัฒภาคจึงถูกเลือกเพราะง่ายต่อการพิมพ์ลดความสับสนเนื่องจากการเพิ่มความหมายให้กับอักขระที่มีความหมาย จำกัด และซับซ้อนน้อยลงเนื่องจากกรณีพิเศษไม่ได้มีอยู่จริงเมื่อใช้งาน
อัฒภาคถูกเลือกเพราะมันเป็นตัวละครที่ดีที่สุดตามความเกียจคร้านและความเรียบง่าย
มันเป็นทางเลือกโดยส่วนใหญ่ บางภาษามีทางเลือกอื่น COBOL ยุติงบด้วย.
ตัวละคร โดยทั่วไปแล้ว FORTRAN, BASIC และ Python จะยกเลิกคำสั่งด้วยการขึ้นบรรทัดใหม่ (พร้อมกับไวยากรณ์พิเศษสำหรับคำสั่งหลายบรรทัด) และเสียงกระเพื่อมวงเล็บงบของมันด้วยวงเล็บ
เหตุผลหลักที่;
ได้รับความนิยมอย่างมากในฐานะที่เป็นตัวคั่นคำสั่ง / เทอร์มิเนเตอร์คือภาษาที่นิยมที่สุดในปัจจุบันส่วนใหญ่ใช้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!
&
จะเป็นทางเลือกที่เหมาะสมมากขึ้นเป็นตัวคั่นคำสั่ง (ไม่ Terminator) เพราะ
do_thing_a() &
do_thing_b()
สามารถอ่านได้เป็นคำสั่งที่จะทำสิ่งที่ A a และแล้วทำสิ่งที่บี แต่ภาษาส่วนใหญ่ที่มี&
ผู้ประกอบการใช้เป็นตรรกะหรือค่าที่เหมาะสมและแทน
%
สัญญาณที่อาจทำให้เกิดความสับสนในงบเช่นinterest_rate = 2.99%
(ซึ่งจะตั้งค่าตัวแปรไป2.99
แทนคาดว่า0.0299
) แน่นอนความหมายทางคณิตศาสตร์ที่รู้จักกันดีของ%
ไม่ได้หยุด C จากการใช้มันเป็นตัวดำเนินการส่วนที่เหลือ
เพื่อให้ใบและ:
;
:
เป็นตัวเลือกที่สมเหตุสมผลและใช้เป็นตัวคั่นคำสั่งภายในบรรทัดในภาษาท้องถิ่นส่วนใหญ่ของ BASIC
แต่;
มีไวยากรณ์ภาษาอังกฤษอยู่ด้านข้าง มันสามารถใช้ในการแยกคำสั่งภายในประโยค
แทนที่จะพยายามตอบคำถามพาดหัวของคุณฉันคิดว่ามันจะดีกว่าที่จะมุ่งเน้นไปที่คำถามโดยนัยของคุณ:
ฉันต้องการทราบประวัติเบื้องหลังการตัดสินใจครั้งนี้และหวังว่าคำตอบจะนำไปสู่ข้อมูลเชิงลึกที่อาจมีอิทธิพลต่อการตัดสินใจในอนาคตในการออกแบบและการใช้ภาษาโปรแกรม
หากคุณต้องการเรียนรู้เกี่ยวกับการออกแบบภาษาการเขียนโปรแกรมและประวัติการใช้งานและทำความเข้าใจกับกระบวนการให้มากขึ้นการดำเนินการของการประชุมทางประวัติศาสตร์การเขียนโปรแกรมภาษาเป็นจุดเริ่มต้นที่ดีมาก (ฉันคิดว่าคุณจะต้องเป็นสมาชิก ACM เพื่อให้สามารถเข้าถึงการดำเนินการตามกฎหมายได้)
เหตุใดข้อความในภาษาการเขียนโปรแกรมจำนวนมากจึงถูกยกเลิกด้วยเครื่องหมายอัฒภาค มีเหตุผลที่เลือกเซมิโคลอนเป็นเทอร์มิเนเตอร์บรรทัดแทนสัญลักษณ์อื่นหรือไม่?
นำคำถามพาดหัวของคุณเป็นคำถามตัวอย่างที่คุณอาจต้องการลองตอบโดยการอ่านการดำเนินการ HOPL ฉันต้องการเสนอประเด็นต่อไปนี้: คนที่ออกแบบภาษาการเขียนโปรแกรมใหม่มักจะทำเพราะพวกเขาพิจารณาสิ่งที่พวกเขารู้ว่าเป็น แตก / ขาดอย่างใด ภาษาใหม่ของพวกเขาคือมือหนึ่งออกแบบมาเพื่อแก้ไขข้อบกพร่องนี้ ในทางกลับกันนักออกแบบภาษาจะคัดลอกองค์ประกอบการออกแบบจากภาษาอื่นที่พวกเขาคิดว่าดีหรือพวกเขาเพียงแค่ไม่เปลี่ยนองค์ประกอบเหล่านั้นที่พวกเขาไม่ประสบปัญหา
โดยเฉพาะอย่างยิ่งในส่วนสุดท้ายนั้นมีความสำคัญ: แทนที่จะพยายามค้นหาว่าภาษาการเขียนโปรแกรมใดเคยเป็นเซมิโคลอนแรกที่ใช้เซมิคอนเตอร์เตอร์และทำไมภาษาอื่น ๆ ที่คัดลอกมาคุณจึงอาจเรียนรู้เพิ่มเติมโดยดูจากภาษาที่ไม่ได้คัดลอก มัน. ตัวอย่างเช่นในขณะที่ Smalltalk ใช้แรงบันดาลใจมากมายจาก Simula มันก็ไม่ได้คัดลอกไวยากรณ์และโดยเฉพาะการใช้เครื่องหมายอัฒภาคเป็นตัวยกเลิกคำสั่ง มันเปลี่ยนเทอร์มิเนเตอร์ (ตัวคั่นจริงๆ) เป็นจุดหยุดเต็มและใช้เครื่องหมายอัฒภาคสำหรับอย่างอื่น ในทางกลับกันภาษาแรกที่เคยใช้เซมิโคลอนเป็นเทอร์มินอลคำสั่งอาจมีเหตุผลที่จะเปลี่ยนสิ่งนี้จากสิ่งที่ใช้ในภาษาที่มาก่อน อาจเป็นไปได้ว่ามันเป็นภาษาแรกที่นำเสนอแนวคิดทั้งหมดของ terminator ของ statement (หรือเป็นอิสระจากภาษาอื่น) และ semicolon นั้นถูกใช้ด้วยเหตุผลบางอย่างที่ทำให้สูญเสียเวลา (ฉันสงสัยว่ากรณีหลังนี้เป็นเช่นนี้เนื่องจากไม่มีผู้ตอบคนอื่น ๆ ที่สามารถขุดคำพูดจากผู้ที่แนะนำเครื่องหมายอัฒภาคแทนที่จะเสนอข้ออ้างดัดแปลงเพิ่มเติมว่าทำไมเครื่องหมายอัฒภาคจึงเป็นทางเลือกที่ดี) จุด, ฉันคิดว่าคุณจะเรียนรู้เพิ่มเติมโดยดูว่าทำไมนักออกแบบภาษาจึงเปลี่ยนสิ่งต่าง ๆ มากกว่าที่พวกเขาจะคัดลอกหรือเก็บไว้ เมื่อผู้คนเปลี่ยนแปลงสิ่งต่าง ๆ พวกเขามักจะต้องการหรือต้องอธิบายการเปลี่ยนแปลงในขณะที่พวกเขาไม่ทำเช่นนั้นเมื่อทำสำเนาหรือทำสิ่งเดียวกันเพราะ“ ทำไมเราถึงเปลี่ยนมัน? นั่นเป็นวิธีที่มันทำ!”
มันเกี่ยวกับการมองเห็น
ตัวคั่นข้อความก่อนหน้าคือ '.' เหมือนกับใน COBOL และขึ้นบรรทัดใหม่ carriage return ใน FORTRAN
CR พิสูจน์แล้วว่ามีข้อ จำกัด ในการทำให้คำสั่งไหลหลายบรรทัดเป็นเรื่องยาก
การหยุดแบบเต็มทำให้เกิดปัญหาที่น่าสนใจมากขึ้น เมื่อคุณอ่านข้อความภาษาอังกฤษสมองของคุณประมวลผลการหยุดเต็มในระดับอ่อนคุณรู้ตัวว่าประโยคได้จบลงแล้วและคุณสามารถหยุดหายใจได้ แต่คุณไม่สังเกตเห็น ที่ส่งสัญญาณ นอกจากนี้ในแบบอักษรจำนวนมาก '.' เป็นอักขระที่เล็กที่สุดที่เป็นไปได้บางครั้งแสดงผลเป็นพิกเซลเดียว ช่วงเวลาที่ขาดหายไปหรือช่วงพิเศษกลายเป็นสาเหตุของข้อผิดพลาดที่พบบ่อยที่สุดในโปรแกรมภาษาโคบอล
ดังนั้นการเรียนรู้จากความผิดพลาดในขั้นต้น ALGOL จึงเลือกเทอร์มิเนเตอร์เฉพาะซึ่งจะอนุญาตให้มีคำสั่งไหลข้ามหลายบรรทัดและเลือกอันที่มองเห็นได้ง่ายและสังเกตได้ง่ายจากผู้อ่านของมนุษย์ เซมิโคลอนมีทั้งใหญ่และผิดปกติพอในภาษาอังกฤษทั่วไปที่จะไม่ประมวลผลโดยไม่รู้ตัว
มันเป็นความเข้าใจของฉันว่ามันได้รับเลือกเพราะมีความจำเป็นที่จะต้องมี statement-terminator อย่างชัดเจนนอกเหนือจาก carriage-return / new-line ย้อนกลับไปในยุค 80 หน้าจอคอลัมน์จริง ๆ แล้วมีบรรทัดเดียวของการตัดโค้ดข้ามหลายบรรทัดเป็นเรื่องธรรมดาพอที่การใช้ \ r หรือ \ n สำหรับการยกเลิกคำสั่งจะไม่ทำงาน
อัฒภาคมีความสะดวกเพียงเพราะพวกเขาไม่ได้ใช้ในงบตรรกะ / คณิตศาสตร์ เช่นนี้พวกเขาจะไม่ขัดแย้งกับเนื้อหาจริงของงบในระดับที่มีนัยสำคัญใด ๆ
โดยส่วนตัวแล้วฉันคิดว่าการใช้เครื่องหมายอัฒภาคอย่างต่อเนื่องพร้อมกับความต้องการด้านสไตล์เพื่อรักษาบรรทัดที่มีความยาวไม่เกิน 80 ตัวอักษรนั้นโง่และตรงไปตรงมา ภาษาอย่างหลามได้แสดงให้เห็นอย่างกว้างขวางว่าคุณสามารถเขียนเข้าใจได้ง่ายกระชับรหัสได้ง่ายขึ้นโดยไม่ต้องใช้ นอกจากนี้หากคุณมีปัญหากับเส้นที่ยาวกว่า 80 ตัวอักษรคุณต้องมีจอภาพที่ใหญ่กว่า
ต่อไปนี้เป็นคำถามสองข้อ: ทำไม ALGOL ถึงมีเซมิโคลอนและทำไมภาษาอื่น ๆ จึงตามมา
คำถามแรกมีคำตอบอยู่แล้วในหลาย ๆ ที่นี่
ในฐานะที่เป็นคนที่สอง ALGOL ถูกใช้อย่างกว้างขวางมากในฐานะภาษาเทียมสำหรับการเขียนอัลกอริทึม ดังนั้นเครื่องหมายอัฒภาคจึงกลายเป็นเรื่องธรรมดาสำหรับผู้ใช้ภาษาที่แตกต่างกัน และโดยธรรมชาติแล้วพวกเขาถูกยึดไปในภาษาที่อายุน้อยกว่า
ฉันอาจจะผิด แต่ฉันคิดว่าสิ่งนี้เกี่ยวข้องกับความจริงที่ว่าในเซสชั่นหลายแห่งมีการใช้เครื่องหมายอัฒภาคเพื่อเริ่มการแสดงความคิดเห็นซึ่งมักจะทำตามคำแนะนำ ทุกอย่างหลังจากที่;
มีความคิดเห็นและไม่เป็นส่วนหนึ่งของการเรียนการสอนตัวเองอีกต่อไป
จากนั้นมีความจำเป็นต้องยกเลิกคำแนะนำเมื่อคุณพิมพ์คำเหล่านั้นในล่าม คำแนะนำสั้น ๆ (เช่นการแสดงออกทางคณิตศาสตร์) สามารถยกเลิกได้โดยเพียงกดปุ่ม Enter บอกผู้แปลว่าการแสดงออกพร้อมที่จะคำนวณและทำให้เกิดผลลัพธ์ แต่บางครั้งเราต้องการใส่รหัสหลายบรรทัดสำหรับการเรียนการสอนดังนั้นวิธีหนึ่งที่จะบรรลุผลนั้นคือการใช้อักขระพิเศษบางอย่างเป็นตัวสิ้นสุดของคำสั่งแทนที่จะขึ้นอยู่กับเพียงแค่กดปุ่ม Enter ด้วยวิธีนี้ผู้ใช้สามารถป้อนรหัสเพิ่มเติมได้ในคราวเดียวเนื่องจาก Enter ยังไม่ส่งไปที่ล่าม เมื่อล่ามพบอักขระสิ้นสุดในบรรทัดที่ป้อนด้วย Enter ในที่สุดมันก็จะดำเนินการและคำนวณผลลัพธ์ของมัน
ตอนนี้รวมสองสิ่งนี้เข้าด้วยกันและเครื่องหมายอัฒภาคดูเหมือนจะเป็นตัวเลือกที่ชัดเจนสำหรับอักขระที่สิ้นสุด: มันบอกว่าส่วนคำสั่งสิ้นสุดลงที่ใดและส่วนความคิดเห็นเริ่มต้นขึ้นดังนั้นเมื่อล่ามพบเป็นเส้น ทุกบรรทัดของนิพจน์ที่บัฟเฟอร์จนแล้วและดำเนินการได้เนื่องจากคำสั่งเพิ่งจบตอนนี้เรากำลังอยู่ในคอมเม้นต์ (อย่างน้อยที่สุดก็จนถึงตอนท้ายของบรรทัดนี้เพราะบรรทัดถัดไปจะเริ่มในโค้ด โหมดอีกครั้งเริ่มต้นการแสดงออก / การเรียนการสอนใหม่)
แน่นอนว่านี่เป็นเซมิโคลอนที่ถูกนำมาใช้เพื่อแสดงความคิดเห็นโดยผู้ที่คิดแนวคิดนี้ในการนำมาใช้ซ้ำเป็นเทอร์มินัลการสอน หากเป็นตัวละครอื่นเราอาจจะต้องจบลงด้วยคำสั่งยกเลิกคำสั่งอื่น
Inb4: ไม่นี่ไม่ใช่บัญชีที่ผ่านมา ฉันไม่มีหลักฐานว่านี่คืออัฒภาคที่เกิดขึ้นจริง มันเป็นเพียงวิธีที่ฉันคิดว่ามันอาจจะเกิดขึ้น
ภาษาส่วนใหญ่ใช้เซมิโคลอนเพราะมันมีการใช้กันอย่างแพร่หลายเพื่อจุดประสงค์นั้นและการเปลี่ยนแปลงนั้นไม่สมเหตุสมผล
และเมื่อพิจารณาภาษาแรกเพื่อเลือกตัวเลือกนั้นคุณจะต้องพิจารณาว่าอะไรคือทางเลือก เมื่อออกแบบภาษาคุณต้องการให้ตัวละครที่ต้องการพร้อมใช้งานและชุดอักขระในเวลานี้ถูกเขียนลงบน 6 บิตซึ่งมักจะมีรูปแบบบางอย่างที่สงวนไว้ซึ่งมักจะมีตัวอักษรบางตัวที่ไม่ได้กำหนดไว้อย่างแน่นหนา สายพันธุ์ของชาติ ISO-646 - ตัวแปรสหรัฐจะรู้จักกันดีภายใต้ชื่อ ASCII - ซึ่งนำโค้ดสำหรับตัวละคร "คนธรรมดา" เช่น[
, #
หรือ$
และเห็นผลในบริบทที่มีเพียงครึ่งหนึ่งเป็นจำนวนมากตำแหน่งรหัส พร้อมใช้งานและตัวอักษรและตัวเลขที่สำรองไว้มากกว่าครึ่งหนึ่ง)
นอกจากนั้นก็อาจจะไม่มีตัวละครอื่น ๆ ที่สามารถนำมาใช้เป็นตัวคั่นคำสั่งเป็นอย่างสังหรณ์ใจ ( .
อาจมีอยู่แล้วเพียง แต่คู่แข่งที่ร้ายแรงสำหรับเกณฑ์นั้น) และโดยไม่ต้องแนะนำ lexing หรือแยกความยากลำบากในช่วงเวลาที่แยกและการ lexing ทฤษฎียังคงอยู่ในรายละเอียด ( .
อยู่ในขณะนี้ หมดคำถามเนื่องจากมีการใช้งานในจำนวนจริง)
อีกเหตุผลที่ทำไมใช้เครื่องหมายอัฒภาคก็เพราะเป็นหนึ่งในตัวละครที่เราไม่ต้องการหรือใช้บ่อย
สมมติว่าเราใช้บ่อยขึ้นเป็นชื่อตัวแปรหรือบางสิ่งและหากใช้เครื่องหมายอัฒภาคเป็นคำหลักหรือเป็นผู้ดำเนินการก็จะเป็นความขัดแย้งของสัญลักษณ์สำหรับคอมไพเลอร์ดังนั้นจึงเป็นสิ่งสำคัญที่จะใช้สัญลักษณ์ที่ไม่ใช่ มักใช้ในการเข้ารหัส
ฉันเชื่อว่าภาษาการเขียนโปรแกรมแบบ C ทำให้เป็นที่นิยมและผู้เขียนภาษาการเขียนโปรแกรมใหม่ไม่ต้องการสร้างล้อเลื่อนและพวกเขายังคงใช้มันต่อไปจนถึงตอนนี้