อ่าน 14 นาที
พื้นฐานเต็มรูปแบบ
ภาษา BASIC ฉบับเต็ม หรือที่รู้จักกันในชื่อ Standard BASIC หรือ ANSI BASIC เป็น มาตรฐานสากล ที่กำหนดรูปแบบหนึ่งของ ภาษาโปรแกรม BASIC พัฒนาโดย กลุ่ม ANSI X3.
พื้นฐานเต็มรูปแบบ
ภาษา BASIC ฉบับเต็มหรือที่รู้จักกันในชื่อStandard BASICหรือANSI BASICเป็นมาตรฐานสากลที่กำหนดรูปแบบหนึ่งของภาษาโปรแกรม BASICพัฒนาโดย กลุ่ม ANSI X3.60 ของ สถาบันมาตรฐานแห่งชาติอเมริการ่วมกับECMA ของยุโรป โดยอธิบายถึงเวอร์ชันขั้นสูงของ BASIC ที่มีคุณสมบัติมากมาย รวมถึงการเขียนโปรแกรมแบบมีโครงสร้าง การคำนวณ เมทริกซ์ การรับ / ส่งข้อมูลสำหรับการจัดการไฟล์และตัวเลือกอื่นๆ อีกมากมาย
การกำหนดมาตรฐาน BASIC ของ ANSI เป็นกระบวนการสองขั้นตอน ขั้นตอนแรก ดำเนินการในชื่อMinimal BASICเริ่มต้นในปี 1974 เป็นความพยายามที่จะกำหนดและสร้างมาตรฐาน ภาษา Dartmouth BASIC ดั้งเดิมให้ชัดเจน เพื่อให้สามารถนำไปใช้งานได้อย่างถูกต้องบนแพลตฟอร์มต่างๆ หลังจากที่เปิดตัวในช่วงปลายปี 1977 ความสนใจก็หันไปที่ Full BASIC ซึ่งจะอิงตาม Structured BASIC ที่มีประสิทธิภาพมากกว่า ซึ่งกำลังได้รับการพัฒนาที่วิทยาลัยดาร์ทมัธความซับซ้อนของระบบและการเพิ่มเติมมากมายที่สมาชิกของคณะกรรมการมาตรฐานเสนอแนะ ทำให้ความพยายามนั้นติดขัด และร่างมาตรฐานฉบับแรกก็ไม่เสร็จสมบูรณ์จนกระทั่งปี 1986 ซึ่งล่าช้าไปถึงสี่ปี
มาตรฐานดังกล่าวได้รับการรับรองเมื่อวันที่ 26 มิถุนายน พ.ศ. 2529 ในชื่อECMA-116 [ 1 ] ในเดือนมกราคม พ.ศ. 2530 ในชื่อANSI X3.113-1987ในปี พ.ศ. 2534 ในชื่อISO/IEC 10279:1991และได้รับการตรวจสอบและยืนยันครั้งสุดท้ายในปี พ.ศ. 2567 มันถูกละเลยอย่างสิ้นเชิง การปฏิวัติ ไมโครคอมพิวเตอร์เกิดขึ้นในขณะที่มีการถกเถียงกันเกี่ยวกับข้อกำหนด และในช่วงต้นทศวรรษ พ.ศ. 2523 Microsoft BASIC ที่ทำงานบน คอมพิวเตอร์ส่วนบุคคลหลายสิบล้านเครื่องก็หมดความนิยมไปแล้ว เมื่อเห็นกระบวนการนี้ยืดเยื้อ ผู้เข้าร่วมจาก Dartmouth จึงแยกตัวออกไปเพื่อสร้างTrue BASICโดยอิงจากส่วนต่างๆ ของมาตรฐาน แต่ก็ไม่ค่อยมีคนใช้ มาตรฐาน โดยพฤตินัยเช่นของ Microsoft ครอบงำตลาดและเป็นพื้นฐานสำหรับภาษาใหม่ๆ เช่นMicrosoft Visual Basicซึ่งรวมเอาแนวคิดที่คล้ายคลึงกันไว้ด้วย
ประวัติศาสตร์
พื้นฐานขั้นต่ำ
การเปิดตัวDartmouth BASICในปี 1964 ได้รวมแนวคิดใหม่ๆ หลายอย่างในสาขาคอมพิวเตอร์เข้าด้วยกัน รวมถึงการแบ่งเวลาใช้งานและการโต้ตอบโดยตรงกับผู้ใช้ ซึ่งในขณะนั้นเรียกว่า "อินเทอร์เฟซแบบสนทนา" บริษัท General Electricซึ่งเป็นผู้จัดหา คอมพิวเตอร์ เมนเฟรมGE 235 ที่ใช้ ระบบนี้ ได้ใช้ระบบของ Dartmouth เวอร์ชันที่ดัดแปลงเพื่อเริ่มต้นสำนักงานบริการซึ่งในที่สุดจะพัฒนาเป็นบริการออนไลน์GEnieบริษัทอื่นๆ อีกมากมาย โดยเฉพาะ TymshareและCompuServeได้เปิดตัวบริการ BASIC แบบโฮสต์ของตนเองอย่างรวดเร็ว โดยทำตามแบบอย่างของ Dartmouth [ 2 ] [ 3 ]
ในปี พ.ศ. 2511 บริษัท Hewlett-Packard (HP) ได้เปิดตัวมินิคอมพิวเตอร์ซีรีส์HP 2000ซึ่งมีคุณสมบัติเช่นเดียวกับระบบเมนเฟรมรุ่นก่อนหน้าในรูปแบบระบบแร็คเมาท์ที่สามารถกำหนดค่าได้อย่างสมบูรณ์ในราคาประมาณ 100,000 ดอลลาร์สหรัฐ (เทียบเท่ากับ 925,837 ดอลลาร์สหรัฐในปี พ.ศ. 2568) [ 4 ]ภาษา BASIC แบบ Time-Sharedของ HP มีความแตกต่างจาก Dartmouth หลายประการ[ 5 ]และในไม่ช้าก็ถูกลอกเลียนแบบโดยผู้จำหน่ายมินิคอมพิวเตอร์รายอื่น ๆ เช่นData General บริษัท Digital Equipment Corporation (DEC) เป็นบริษัทหนึ่งที่ยังคงใช้ภาษา BASIC ที่ออกแบบเองจนกระทั่งปี พ.ศ. 2515 เวอร์ชันนี้BASIC-PLUSแตกต่างจากทั้งภาษาของ HP และ Dartmouth ในช่วงต้นทศวรรษ พ.ศ. 2513 มีภาษาหลักสามภาษาและรูปแบบย่อยอีกหลายสิบแบบที่ใช้ในตลาด
ในเดือนมกราคม พ.ศ. 2517 กลุ่มใหม่ได้ก่อตั้งขึ้นภายใต้ร่มเงาของ ANSI เพื่อกำหนดมาตรฐาน BASIC เดียว[ 6 ]ทีม Dartmouth เป็นส่วนสำคัญของกลุ่ม Dartmouth กำลังพัฒนา BASIC เวอร์ชันที่ขยายใหญ่ขึ้นอย่างมากซึ่งรู้จักกันในชื่อ Structured BASIC (SBASIC) ซึ่งกลายเป็นพื้นฐานของ ANSI ในขณะนั้น มีภาษาถิ่นอื่น ๆ เพียงไม่กี่ภาษาที่รองรับคุณสมบัติใหม่ ๆ มากมาย กลุ่มตัดสินใจว่ามาตรฐานที่สมบูรณ์โดยอิงจาก SBASIC จะต้องใช้เวลาในการตกลงกัน ดังนั้นความพยายามของ ANSI BASIC จึงถูกแบ่งออกเป็นสองขั้นตอน ขั้นตอนแรกคือMinimal BASICซึ่งจะสร้างมาตรฐานที่รวมเฉพาะคุณสมบัติพื้นฐานที่สุดที่จำเป็นสำหรับการใช้งานใด ๆ แม้แต่คุณสมบัติที่ได้รับการสนับสนุนมานานจาก Dartmouth เช่นคณิตศาสตร์เมทริกซ์ก็จะถูกละเว้น ร่างมาตรฐานสำหรับ Minimal BASIC ได้รับการเผยแพร่ในเดือนมกราคม พ.ศ. 2519 ร่างฉบับสุดท้ายในเดือนกรกฎาคม พ.ศ. 2520 และได้รับการอนุมัติในเดือนธันวาคมปีเดียวกันอาเธอร์ ลูเออร์มันน์ นักฟิสิกส์จากวิทยาลัยดาร์ทมัธผู้สนับสนุนภาษา BASIC และเป็นส่วนหนึ่งของกลุ่ม ANSI กล่าวในภายหลังว่า:
"ช่วงไม่กี่ปีแรกของ X3J2 ถูกใช้ไป (เมื่อมองย้อนกลับไป บางคนอาจบอกว่า 'เสียเปล่า') ในการกำหนดมาตรฐานสิ่งที่เทียบเท่ากับ Dartmouth Basic ดั้งเดิมในปี 1964... Minimal Basic เป็นเหมือนของเล่นมากกว่าภาษาจริง ๆ" [ 7 ]
พื้นฐานเต็มรูปแบบ
จากนั้นกลุ่มก็หันมาสนใจ Full BASIC ในช่วงเวลานี้ การปฏิวัติ ไมโครคอมพิวเตอร์กำลังดำเนินไปอย่างเต็มที่ และเครื่องจักรหลายล้านเครื่องที่ใช้Microsoft BASICหรือ BASIC ที่คล้ายกันกำลังเข้าสู่ตลาด[ a ] ถึงกระนั้น ผู้เข้าร่วมก็ไม่มีผู้จำหน่ายหรือผู้จัดหาไมโครคอมพิวเตอร์เลย ผู้เข้าร่วมยังคงเป็น ผู้จำหน่าย เมนเฟรมเช่นIBM , Control DataและGeneral Electricผู้ จำหน่าย มินิคอมพิวเตอร์เช่นDigital Equipment Corporation ( DEC), Data GeneralและWang Laboratoriesและบริษัทขนาดใหญ่อื่นๆ เช่น3M , American ExpressและKodak [ 9 ]
ความพยายามดังกล่าวประสบกับปัญหาจากผลกระทบของระบบที่สอง ทันที เนื่องจากสมาชิกแต่ละคนเริ่มเพิ่มรายการคุณสมบัติ "ที่ต้องมี" ของตนเอง บางคนต้องการให้ภาษายังคงรักษาประเพณีที่มุ่งเน้นการใช้งานด้านการศึกษาบนเครื่องขนาดเล็ก และต้องการภาษาที่เรียบง่ายโดยมีเพียงการสนับสนุนไฟล์ขั้นพื้นฐานและคุณสมบัติที่คล้ายคลึงกัน ในขณะที่ผู้ใช้ เมนเฟรม บางราย ต้องการสนับสนุนโปรแกรมโมดูลาร์ที่โหลดได้และคุณสมบัติการเขียนโปรแกรมที่กว้างขวางอื่นๆ เพื่อแข่งขันกับภาษาต่างๆ เช่นCOBOLหรือFORTRAN พร้อมทั้งนำเสนอ การจัดการสตริงที่ดีกว่ากลุ่มที่สามสนใจแอปพลิเคชันทางธุรกิจเป็นหลัก โดยเฉพาะผู้ใช้ในยุโรปที่ BASIC กลายเป็นภาษาธุรกิจหลัก และพวกเขาเรียกร้องให้ระบบมีการจัดการไฟล์ที่ครอบคลุมและคณิตศาสตร์ทศนิยมที่ไม่ประสบปัญหาการปัดเศษ[ 10 ]
John G. KemenyและThomas E. Kurtzผู้ออกแบบ BASIC ดั้งเดิมและสมาชิกของกลุ่ม ANSI วิจารณ์กระบวนการนี้ ในบทความปี 1982 Kurtz เขียนเกี่ยวกับวิธีที่แม้แต่ปัญหาเล็กๆ น้อยๆ ก็กลายเป็นข้อโต้แย้งใหญ่โต เขาใช้ตัวอย่างของOPTION BASEคำสั่ง เมื่ออาร์เรย์ถูกเพิ่มเข้าไปใน BASIC ครั้งแรก อาร์เรย์จะเริ่มต้นที่ดัชนี 1 ทำให้DIM A(3)เกิดอาร์เรย์ที่มีสามช่อง คือ 1, 2 และ 3 ในบางกรณี ดัชนี 0 เป็นธรรมชาติมากกว่า ดังนั้นจึงOPTION BASE 0ถูกเพิ่มในเวอร์ชันต่อมาของโค้ด Dartmouth เพื่อให้คำจำกัดความเดียวกันมีสี่ช่อง คือ 0 ถึง 3 ในระหว่าง Minimal มีการถกเถียงกันอย่างต่อเนื่องเกี่ยวกับฐานเริ่มต้น และในที่สุดก็เลือก 0 ห้าปีต่อมา ในระหว่างความพยายามใน Full มีการตัดสินใจว่าอาร์เรย์สามารถกำหนดขอบเขตล่างใดๆ ก็ได้โดยใช้ไวยากรณ์ใหม่DIM YEAR(1970 TO 1990)ซึ่งทำให้ไม่จำเป็นต้องใช้OPTION BASE 0และมีการตัดสินใจที่จะเปลี่ยนค่าเริ่มต้นเป็น 1 อีกครั้ง[ 11 ]
ในขั้นต้น กลุ่ม X3.60 ตั้งเป้าหมายไว้ว่าจะส่งสำเนาตรวจสอบทางเทคนิคฉบับแรกในช่วงฤดูร้อนปี 1982 ซึ่งจะส่งไปยังคณะกรรมการ ANSI X3 ในช่วงฤดูใบไม้ร่วง ในช่วงเวลานี้ มาตรฐานที่เสนอจะถูกส่งออกไป และจะรับฟังความคิดเห็นจากสาธารณชน ร่างฉบับสุดท้ายจะถูกส่งกลับไปยัง X3 ในปี 1983 เพื่อให้สัตยาบันในปีนั้น[ 12 ]ซึ่งพิสูจน์แล้วว่าค่อนข้างมองโลกในแง่ดี ร่างฉบับแรกไม่ได้ถูกเผยแพร่จนกระทั่งเดือนมกราคม 1985 [ 1 ]และร่างฉบับสุดท้ายในปี 1986 เพื่อให้สัตยาบันในเดือนมกราคม 1987 [ 13 ]ในช่วงเวลานี้ มาตรฐานมีขนาดใหญ่ขึ้นมากจนในที่สุดก็ถูกแบ่งออกเป็นโมดูลหลักและส่วนเสริมเพิ่มเติมอีกห้าส่วน ซึ่งรวมถึงการจัดการไฟล์ที่ซับซ้อน การสนับสนุนการคำนวณแบบเรียลไทม์ คณิตศาสตร์ทศนิยมคงที่ คำสั่งแก้ไขเพิ่มเติม และแม้แต่โมดูลกราฟิกที่ไม่ขึ้นกับแพลตฟอร์ม[ 14 ]
ผลลัพธ์ดังกล่าวถูกวิพากษ์วิจารณ์ในช่วงระยะเวลาการแสดงความคิดเห็นสาธารณะ ผู้ตรวจสอบรายหนึ่งตั้งข้อสังเกตว่ามันมีขนาดใหญ่มากจน "ภาษาที่ได้นั้นมีความซับซ้อนเทียบเท่ากับภาษาโปรแกรมใดๆ ในปัจจุบัน" และ "การปฏิบัติตามมาตรฐานทั้งหมดจะเทียบได้กับโครงการคอมไพเลอร์ที่ใหญ่ที่สุดเท่าที่เคยมีการพยายามมา" [ 15 ]ต่อมาได้มีการอธิบายเพิ่มเติมว่า ตัวอย่างเช่น มีวิธีอธิบายซับรูทีนไม่น้อยกว่าห้าวิธี วิธีกำหนดความยาวสูงสุดของสตริงสามวิธี และวิธีกำหนดอาร์เรย์สองวิธี[ 16 ]เมื่อกล่าวถึงปัญหาขอบเขตของอาร์เรย์ มีการระบุว่าคณะกรรมการเห็นพ้องต้องกันว่าวิธีแก้ปัญหาที่นำมาใช้นั้น "ยอมรับไม่ได้" และวางแผนที่จะแก้ไข "ในภายหลัง" [ 17 ]
ไม่มีหลักฐานว่าผู้เข้าร่วมคนใดสร้างเวอร์ชันที่สอดคล้องกับมาตรฐานหลังจากมีการเผยแพร่มาตรฐาน และการกล่าวถึงความพยายามอย่างต่อเนื่องก็หายไปอย่างรวดเร็ว ตั้งแต่ปี 1987 การกล่าวถึงมาตรฐานมีเพียงแค่ว่ามันมีอยู่จริงและ True BASIC ครอบคลุมคุณสมบัติบางอย่างของมัน นอกจากนี้ ด้วยไมโครคอนโทรลเลอร์หลายล้านเครื่องที่ใช้มาตรฐานของ MS ในรูปแบบต่างๆในช่วงเวลานั้น มาตรฐาน ANSI ใหม่จึงถูกมองว่าเป็นโซลูชันที่ไม่เป็นมาตรฐาน[ 18 ]ความสำเร็จดั้งเดิมของ BASIC บนแพลตฟอร์มไมโครคอนโทรลเลอร์ส่วนใหญ่มาจากการที่อนุญาตให้พิมพ์โปรแกรมจากซอร์สโค้ด ที่พิมพ์ออกมา แต่ในช่วงกลางทศวรรษ 1980 สิ่งนี้ได้ถูกแทนที่ด้วย แอปพลิเคชัน แบบ shrinkwrapและความต้องการ BASIC ในฐานะระบบการแจกจ่ายก็จางหายไป[ 19 ]ในด้านระบบขนาดใหญ่ การใช้งานดั้งเดิมในฐานะภาษาสำหรับการสอนถูกแทนที่ด้วยPascal มากขึ้นเรื่อยๆ เนื่องจากปัญหาภายนอกที่ BASIC มุ่งแก้ไข เช่น การโต้ตอบและการแก้ไขออนไลน์ มีให้บริการในระบบส่วนใหญ่แล้ว[ 20 ]
ทรูเบสิก
กระบวนการกำหนดมาตรฐานนั้นช้ามากจนแม้แต่ผู้เขียน Structured BASIC ก็ยังยอมแพ้ในที่สุด Stephen Garland ได้รับมอบหมายให้เตรียมชุด ข้อสอบ College Boardสำหรับนักเรียนมัธยมปลาย และเขาเขียนข้อสอบเหล่านั้นด้วยภาษา Pascalแทน ซึ่งค่อนข้างเป็นที่ถกเถียงกัน เนื่องจากคอมพิวเตอร์ที่ใช้กันอย่างแพร่หลายหลายเครื่อง เช่นCommodore 64และTRS-80ไม่ได้มีการใช้งาน Pascal อย่างเต็มรูปแบบ Luehrmann วิจารณ์ความพยายามนี้ โดยแนะนำหลักสูตรทั่วไปที่สามารถนำไปใช้กับนักเรียนได้มากขึ้น[ 21 ]
ผู้เข้าร่วมจาก Dartmouth ในกลุ่ม ANSI ตระหนักได้ว่าความพยายามนี้ไม่มีหวังที่จะสำเร็จลุล่วงได้ภายในระยะเวลาอันสมเหตุสมผล พวกเขาจึงถอนตัวออกจากความพยายามนั้นและก่อตั้งบริษัทใหม่เพื่อนำภาษาเวอร์ชันของตนออกสู่ตลาดในชื่อTrue BASIC True BASIC ผสมผสานคุณสมบัติหลายอย่างของมาตรฐานหลัก แต่ก็มีการเปลี่ยนแปลงของตัวเองอีกหลายอย่างเช่นกัน หนึ่งในสิ่งที่โดดเด่นที่สุดคือการกำหนดหมายเลขบรรทัดเป็นทางเลือก ภาษาดังกล่าวไม่ได้รับการตอบรับที่ดีนัก โดยมีบทวิจารณ์จำนวนมากแสดงความกังวลเช่นเดียวกันเกี่ยวกับคุณสมบัติที่มากเกินไป ซึ่งเคยเกิดขึ้นกับมาตรฐาน Full BASIC Jerry Pournelleเยาะเย้ยว่าเป็น "ความบ้าคลั่ง" [ 22 ]และJohn Dvorakปฏิเสธว่าเป็น "เรื่องน่าเศร้า" และ "ต้องล้มเหลวอย่างแน่นอน" [ 23 ]
คำอธิบาย
การแก้ไขโปรแกรม
เช่นเดียวกับ BASIC เวอร์ชันก่อนหน้า Full BASIC ถูกออกแบบมาให้ทำงานใน สภาพแวดล้อม ตัวแก้ไขบรรทัดดังนั้นจึงใช้หมายเลขบรรทัดเพื่อระบุบรรทัดแต่ละบรรทัดหรือช่วงของบรรทัดที่จะแก้ไขหรือลบ หมายเลขบรรทัดอาจมีตั้งแต่ 1 ถึง 50,000 ซึ่งแตกต่างจาก Minimal ที่มีหมายเลขบรรทัดตั้งแต่ 0 ถึง 9999 นั่นหมายความว่าโปรแกรม Minimal ที่ถูกต้องซึ่งใช้บรรทัดที่ 0 จะไม่ถูกต้องใน Full บรรทัดตรรกะมีความยาวอย่างน้อย 132 อักขระ บรรทัดตรรกะสามารถขยายข้ามหลายบรรทัดทางกายภาพได้โดยใช้ "อักขระต่อ" คือเครื่องหมายแอมเปอร์แซนด์ น่าเสียดายที่เครื่องหมายแอมเปอร์แซนด์ยังถูกเลือกเป็นตัวดำเนินการเชื่อมต่อสตริง ซึ่งทำให้การแยกวิเคราะห์ซับซ้อนขึ้น[ 24 ]
คำสั่งแก้ไขเพิ่มเติมได้แก่RENUMBERและDELETEซึ่งในเวลานั้นเป็นเรื่องปกติในภาษาไมโครคอมพิวเตอร์รุ่นใหม่กว่า แนวคิดใหม่คือEXTRACTซึ่งคัดลอกช่วงของบรรทัดไปยังไฟล์ใหม่และลบออกจากโปรแกรมเดิม ทำให้สามารถแยกไปยังโปรแกรมย่อยได้[ 25 ]จากนั้นสามารถเรียกใช้โดยใช้CHAINคำสั่ง นอกจากนี้ CHAINยังสามารถรวมตัวเลือกWITHตามด้วยรายการพารามิเตอร์ ซึ่งในกรณีนี้คาดว่าจะส่งคืนค่าในตัวแปรที่มีชื่อเดียวกันกับโปรแกรม (ดู "โครงสร้าง" ด้านล่าง) [ 26 ]
ฟังก์ชันพื้นฐาน
คำหลักที่ใช้กันทั่วไปจำนวนมากที่พบในภาษา Minimal หรือภาษาถิ่นอื่นๆ ยังคงอยู่ เช่นPRINT, INPUT, DATAและREADเป็นต้น มีการเปลี่ยนแปลงเล็กน้อยมากมายในคำสั่งเหล่านี้ ตัวอย่างเช่น ในขณะแก้ไข คำหลักสามารถพิมพ์เป็นตัวพิมพ์ใหญ่หรือตัวพิมพ์เล็ก หรือผสมกันได้ เช่นเดียวกับในอดีต คำหลักมักจะแสดงเป็นตัวพิมพ์ใหญ่ ในขณะที่ธรรมเนียมใหม่คือการใช้snake caseสำหรับชื่อตัวแปรที่มีหลายตัวอักษร[ 27 ]
ภาษา BASIC ของ Dartmouth ได้แนะนำREMคำสั่งสำหรับความคิดเห็นแบบอินไลน์ และได้รับการสนับสนุนอย่างแพร่หลายในภาษาถิ่นอื่นๆ ภาษาถิ่นหลายภาษายังเพิ่มรูปแบบย่อ ซึ่งส่วนใหญ่ใช้เครื่องหมายอัญประกาศเดี่ยว'ดังที่เห็นใน Microsoft BASIC สำหรับภาษา Full พวกเขาเลือกใช้เครื่องหมายอัศเจรีย์!สำหรับบทบาทนี้[ 28 ]แม้ว่าจะดูเหมือนไม่มีเหตุผลที่จะไม่ใช้เครื่องหมายอัญประกาศเดี่ยว เนื่องจากไม่ได้ใช้ในกรณีอื่นๆ เช่น สตริงไม่อนุญาตให้ใช้เครื่องหมายอัญประกาศเดี่ยวเป็นตัวคั่น[ 29 ]การเปลี่ยนแปลงที่ก่อให้เกิดข้อถกเถียงมากกว่าคือLETคำหลักนี้จำเป็นต้องใช้สำหรับการกำหนดค่าทั้งหมดเพื่อให้การแยกวิเคราะห์ง่ายขึ้น ในขณะที่ในภาษาถิ่นอื่นๆ คำหลัก LETนี้เป็นตัวเลือก ซึ่งรวมถึงภาษา Minimal ด้วย ดังนั้นโค้ด Minimal ใดๆ ที่ใช้ทางลัดนี้จึงไม่เข้ากันกับภาษา Full [ 30 ]
นอกเหนือจากชุดคำหลัก 23 คำและฟังก์ชัน 11 ฟังก์ชันจาก Minimal ที่ค่อนข้างเล็กแล้ว Full ยังเพิ่มคำหลักอีกหลายสิบคำ รวมเป็นคำหลักทั้งหมด 176 คำ (ซึ่งกำหนดแนวคิดที่แตกต่างกัน 161 แนวคิด) ฟังก์ชันทางคณิตศาสตร์ 38 ฟังก์ชัน และฟังก์ชันสตริง 14 ฟังก์ชัน หากรวมส่วนขยายทั้งหมด[ 31 ]รายการคำหลักอย่างง่ายที่จัดเรียงในสามคอลัมน์นั้นกินพื้นที่สองหน้าในเอกสารมาตรฐาน[ 32 ]
โครงสร้าง
ความแตกต่างหลักระหว่าง Full และ Minimal คือการเพิ่มโครงสร้างการเขียนโปรแกรมแบบบล็อก ใน Minimal และตัวแปลภาษา BASIC ส่วนใหญ่ โปรแกรมประกอบด้วยบรรทัดโค้ดที่เป็นอิสระต่อกัน และสามารถเริ่มการทำงานได้ทุกจุดโดยการGOTOคลิกหมายเลขบรรทัดใดก็ได้ ข้อยกเว้นเพียงอย่างเดียวสำหรับกฎนี้คือFOR...NEXTลูป ซึ่งบรรทัดทั้งหมดตั้งแต่ FOR ถึง NEXT ถือว่าเป็นบล็อกโค้ดเดียว การแตกสาขาเข้าหรือออกจากบล็อก FOR จะส่งผลให้เกิดพฤติกรรมที่แปลกประหลาด ซึ่งโดยทั่วไปแล้วจะขึ้นอยู่กับการใช้งาน แต่โดยทั่วไปแล้วจะเป็นข้อผิดพลาดบางรูปแบบ เช่น "NEXT WITHOUT FOR" [ 33 ]
ในโปรแกรมเต็มรูปแบบ การแยกสาขาเข้าไปในบล็อก FOR...NEXT ไม่ได้รับอนุญาต รวมถึงการแยกสาขาออกโดยไม่ใช้EXITคำสั่งดังกล่าวด้วย การใช้งานควรตรวจสอบคำสั่งดังกล่าวและไม่อนุญาตให้ใช้ เช่น การค้นหากรณีที่ต้องเขียนโค้ดGOTOเข้าไปในลูป การตรวจสอบโค้ดดังกล่าวทำได้ยากในโปรแกรมแปลภาษาซึ่งโดยปกติจะตรวจสอบโปรแกรมทีละบรรทัด การตรวจสอบการแยกสาขาเข้าไปในบล็อกจากโค้ดอื่นในโปรแกรมโดยปกติจะต้องวิเคราะห์โปรแกรมทั้งหมดเหมือนกับคอมไพเลอร์[ 16 ]
ในเวอร์ชันเต็ม คำหลักที่มีอยู่หลายคำได้รับการขยาย และมีการเพิ่มคำหลักอื่นๆ เพื่อให้มีโครงสร้างบล็อกเพิ่มเติม ที่โดดเด่นคือคำสั่งแบบหลายบรรทัดIF...THEN...ELSE...END IFซึ่งอนุญาตให้รันโค้ดหลายบรรทัดได้หากตรงตามเงื่อนไขหรือล้มเหลวSELECT...CASE...CASE ELSE...END SELECTคำสั่งถูกเพิ่มเข้ามาเพื่อสร้างแผนผังการตัดสินใจ[ 34 ]ซึ่งก่อนหน้านี้จะถูกนำไปใช้โดยใช้คำ สั่ง ON...GOTOหรือคำสั่งหลายIFคำสั่งเพื่อเลือกบรรทัดที่จะรันFOR...NEXTลูปยังคงเหมือนเดิมในเวอร์ชันขั้นต่ำ แต่DO...LOOPมีการเพิ่มคำสั่งใหม่ที่มีรูปแบบการทดสอบด้านบนDO WHILE...LOOPและด้านล่างDO...LOOP UNTIL...ลูปทั้งหมดสามารถออกจากได้อย่างปลอดภัยโดยใช้คำสั่งEXIT FORและ[ 35 ]EXIT DO
นอกเหนือจากการเปลี่ยนแปลงโครงสร้างบล็อกเหล่านี้แล้ว Full ยังเพิ่มคำหลักสำหรับการกำหนดขั้นตอน ฟังก์ชัน และบล็อกโปรแกรม โปรแกรมโดยรวมจะเริ่มต้นด้วยPROGRAMคำหลักเสริมตามด้วยชื่อโปรแกรม และจบด้วยเช่นเดิมENDรูทีนสามารถสร้างได้ด้วยSUB...END SUBและเรียกใช้โดยใช้CALL nameฟังก์ชันหลายบรรทัดสร้างด้วยFUNCTION...END FUNCTIONและไม่ต้องประกาศประเภทการส่งคืนเนื่องจากเป็นส่วนหนึ่งของชื่อ - ชื่อฟังก์ชันสตริงจะลงท้ายด้วยเครื่องหมายดอลลาร์ ค่าส่งคืนจะได้รับโดยการตั้งค่าตัวแปรให้มีชื่อเดียวกับฟังก์ชัน ตัวอย่างเช่น ฟังก์ชันชื่อ "DOIT" จะมีบรรทัดเช่นLET DOIT=1ฟังก์ชันสามารถเรียกฟังก์ชันอื่นและเรียกตัวเองได้ ซึ่งหมายความว่าภาษาเป็นแบบเรียกซ้ำโดย ธรรมชาติ [ 36 ] Full ยังคงรักษารูปแบบการกำหนดฟังก์ชันแบบบรรทัดเดียวแบบเดิมโดยใช้DEFคำหลัก แต่ลบข้อกำหนดที่ชื่อฟังก์ชันต้องเริ่มต้นด้วย "FN" ตัวอย่างDEF AVERAGE(X,Y)=(X+Y)/2เช่น[ 37 ]
ในภาษา BASIC รุ่นก่อนๆ ไม่มีแนวคิดเรื่องขอบเขตและตัวแปรทั้งหมดเป็นตัวแปรส่วนกลางซึ่งไม่เพียงพอสำหรับการสร้างโปรแกรมแบบโมดูลาร์ขนาดใหญ่ เนื่องจากโค้ดส่วนหนึ่งอาจเขียนโดยใช้ชื่อตัวแปรทั่วไป เช่นIและอาจเปลี่ยนแปลงค่าของตัวแปรนั้นได้ เนื่องจากตัวแปรเป็นตัวแปรส่วนกลาง มันจึงเก็บค่าที่แก้ไขแล้วไว้เมื่อกลับไปยังโค้ดเดิม แนวคิดสำคัญของการเขียนโปรแกรมแบบมีโครงสร้างคือตัวแปรภายในซึ่งเก็บค่าของมันแยกต่างหากจากตัวแปรอื่นๆ ที่มีชื่อเดียวกันในตำแหน่งอื่นๆ ในโปรแกรมแบบผสม เนื่องจาก BASIC ไม่มีแนวคิดเรื่องขอบเขต โปรแกรมจำนวนมากจึงอาศัยพฤติกรรมส่วนกลางและใช้ตัวแปรเพื่อส่งข้อมูลเข้าและออกจากซับรูทีน เพื่อให้สามารถใช้ทั้งสองแนวคิดในภาษาใหม่ได้ BASIC ฉบับเต็มจึงเพิ่มคำEXTERNALหลัก ที่สามารถเพิ่มลงในฟังก์ชันหรือซับรูทีน และทำให้ตัวแปรใดๆ ภายในนั้นเป็นตัวแปรภายใน[ 38 ]เนื่องจากโปรแกรม BASIC โดยทั่วไปจะวางซับรูทีนไว้ที่ส่วนท้ายของซอร์สโค้ดของโปรแกรมDECLAREคำหลัก จึงถูกเพิ่มเข้ามาเพื่อให้มีการประกาศล่วงหน้า[ 39 ]
ประเภทข้อมูลและตัวแปร
BASIC เวอร์ชันเต็มได้แนะนำชื่อตัวแปรที่ยาวขึ้น ซึ่งในที่สุดก็หลุดพ้นจากชื่อตัวแปรแบบตัวอักษรเดียวหรือตัวอักษรและตัวเลขแบบเดิม โดยกำหนดขีดจำกัดใหม่ไว้ที่ 31 ตัวอักษร ข้อเสียเล็กน้อยของการเปลี่ยนแปลงนี้คือ คำหลักต้องมีช่องว่างระหว่างกัน ในขณะที่เวอร์ชันก่อนหน้าส่วนใหญ่สามารถละเว้นช่องว่างได้ นี่เป็นเพราะว่าด้วยชื่อแบบตัวอักษรเดียว บรรทัดเช่นFORS=1TOAสามารถแยกวิเคราะห์ได้เป็น "FORS" ซึ่งเป็นไปไม่ได้ที่จะเป็นตัวแปรใน BASIC แบบสองตัวอักษร ในเวอร์ชันเต็ม จะต้องพิมพ์FOR S=1 TO Aเพราะ "FORS" เป็นชื่อตัวแปรที่ถูกต้อง[ 40 ]เช่นเดียวกับใน BASIC รุ่นก่อนๆ ชนิดข้อมูลในเวอร์ชันเต็มจะถูกระบุด้วยคำต่อท้ายในชื่อตัวแปร เวอร์ชันมินิมัลได้หลีกเลี่ยงปัญหานี้โดยมีเฉพาะตัวแปรตัวเลข แต่เวอร์ชันเต็มรวมถึงสตริงด้วย ซึ่งระบุโดยใช้เครื่องหมายดอลลาร์A$เช่น[ 27 ]
BASIC เต็มรูปแบบต้องการการคำนวณเลขฐานสิบสำหรับการใช้งาน ระบบ จุดลอยตัว ตามค่าเริ่มต้น เนื่องจากฮาร์ดแวร์ไม่ได้รองรับอย่างทั่วถึง โดยเฉพาะอย่างยิ่งในมินิและไมโคร จึงมีการเพิ่มคำOPTION ARITHMETIC NATIVEสั่งที่ระบุว่าควรดำเนินการคำนวณโดยใช้การใช้งานจุดลอยตัวตามค่าเริ่มต้นของระบบ ไม่ว่าจะเป็นแบบใดก็ตาม สามารถกลับไปใช้โหมด BCD ได้ด้วยคำสั่งOPTION ARITHMETIC DECIMALนี้ นอกจากนี้ยังมีตัวเลือกการคำนวณเลขจุดคงที่ หากติดตั้งไว้ ตัวแปรตัวเลขและสตริงทำงานเหมือนกับใน BASIC อื่นๆ[ 41 ]
ส่วนเพิ่มเติมใหม่คือส่วนขยายคณิตศาสตร์จุดคงที่ ซึ่งอนุญาตให้ตัวแปรมีความแม่นยำที่ระบุได้ เปิดใช้งานโดยใช้คำสั่งOPTIONAL ARITHMETIC FIXED[ b ]ตามด้วยเครื่องหมายดอกจันและตัวระบุรูปแบบ ตัวอย่างเช่นOPTION ARITHMETIC FIXED*8.2จะตั้งค่าตัวแปรตัวเลขทั้งหมดให้มีความแม่นยำ 8 หลักและทศนิยมสองตำแหน่ง การประกาศดังกล่าวต้องวางไว้ก่อนโค้ดคณิตศาสตร์ใดๆ ในส่วนที่เหลือของโปรแกรม[ 43 ]นอกจากนี้ ตัวแปรแต่ละตัวสามารถกำหนดได้โดยใช้สิ่งต่างๆDECLARE NUMERIC*8.2 A, Bเช่น[ 44 ]
ภาษา BASIC ส่วนใหญ่รองรับการสร้างตัวแปรอาร์เรย์โดยใช้DIMคำหลัก เช่นDIM A(5), B(2,2)กำหนดอาร์เรย์สองชุด คือ A แบบมิติเดียว และ B แบบสองมิติ (เมทริกซ์) ใน Full BASIC ขอบล่างของอาร์เรย์ใดๆ โดยปกติจะเป็น 1 ดังนั้นในกรณีนี้ ตัวแปร A มี "ช่อง" ห้าช่อง หมายเลข 1 ถึง 5 การใช้OPTION BASE 0ข้างต้นในการประกาศนี้จะเพิ่มช่องอีกช่องที่ดัชนี 0 [ 45 ] Full ยังเพิ่มระบบใหม่เพื่อระบุขอบล่างและขอบบนโดยตรงโดยใช้TOคำหลัก เช่นDIM A(100 TO 200)ซึ่งสร้างอาร์เรย์หนึ่งมิติที่มี 101 ช่อง[ 45 ]เพื่อให้เกิดความสับสนมากขึ้นDECLARE NUMERICยังสามารถใช้เพื่อสร้างอาร์เรย์ได้อีกด้วย มิติเดียวกันกับตัวอย่างสุดท้ายสามารถสร้างได้DECLARE NUMERIC A(100 TO 200)ด้วย[ 16 ]
คณิตศาสตร์ ตรรกศาสตร์ และเมทริกซ์
รายการตัวดำเนินการทางคณิตศาสตร์ที่รองรับประกอบด้วยตัวดำเนินการทั้งหมดจาก Minimal, , , , และ [ 46 ]+ฟังก์ชัน-ใหม่*จะ/ส่งคืนเศษ^เหลือของการหารจำนวนเต็ม รายการตัวดำเนินการตรรกะได้รับการขยาย, , และถูกลบออกจาก Minimal และตอนนี้ถูกเพิ่มกลับเข้ามาใหม่ และรูปแบบทางเลือกของตัวดำเนินการเปรียบเทียบถูกเพิ่มเข้ามา, , และ[ 31 ]MODANDORNOT=<=>><
รายการฟังก์ชันในตัวหลักยังคงคล้ายกับ BASIC เวอร์ชันก่อนหน้า รวมถึงตัวอย่างทั่วไป เช่นSQRหรือABSฟังก์ชันตรีโกณมิติได้รับการขยายให้รวมถึงASIN, ACOS, ATN, COT, CSCและ ฟังก์ชัน SECใหม่ANGLEจะส่งคืนมุมระหว่างจุดกำเนิดและจุด X,Y ที่กำหนด BASIC โดยปกติจะคำนวณมุมเป็นเรเดียน แต่OPTION ANGLE DEGREESจะแปลงพารามิเตอร์และเอาต์พุตทั้งหมดเป็นองศา และระบบจะแสดงPIฟังก์ชันที่ใช้ในการแปลงเหล่านี้และที่อื่น ๆ[ 47 ]
Dartmouth BASIC ได้นำการดำเนินการเมทริกซ์มาใช้ค่อนข้างเร็วในช่วงเริ่มต้นของการพัฒนา และการดำเนินการเหล่านี้เป็นส่วนหนึ่งของ Full การดำเนินการเหล่านี้ใช้ฟังก์ชันทางคณิตศาสตร์ที่มีอยู่เดิม ดังนั้นจึงสามารถคูณอาร์เรย์สองอาร์เรย์โดยใช้หรือMAT A=A*Bคูณเนื้อหาของอาร์เรย์ด้วยสเกลาร์ได้หากพารามิเตอร์ B ไม่ใช่อาร์เรย์ ระบบยังเพิ่มฟังก์ชันเฉพาะอาร์เรย์อีกหลายฟังก์ชัน ซึ่งรวมถึงZERo, INVert และDETerminate เป็นต้น การเพิ่มคณิตศาสตร์เมทริกซ์ยังต้องมีการแก้ไขคำหลักที่มีอยู่ เช่นPRINTและINPUTซึ่งส่งออกหรือรับองค์ประกอบหลายรายการตามความจำเป็นเพื่อเติมพารามิเตอร์อาร์เรย์[ 48 ]
เมทริกซ์อาจได้รับการปรับมิติใหม่เป็นส่วนหนึ่งของMAT INPUTการกำหนดขอบเขตใหม่ เช่น โดยMAT INPUT A(3.3)มิติใหม่จะต้องมีจำนวนองค์ประกอบทั้งหมดเท่ากับหรือน้อยกว่ามิติเดิมDIMดังนั้นในตัวอย่างนี้ หากนิยามเดิมคือDIM A(2,2)อินพุตจะทำให้เกิดข้อผิดพลาด[ 49 ]
สตริง
เวอร์ชันแรกๆ ของ Dartmouth BASIC ไม่รวมตัวแปรสตริงหรือการจัดการสตริง สตริงเดียวในโปรแกรมคือค่าคงที่ เช่นPRINT "HELLO, WORLD!"`H` เวอร์ชัน 4 ในปี 1968 ได้เพิ่มตัวแปรสตริงและเมธอดเดียวในการจัดการสตริง คือ `map` CHANGEซึ่งแปลงสตริงเป็นและจากอาร์เรย์ที่มี ค่า ASCIIของตัวอักษร ตัวอย่างเช่น `map` CHANGE "HELLO, WORLD!" TO Aจะสร้างอาร์เรย์ของค่าใน A โดยที่ A(0) คือ 72 ซึ่งเป็นค่า ASCII ทศนิยมของ "H" ทำให้การจัดการสตริงค่อนข้างยาก ตัวอย่างเช่น การแยก "HELLO" ออกจาก "HELLO, WORLD!" จะต้องทำดังนี้:
10 A$ = "HELLO, WORLD!" 20 DIM A ( 25 ), B ( 5 ) 30 CHANGE A$ TO A 40 FOR I = 1 TO 5 50 B ( I ) = A ( I ) 60 NEXT I 70 CHANGE B TO B$ภาษา BASIC หลายภาษาได้เพิ่มวิธีการจัดการสตริงที่มีประโยชน์มากขึ้นเพื่อหลีกเลี่ยงความซับซ้อนดังกล่าว สำหรับ Full BASIC คณะกรรมการได้เลือกรูปแบบหนึ่งของแนวคิดที่ HP นำเสนอ นั่นคือ "การแบ่งส่วนสตริง" แนวคิดนี้ถือว่าสตริงเป็นอาร์เรย์ของอักขระและสามารถเข้าถึงได้โดยใช้ข้อกำหนดคล้ายอาร์เรย์ที่เรียกว่า"ส่วนย่อย"ในการแยก "HELLO" จาก "HELLO, WORLD" ใน Full จะใช้B$=A$(1:5)แนวคิดนี้คล้ายกับCHANGEแต่เมธอดนี้สร้างผลลัพธ์ที่เป็นสตริง ไม่ใช่ค่าตัวเลข ดังนั้นจึงสามารถPRINT B$ใช้ เพื่อสร้าง "HELLO" ได้ ความแตกต่างที่สำคัญอย่างหนึ่งระหว่างแนวทางของ Full กับแนวทางก่อนหน้านี้ เช่น HP คือการใช้ไวยากรณ์ที่แตกต่างกันสำหรับการแบ่งส่วน ในขณะที่ระบบก่อนหน้านี้ใช้ไวยากรณ์อาร์เรย์ ตัวอย่างเช่น ใน HP บรรทัดที่เทียบเท่าคือB$=A$(1,5)เนื่องจากนี่เป็นไวยากรณ์เดียวกันกับการเข้าถึงอาร์เรย์ HP (และที่คล้ายกัน) โดยทั่วไปจึงไม่อนุญาตให้ใช้อาร์เรย์สตริง[ 50 ]ในขณะที่ Full อนุญาตให้ใช้[ 51 ]
แนวทางนี้ควรเปรียบเทียบกับวิธีแก้ปัญหาที่ DEC เลือกใช้ ซึ่งก็คือการใช้ฟังก์ชันที่ส่งคืนสตริงใหม่และLEFT$นี่คือวิธีแก้ปัญหาที่ Microsoft เลือกใช้เมื่อพวกเขาเขียน BASIC บนPDP-10การแปลงระหว่างสองสิ่งนี้อาจเกิดข้อผิดพลาดได้ หากต้องการทำสิ่งที่เทียบเท่ากับFull จะใช้[ 37 ]MID$RIGHT$RIGHT$(n)DEF Right$(A$, n) = A$(Len(A$)-n+l)
อินพุต/เอาต์พุต
อีกหนึ่งประเด็นสำคัญใน Full BASIC คือการรับส่งข้อมูล (I/O) ส่วน Minimal BASIC นั้นมีการรับส่งข้อมูลเพียงแค่คำสั่ง `input` INPUTและ `output` เท่านั้น PRINTรวมถึงความสามารถในการเขียนโค้ดข้อมูลโดยตรงโดยใช้DATAคำสั่ง `input` และREAD`output` ภาษา BASIC ที่ใช้งานได้จริงเกือบทั้งหมดได้เพิ่ม คำสั่ง `input` OPENและCLOSE`output` เพื่อสร้าง "ช่องสัญญาณ" ซึ่งใช้ในการอ้างอิงถึงไฟล์หรืออุปกรณ์นั้นๆ
INPUTขณะนี้รวมถึงตัวเลือกPROMPTเสริม ตามด้วยสตริง เครื่องหมายโคลอน และตัวแปรอินพุต เช่นINPUT PROMPT "What is your age? " : A[ 52 ] ในเวลานี้ BASIC เกือบทั้งหมดมีคุณสมบัติที่คล้ายกันโดยไม่มีคำว่าPROMPTและใช้เครื่องหมายเซมิโคลอนเป็นตัวคั่นการพิมพ์ที่มีอยู่แทนเครื่องหมายโคลอน เช่น ใน MS BASIC บรรทัดเดียวกันจะเป็นINPUT "What is your age? "; Aนอกจากนี้ Full ยังเพิ่มคำหลักใหม่TIMEOUTและELAPSED: INPUT TIMEOUT 30, ELAPSED T, PROMPT "What is your age? ": Aซึ่งจะดำเนินการต่อไปหลังจาก 30 วินาทีแม้ว่าผู้ใช้จะไม่ได้ป้อนอะไรเลย และจะใส่เวลาที่ใช้ไป ซึ่งอาจเป็น 30 วินาที ลงในตัวแปร T สำหรับระบบที่ไม่มีนาฬิกา (ซึ่งไม่ใช่เรื่องแปลกในเวลานั้น) T จะส่งคืนค่า -1 เสมอ[ 53 ]
PRINTing ได้รับการขยายเพิ่มเติมในทำนองเดียวกันด้วยUSINGคำสั่งเสริม ซึ่งปรากฏอยู่แล้วในการใช้งานหลายครั้งUSINGโดยปกติจะตามด้วยสตริงรูปแบบที่ใช้เครื่องหมายตัวเลข เครื่องหมายดอกจัน และเครื่องหมายเปอร์เซ็นต์เพื่อทำเครื่องหมายตำแหน่งทศนิยม สตริงรูปแบบสามารถใส่ไว้ในตัวแปรสตริงแล้วอ้างอิงถึง หรือIMAGE :สามารถอ้างอิงถึงบรรทัดแยกต่างหากที่มีได้โดยหมายเลขบรรทัด[ 54 ] [ c ] Full ยังเพิ่มคำสั่งใหม่เพื่อตั้งค่าพื้นที่การพิมพ์SET MARGINและSET ZONEWIDTH[ 55 ]ค่าปัจจุบันของการตั้งค่าต่างๆ เหล่านี้ (และอื่นๆ) สามารถส่งคืนได้โดยใช้ตัวอย่างASKเช่นSET MARGIN 10ตามด้วยASK MARGIN Jจะตั้งค่า J เป็น 30 [ 56 ]
รองรับการดำเนินการไฟล์อย่างเต็มรูปแบบด้วยและ และหมายเลขช่องที่นำหน้าด้วยเครื่องหมาย # เช่น จากนั้นสามารถเขียนข้อมูลโดยใช้ และ หรือ และ ใหม่ [ 57OPEN ] CLOSEคำOPEN #3: NAME "afile"สั่งINPUTการPRINTจัดการREADไฟล์เพิ่มเติมWRITEได้แก่และและคำสั่งเหล่านี้ทั้งหมดมีตัวเลือกและโหมดมากมาย ส่วนใหญ่เกิดจากอุปกรณ์ทางกายภาพประเภทต่างๆ ที่ยังคงใช้กันทั่วไปในช่วงปลายทศวรรษ 1970 เช่น เทปแม่เหล็กสามารถเข้าถึงได้ตามลำดับเท่านั้น ดังนั้นมาตรฐานใหม่จึงมีตัวเลือกสำหรับหรือเป็นต้น รายการตัวเลือก การโต้ตอบ และข้อจำกัดต่างๆ ครอบคลุมหลายหน้าในมาตรฐาน[ 58 ]ตัวอย่างเช่น เป็นไปได้ที่จะเขียนไฟล์ประเภท แต่ไม่ใช่ประเภท ซึ่งต้องใช้[ 59 ]ERASEREWRITESEQUENTIALSTREAMPRINTDISPLAYINTERNALWRITE
การจัดการข้อผิดพลาดและการดีบัก
เช่นเดียวกับ BASIC หลายๆ ตัวในยุคนั้น Full ได้เพิ่มTRACE ONคำสั่งที่จะพิมพ์หมายเลขบรรทัดออกมาขณะที่โปรแกรมทำงาน นอกจากนี้ยังสามารถเปลี่ยนเส้นทางการพิมพ์หมายเลขบรรทัดไปยังอุปกรณ์หรือไฟล์อื่นโดยใช้TRACE ON TO #3โดยที่ #3 คือช่องที่เปิดไว้ก่อนหน้านี้ มันยังเพิ่ม คำสั่ง DEBUG ONและคำสั่งที่เกี่ยวข้องBREAKซึ่งคำสั่งหลังจะทำให้เกิดข้อยกเว้นหากการดีบักถูกเปิดใช้งานไว้ก่อนหน้านี้ สถานะการดีบักถูกจำกัดไว้เฉพาะโปรแกรมใดโปรแกรมหนึ่ง ดังนั้นจึงสามารถเปิดใช้งานในโปรแกรมหนึ่งและปิดใช้งานในโปรแกรมย่อยได้ ตัวอย่างเช่น[ 60 ]
นอกจากนี้ Full ยังเพิ่มตัวจัดการข้อยกเว้นที่แท้จริงโดยอิงตามWHEN EXCEPTION...END WHENบล็อก มีสองวิธีในการใช้งาน หากบล็อกโค้ดเริ่มต้นด้วยWHEN EXCEPTION INโค้ดต่อไปนี้จะถูกดำเนินการเป็นบล็อก และข้อยกเว้นใด ๆ ภายในบล็อกจะทำให้กระโดดไปยังUSEส่วน ซึ่งทำงานคล้ายกับ นอกจากนี้ELSEยังสามารถใช้งานได้โดยการกำหนดบล็อกที่คล้ายกับซับรูทีนแยกต่างหากโดยใช้HANDLER nameซึ่งจะถูกเรียกใช้ตามชื่อโดยใช้WHEN EXCEPTION USE name[ 61 ] โค้ดสามารถทดสอบว่าเกิดข้อยกเว้นใดขึ้นโดยใช้เมตาตัวแปรEXTYPEหรือEXTEXT$ซึ่งทั้งสองอย่างไม่จำเป็นต้องใช้ASKออกRETRYจากตัวจัดการข้อผิดพลาดและกลับไปยังบรรทัดที่เกิดข้อผิดพลาด ในขณะที่CONTINUEสามารถใช้ภายในโค้ดหลักเพื่อละเว้นข้อผิดพลาดแม้ภายในWHENบล็อก[ 62 ]
กราฟิก
ในช่วงเวลาเดียวกันกับการออกแบบ Full ก็มีความพยายามควบคู่กันไปในการกำหนดระบบเคอร์เนลกราฟิกหรือ GKS ซึ่งถูกนำเสนอเป็นหนึ่งในโมดูลเสริมใน Full โดยเพิ่มคำหลักพิเศษหลายสิบคำ เช่นLINE STYLEและWINDOWด้วยไวยากรณ์ที่ไม่ตรงกับโมดูลอื่นๆ ในมาตรฐาน ตัวอย่างเช่น CLIPคำสั่ง จะเปิดใช้งานการตัดภาพให้อยู่ในวิวพอร์ตปัจจุบัน เพื่อไม่ให้มองเห็นรายการที่วาดอยู่นอกขอบเขต ซึ่งรับค่าสตริงแทนค่าบูลีน [ 63 ] นอกจากนี้CLIP "On"ยังมีการเพิ่มคำสั่งแก้ไขภาพทั่วไปหลายคำสั่งเช่นSHIFT , SCALE, ROTATEและSHEAR[ 64 ]
เนื่องจากภาพมักสร้างขึ้นจากองค์ประกอบทั่วไป Full จึงเพิ่มPICTUREโครงสร้างบล็อกใหม่ ซึ่งโดยทั่วไปคล้ายกับSUBและเรียกใช้ด้วยDRAWแทนที่จะเป็นCALL[ 65 ] ความแตกต่างคือ ผลลัพธ์ของบล็อกรูปภาพสามารถแก้ไขได้ด้วยการแก้ไขโดยใช้WITHตัวอย่างเช่น หากกำหนดPICTURE CIRCLEซึ่งสร้างวงกลมที่มีรัศมีหนึ่ง วงกลมที่เล็กกว่าสามารถวาดและย้ายไปด้านข้างได้DRAW CIRCLE WITH SHIFT(2) * SCALE(.4)ด้วย[ 65 ]
เรียลไทม์
โมดูลเรียลไทม์ของ Full เพิ่มแนวคิดของ "ส่วนคู่ขนาน" ผ่านPARACTคีย์เวิร์ด สิ่งเหล่านี้ดูเหมือนรูทีนย่อย (และรูปภาพ) แต่มีคีย์เวิร์ดเพิ่มเติมจำนวนหนึ่งที่ควบคุมการเรียกใช้งาน ตัวอย่างเช่น สามารถกำหนดโค้ดที่จะตอบสนองต่อEVENTและจากนั้นทำให้ทำงานโดยการออกคำMESSAGEสั่งที่อื่นในโค้ด ข้อความสามารถเรียกใช้ตัวจัดการหลายตัวโดยใช้SHAREDแนวคิดพอร์ต[ 66 ]
ระบบยังอนุญาตให้เชื่อมต่อบล็อกและวัตถุเหล่านี้กับโค้ดภายนอกที่จะสร้างข้อความเหล่านี้ได้ ตัวอย่างเช่น อาจมีโค้ดที่รออุปกรณ์ที่สร้างเอาต์พุตข้อความเป็นระยะ จากนั้นตัวจัดการที่เหมาะสมจะถูกเรียกโดยอัตโนมัติเมื่อมีข้อความใหม่ เนื่องจากข้อมูลจริงจากอุปกรณ์ดังกล่าวมีแนวโน้มที่จะเป็นข้อมูลหลายส่วน ไม่ใช่สิ่งง่ายๆ เช่น สตริงหรือตัวเลข ไลบรารีแบบเรียลไทม์จึงเพิ่มความสามารถในการกำหนดSTRUCTUREs ที่สามารถอ่านหรือเขียนเป็นหน่วยอะตอมได้[ 67 ]จากนั้นจะอ่านและเขียนโดยใช้คำสั่งIN FROMand [ 68 ]หรือหากข้อมูลเป็น จะ ใช้ คำ สั่ง and ที่คล้ายกัน[ 69 ]OUT TOSHAREDGET FROMPUT TO
แม้ว่าโปรแกรมแบบเรียลไทม์จำนวนมากสามารถจำลองได้ว่าเป็นระบบที่ตอบสนองต่อเหตุการณ์ภายนอกเท่านั้น แต่ก็เป็นเรื่องปกติที่โปรแกรมเองจะโพสต์เหตุการณ์เหล่านี้เป็นระยะๆ ด้วยเหตุนี้ Full จึงเพิ่มSTARTคำสั่งและที่เกี่ยวข้องWAITซึ่งจะหยุดการทำงานชั่วคราวเป็นเวลาที่กำหนดDELAY(จำนวนวินาที) หรือTIME(เวลาที่ระบุอย่างชัดเจน) หรือจนกว่าEVENTจะเห็น[ 70 ]
ECMA เทียบกับ ANSI
มาตรฐาน ECMA และ ANSI ไม่ได้ถูกพัฒนาร่วมกัน แต่พัฒนาไปพร้อมๆ กัน แม้ว่าจะมีสมาชิกคณะกรรมการที่ทับซ้อนกันก็ตาม ในทางกลับกัน กลุ่มทำงาน ISO สำหรับ BASIC ไม่ได้พัฒนามาตรฐานของตนเอง แต่กลับวางแผนที่จะนำมาตรฐาน ECMA หรือ ANSI มาใช้แทน[ 71 ]
โดยไม่ขึ้นอยู่กับ ANSI คณะกรรมการ ECMA ที่รับผิดชอบมาตรฐาน BASIC ได้แบ่ง BASIC ออกเป็นสองส่วน คือ ECMA BASIC-1 และ ECMA BASIC-2 BASIC-1 ประกอบด้วยระบบจัดการไฟล์บางส่วน แต่ขาดการจัดการข้อยกเว้น ในขณะที่ BASIC-2 เพิ่มชุดคำสั่งไฟล์แบบเต็มรูปแบบ การคำนวณเลขฐานสิบคงที่ และระบบจัดการข้อยกเว้น[ 1 ]นอกจากนี้ ใน BASIC-1 คำหลักพื้นฐานทั้งหมด เช่นPRINTเป็นคำสงวนที่ทำให้การแยกวิเคราะห์ง่ายขึ้น ในขณะที่ใน BASIC-2 คำหลักเหล่านี้เป็นไปตามรูปแบบของ ANSI และสามารถใช้ได้ภายในรูทีนย่อยและฟังก์ชันที่ผู้ใช้สร้างขึ้น[ 1 ]
ในตอนแรกคณะทำงาน ISO วางแผนที่จะใช้มาตรฐานของ ECMA เมื่อเผชิญกับปัญหาของมาตรฐานผู้สมัครสองแบบที่แตกต่างกัน ในเดือนกันยายน พ.ศ. 2530 จึงได้รับคำสั่งให้พัฒนามาตรฐานสากลเดียวที่รวมทั้งสองมาตรฐานเข้าด้วยกัน ซึ่งทำได้โดยการระบุว่าการปฏิบัติตามมาตรฐานใดมาตรฐานหนึ่งก็สามารถอ้างได้ว่าสอดคล้องกับมาตรฐาน ISO [ 71 ]
หมายเหตุ
อ่านเพิ่มเติม
- Kemeny, John; Kurtz, Thomas (1987). การเขียนโปรแกรม BASIC แบบมีโครงสร้าง . Wiley. ISBN 9780471810872.
ลิงก์ภายนอก
- Decimal BASIC - การนำ Full BASIC และโมดูลกราฟิกมาใช้งานอย่างค่อนข้างสมบูรณ์
สรุปเนื้อหา
ข้อมูลสำคัญจากบทความ
ข้อมูลสำคัญเกี่ยวกับ พื้นฐานเต็มรูปแบบ
ภาษา BASIC ฉบับเต็ม หรือที่รู้จักกันในชื่อ Standard BASIC หรือ ANSI BASIC เป็น มาตรฐานสากล ที่กำหนดรูปแบบหนึ่งของ ภาษาโปรแกรม BASIC พัฒนาโดย กลุ่ม ANSI X3.
พื้นฐานขั้นต่ำ
การเปิดตัว Dartmouth BASIC ในปี 1964 ได้รวมแนวคิดใหม่ๆ หลายอย่างในสาขาคอมพิวเตอร์เข้าด้วยกัน รวมถึง การแบ่งเวลาใช้งาน และการโต้ตอบโดยตรงกับผู้ใช้ ซึ่งในขณะนั้นเรียกว่า "อินเทอร์เฟซแบบสนทนา" บริษัท General Electric ซึ่งเป็นผู้จัดหา คอมพิวเตอร์ เมนเฟรม GE 235...
พื้นฐานเต็มรูปแบบ
จากนั้นกลุ่มก็หันมาสนใจ Full BASIC ในช่วงเวลานี้ การปฏิวัติ ไมโครคอมพิวเตอร์ กำลังดำเนินไปอย่างเต็มที่ และเครื่องจักรหลายล้านเครื่องที่ใช้ Microsoft BASIC หรือ BASIC ที่คล้ายกันกำลังเข้าสู่ตลาด [ a ] ถึงกระนั้น...
ทรูเบสิก
กระบวนการกำหนดมาตรฐานนั้นช้ามากจนแม้แต่ผู้เขียน Structured BASIC ก็ยังยอมแพ้ในที่สุด Stephen Garland ได้รับมอบหมายให้เตรียมชุด ข้อสอบ College Board สำหรับนักเรียนมัธยมปลาย และเขาเขียนข้อสอบเหล่านั้นด้วย ภาษา Pascal แทน ซึ่งค่อนข้างเป็นที่ถกเถียงกัน...