เหตุใดข้อความในภาษาการเขียนโปรแกรมจำนวนมากจึงถูกยกเลิกด้วยเครื่องหมายอัฒภาค


130

มีเหตุผลที่เลือกเซมิโคลอนเป็นเทอร์มิเนเตอร์บรรทัดแทนสัญลักษณ์อื่นหรือไม่?

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


6
Erlang และ Prolog ใช้ fullstops
Dave Clarke

13
ฉันสงสัยว่าคุณรู้ภาษาการเขียนโปรแกรมกี่ภาษา มีภาษามากมายที่ไม่ได้ใช้เครื่องหมายอัฒภาค
knivil

50
ฉันจะเดิมพันคำตอบจะกลายเป็นเหมือน "ค่า ASCII ของเครื่องหมายอัฒภาคนั้นคงทนโดยเฉพาะอย่างยิ่งเมื่อใช้เป็นอักขระตัวสุดท้ายในการ์ดเจาะ 80 ตัวอักษร"
Ryan Thompson

22
คำถามของคุณไม่ไกลพอ คำถามที่แท้จริงคือ“ ทำไมต้องมีสัญลักษณ์ใด ๆ เลย”
Konrad Rudolph

5
เพราะมันอยู่ในแถวบ้านของแป้นพิมพ์ qwerty?
Wim

คำตอบ:


132

ในภาษาอังกฤษเครื่องหมายอัฒภาคจะใช้เพื่อแยกรายการในรายการคำสั่งตัวอย่างเช่น

เธอเห็นชายสามคน: เจมี่ซึ่งมาจากนิวซีแลนด์ จอห์นลูกชายของชายนม; และจอร์จเป็นคนประเภทผอมแห้ง

เมื่อการเขียนโปรแกรมคุณกำลังแยกจำนวนคำสั่งและการใช้การหยุดเต็มอาจสับสนได้ง่ายสำหรับจุดทศนิยม การใช้เครื่องหมายอัฒภาคให้วิธีแยกวิเคราะห์ข้อความโปรแกรมแต่ละรายการได้ง่ายในขณะที่ยังคงใกล้เคียงกับเครื่องหมายวรรคตอนภาษาอังกฤษปกติ

แก้ไขเพื่อเพิ่ม
ในช่วงแรก ๆ เมื่อหน่วยความจำมีราคาแพงการประมวลผลช้าและภาษาการเขียนโปรแกรมแรกถูกคิดค้นขึ้นมีความจำเป็นต้องแยกโปรแกรมออกเป็นคำสั่งแยกต่างหากสำหรับการประมวลผล บางภาษาต้องการให้แต่ละคำสั่งวางอยู่บนบรรทัดเพื่อให้การขึ้นบรรทัดใหม่สามารถทำหน้าที่เป็นตัวคั่นคำสั่ง ภาษาอื่น ๆ อนุญาตให้ใช้รูปแบบข้อความเพิ่มเติมได้ฟรีและจำเป็นต้องใช้อักขระตัวคั่นเฉพาะ ตัวละครนี้ถูกเลือกให้เป็นเซมิโคลอนส่วนใหญ่เป็นเพราะความคล้ายคลึงกับการใช้งานในภาษาอังกฤษ(สิ่งนี้จะเป็นการคาดคะเนฉันไม่ได้อยู่ที่นั่นในเวลานั้น)และเนื่องจากมันไม่ได้ขัดแย้งกับเครื่องหมายวรรคตอนอื่น ๆ เครื่องหมายและสัญลักษณ์ที่จำเป็นสำหรับวัตถุประสงค์ทางคณิตศาสตร์หรือวากยสัมพันธ์อื่น ๆ

แก้ไขอีกครั้ง
ความต้องการตัวอักขระยกเลิกบางตัวกลับไปเป็นข้อกำหนดในการแยกวิเคราะห์ข้อความภาษา คอมไพเลอร์ต้นถูกเขียนในภาษาแอสเซมบลีหรือในบางกรณีโดยตรงในคำแนะนำเครื่องไบนารีที่สร้างขึ้นด้วยมือ การมีอักขระพิเศษที่ระบุจุดสิ้นสุดของคำสั่งและคั่นส่วนข้อความที่กำลังประมวลผลทำให้การประมวลผลนั้นง่ายขึ้นมาก ดังที่ฉันได้กล่าวไว้ข้างต้นภาษาอื่น ๆ ได้ใช้การคืนหรือการขึ้นบรรทัดใหม่ อัลกอล, ปาสคาล, อาดา, BCPL, B, C, PL / M, และตระกูลภาษาอื่น ๆ เกิดขึ้นในการใช้เครื่องหมายอัฒภาค ในฐานะที่เป็นที่แรกที่ใช้ตัวละครนี้โดยเฉพาะฉันไม่ย้อนกลับไปในประวัติศาสตร์ที่จะจำได้มากพอ ทางเลือกและการยอมรับมันทำให้รู้สึกสมบูรณ์แบบ

  • การใช้งานสะท้อนการใช้งานในเครื่องหมายวรรคตอนภาษาอังกฤษปกติ
  • อักขระอื่น ๆ (เช่นการหยุดเต็มรูปแบบ) อาจสร้างความสับสนเนื่องจากมีการใช้งานทั่วไปอยู่แล้ว (การหยุดแบบเต็มนั้นยังใช้เป็นจุดทศนิยม)
  • อักขระเครื่องหมายวรรคตอนที่มองเห็นได้ทำให้สามารถจัดวางโค้ดรูปแบบได้ฟรี
  • การใช้อักขระตัวคั่นที่คล้ายกันในภาษาที่เป็นอนุพันธ์หรือภาษาที่ใหม่กว่านั้นสร้างขึ้นจากความคุ้นเคยที่ได้รับจากโปรแกรมเมอร์ทั้งหมดที่ใช้ภาษาก่อนหน้านี้

