เหตุใด BASIC แบบเก่า (และภาษาอื่น ๆ ) จึงใช้หมายเลขบรรทัดเป็นส่วนหนึ่งของซอร์สโค้ด
ฉันหมายความว่ามันแก้ปัญหาอะไรได้บ้าง (พยายาม)
เหตุใด BASIC แบบเก่า (และภาษาอื่น ๆ ) จึงใช้หมายเลขบรรทัดเป็นส่วนหนึ่งของซอร์สโค้ด
ฉันหมายความว่ามันแก้ปัญหาอะไรได้บ้าง (พยายาม)
คำตอบ:
ภาษาเบสิกในยุคเริ่มต้นจะต้องคำนึงถึงบริบทเป็นหลัก ได้แก่ ฟอร์แทรน, โคบอลและการประกอบ
ย้อนกลับไปเมื่อตอนที่ฉันกำลังเล่นน้ำใน 6502 ชุด โดยไม่มีป้ายข้อความนั่นหมายความว่าเมื่อคุณพบว่าคุณต้องการเพิ่มคำสั่งที่กลางรหัสที่แน่น (ฉันเพิ่มNOP ในภายหลัง) คุณต้องผ่านและทำซ้ำทั้งหมด ที่อยู่ ใช้เวลานาน
Fortran เป็นระบบที่ใช้หมายเลขบรรทัดซึ่งมีพื้นฐานมาจาก BASIC ใน Fortran คอลัมน์ 1-5 เป็นหมายเลขบรรทัดที่จะใช้สำหรับเป้าหมายสำหรับการแยกสาขา สิ่งสำคัญกับ Fortran ก็คือคอมไพเลอร์มีแนวโน้มที่จะฉลาดกว่าล่ามพื้นฐานและการเพิ่มคำแนะนำเล็กน้อยเป็นเพียงการต่อยไพ่และวางไว้ในสำรับที่ถูกต้อง
พื้นฐานในทางกลับกันก็ต้องรักษาคำสั่งทั้งหมด ไม่มีแนวคิดเรื่อง 'ความต่อเนื่องของบรรทัดก่อนหน้า' มากนัก แต่ใน Applesoft BASIC (หนึ่งในภาษาถิ่นที่ใช้กันอย่างแพร่หลายที่ฉันคุ้นเคยและสามารถค้นหาข้อมูลได้) แต่ละบรรทัดในหน่วยความจำถูกแสดงเป็น:
NN NN TT TT AA BB CC DD .. .. 00
มีสองไบต์สำหรับที่อยู่ของบรรทัดถัดไป ( NN NN
) สองไบต์สำหรับหมายเลขบรรทัดของบรรทัดนี้ ( TT TT
) จากนั้นรายการโทเค็น ( AA BB CC DD .. ..
) ตามด้วยจุดสิ้นสุดของตัวทำเครื่องหมายบรรทัด ( 00
) (นี่คือจากหน้า 84-88 ของ Inside the Apple // e )
จุดสำคัญที่ควรตระหนักเมื่อดูที่การแสดงหน่วยความจำนั้นคือเส้นที่สามารถเก็บไว้ในหน่วยความจำไม่เป็นระเบียบ โครงสร้างของหน่วยความจำคือของรายการที่เชื่อมโยงกับตัวชี้ 'บรรทัดถัดไป' ในโครงสร้าง สิ่งนี้ทำให้ง่ายต่อการเพิ่มบรรทัดใหม่ระหว่างสองบรรทัด - แต่คุณต้องกำหนดหมายเลขแต่ละบรรทัดเพื่อให้ทำงานได้อย่างถูกต้อง
หลายครั้งเมื่อทำงานกับพื้นฐานที่คุณได้จริงการทำงานในขั้นพื้นฐานของตัวเอง โดยเฉพาะอย่างยิ่งสตริงที่กำหนดได้ทั้งจำนวนเส้นและคำแนะนำขั้นพื้นฐานหรือคำสั่งเพื่อล่ามพื้นฐานเป็นหรือRUN
LIST
สิ่งนี้ทำให้ง่ายต่อการแยกรหัสจากคำสั่ง - รหัสทั้งหมดเริ่มต้นด้วยตัวเลข
ข้อมูลสองชิ้นนี้ระบุว่าทำไมตัวเลขจึงถูกใช้ - คุณสามารถรับข้อมูลจำนวนมากได้ใน 16 บิต สตริงที่ใช้ป้ายกำกับจะใช้พื้นที่มากขึ้นและยากต่อการสั่งซื้อ ตัวเลขนั้นง่ายต่อการทำงานเข้าใจและง่ายต่อการเป็นตัวแทน
ภาษาเบสิกในภายหลังซึ่งคุณไม่ได้อยู่ในล่ามตลอดเวลาสามารถทำทุกบรรทัดที่มีหมายเลขและจำเป็นต้องระบุหมายเลขที่เป็นเป้าหมายสาขาเท่านั้น ในผลฉลาก
] PRINT "FOO"
ดำเนินการโดยล่ามพื้นฐานในทันที มันเป็นคำสั่ง หากคุณต้องการที่จะทำงานในภายหลังคุณจะทำอย่างไรแล้ว] 10 PRINT "FOO"
] RUN
ในสภาพแวดล้อม AppleSoft BASIC คำสั่ง BASIC ทุกคำสั่งสามารถรันได้ทันทีหรือล่าช้า - มีเพียงไม่กี่คำสั่งที่จัดเตรียมโดย DOS ที่ไม่ได้ใช้คำสั่ง BASIC ที่ถูกต้อง ความแตกต่างระหว่างคำสั่งตอนนี้และคำสั่งในภายหลังคือหมายเลขบรรทัด คุณสามารถแก้ไขคำสั่งล่าช้าได้โดยป้อนหมายเลขบรรทัดที่สอดคล้องกันอีกครั้ง คุณสามารถใส่หลายข้อความในหนึ่งบรรทัด::
ในการแก้ไขไมโครคอมพิวเตอร์ต้นเป็นไปตามสาย คุณไม่สามารถย้ายได้อย่างอิสระในซอร์สโค้ดและแก้ไข คุณมีบรรทัดเดียวที่ด้านล่างของหน้าจอที่คุณสามารถพิมพ์คำสั่งและป้อนรหัส ส่วนที่เหลือของหน้าจอเป็นรายการรหัสแบบอ่านอย่างเดียวและเอาต์พุตคำสั่ง หากคุณต้องการแก้ไข say line 90 ในโปรแกรมที่คุณเขียน " EDIT 90
" และเนื้อหาของบรรทัด90
ป้อนบัฟเฟอร์การแก้ไขบรรทัดเดียว เมื่อคุณแก้ไขบรรทัดที่คุณกดและรายการโปรแกรมได้รับการปรับปรุง ดังนั้นคุณต้องการหมายเลขบรรทัดเพื่อให้สามารถแก้ไขโปรแกรม
เมื่อเครื่องมือแก้ไขโค้ดก้าวหน้ายิ่งขึ้นและอนุญาตให้คุณเลื่อนเคอร์เซอร์ไปรอบ ๆ ในรายการรหัสคุณไม่ต้องการหมายเลขบรรทัดอีกต่อไป
หากคุณกำลังคิดถึงภาษาพื้นฐานของไมโครคอมพิวเตอร์ที่บ้าน 8 บิตในยุค 80 คอมพิวเตอร์เหล่านั้นไม่มีโปรแกรมแก้ไขข้อความ (เว้นแต่คุณซื้อแอปพลิเคชั่นประมวลผลคำ) ไม่มีทางที่จะมีซอร์สโค้ดโปรแกรม BASIC ทั้งหมด "open in a editor" เช่นเดียวกับที่คุณจะมีเมื่อเขียนโปรแกรมวันนี้ โปรแกรมเมอร์จะไม่คิดถึงโปรแกรมเป็นไฟล์ซอร์สโค้ดหรือข้อความจริง ๆ
ดังนั้นสมมติว่าคุณมีโปรแกรมอย่างง่ายที่ไม่มีหมายเลขบรรทัดในหัวของคุณ:
FOR I=1 TO 42
PRINT I
NEXT I
คุณบูตเครื่องคอมพิวเตอร์ คุณมีข้อความแจ้งว่า "พร้อม" หรืออะไรทำนองนั้นและเคอร์เซอร์อยู่ที่บรรทัดถัดไป นี่เป็นเหมือนสภาพแวดล้อมREPLในปัจจุบันของภาษาสคริปต์ที่แตกต่างกันแม้ว่าจะไม่ได้อิงตามบรรทัดอย่างเคร่งครัด แต่ก็เหมือนกับบนหน้าจอ ดังนั้นไม่เหมือน REPLs ในวันนี้ แต่ปิด
ตอนนี้ถ้าคุณเริ่มเข้าสู่โปรแกรมคุณอาจได้รับข้อผิดพลาดหลังจากบรรทัดแรกเนื่องจากตัวแปลภาษาเบสิกพยายามที่จะดำเนินการทันที (และลืม) มันและมันไม่สมเหตุสมผลหากไม่มี NEXT เพื่อจบลูป นี่ไม่ใช่ตัวแก้ไขข้อความที่คุณแก้ไขข้อความนี่คือที่ที่คุณให้คำสั่งกับคอมพิวเตอร์!
ดังนั้นคุณต้องการวิธีที่จะบอกว่านี่คือรายการโปรแกรมเก็บไว้! คุณสามารถมีคำสั่งพิเศษหรือเพียงสัญลักษณ์ที่บอกว่าเฮ้นี่คือรายการโปรแกรมเก็บไว้ ลองจินตนาการถึงสิ่งนี้:
#FOR I=1 TO 42
#PRINT I
#NEXT I
ตกลงตอนนี้ล่ามพื้นฐานของเราในจินตนาการเก็บโปรแกรมไว้แล้วและคุณสามารถเรียกใช้ได้ แต่ตอนนี้คุณต้องการแก้ไขบรรทัด PRINT คุณจะทำอย่างไรมันได้หรือไม่? คุณไม่ได้อยู่ในโปรแกรมแก้ไขข้อความคุณไม่สามารถย้ายเคอร์เซอร์ไปที่บรรทัดและแก้ไขได้ หรือคุณต้องการเพิ่มอีกบรรทัดเหมือนLET COUNT=COUNT+1
ในลูป คุณจะระบุได้อย่างไรว่าควรแทรกบรรทัดใหม่ที่ใด
หมายเลขบรรทัดจะช่วยแก้ปัญหานี้ในวิธีที่ง่ายถ้าเป็น klunky หากคุณป้อนบรรทัดโปรแกรมที่มีหมายเลขที่มีอยู่แล้วบรรทัดเก่าจะถูกแทนที่ ตอนนี้สภาพแวดล้อม REPL หน้าจอที่ใช้เป็นประโยชน์เพราะคุณก็สามารถเลื่อนเคอร์เซอร์ไปยังโปรแกรมรายการบนหน้าจอแก้ไขบรรทัดบนหน้าจอและกด Enter เพื่อเก็บไว้ ดูเหมือนว่าคุณกำลังแก้ไขบรรทัดเมื่อจริง ๆ แล้วคุณกำลังแก้ไขข้อความบนหน้าจอแล้วแทนที่ทั้งบรรทัดด้วยบรรทัดใหม่จากหน้าจอ นอกจากนี้การแทรกบรรทัดใหม่จะกลายเป็นเรื่องง่ายหากคุณไม่ใส่ตัวเลขที่ไม่ได้ใช้ เพื่อสาธิต:
10 FOR I=1 TO 42
20 PRINT I
30 NEXT I
หลังจากป้อนบรรทัด 20 อีกครั้งด้วยการเปลี่ยนแปลงและเพิ่มบรรทัดใหม่อาจเป็นได้
5 LET COUNT=0
10 FOR I=1 TO 42
20 PRINT "Index", I
25 LET COUNT=COUNT+1
30 NEXT I
มีประโยชน์ (หรือการสาปแช่งเนื่องจากเปิดใช้งานรหัสปาเก็ตตี้ BASIC ที่มีชื่อเสียง) ในการใช้หมายเลขบรรทัดเป็นโครงสร้างภาษาอย่างน้อยก็เป็นเป้าหมายของคำสั่งGOTO
AND GOSUB
สิ่งนี้สามารถแทนที่ด้วยป้ายกำกับได้ แต่การใช้หมายเลขบรรทัดนั้นง่ายกว่าในการใช้งานล่ามพื้นฐานซึ่งยังคงเป็นโบนัสที่แน่นอนในคอมพิวเตอร์ที่ใช้ในบ้าน 8 บิตแบบทั่วไปในยุค 80
ที่สำคัญกว่านั้นจากมุมมองประสบการณ์การใช้งานของผู้ใช้หมายเลขบรรทัดเป็นอินเทอร์เฟซที่เรียบง่าย แต่สมบูรณ์แบบสำหรับการแก้ไขโค้ด เพียงพิมพ์บรรทัดที่ขึ้นต้นด้วยตัวเลขเพื่อใส่รหัสใหม่ ใช้LIST 100-200
เพื่อแสดงบรรทัด 100-200 หากต้องการแก้ไขรายการให้แสดงรายการบนหน้าจอแก้ไขข้อความบนหน้าจอและป้อนบรรทัดใหม่ หากต้องการลบบรรทัดให้แก้ไขเป็นบรรทัดว่างนั่นคือให้หมายเลขบรรทัดโดยที่ไม่มีอะไรเลย วรรคหนึ่งเพื่ออธิบายเรื่องนี้ เปรียบเทียบความพยายามที่จะอธิบายการใช้โปรแกรมแก้ไขข้อความเก่า ๆ เช่นedlin of DOS หรือedหรือexของ Unix: คุณต้องมีหนึ่งย่อหน้า (เพียงเล็กน้อยเท่านั้น) เพื่ออธิบายว่าผู้ใช้สามารถออกจากพวกเขาได้อย่างไรเมื่อเริ่มโดยไม่ตั้งใจ!
คำตอบอื่น ๆ อธิบายว่าหมายเลขโทรศัพท์เป็นอย่างไร ฉันพยายามที่จะครอบคลุมที่นี่ทำไมตัวเลขบรรทัดรอดชีวิตตราบเท่าที่พวกเขาทำพวกเขายังคงแก้ปัญหาในโลกแห่งความจริง: พวกเขาเสนอวิธีการทำโปรแกรมที่เกิดขึ้นจริงโดยไม่ต้องแก้ไขจริงในวิธีที่ง่ายมาก เมื่อเหมาะสมโปรแกรมแก้ไขข้อความแบบเต็มหน้าจอที่ใช้งานง่ายกลายเป็นวิธีการหลักในการแก้ไขโค้ดทั้งที่ข้อ จำกัด ด้านฮาร์ดแวร์หายไปและเมื่อความเฉื่อยของคนปรับตัวสิ่งใหม่ก็เอาชนะไปแล้วหมายเลขบรรทัดพื้นฐานพื้นฐานภาษาหายไปอย่างรวดเร็ว ปัญหาการใช้งานหลักที่พวกเขาแก้ไขไม่มีปัญหาอีกต่อไป
ในสถานที่และยุคที่ Basic ได้รับการพัฒนาอุปกรณ์ I / O ที่ดีที่สุดคือ teletype การแก้ไขโปรแกรมทำได้โดยการพิมพ์ (บนกระดาษ) รายการของโปรแกรมทั้งหมดหรือส่วนที่น่าสนใจของมันแล้วพิมพ์บรรทัดทดแทนด้วยหมายเลขบรรทัด
นั่นเป็นสาเหตุที่การกำหนดหมายเลขบรรทัดเริ่มต้นคือ 10 ดังนั้นจะมีตัวเลขที่ไม่ได้ใช้ระหว่างบรรทัดที่มีอยู่
ren
คำสั่ง '' เพื่อกำหนดหมายเลขใหม่ ภาวนาทั่วไปคือren 10, 10
(renumber เริ่มต้นที่สิบ incrementing สิบ - พฤติกรรมเริ่มต้นหากเพียงแค่พิมพ์ren
. goto
และgosub
และthen (linenumber)
. คำสั่งจะได้รับการปรับปรุงโดยอัตโนมัติ แต่นี้เป็นมั่นเหมาะไม่สามารถใช้ได้ในเบื้องต้นเกี่ยวกับที่เก่าแก่ที่สุด แต่ IIRC, ที่มีอยู่ในแอปเปิ้ล. Integer Basic, Applesoft FP basic, TI Basic / Extended Basic, MS Basic / GW Basic ฯลฯ
"หมายเลขบรรทัด" หมายถึงบางสิ่งที่แตกต่างกัน
ก่อนอื่นโปรดจำไว้ว่าแนวคิดของ "เส้น" ไม่ได้อยู่ตลอดไป ภาษาการเขียนโปรแกรมจำนวนมากในยุคนี้ใช้การ์ดเจาะรูและการมีหมายเลขลำดับ (โดยปกติจะอยู่ในสองสามคอลัมน์สุดท้ายของการ์ด) ช่วยให้คุณกู้เด็คในลำดับที่ถูกต้องหากคุณทำการ์ดหล่น มีเครื่องจักรให้ทำโดยอัตโนมัติ
หมายเลขบรรทัดเพื่อใช้เป็นเป้าหมายของGOTO
ข้อความเป็นแนวคิดที่แตกต่างอย่างสิ้นเชิง ใน FORTRAN IV เป็นทางเลือกและนำหน้าคำสั่ง (ในคอลัมน์ 1-5) นอกเหนือจากการติดตั้งได้ง่ายกว่าป้ายกำกับที่มีรูปแบบอิสระแล้วยังมีแนวคิดของการคำนวณและกำหนด GOTOซึ่งอนุญาตให้คุณข้ามไปยังหมายเลขบรรทัดโดยพลการ นี่คือสิ่งที่ภาษาการเขียนโปรแกรมสมัยใหม่ส่วนใหญ่ไม่มี (แม้ว่าswitch
ข้อความจะเข้ามาใกล้) แต่เป็นกลอุบายที่คุ้นเคยสำหรับโปรแกรมเมอร์แอสเซมเบลอร์
พื้นฐานมาจาก FORTRAN และตั้งใจให้ง่ายต่อการใช้และทำความเข้าใจดังนั้นการบังคับให้ทุกบรรทัดมีหมายเลขบรรทัด (ทั้งสำหรับการเรียงลำดับและเป็นเป้าหมายของGOTO
/ GOSUB
statement) อาจเป็นการตัดสินใจออกแบบด้วยเหตุผลดังกล่าว
goto array_of_labels[some_computation()];
GOTO
(หรือASSIGN
) และเลขคณิต aka ดั้งเดิม threeway IF
และ (ไม่ค่อยได้ใช้) ผลตอบแทนทางเลือกในCALL
และเรียงลำดับของเป้าหมาย (ตัวคั่นเนื้อหา) ของDO
และFORMAT
ข้อความ ในงบอื่น ๆ พวกเขาเป็นตัวเลือก
GOTO 1000+N*100
เพื่อเลียนแบบswitch
คำสั่ง
ฉันเริ่มเขียนโปรแกรมในภาษาโคบอลซึ่งใช้หมายเลขบรรทัดในคอลัมน์ 1-6 ของแต่ละบรรทัด เนื่องจากไม่มี IDE ในยุค 70 ทุกอย่างทำผ่านการ์ดเจาะและหมายเลขบรรทัดถูกใช้เพื่อระบุว่าบรรทัดใดในแหล่งต้นฉบับจะถูกแทนที่และเพิ่มบรรทัดใหม่ เราใช้เพื่อเพิ่มจำนวนบรรทัด 100 เพื่อให้เรามีที่ว่างเพื่อเพิ่มจำนวนบรรทัด
BASIC มาช้ากว่า FORTRAN ในยุคของเครื่องปลายทาง มันให้ความสำคัญกับสภาพแวดล้อม read-exe-print-loop ที่มีการโต้ตอบกันมากกว่าสำรับไพ่
ฉันเรียนรู้การเขียนโปรแกรมใน BASIC บนจอแสดงผลหนึ่งบรรทัดที่มี 24 อักขระ หมายเลขบรรทัดเป็นวิธีที่เป็นธรรมชาติในการระบุตำแหน่งที่คุณต้องการให้มีการไปไม่ว่าจะเป็นการแก้ไขหรือการแทรกระหว่างบรรทัดอื่น
ฉันไม่สามารถจินตนาการได้ว่าคุณจะทำเช่นไร
ประเด็นหนึ่งที่ยังไม่มีใครพูดถึงคือมันง่ายสำหรับผู้เริ่มต้นที่จะให้เหตุผลเกี่ยวกับโฟลว์ของโปรแกรมที่เป้าหมายสาขาชัดเจน ดังนั้นแทนที่จะต้องจับคู่ (อาจซ้อนกัน) คำสั่ง BEGIN / END (หรือใช้ตัวคั่นบล็อกใด ๆ ) ก็ค่อนข้างชัดเจนว่าการไหลของการควบคุมไปที่ใด สิ่งนี้อาจเป็นประโยชน์เมื่อผู้ชมเป้าหมายของ BASIC (เป็นรหัสการเรียนการสอนสัญลักษณ์เริ่มต้นของผู้เริ่มต้น )
Dartmouth Time Sharing System ใช้อินเตอร์เฟสโทรพิมพ์ ดังนั้นจึงใช้อินเตอร์เฟสแบบคำสั่ง ในขั้นต้นหมายเลขบรรทัดถูกใช้เพื่อแก้ไขโปรแกรม คุณสามารถแทรกแทนที่หรือลบโดยใช้หมายเลขบรรทัด ไม่ปรากฏว่าเวอร์ชันก่อนหน้าใช้หมายเลขบรรทัดสำหรับคำสั่ง goto แต่เป็นการเพิ่มในภายหลังในภาษา