กลับไปหน้าบทความ

อ่าน 8 นาที

กระรอก (ภาษาโปรแกรม)

Squirrel เป็น ภาษาโปรแกรมเชิงวัตถุระดับสูงที่ออกแบบมาให้เป็นภาษาสคริปต์น้ำหนักเบาที่เหมาะสมกับขนาด แบนด์วิดท์หน่วยความจำ และข้อกำหนดแบบเรียลไทม์ของแอปพลิเคชันต่างๆ เช่นวิดีโอเกม...

กระรอก (ภาษาโปรแกรม)

( เรียนรู้วิธีและเวลาในการลบข้อความนี้ )
กระรอก
กระบวนทัศน์รูปแบบการเขียนโปรแกรมหลายแบบ : การเขียนสคริปต์ , การเขียน โปรแกรมเชิงคำสั่ง , การเขียนโปรแกรมเชิงฟังก์ชัน , การเขียนโปรแกรมเชิงวัตถุ
ออกแบบโดยอัลแบร์โต เดมิเชลิส
ปรากฏครั้งแรก6 กันยายน 2546 ( 6 กันยายน 2546 )
เวอร์ชันเสถียร
3.2 [ 1 ] แก้ไขข้อมูลนี้บนวิกิดาต้า / 10 กุมภาพันธ์ 2022 ( 10 กุมภาพันธ์ 2565 )
วินัยในการพิมพ์พลวัต
โอเอสข้ามแพลตฟอร์ม
ใบอนุญาตใบอนุญาต MIT
นามสกุลไฟล์.นัท
เว็บไซต์squirrel-lang .orgแก้ไขข้อมูลนี้ได้ที่วิกิดาต้า
ได้รับอิทธิพลจาก
C++ , JavaScript , Lua , Python
ได้รับอิทธิพล
MiniD (ปัจจุบันเปลี่ยนชื่อเป็น Croc)

Squirrel เป็น ภาษาโปรแกรมเชิงวัตถุระดับสูงที่ออกแบบมาให้เป็นภาษาสคริปต์น้ำหนักเบาที่เหมาะสมกับขนาด แบนด์วิดท์หน่วยความจำ และข้อกำหนดแบบเรียลไทม์ของแอปพลิเคชันต่างๆ เช่นวิดีโอเกม โดยเปิด ตัว เมื่อวันที่ 6 กันยายน 2546

MirthKit ซึ่งเป็นชุดเครื่องมืออย่างง่ายสำหรับการสร้างและเผยแพร่เกม 2 มิติแบบโอเพนซอร์สข้ามแพลตฟอร์ม ใช้ Squirrel เป็นแพลตฟอร์ม[ 2 ] Code::Blocksใช้ Squirrel อย่างกว้างขวางสำหรับการเขียนสคริปต์ และยังใช้ในFinal Fantasy Crystal Chronicles: My Life as a Kingอีก ด้วย [ 3 ] [ 4 ]นอกจากนี้ยังใช้ในLeft 4 Dead 2 , Portal 2 , Team Fortress 2 , Thimbleweed ParkและWar Thunderสำหรับเหตุการณ์ที่เขียนสคริปต์ และในNewDarkซึ่งเป็นการอัปเดตเอนจิ้นที่ไม่เป็นทางการของ Thief 2: The Metal Ageเพื่ออำนวยความสะดวกในการเขียนสคริปต์เหตุการณ์ภารกิจเพิ่มเติมที่ง่ายขึ้น นอกเหนือจากการเขียนสคริปต์C ทั่วไป [ 5 ]

ลักษณะทางภาษา

สถานะการพัฒนา

เวอร์ชัน 2.0 เปิดตัวเมื่อวันที่ 3 เมษายน 2548

เวอร์ชันเสถียรปัจจุบันคือ 3.2 เมื่อวันที่ 10 กุมภาพันธ์ 2022 [ 6 ]

โครงการนี้ได้รับการออกแบบให้คอมไพล์และรันบน Windows (86x, 64x), Linux, Illumos (ทั้ง x86 และ x64), Android, IOS, Mac OS และ FreeBSD [ 7 ]

ได้รับการทดสอบกับคอมไพเลอร์ต่อไปนี้:

  • MS Visual C++ เวอร์ชัน 6.0, 7.0, 7.1, 8.0, 9.0 และ 10.0 (x86 และ x64)
  • MinGW gcc 3.2 (mingw special 20020817-1)
  • ไซก์วิน gcc 3.2
  • ลินุกซ์ gcc 3.x
  • ลินุกซ์ gcc
  • xอิลลูโมส
  • xXCode 4

ค่าและชนิดข้อมูล โครงสร้างทางศัพท์