เป็นคำพูดสุดท้ายฉันคิดว่ามีการใช้เวลากับคำตอบและความคิดเห็นเหล่านี้มากกว่าที่ใช้ในการตัดสินใจใช้เครื่องหมายอัฒภาคเพื่อจบประโยคเมื่อออกแบบภาษาแรกที่ใช้ด้วยวิธีนี้


19
ไม่ถูกต้องทั้งหมด เครื่องหมายโคลอนกึ่งคั่นประโยคออกเป็นบล็อก: แต่ละบล็อกควรเป็นประโยคที่ใช้งานได้ แต่เราใช้เซมิโคลอนเพื่อแสดงว่ามีการเชื่อมโยงที่แน่นหนาระหว่างสองประโยค มันเป็นครึ่งทางระหว่างเครื่องหมายจุลภาคและจุดหยุดพักเต็มดังนั้นมันจึงเป็นจุดหยุด แต่มันเชื่อมโยงประโยคหนึ่งกับอีกประโยคหนึ่ง ประโยคข้างต้นจะเป็น: "เธอเห็นชายสามคนเจมี่: ที่มาจากนิวซีแลนด์จอห์น: ลูกชายของชายผู้ส่งนมและจอร์จ: ชายผอมแห้ง" การใช้เซมิโคลอนอาจถูกแทนที่ด้วยเครื่องหมายจุลภาค บิตปิดหัวข้อ แต่ส่วนสำคัญคือเหมือนกัน; มันเลิกงบ
alex.p

40
@ alex.p จริงๆแล้วการใช้เครื่องหมายอัฒภาคที่ยอมรับได้นั้นอยู่ในตำแหน่งของเครื่องหมายจุลภาคเมื่อมันจะทำให้ประโยคสับสนซึ่งทำให้สิ่งนี้ถูกต้อง
Ryathal

13
ข้อมูลสำคัญเกี่ยวกับเครื่องหมายอัฒภาค: theoatmeal.com/comics/semicolon
Ed James

7
@ alex.p: ดูเหมือนว่าคุณกำลังบอกว่าการใช้งานของเอียนผิดแต่คุณอาจพูดง่ายๆว่าคำอธิบายของเขาเกี่ยวกับการใช้เซมิโคลอนไม่สมบูรณ์ หากคุณกำลังบอกว่าเขาผิดคุณก็ตายผิด การใช้เซมิโคลอนของเขานั้นเป็นไปตามแบบแผนทั้งหมดและฉันคิดว่ามันธรรมดากว่าตัวอย่างที่คุณให้ หากคุณเพียงแค่บอกว่าเขาไม่ได้ให้คำอธิบายที่ละเอียดถี่ถ้วนแล้วฉันไม่แน่ใจว่าทำไมถึงคุ้มค่าที่จะพูดถึง
iconoclast

17
@Ian "นี้จะต้องมีการคาดคะเนที่ผมไม่ได้มีช่วงเวลาที่" คุณพลาดโอกาสที่ดีที่จะ (ถูกต้อง) ใช้อัฒภาคมี :)
เทรวิสคริสเตียน

70

หลายภาษาใช้ไวยากรณ์ที่สร้างขึ้นหลังจาก C (ซึ่งเป็นรูปแบบหลังจากB - ขอบคุณ @Crollster) ที่สามารถเห็นได้ในความคิดเห็นมีห่วงโซ่ยาวของภาษาดังกล่าว ... B เป็นแรงบันดาลใจจาก PL / I ซึ่งก่อนหน้านี้โดย ALGOL ที่ใช้;เป็นตัวคั่น

เนื่องจากใน C คำสั่งยกเลิกคือ;ภาษาเหล่านี้จึงตามหลังชุดสูท

สำหรับเหตุผลที่มันได้รับเลือกเป็นเทอร์มิงบใน C - อาจจะเป็นเพราะการใช้งานในภาษาอังกฤษ"เพื่อบ่งบอกถึงงบการพึ่งพาซึ่งกันและกัน"

C ถูกประดิษฐ์ขึ้นใน PDP-11 ในเวลาที่มีหน่วยความจำในจำนวน จำกัด สำหรับชุดอักขระดังนั้นผู้ประดิษฐ์ภาษาจึงต้องทำงานภายใต้ข้อ จำกัด เหล่านี้


8
C เพิ่งทำตามแบบแผนของการใช้เครื่องหมายอัฒภาคที่ใช้โดยบรรพบุรุษ 'B'
Crollster

8
B เพิ่งทำตามแบบแผนของการใช้เครื่องหมายอัฒภาคตามที่ใช้โดยบรรพบุรุษ 'PL / I' :)
# # # Skomski

15
@Skomski - ไหนติดตามอะไร ฉันกำลังรอเต่าตัวสุดท้ายที่จะเข้ามา;)
Oded

