อ่าน 5 นาที
บีเอส (ภาษาโปรแกรม)
bs เป็นภาษาโปรแกรมและคอมไพเลอร์/อินเตอร์พรีเตอร์สำหรับโปรแกรมขนาดปานกลางบนระบบ UNIX [ 1 ] คำสั่ง นี้ bs สามารถเรียกใช้ได้ทั้งสำหรับการเขียนโปรแกรมแบบโต้ตอบหรือด้วยไฟล์ที่มีโปรแกรม...
บีเอส (ภาษาโปรแกรม)
| บีเอส | |
|---|---|
| ออกแบบโดย | ริชาร์ด ซี. ไฮท์ |
| ปรากฏครั้งแรก | 1980 |
| โอเอส | ยูนิกซ์ |
| ได้รับอิทธิพลจาก | |
| เบสิก , สโนบอล4 , ซี | |
bsเป็นภาษาโปรแกรมและคอมไพเลอร์/อินเตอร์พรีเตอร์สำหรับโปรแกรมขนาดปานกลางบนระบบUNIX [ 1 ] คำสั่ง นี้bsสามารถเรียกใช้ได้ทั้งสำหรับการเขียนโปรแกรมแบบโต้ตอบหรือด้วยไฟล์ที่มีโปรแกรม โดยอาจรับอาร์กิวเมนต์ผ่านเชลล์ Unixเช่น การใช้Shebang (Unix#!/usr/bin/bs )
หน้า man pageในยุคแรกระบุว่า "[ bs] เป็นลูกหลานที่ห่างไกลของBasic [sic] และSNOBOL4 โดยมี Cผสมอยู่เล็กน้อย " [ 1 ]
ประวัติศาสตร์
คำสั่ง นี้bsปรากฏในUNIX System III Release 3.0 (1980) ซึ่งเผยแพร่ครั้งแรกนอกBell Labsในปี 1982 [ 1 ]เขียนโดย Dick Haight (Richard C. Haight) ประมาณปี 1978 ซึ่งเล่าไว้ดังนี้: [ 2 ]
bsตอนนั้นผมเขียนโปรแกรม บน Unix (เวอร์ชัน 3?) และคำสั่งทั้งหมดกำลังถูกแปลงจากภาษาแอสเซมบลีเป็นภาษาซี ดังนั้น [ งานของKen Thompsonbas ] จึงกลายเป็นของผมไปbsโดยปริยาย
คู่มือ Release 3.0 กล่าวถึงbsอย่างเด่นชัดในหน้า 9 (เน้นข้อความ): [ 3 ]
การเขียนโปรแกรมในการป้อนข้อความของโปรแกรมต้นฉบับลงในไฟล์ UNIX ให้ใช้คำสั่ง `.` ed(1)ภาษาหลักสี่ภาษาที่มีให้ใช้งานใน UNIX ได้แก่ C (ดู ` cc(1).`), Fortran (ดู ` f77(1).`), bs (คอมไพเลอร์/อินเตอร์พรีเตอร์ในลักษณะเดียวกับ Basic ดู ` bs(1).`)และภาษาแอสเซมบลี (ดู ` as(1).`)
แม้ว่าจะไม่ได้เผยแพร่ออกสู่ภายนอกก่อน System III แต่bsคำสั่งนี้ก็มีอยู่ภายใน UNIX/TS 1.0 (พฤศจิกายน 1978) [ 4 ] PWB/UNIX 2.0 (มิถุนายน 1979) [ 4 ]และCB UNIXรุ่น 2.1 (พฤศจิกายน 1979) [ 5 ]และ 2.3 (1981) [ 6 ] คำสั่ง นี้bsไม่ปรากฏในเวอร์ชันภายในก่อนหน้านี้บางเวอร์ชัน เช่น เวอร์ชันเดือนมีนาคม 1977 ของ UNIX Support Group [ 4 ]หรือคู่มือ PWB/UNIX ลงวันที่พฤษภาคม 1977 [ 7 ] ซึ่งบ่งชี้ว่าสร้างขึ้นประมาณปี 1978 คำ สั่ง นี้ไม่ปรากฏในResearch Unix เวอร์ชันใด ๆ หรือBerkeley Software Distribution
ต่อมาในช่วงทศวรรษ 1990 bsได้ถูกรวมไว้ในระบบปฏิบัติการเชิงพาณิชย์ต่างๆ ที่ได้มาจาก System III หรือ System V ซึ่งรวมถึงแต่ไม่จำกัดเพียง: PC/IX ; [ 8 ] UNIX System Vรุ่น 2 และ 3: SVR2 , [ 9 ] SVR3 , SVR3.2 (1986); [ 10 ] HP-UX ; [ 11 ] AIX ; [ 12 ]และA/UX . [ 13 ] (คู่มือผู้ใช้สำหรับAT&T UNIX PC (3B1) ระบุอย่างชัดเจนว่าbsคำสั่งนี้ไม่สามารถใช้งานได้ แต่สามารถใช้งานได้ใน SVR3.2 [ 9 ] )
บางครั้งbsถูกยกย่องให้เป็นหนึ่งในภาษาโปรแกรมหลักสำหรับการพัฒนาภายใต้ UNIX [ 3 ] [ 8 ] [ 14 ]อย่างไรก็ตามbsไม่ได้รวมอยู่ใน คำสั่งและยูทิลิตี้ POSIX.1 ( รายการคำสั่ง Unix มาตรฐาน ) หรือในข้อกำหนด UNIX เดียวและไม่ได้มีให้ในระบบปฏิบัติการร่วมสมัยส่วนใหญ่ ตัวอย่างเช่น ในLinuxไวยากรณ์และฟังก์ชันการทำงานที่คล้ายกันมีให้โดยbc , PerlและPOSIX shell
ในศตวรรษที่ 21 bsปรากฏอยู่ในอย่างน้อยHP-UXรุ่น 11i (2000) [ 11 ]เช่นเดียวกับAIXเวอร์ชัน 6.1 (2007) [ 12 ]และ 7.2 (2018) [ 15 ]ซึ่งน่าจะเป็นผลมาจากมรดก ของ UNIX System V
การออกแบบและคุณสมบัติ
bs[ 1 ] หน้าคู่มือ man pageซึ่งดูเหมือนจะเป็นข้อกำหนดเพียงอย่างเดียวของภาษาการเขียนโปรแกรม อธิบายลักษณะไว้ดังนี้:
Bsถูกออกแบบมาสำหรับงานเขียนโปรแกรมที่เวลาในการพัฒนาโปรแกรมมีความสำคัญพอๆ กับความเร็วในการประมวลผล ลดขั้นตอนการประกาศข้อมูลและการจัดการไฟล์/กระบวนการให้น้อยที่สุด การดีบักแบบบรรทัดต่อบรรทัด คำสั่ง ` traceand` และdumpข้อความแสดงข้อผิดพลาดขณะรันไทม์ที่มีประโยชน์ ล้วนช่วยให้การทดสอบโปรแกรมง่ายขึ้น นอกจากนี้ ยังสามารถดีบักโปรแกรมที่ไม่สมบูรณ์ได้สามารถทดสอบฟังก์ชันภายใน ก่อนที่ จะเขียนฟังก์ชันภายนอก และในทางกลับกันได้
โปรแกรมbsจะถูกคอมไพล์และดำเนินการแตกต่างจากโปรแกรมที่เขียนด้วยภาษาการเขียนโปรแกรม Unix หลักอื่นๆ ในเวลานั้น ได้แก่C , FORTRANและภาษาแอสเซมบลีซึ่งคำสั่งต่างๆ จะคอมไพล์ซอร์สโค้ดของโปรแกรมเป็นเอาต์พุตแอสเซมบลีที่สามารถเรียกใช้งานได้ ( a.out ) ในทางกลับกันbsโปรแกรมจะถูกแปลงโดยbsคำสั่งให้เป็นตัวแทนระดับกลาง แบบ Reverse Polish ( RPN ) ภายในก่อน จากนั้นจึงดำเนินการโดย เครื่องสแต็กเสมือนภายในของคำสั่ง[ 16 ] ดังนั้น ภาษาจึงเป็นทั้งตัวแปลและตัวคอมไพล์ แบบไฮบริด และเป็นความแตกต่างใน การเขียนโปรแกรม UnixจากUnix โบราณbs
ภาษาโปรแกรม นี้bsมีคุณสมบัติและไวยากรณ์บางส่วนร่วมกับBASIC , SNOBOLและCโดยสันนิษฐานว่าสองภาษาแรกเป็นแรงบันดาลใจให้ชื่อของมัน เช่นเดียวกับ BASIC มันสามารถใช้งานแบบโต้ตอบได้ ทั้งการเรียกใช้คำสั่งทันทีหรือการรวบรวมคำสั่งเหล่านั้นไว้ในโปรแกรมเพื่อเรียกใช้ในภายหลัง เช่นเดียวกับใน SNOBOL4 ตัวดำเนินการกำหนดค่า ( =) ใช้สำหรับการรับส่งข้อมูลและbsสามารถเรียกใช้โค้ดในสตริงโดยใช้ ฟังก์ชัน evalนอกจากนี้ยังรวมถึงตัวดำเนินการตรวจสอบ ( ) ของ SNOBOL ?ซึ่งใช้เพื่อทดสอบว่าการประเมินนิพจน์สำเร็จหรือไม่ ฟังก์ชันในตัวformatซึ่งจำกัดไว้ที่อาร์กิวเมนต์เดียว รองรับตัวระบุการแปลงรูปแบบย่อยของ C printfเช่น "%f"
ภาษานี้มีองค์ประกอบที่โดดเด่นอยู่บ้าง ตัวอย่างเช่น ฟังก์ชันของโปรแกรมถูกกำหนดโดยใช้ไวยากรณ์ และฟังก์ชันเหล่านั้นสามารถมีตัวแปรภายในได้ นอกจากนี้ ยังสามารถทำงานได้สองโหมด คือ การตีความ (และดำเนินการ) คำสั่งและโปรแกรม หรือการคอมไพล์ และสลับระหว่างสองโหมดโดยใช้และอย่างไรก็ตาม ฟังก์ชันการทำงานของมันมีความโดดเด่นเฉพาะในภาพรวม (ในภาษาเดียว) เท่านั้น เนื่องจากคุณสมบัติแต่ละอย่างนั้นซ้ำซ้อนกับเครื่องมือที่มีอยู่ร่วมกัน เช่นUnix Shellเช่น การอ่าน/เขียนไฟล์และลูป และAWKเช่น อาร์เรย์แบบเชื่อมโยงและการจับคู่ ด้วยนิพจน์ปกติfun ... nufbscompilestop
ภาษา ดัง bsกล่าวถูกสร้างขึ้นเพื่อความสะดวกในการพัฒนาและแก้ไขข้อผิดพลาดของโปรแกรมขนาดเล็กแบบโมดูลาร์ มันมีไวยากรณ์และคุณสมบัติจากภาษาโปรแกรมยอดนิยมรุ่นก่อนๆ แต่มีการคอมไพล์ภายใน ซึ่งแตกต่างจากสคริปต์เชลล์ดังนั้น ในแง่ของวัตถุประสงค์ การออกแบบ และฟังก์ชันการทำงาน มันจึง เป็นภาษาโปรแกรมแบบไฮบริดที่ใช้ทั้ง การตีความและการคอมไพล์bsซึ่งไม่ค่อยเป็นที่รู้จักมากนัก และเป็นต้นแบบที่เรียบง่ายของภาษา โปรแกรมเหล่า นั้น
ตัวอย่างไวยากรณ์
ตัวอย่างต่อไปนี้ได้มาจาก หน้าbs(1)คู่มือ A/UX [ 17 ]
ตัวอย่างนี้ใช้bsเป็นเครื่องคิดเลข:
$ bs # ระยะทาง (นิ้ว) ที่แสงเดินทางในหนึ่งนาโนวินาที186000 * 5280 * 12 / 1e9 11 .78496 ... # ดอกเบี้ยทบต้น# (6% เป็นเวลา 5 ปี จากเงินต้น 1,000 ดอลลาร์) int = .06 / 4 bal = 1000 for i = 1 5 *4 bal = bal + bal*int bal - 1000 346 .855007 ... ออก
ตัวอย่างนี้คือโครงร่างของbsโปรแกรมทั่วไป:
# เริ่มต้นการทำงาน: var1 = 1 เปิด( "read" , "infile" , "r" ) ... # คำนวณ: ในขณะที่ ? ( str = read ) ... ถัดไป# ทำความสะอาด: ปิด( "read" ) ... # คำสั่งสุดท้ายที่ดำเนินการ (ออกหรือหยุด): ออก# บรรทัดอินพุตสุดท้าย: วิ่ง
ตัวอย่างนี้แสดงให้เห็นถึงการรับส่งข้อมูล (I/O):
# คัดลอก "oldfile" ไปยัง "newfile" เปิด( "อ่าน" , "oldfile" , "r" ) เปิด( "เขียน" , "newfile" , "w" ) ... ในขณะที่ ? ( write = read ) ... # ปิด "อ่าน" และ "เขียน": ปิด( "อ่าน" ) ปิด( "เขียน" ) # ใช้คำสั่ง pipe ระหว่างคำสั่งต่างๆ เปิด( "ls" , "!ls *" , "r" ) เปิด( "pr" , "!pr -2 -h 'List'" , "w" ) ในขณะที่ ? ( pr = ls ) ... ... # อย่าลืมปิด (รอ) คำสั่งเหล่านี้: ปิด( "ls" ) ปิด( "pr" )
ตัวอย่างโปรแกรม
ต่อไปนี้เป็นbsโปรแกรมตัวอย่างที่เปล่งเสียงเนื้อเพลง99 Bottles of Beer/usr/bin/bsโดยใช้[ 18 ]
fun sing ( n , end ) s s = ( "s" , "" ) [ match ( n , "^1$" ) ] put = format ( format ( format ( "%s bottle%%s of beer%%%%s" , n ), s ), end ) nufสำหรับn = 99 , n , put = "" sing ( format ( "%-0.0f" , n ), " บนกำแพง," ) sing ( format ( "%-0.0f" , n ), "," ) put = "หยิบลงมาหนึ่งอัน ส่งต่อกันไปมา," -- n sing (( format ( "%-0.0f" , n ), "ไม่" ) [ 0 == n ] , " บนกำแพง." ) next
ดูเพิ่มเติม
สรุปเนื้อหา
ข้อมูลสำคัญจากบทความ
ข้อมูลสำคัญเกี่ยวกับ บีเอส (ภาษาโปรแกรม)
bs เป็นภาษาโปรแกรมและคอมไพเลอร์/อินเตอร์พรีเตอร์สำหรับโปรแกรมขนาดปานกลางบนระบบ UNIX [ 1 ] คำสั่ง นี้ bs สามารถเรียกใช้ได้ทั้งสำหรับการเขียนโปรแกรมแบบโต้ตอบหรือด้วยไฟล์ที่มีโปรแกรม...
ประวัติศาสตร์
คำสั่ง นี้ bs ปรากฏใน UNIX System III Release 3.0 (1980) ซึ่งเผยแพร่ครั้งแรกนอก Bell Labs ในปี 1982 [ 1 ] เขียนโดย Dick Haight (Richard C. Haight) ประมาณปี 1978 ซึ่งเล่าไว้ดังนี้: [ 2 ]
การออกแบบและคุณสมบัติ
bs [ 1 ] หน้า คู่มือ man page ซึ่งดูเหมือนจะเป็นข้อกำหนดเพียงอย่างเดียวของภาษาการเขียนโปรแกรม อธิบายลักษณะไว้ดังนี้:
ตัวอย่างไวยากรณ์
ตัวอย่างต่อไปนี้ได้มาจาก หน้า bs(1) คู่มือ A/UX [ 17 ]