แม้ว่า Squirrel จะเป็นภาษาที่มีการกำหนดประเภทแบบไดนามิก และตัวแปรไม่มีประเภท แต่การดำเนินการต่างๆ อาจตีความตัวแปรว่ามีประเภทอยู่ ประเภทพื้นฐานของ Squirrel ได้แก่ จำนวนเต็ม, ทศนิยม, สตริง, ค่าว่าง, ตาราง, อาร์เรย์, ฟังก์ชัน, ตัวสร้าง, คลาส, อินสแตนซ์, บูลีน, เธรด และข้อมูลผู้ใช้[ 8 ]

จำนวนเต็ม:

จำนวนเต็มแสดงถึงจำนวนที่มีเครื่องหมาย 32 บิต (หรือดีกว่า): [ 9 ]

ค่าท้องถิ่น a = 123 //เลขฐานสิบ ค่า b ในเครื่อง = 0x0012 //เลขฐานสิบหก local c = 075 //เลขฐานแปด  [ 10 ]

ลอย:

ค่า float หมายถึงจำนวนทศนิยม 32 บิต (หรือดีกว่านั้น)

ค่าท้องถิ่น a=1.0 ค่าท้องถิ่น b=0.234 

สตริง:

สตริงเป็นลำดับของอักขระที่ไม่สามารถเปลี่ยนแปลงได้ หากต้องการแก้ไขสตริง จำเป็นต้องสร้างสตริงใหม่[ 11 ]