26
-1; พวกเราทุกคนลืมอัลกอลที่ทรงอิทธิพลแล้วหรือยัง? มันมีเครื่องหมายอัฒภาคเป็นตัวคั่นข้อความก่อนทุกอย่างที่คุณพูดถึง (ฉันไม่รู้ว่ามันเอาความคิดมาจากที่อื่น)
hugomg

13
@Oded - ฉันคิดว่าคุณจะพบว่ามันเป็นเต่าตลอดทางลง * 8 ')
ทำเครื่องหมายบูธ

54

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


2
ควรสังเกตว่าการใช้เครื่องหมายอัฒภาคหรือขึ้นบรรทัดใหม่จะปรากฏขึ้นเร็ว ๆ นี้ Javascript, Lua, Go และ Haskell ล้วนมีอัฒภาคโดยปริยายที่บรรทัดใหม่หากมีความถูกต้องทางไวยากรณ์ที่นั่น และแน่นอนบางภาษาที่ยังคงบรรทัดใหม่เป็นตัวคั่น เชลล์กับงูหลามจำได้ที่นี่
Jan Hudec

2
+1 สำหรับ "มากน้อยดีคิดออกกว่า PASCAL และ Ada"
Aditya

2
Algol 58สารตั้งต้นของ Algol 60 ใช้เครื่องหมายอัฒภาค โปรดสังเกตว่าในเวลานั้นความแตกต่างมักเกิดขึ้นระหว่างรูปแบบการตีพิมพ์ของภาษาและรูปแบบการป้อนข้อมูลจริงเนื่องจากอุปกรณ์ป้อนข้อมูลมีข้อ จำกัด : ตัวพิมพ์ใหญ่เท่านั้น จำนวนภาษาอื่น ๆ
Dan Halbert

5
@kevincline: คุณคิดว่าโบอิ้ง 777 เป็นประโยชน์หรือไม่? ซอฟต์แวร์ avionics ทุกเส้นที่บินผ่านเครื่องบินนั้นเขียนไว้ใน Ada
John R. Strohm

2
@kevincline Skype: เขียนใน Delphi (Pascal.) Microsoft พยายามที่จะเปลี่ยนแปลงสิ่งนี้หลังจากที่พวกเขาได้รับมา แต่พวกเขาไม่สามารถทำการพอร์ตได้สำเร็จดังนั้นตอนนี้พวกเขากำลังซื้อใบอนุญาต Delphi เคยดูทีวีในสหรัฐอเมริกาหรือไม่ สถานีอาจทำงานบนซอฟต์แวร์โดย WideOrbit เขียนใน Delphi; พวกเขาเป็นผู้นำตลาดด้วยอัตรากำไรขั้นต้นที่มาก เคยไปสวนสนุกหรือไม่? มีโอกาสดีที่ระบบจองตั๋วเขียนใน Delphi ปาสกาลอยู่ทั่วทุกแห่ง มันเป็นเพียงการมอบข้อได้เปรียบในการแข่งขันที่แข็งแกร่งซึ่งผู้คนจำนวนมากพยายามที่จะเงียบเกี่ยวกับเรื่องนี้เพื่อให้คู่แข่งของพวกเขาไม่พบ
Mason Wheeler

14

ทำไมไม่มีสัญลักษณ์อื่นใด

มีบางภาษาที่ใช้สัญลักษณ์อื่น ๆ - BASIC รุ่นเก่าใช้โคลอนแทนตัวอย่างเช่น

อย่างไรก็ตามการละเว้นข้อยกเว้นบางประการฉันคิดว่ามีเหตุผลหลักสองประการ อย่างแรกคือคุณกำลังมองหาบางสิ่งที่ชัดเจน ในตัวแยกวิเคราะห์ทั่วไปหากคุณพบข้อผิดพลาดร้ายแรงพอที่คุณไม่สามารถแยกวิเคราะห์คำสั่งปัจจุบันได้โดยปกติคุณจะพยายามแยกวิเคราะห์คำให้ตรงกันโดยเพียงข้ามไปที่ตัวยุติคำสั่งแล้วเริ่มตัวแยกคำใหม่จาก จุดเริ่มต้นของคำสั่งต่อไป สำหรับสิ่งที่คุณต้องการสิ่งที่ปกติจะไม่เกิดขึ้นที่อื่นในรหัสและเครื่องหมายอัฒภาคเกิดขึ้นเป็นสัญลักษณ์ที่มีความหมายอื่น ๆ ที่แนบมาดังนั้นมันค่อนข้างง่ายที่จะอุทิศให้กับจุดประสงค์นี้

เหตุผลที่สองค่อนข้างคล้ายกัน แต่มุ่งไปที่คนที่อ่าน / ใช้รหัสมากขึ้น อีกครั้งมันกลับมาถึงความจริงที่ว่าสัญลักษณ์ที่คุณใช้ไม่ได้สำคัญอะไรมาก มีข้อได้เปรียบอย่างมากในการอ่านได้จากการใช้สัญลักษณ์ที่ผู้อ่านคุ้นเคยกับการมองเห็นเพื่อวัตถุประสงค์เฉพาะเมื่อใดและเป็นไปได้ นั่นไม่ได้หมายความว่า C เป็นไวยากรณ์ที่สมบูรณ์แบบและทุกอย่างอื่นควรทำตามอย่างซบเซา แต่ก็หมายความว่าคนจำนวนมากพอคุ้นเคยกับรูปแบบของไวยากรณ์นั้นซึ่งภาษาที่คล้ายกันจะมีกำไรมาก (และสูญเสียน้อยมาก) โดยทำตาม ไวยากรณ์เดียวกันโดยประมาณที่สามารถทำได้