สตริงในภาษา Squirrel คล้ายกับสตริงในภาษา C หรือ C++ โดยจะถูกคั่นด้วยเครื่องหมายอัญประกาศ ( ") และสามารถมีลำดับอักขระหลีก ( \t, \a, \b, \n, \r, \v, \f, \\, \", \', \0, \x<hh>, \u<hhhh>และ\U<hhhhhhhh>) ได้

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

local a = "ฉันเป็นสตริงที่ยอดเยี่ยม\n " // มีอักขระขึ้นบรรทัดใหม่ที่ท้ายสตริง local x = @"ฉันเป็นสตริงที่ตรงตามตัวอักษรทุกประการ\n " // \n เป็นอักขระตามตัวอักษร คล้ายกับ " \\ n" ในสตริงทั่วไป 

อย่างไรก็ตาม เครื่องหมายอัญประกาศคู่ภายในสตริงที่ตรงตามต้นฉบับจะถูกแทนที่ด้วยเครื่องหมายอัญประกาศเดี่ยว: [ 6 ]

บรรทัดหลายบรรทัดท้องถิ่น = @" นี่คือสตริงหลายบรรทัด มันจะ "ฝัง" บรรทัดใหม่ทั้งหมด ตัวละคร  

โมฆะ:

ค่า null เป็นค่าพื้นฐานที่แสดงถึงค่าว่าง ค่าที่ไม่มีอยู่จริง หรือการอ้างอิงที่ไม่มีอยู่จริง ชนิดข้อมูล Null มีค่าเพียงค่าเดียวเท่านั้น คือค่า null

โลคอล a = null 

บูล

Bool เป็นชนิดข้อมูลแบบสองค่า (บูลีน) ค่าคงที่ของมันคือtrueและfalseค่าบูลีนแสดงถึงความถูกต้องของเงื่อนไข (บอกว่าเงื่อนไขเป็นจริงหรือเท็จ): [ 12 ]

local a = true; 

โต๊ะ

ตารางเป็นคอนเทนเนอร์แบบเชื่อมโยงที่ถูกนำมาใช้ในรูปแบบของคู่คีย์/ค่าที่เรียกว่าสล็อต:

t ท้องถิ่น = {} การทดสอบในพื้นที่ = { a=10 b = ฟังก์ชัน(a) { ส่งคืนค่า a + 1; } } 

อาร์เรย์

อาร์เรย์เป็นลำดับของวัตถุอย่างง่าย ขนาดของอาร์เรย์เป็นแบบไดนามิก และดัชนีจะเริ่มต้นจาก 0 เสมอ: [ 13 ]

local a = ["ฉันเป็น","อาร์เรย์"] โลคอล b = [null] b[0] = a[2]; 

การทำงาน

ฟังก์ชันต่างๆ คล้ายคลึงกับฟังก์ชันในภาษาโปรแกรมที่คล้าย C อื่นๆ โดยมีข้อแตกต่างที่สำคัญบางประการ (ดูด้านล่าง)

ระดับ

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

อินสแตนซ์คลาส

อินสแตนซ์ของคลาสถูกสร้างขึ้นโดยการเรียกอ็อบเจ็กต์ของคลาสอินสแตนซ์ เช่นเดียวกับตาราง จะถูกนำไปใช้เป็นชุดของคู่คีย์/ค่า สมาชิกของอินสแตนซ์ไม่สามารถเพิ่มหรือลบได้แบบไดนามิก อย่างไรก็ตาม ค่าของสมาชิกสามารถเปลี่ยนแปลงได้[ 15 ]

เครื่องกำเนิดไฟฟ้า

ตัวสร้างคือฟังก์ชันที่สามารถระงับได้ด้วยคำสั่ง 'yield' และกลับมาทำงานต่อได้ในภายหลัง (ดู ตัวสร้าง) [ 13 ]

ข้อมูลผู้ใช้

อ็อบเจ็กต์ Userdata คือกลุ่มข้อมูลในหน่วยความจำหรือตัวชี้ที่กำหนดโดยแอปพลิเคชันโฮสต์ แต่จัดเก็บไว้ในตัวแปรของ Squirrel (ดู Userdata และ UserPointers)

ด้าย

เธรดคือวัตถุที่แสดงถึงกระบวนการทำงานร่วมกัน หรือที่เรียกว่า โครูทีน

การอ้างอิงที่อ่อนแอ

การอ้างอิงแบบอ่อน (Weak References) คือวัตถุที่ชี้ไปยังวัตถุอื่น (ที่ไม่ใช่สเกลาร์) แต่ไม่มีการอ้างอิงแบบแข็ง (strong reference) ไปยังวัตถุนั้น (ดู การอ้างอิงแบบอ่อน) [ 12 ]

คำต่อไปนี้สงวนไว้และไม่สามารถใช้เป็นตัวระบุได้: [ 12 ]

ฐาน หยุดพัก กรณี จับ ระดับ โคลน
ดำเนินการต่อ คอนสต ค่าเริ่มต้น ลบ อื่น enum
ขยาย สำหรับ สำหรับแต่ละ การทำงาน ถ้า ใน
ท้องถิ่น โมฆะ ประวัติย่อ กลับ สวิตช์ นี้
โยน พยายาม ประเภทของ ในขณะที่ ผลผลิต ผู้สร้าง
ตัวอย่างของ จริง เท็จ คงที่ __เส้น__ __ไฟล์__
เรียกดิบ

ตัวระบุเริ่มต้นด้วยตัวอักษรหรือสัญลักษณ์ '_' ตามด้วยตัวอักษร '_' หรือตัวเลขจำนวนเท่าใดก็ได้ ([0-9]) ภาษา Squirrel เป็นภาษาที่คำนึงถึงตัวพิมพ์ใหญ่และตัวพิมพ์เล็ก หมายความว่าตัวอักษรเดียวกันที่เป็นตัวพิมพ์เล็กและตัวพิมพ์ใหญ่ถือเป็นตัวอักษรที่แตกต่างกัน ตัวอย่างเช่น “foo”, “Foo” และ “fOo” ถือเป็นตัวระบุที่แตกต่างกัน 3 ตัว[ 12 ]

โปรแกรม Squirrel รองรับตัวดำเนินการต่อไปนี้:

!!=||==&&>=<=>
<=>++=--=//=*
*=%%=++--<-=&
^|~>><<>>>

สำหรับโทเค็นสำคัญ:

{}[].:
::';"@"

ข้อความแสดงความคิดเห็นคือข้อความที่คอมไพเลอร์ไม่สนใจ แต่มีประโยชน์สำหรับโปรแกรมเมอร์ โดยปกติแล้วข้อความแสดงความคิดเห็นจะใช้เพื่อฝังคำอธิบายประกอบในโค้ด คอมไพเลอร์จะถือว่าข้อความเหล่านั้นเป็นช่องว่าง[ 12 ]

คอมเมนต์สามารถประกอบด้วย/*อักขระ (สแลช, แอสเตร็จ) ตามด้วยลำดับอักขระใดๆ (รวมถึงขึ้นบรรทัดใหม่) ตามด้วย*/อักขระ ไวยากรณ์นี้เหมือนกับ ANSI C: [ 12 ]

/* any text between will be ignored */

ฟังก์ชัน Squirrel รองรับตัวเลขจำนวนเต็ม ตัวเลขทศนิยม และสตริงข้อความ

34จำนวนเต็ม (ฐาน 10)
0xFF00A120จำนวนเต็ม (ฐาน 16)
0753จำนวนเต็ม (ฐาน 8)
'a'จำนวนเต็ม
1.52เลขทศนิยม
1.e2เลขทศนิยม
1.e-2เลขทศนิยม
"I'm a string"สตริง
@"I'm a verbatim string"สตริง
@" I'm amultiline verbatim string"สตริง

ไวยากรณ์

ไวยากรณ์ของ squirrel คล้ายกับ C/C++/Java เป็นต้น... แต่ภาษานี้มีลักษณะไดนามิกมากเหมือน Python/Lua เป็นต้น... [ 12 ]

แฟกทอเรียลในกระรอก

ฟังก์ชันภายในfactorial ( x ) // เรียกใช้ฟังก์ชัน factorial จากนั้นเรียกใช้ค่า x { ถ้า( x <= 1 ) { // ถ้า x น้อยกว่า 1 ให้คืนค่า1 ; // จากนั้นโค้ดจะคืนค่า 1 } มิฉะนั้น{ // ถ้าวิธีนี้ไม่ได้ผลให้คืนค่าx * factorial ( x - 1 ); // จากนั้นโค้ดจะคืนค่า x คูณ factorial(x-1) } }

เครื่องกำเนิดไฟฟ้า

ฟังก์ชันnot_a_random_number_generator ( max ) { local last = 42 ; local IM = 139968 ; local IA = 3877 ; local IC = 29573 ; for (;;) { // วนลูปไปเรื่อยๆyield ( max * ( last = ( last * IA + IC ) % IM ) / IM ); } }local randtor = not_a_random_number_generator ( 100 );for ( local i = 0 ; i < 10 ; i += 1 ) print ( ">" + resume randtor + "\n" );

คลาสและการสืบทอด

คลาสBaseVector { ตัวสร้าง(...) { ถ้า( vargv.len () >= 3 ) { x = vargv [ 0 ] ; y = vargv [ 1 ] ; z = vargv [ 2 ]; } } x = 0 ; y = 0 ; z = 0 ; }คลาสVector3 สืบทอดมาจาก BaseVector { ฟังก์ชัน_add ( other ) { ถ้า( other instanceof :: Vector3 ) ให้คืนค่า:: Vector3 ( x + other.x , y + other.y , z + other.z ) ; มิฉะนั้นให้โยนข้อความ"พารามิเตอร์ไม่ถูกต้อง" ; } ฟังก์ชันPrint ( ) { :: print ( x + ""," + y + " "," + z + " \n " ) ; } }local v0 = Vector3 ( 1 , 2 , 3 ) local v1 = Vector3 ( 11 , 12 , 13 ) local v2 = v0 + v1 ; v2 . Print ();

แอปพลิเคชัน

แอปพลิเคชันที่ใช้ Squirrel

  • Code::Blocksสภาพแวดล้อมการพัฒนาแบบบูรณาการ
  • เอ็นดูโร่/เอ็กซ์ เซิร์ฟเวอร์แอปพลิเคชันคลัสเตอร์
  • Electric Imp แพลตฟอร์ม IoT แบบครบวงจร[ 16 ]

เกมที่ใช้กระรอก

ประวัติศาสตร์

ภาษานี้ถูกเผยแพร่สู่สาธารณะในปี 2546 ภายใต้ใบอนุญาต zlib/libpng [ 34 ] ใน เดือนพฤศจิกายน 2553 ใบอนุญาตถูกเปลี่ยนเป็นใบอนุญาต MITเพื่อให้สามารถโฮสต์โครงการบนGoogle Codeได้[ 35 ] [ 36 ] พัฒนาและดูแลโดย Alberto Demichelis

ดูเพิ่มเติม

  • เว็บไซต์อย่างเป็นทางการแก้ไขข้อมูลนี้ได้ที่วิกิดาต้า
  • เอกสารกระรอก
ดึงข้อมูลมาจาก " https://en.wikipedia.org/w/index.php?title=Squirrel_(programming_language)&oldid=1358528797 "

สรุปเนื้อหา

ข้อมูลสำคัญจากบทความ

ข้อมูลสำคัญเกี่ยวกับ กระรอก (ภาษาโปรแกรม)

Squirrel เป็น ภาษาโปรแกรมเชิงวัตถุระดับสูงที่ออกแบบมาให้เป็นภาษาสคริปต์น้ำหนักเบาที่เหมาะสมกับขนาด แบนด์วิดท์หน่วยความจำ และข้อกำหนดแบบเรียลไทม์ของแอปพลิเคชันต่างๆ เช่นวิดีโอเกม...

ลักษณะทางภาษา

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

สถานะการพัฒนา

เวอร์ชัน 2.0 เปิดตัวเมื่อวันที่ 3 เมษายน 2548

ค่าและชนิดข้อมูล โครงสร้างทางศัพท์

แม้ว่า Squirrel จะเป็นภาษาที่มีการกำหนดประเภทแบบไดนามิก และตัวแปรไม่มีประเภท แต่การดำเนินการต่างๆ อาจตีความตัวแปรว่ามีประเภทอยู่ ประเภทพื้นฐานของ Squirrel ได้แก่ จำนวนเต็ม, ทศนิยม, สตริง, ค่าว่าง, ตาราง, อาร์เรย์, ฟังก์ชัน, ตัวสร้าง, คลาส, อินสแตนซ์, บูลีน,...