ฉันทราบว่านี่เหมือนกับการออกแบบโปรแกรมอื่นเกือบทั้งหมด ถ้าฉันเขียนโปรแกรมที่ใช้ windows บางชนิดฉันจะลองใช้คุณสมบัติดั้งเดิมของแพลตฟอร์มเป้าหมาย การตัดสินใจหลายอย่างที่รวมอยู่ในนั้นจะเป็นไปตามอำเภอใจส่วนใหญ่และสามารถทำได้แตกต่างกันโดยไม่สูญเสียฟังก์ชันการทำงานที่สำคัญ - แต่อย่างเท่าเทียมกันการเปลี่ยนแปลงโดยไม่ได้รับประโยชน์อย่างมากจากการใช้งานเพียงแค่สร้างความสับสนให้ผู้ใช้ หลักการพื้นฐานเดียวกันนี้นำไปใช้กับ "สิ่งที่ควรยกเลิก (หรือแยก) งบในภาษา? เป็น "แถบเลื่อนควรมีลักษณะอย่างไร" หรือ "การควบคุมต้นไม้ควรทำงานอย่างไร" ในทุกกรณีการตัดสินใจส่วนใหญ่จะเป็นเรื่องที่ไม่แน่นอนและความสม่ำเสมอให้ประโยชน์อย่างมากในตัวของมันเอง

ฉันจะเพิ่มสิ่งเดียวกันนี้ให้เกิดขึ้นในหลาย ๆ ภาษาเช่นเดียวกับที่พวกเราส่วนใหญ่คุ้นเคยกับการเขียนโปรแกรมก่อนที่คนสองสามคนคิดเกี่ยวกับมัน ทำไมทุกคนใช้ "+" เพื่อระบุการบวกหรือ "-" เพื่อระบุการลบ เพราะรูปร่างของสัญลักษณ์นั้นไม่สำคัญมากนัก แต่ทุกคนยอมรับที่จะใช้ความหมายเดียวกันกับสัญลักษณ์แต่ละตัวมีความสำคัญมาก


คะแนนที่ดีมาก (+1) ถึงแม้ว่าฉันจะไม่เห็นด้วยกับส่วน "ส่วนใหญ่โดยพล" ฉันคิดว่ามีบางสิ่งบางอย่างที่ง่ายกว่าและอื่น ๆ ที่ใช้งานง่ายกว่า ใน Windows ใช้ X เพื่อปิดหน้าต่างมีสัญลักษณ์บางอย่าง (อาจเชื่อมต่อเพียงราง) ที่มีอยู่ก่อนที่มันจะดึงเข้ามา และบางอย่างในการใช้สีของ OS X มีสัญลักษณ์ที่แข็งแกร่งที่ดึงดูด (ฉันไม่สนใจในขณะที่ M $ Windows อาจขโมย X จาก X Windows เนื่องจากฉันจำไม่ได้ว่าใช้อะไรไป)
iconoclast

3
@ Brandon: แน่นอนว่าฉันไม่ได้ตั้งใจที่จะบอกว่าทุกส่วนของการออกแบบ GUI นั้นเป็นไปตามอำเภอใจ - บางทีฉันควรจะพูดว่า "บางคน" แทนที่จะเป็น "ที่สุด" มันจะไม่เป็น X ที่กำหนดรูปร่างใด ๆ สำหรับไอคอน "ปิดหน้าต่าง" ซึ่งจะขึ้นอยู่กับตัวจัดการหน้าต่างแต่ละตัว
Jerry Coffin

เพื่อความทรงจำที่ดีที่สุดของฉันต้นฉบับดาร์ทเมาท์เบสิคเดิมใช้การคืนรถเพื่อยกเลิกคำแถลงเท่านั้น (กล่าวคือหนึ่งคำสั่งต่อบรรทัด) ฉันคิดหลายคำสั่งในบรรทัดคั่นด้วยเครื่องหมายทวิภาคเป็นส่วนขยายของ Microsoft
John R. Strohm

7

เซมิโคลอนถูกเสนอครั้งแรกใน 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 เกี่ยวกับการเปรียบเทียบภาษาโปรแกรมมีตารางที่ดีซึ่งสรุปว่าเซมิโคลอนนั้นใช้ในภาษาโปรแกรมต่างๆอย่างไร]


6

นี่เป็นการคาดเดาที่บริสุทธิ์มาก แต่การดูคีย์บอร์ด QWERTY มาตรฐาน จำกัด ค่า ASCII อักขระตามธรรมชาติสำหรับการยกเลิก / การแยกจะเป็น!!?,:; และผลตอบแทนการขนส่ง ของเหล่านั้น!: ควรถูกตัดสิทธิ์ทันทีเนื่องจากการรับหลาย ๆ คีย์และการยกเลิกข้อความจะเป็นสิ่งที่พบได้บ่อยมาก ช่วงเวลาจะถูกตัดสิทธิ์เนื่องจากพวกเขาสับสนกับทศนิยมอย่างง่ายดายซึ่งจะทำให้พวกเขามีความซับซ้อนเกินความจำเป็นที่จะต้องเป็นเทอร์มิเนเตอร์เนื่องจากมีพื้นที่ จำกัด ของคอมพิวเตอร์เริ่มต้น ผลตอบแทนการขนส่งจะถูกตัดสิทธิ์หลังจากบรรทัดของรหัสมีศักยภาพที่จะนานกว่าสิ่งที่สามารถแสดงในบรรทัดเดียวบนหน้าจอดังนั้นมันจะเป็นเรื่องยากมากขึ้นในการอ่านโปรแกรมเมื่อบรรทัดจะต้องเลื่อนในแนวนอน หรือต้องการอักขระเพิ่มเติมเพื่อสร้างความต่อเนื่องในบรรทัดถัดไปซึ่งเพิ่มความซับซ้อนอีกครั้ง ใบนี้และ; เป็นตัวเลือกของผู้ใช้บ่อยกว่าในการเขียนเมื่อเทียบกับ; ดังนั้นเครื่องหมายอัฒภาคจึงถูกเลือกเพราะง่ายต่อการพิมพ์ลดความสับสนเนื่องจากการเพิ่มความหมายให้กับอักขระที่มีความหมาย จำกัด และซับซ้อนน้อยลงเนื่องจากกรณีพิเศษไม่ได้มีอยู่จริงเมื่อใช้งาน

อัฒภาคถูกเลือกเพราะมันเป็นตัวละครที่ดีที่สุดตามความเกียจคร้านและความเรียบง่าย


คุณมีจุดที่ดีที่นี่; ฉันจะแค่คำว่า "เลือก" (ซึ่งเป็นการยากที่จะพิสูจน์) กับบางสิ่งเช่น "... เครื่องหมายอัฒภาคได้รับรางวัลเพราะมันเป็นตัวละครที่ดีที่สุดจากความเกียจคร้านและความเรียบง่าย"
gnat

2
แทบจะไม่ เซมิโคลอนเป็นคำสั่งตัวคั่น / ตัวคั่นเริ่มต้นที่ ALGOL (1958) ซึ่งจัดทำ ASCII (เริ่มทำงานตั้งแต่ปี 1960 เริ่มเผยแพร่ครั้งแรกในปี 1963 ปล่อย 1963 ครั้งใหญ่ปล่อย 1967 ปรับปรุงล่าสุดปี 1986)
John R. Strohm

@ JohnR.Strohm ดีว่าเป็นข่าวกับผม แต่ทั้งหมดนี้เป็นประวัติศาสตร์โบราณสวยมากกับผม
Ryathal

6
นี่เป็นทฤษฎีที่ยอดเยี่ยม แต่ในความเป็นจริงแล้วการกดแป้นต้องใช้ปุ่ม Shift เพื่อไปยังเครื่องหมายอัฒภาคอย่างไรก็ตามจนกระทั่งแป้นพิมพ์ที่ทันสมัยปรากฏขึ้นในยุค 70 (มีภาพถ่ายที่ดีมากมายอยู่ใกล้กับด้านล่างของบทความ wiki: en.wikipedia.org/wiki/Keypunch ) เป็นไปได้มากที่สุดตามกฎภาษาอังกฤษตามธรรมชาติซึ่งเป็นแฟชั่นที่ได้รับความนิยมเป็นพิเศษในเวลาเดียวกัน (ฉันจะรวมทุกภาษาของปลาย 50: ALGOL, FORTRAN, COBOL และ SQL ยกเว้น LISP.) เซมิโคลอนของ ALGOL เป็นเพียงหนึ่งในอนุสัญญาภาษาอังกฤษจำนวนมากที่ใช้ซึ่งต่อมา BASIC ขยายเพิ่มเติมในภายหลัง
SilverbackNet

@SilverbackNet ซึ่งเป็นสาเหตุที่ "งานคาดเดาที่บริสุทธิ์" อาจไม่ควรเป็นพื้นฐานของคำตอบที่นี่
user1717828

6

มันเป็นทางเลือกโดยส่วนใหญ่ บางภาษามีทางเลือกอื่น 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

แต่;มีไวยากรณ์ภาษาอังกฤษอยู่ด้านข้าง มันสามารถใช้ในการแยกคำสั่งภายในประโยค


3

แทนที่จะพยายามตอบคำถามพาดหัวของคุณฉันคิดว่ามันจะดีกว่าที่จะมุ่งเน้นไปที่คำถามโดยนัยของคุณ:

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

หากคุณต้องการเรียนรู้เกี่ยวกับการออกแบบภาษาการเขียนโปรแกรมและประวัติการใช้งานและทำความเข้าใจกับกระบวนการให้มากขึ้นการดำเนินการของการประชุมทางประวัติศาสตร์การเขียนโปรแกรมภาษาเป็นจุดเริ่มต้นที่ดีมาก (ฉันคิดว่าคุณจะต้องเป็นสมาชิก ACM เพื่อให้สามารถเข้าถึงการดำเนินการตามกฎหมายได้)

เหตุใดข้อความในภาษาการเขียนโปรแกรมจำนวนมากจึงถูกยกเลิกด้วยเครื่องหมายอัฒภาค มีเหตุผลที่เลือกเซมิโคลอนเป็นเทอร์มิเนเตอร์บรรทัดแทนสัญลักษณ์อื่นหรือไม่?

นำคำถามพาดหัวของคุณเป็นคำถามตัวอย่างที่คุณอาจต้องการลองตอบโดยการอ่านการดำเนินการ HOPL ฉันต้องการเสนอประเด็นต่อไปนี้: คนที่ออกแบบภาษาการเขียนโปรแกรมใหม่มักจะทำเพราะพวกเขาพิจารณาสิ่งที่พวกเขารู้ว่าเป็น แตก / ขาดอย่างใด ภาษาใหม่ของพวกเขาคือมือหนึ่งออกแบบมาเพื่อแก้ไขข้อบกพร่องนี้ ในทางกลับกันนักออกแบบภาษาจะคัดลอกองค์ประกอบการออกแบบจากภาษาอื่นที่พวกเขาคิดว่าดีหรือพวกเขาเพียงแค่ไม่เปลี่ยนองค์ประกอบเหล่านั้นที่พวกเขาไม่ประสบปัญหา

โดยเฉพาะอย่างยิ่งในส่วนสุดท้ายนั้นมีความสำคัญ: แทนที่จะพยายามค้นหาว่าภาษาการเขียนโปรแกรมใดเคยเป็นเซมิโคลอนแรกที่ใช้เซมิคอนเตอร์เตอร์และทำไมภาษาอื่น ๆ ที่คัดลอกมาคุณจึงอาจเรียนรู้เพิ่มเติมโดยดูจากภาษาที่ไม่ได้คัดลอก มัน. ตัวอย่างเช่นในขณะที่ Smalltalk ใช้แรงบันดาลใจมากมายจาก Simula มันก็ไม่ได้คัดลอกไวยากรณ์และโดยเฉพาะการใช้เครื่องหมายอัฒภาคเป็นตัวยกเลิกคำสั่ง มันเปลี่ยนเทอร์มิเนเตอร์ (ตัวคั่นจริงๆ) เป็นจุดหยุดเต็มและใช้เครื่องหมายอัฒภาคสำหรับอย่างอื่น ในทางกลับกันภาษาแรกที่เคยใช้เซมิโคลอนเป็นเทอร์มินอลคำสั่งอาจมีเหตุผลที่จะเปลี่ยนสิ่งนี้จากสิ่งที่ใช้ในภาษาที่มาก่อน อาจเป็นไปได้ว่ามันเป็นภาษาแรกที่นำเสนอแนวคิดทั้งหมดของ terminator ของ statement (หรือเป็นอิสระจากภาษาอื่น) และ semicolon นั้นถูกใช้ด้วยเหตุผลบางอย่างที่ทำให้สูญเสียเวลา (ฉันสงสัยว่ากรณีหลังนี้เป็นเช่นนี้เนื่องจากไม่มีผู้ตอบคนอื่น ๆ ที่สามารถขุดคำพูดจากผู้ที่แนะนำเครื่องหมายอัฒภาคแทนที่จะเสนอข้ออ้างดัดแปลงเพิ่มเติมว่าทำไมเครื่องหมายอัฒภาคจึงเป็นทางเลือกที่ดี) จุด, ฉันคิดว่าคุณจะเรียนรู้เพิ่มเติมโดยดูว่าทำไมนักออกแบบภาษาจึงเปลี่ยนสิ่งต่าง ๆ มากกว่าที่พวกเขาจะคัดลอกหรือเก็บไว้ เมื่อผู้คนเปลี่ยนแปลงสิ่งต่าง ๆ พวกเขามักจะต้องการหรือต้องอธิบายการเปลี่ยนแปลงในขณะที่พวกเขาไม่ทำเช่นนั้นเมื่อทำสำเนาหรือทำสิ่งเดียวกันเพราะ“ ทำไมเราถึงเปลี่ยนมัน? นั่นเป็นวิธีที่มันทำ!”


2

มันเกี่ยวกับการมองเห็น

ตัวคั่นข้อความก่อนหน้าคือ '.' เหมือนกับใน COBOL และขึ้นบรรทัดใหม่ carriage return ใน FORTRAN

CR พิสูจน์แล้วว่ามีข้อ จำกัด ในการทำให้คำสั่งไหลหลายบรรทัดเป็นเรื่องยาก

การหยุดแบบเต็มทำให้เกิดปัญหาที่น่าสนใจมากขึ้น เมื่อคุณอ่านข้อความภาษาอังกฤษสมองของคุณประมวลผลการหยุดเต็มในระดับอ่อนคุณรู้ตัวว่าประโยคได้จบลงแล้วและคุณสามารถหยุดหายใจได้ แต่คุณไม่สังเกตเห็น ที่ส่งสัญญาณ นอกจากนี้ในแบบอักษรจำนวนมาก '.' เป็นอักขระที่เล็กที่สุดที่เป็นไปได้บางครั้งแสดงผลเป็นพิกเซลเดียว ช่วงเวลาที่ขาดหายไปหรือช่วงพิเศษกลายเป็นสาเหตุของข้อผิดพลาดที่พบบ่อยที่สุดในโปรแกรมภาษาโคบอล

ดังนั้นการเรียนรู้จากความผิดพลาดในขั้นต้น ALGOL จึงเลือกเทอร์มิเนเตอร์เฉพาะซึ่งจะอนุญาตให้มีคำสั่งไหลข้ามหลายบรรทัดและเลือกอันที่มองเห็นได้ง่ายและสังเกตได้ง่ายจากผู้อ่านของมนุษย์ เซมิโคลอนมีทั้งใหญ่และผิดปกติพอในภาษาอังกฤษทั่วไปที่จะไม่ประมวลผลโดยไม่รู้ตัว


1

มันเป็นความเข้าใจของฉันว่ามันได้รับเลือกเพราะมีความจำเป็นที่จะต้องมี statement-terminator อย่างชัดเจนนอกเหนือจาก carriage-return / new-line ย้อนกลับไปในยุค 80 หน้าจอคอลัมน์จริง ๆ แล้วมีบรรทัดเดียวของการตัดโค้ดข้ามหลายบรรทัดเป็นเรื่องธรรมดาพอที่การใช้ \ r หรือ \ n สำหรับการยกเลิกคำสั่งจะไม่ทำงาน

อัฒภาคมีความสะดวกเพียงเพราะพวกเขาไม่ได้ใช้ในงบตรรกะ / คณิตศาสตร์ เช่นนี้พวกเขาจะไม่ขัดแย้งกับเนื้อหาจริงของงบในระดับที่มีนัยสำคัญใด ๆ


โดยส่วนตัวแล้วฉันคิดว่าการใช้เครื่องหมายอัฒภาคอย่างต่อเนื่องพร้อมกับความต้องการด้านสไตล์เพื่อรักษาบรรทัดที่มีความยาวไม่เกิน 80 ตัวอักษรนั้นโง่และตรงไปตรงมา ภาษาอย่างหลามได้แสดงให้เห็นอย่างกว้างขวางว่าคุณสามารถเขียนเข้าใจได้ง่ายกระชับรหัสได้ง่ายขึ้นโดยไม่ต้องใช้ นอกจากนี้หากคุณมีปัญหากับเส้นที่ยาวกว่า 80 ตัวอักษรคุณต้องมีจอภาพที่ใหญ่กว่า


3
ย้อนกลับไปในยุคมืดไม่มี "หน้าจอ 80 คอลัมน์" มีบัตรเจาะ 80 คอลัมน์และมีเครื่องพิมพ์ที่มีจำนวนคอลัมน์แตกต่างกัน (เป็นเรื่องปกติประมาณ 130 หรือมากกว่านั้น) FORTRAN ยุติคำแถลงที่ท้ายบัตร แต่อนุญาตให้ใช้บัตรต่อเนื่องเพื่อทำรายการต่อ การ์ดการต่อเนื่องถูกทำเครื่องหมายด้วยอักขระที่เจาะในคอลัมน์ 6 ของการ์ด (ตัวละครใด ๆ ก็ใช้งานได้ตามปกติในท้องถิ่นคุณจะเห็นเครื่องหมาย + หรือตัวเลขหลักเดียวจำนวนหลักที่นับสำหรับการ์ดต่อเนื่องหลายรายการ)
John R. Strohm

1
ภาษาเช่น Python จะไม่สามารถใช้ได้กับคอมพิวเตอร์ที่มีอยู่ในยุคแรก ๆ ของ C การใช้คำสั่งยุติอักขระทำให้การแยกวิเคราะห์ง่ายขึ้นและเป็นสิ่งสำคัญมากที่จะต้องลดหน่วยความจำและโหลด CPU ของคอมไพเลอร์เมื่อหลายสิบปีก่อน โดยเฉพาะอย่างยิ่งในคอมพิวเตอร์เหล่านั้นที่คุณจ่ายให้กับ CPU ในเวลาที่สอง
Gigatron

@Gigatron - ฉันอ้างถึงเฉพาะการใช้งาน carriage return เพื่อจบคำสั่งไม่ใช่เพื่อให้ได้ระดับที่สูงกว่าของ python
ชื่อปลอม

1
@Gigatron คุณอาจต้องการดู LISP และโดยเฉพาะอย่างยิ่งประวัติต้นใน IBM 704 คุณอาจแปลกใจในสิ่งที่คนโบราณสามารถทำได้แม้ทำงานด้วยมีดหินและหมี
John R. Strohm

1
@Gigatron: FORTRAN ทำงานบนคอมพิวเตอร์เครื่องเดียวกันและใช้การขึ้นบรรทัดใหม่เพื่อแยกข้อความสั่ง (ด้วยไวยากรณ์พิเศษสำหรับคำสั่งหลายบรรทัด)
dan04

0

ต่อไปนี้เป็นคำถามสองข้อ: ทำไม ALGOL ถึงมีเซมิโคลอนและทำไมภาษาอื่น ๆ จึงตามมา

คำถามแรกมีคำตอบอยู่แล้วในหลาย ๆ ที่นี่

ในฐานะที่เป็นคนที่สอง ALGOL ถูกใช้อย่างกว้างขวางมากในฐานะภาษาเทียมสำหรับการเขียนอัลกอริทึม ดังนั้นเครื่องหมายอัฒภาคจึงกลายเป็นเรื่องธรรมดาสำหรับผู้ใช้ภาษาที่แตกต่างกัน และโดยธรรมชาติแล้วพวกเขาถูกยึดไปในภาษาที่อายุน้อยกว่า


0

ฉันอาจจะผิด แต่ฉันคิดว่าสิ่งนี้เกี่ยวข้องกับความจริงที่ว่าในเซสชั่นหลายแห่งมีการใช้เครื่องหมายอัฒภาคเพื่อเริ่มการแสดงความคิดเห็นซึ่งมักจะทำตามคำแนะนำ ทุกอย่างหลังจากที่;มีความคิดเห็นและไม่เป็นส่วนหนึ่งของการเรียนการสอนตัวเองอีกต่อไป

จากนั้นมีความจำเป็นต้องยกเลิกคำแนะนำเมื่อคุณพิมพ์คำเหล่านั้นในล่าม คำแนะนำสั้น ๆ (เช่นการแสดงออกทางคณิตศาสตร์) สามารถยกเลิกได้โดยเพียงกดปุ่ม Enter บอกผู้แปลว่าการแสดงออกพร้อมที่จะคำนวณและทำให้เกิดผลลัพธ์ แต่บางครั้งเราต้องการใส่รหัสหลายบรรทัดสำหรับการเรียนการสอนดังนั้นวิธีหนึ่งที่จะบรรลุผลนั้นคือการใช้อักขระพิเศษบางอย่างเป็นตัวสิ้นสุดของคำสั่งแทนที่จะขึ้นอยู่กับเพียงแค่กดปุ่ม Enter ด้วยวิธีนี้ผู้ใช้สามารถป้อนรหัสเพิ่มเติมได้ในคราวเดียวเนื่องจาก Enter ยังไม่ส่งไปที่ล่าม เมื่อล่ามพบอักขระสิ้นสุดในบรรทัดที่ป้อนด้วย Enter ในที่สุดมันก็จะดำเนินการและคำนวณผลลัพธ์ของมัน

ตอนนี้รวมสองสิ่งนี้เข้าด้วยกันและเครื่องหมายอัฒภาคดูเหมือนจะเป็นตัวเลือกที่ชัดเจนสำหรับอักขระที่สิ้นสุด: มันบอกว่าส่วนคำสั่งสิ้นสุดลงที่ใดและส่วนความคิดเห็นเริ่มต้นขึ้นดังนั้นเมื่อล่ามพบเป็นเส้น ทุกบรรทัดของนิพจน์ที่บัฟเฟอร์จนแล้วและดำเนินการได้เนื่องจากคำสั่งเพิ่งจบตอนนี้เรากำลังอยู่ในคอมเม้นต์ (อย่างน้อยที่สุดก็จนถึงตอนท้ายของบรรทัดนี้เพราะบรรทัดถัดไปจะเริ่มในโค้ด โหมดอีกครั้งเริ่มต้นการแสดงออก / การเรียนการสอนใหม่)

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

Inb4: ไม่นี่ไม่ใช่บัญชีที่ผ่านมา ฉันไม่มีหลักฐานว่านี่คืออัฒภาคที่เกิดขึ้นจริง มันเป็นเพียงวิธีที่ฉันคิดว่ามันอาจจะเกิดขึ้น


-1

ภาษาส่วนใหญ่ใช้เซมิโคลอนเพราะมันมีการใช้กันอย่างแพร่หลายเพื่อจุดประสงค์นั้นและการเปลี่ยนแปลงนั้นไม่สมเหตุสมผล

และเมื่อพิจารณาภาษาแรกเพื่อเลือกตัวเลือกนั้นคุณจะต้องพิจารณาว่าอะไรคือทางเลือก เมื่อออกแบบภาษาคุณต้องการให้ตัวละครที่ต้องการพร้อมใช้งานและชุดอักขระในเวลานี้ถูกเขียนลงบน 6 บิตซึ่งมักจะมีรูปแบบบางอย่างที่สงวนไว้ซึ่งมักจะมีตัวอักษรบางตัวที่ไม่ได้กำหนดไว้อย่างแน่นหนา สายพันธุ์ของชาติ ISO-646 - ตัวแปรสหรัฐจะรู้จักกันดีภายใต้ชื่อ ASCII - ซึ่งนำโค้ดสำหรับตัวละคร "คนธรรมดา" เช่น[, #หรือ$และเห็นผลในบริบทที่มีเพียงครึ่งหนึ่งเป็นจำนวนมากตำแหน่งรหัส พร้อมใช้งานและตัวอักษรและตัวเลขที่สำรองไว้มากกว่าครึ่งหนึ่ง)

นอกจากนั้นก็อาจจะไม่มีตัวละครอื่น ๆ ที่สามารถนำมาใช้เป็นตัวคั่นคำสั่งเป็นอย่างสังหรณ์ใจ ( .อาจมีอยู่แล้วเพียง แต่คู่แข่งที่ร้ายแรงสำหรับเกณฑ์นั้น) และโดยไม่ต้องแนะนำ lexing หรือแยกความยากลำบากในช่วงเวลาที่แยกและการ lexing ทฤษฎียังคงอยู่ในรายละเอียด ( .อยู่ในขณะนี้ หมดคำถามเนื่องจากมีการใช้งานในจำนวนจริง)


-1

อีกเหตุผลที่ทำไมใช้เครื่องหมายอัฒภาคก็เพราะเป็นหนึ่งในตัวละครที่เราไม่ต้องการหรือใช้บ่อย

สมมติว่าเราใช้บ่อยขึ้นเป็นชื่อตัวแปรหรือบางสิ่งและหากใช้เครื่องหมายอัฒภาคเป็นคำหลักหรือเป็นผู้ดำเนินการก็จะเป็นความขัดแย้งของสัญลักษณ์สำหรับคอมไพเลอร์ดังนั้นจึงเป็นสิ่งสำคัญที่จะใช้สัญลักษณ์ที่ไม่ใช่ มักใช้ในการเข้ารหัส

ฉันเชื่อว่าภาษาการเขียนโปรแกรมแบบ C ทำให้เป็นที่นิยมและผู้เขียนภาษาการเขียนโปรแกรมใหม่ไม่ต้องการสร้างล้อเลื่อนและพวกเขายังคงใช้มันต่อไปจนถึงตอนนี้

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