
Chika เป็นภาษาการเขียนโปรแกรมที่กำหนดเป้าหมายทั้ง Arduino เป็นเฟิร์มแวร์หรือ Linux เป็นปฏิบัติการ มันอำนวยความสะดวกในการทำงานหลายรอบโรบินระดับสูงการโหลดโปรแกรมจากระบบไฟล์ SD หรือระบบไฟล์ Linux
เป้าหมายของมันคือการเอนตัวไปสู่ความคล่องตัวทั้งความเร็วและความทรงจำที่มีโมเดลหน่วยความจำสแต็กที่ไม่เหมือนใครไวยากรณ์ที่ได้แรงบันดาลใจจาก LISP และการส่งข้อความภายในสไตล์ MQTT
วิญญาณของมันคือ: แยกทุกอย่างผ่านการสื่อสารระหว่างงาน
เยี่ยมชมเว็บไซต์สำหรับข้อมูลเพิ่มเติม รวมถึงเหตุผลการเปรียบเทียบกับโครงการอื่น ๆ ภาพถ่ายและอื่น ๆ
เยี่ยมชม Discord เพื่อแชท
ดู Core.chi และส่วนที่เหลือของคลังข้อมูลสำหรับตัวอย่างที่สมจริงมากขึ้น
หมายเหตุ: ;//… ถูกใช้เพื่อใช้ประโยชน์จากการไฮไลต์ไวยากรณ์ของ Clojure; ความคิดเห็นใน Chika เป็นเพียงแค่ //… .
; //Calculates Nth term of Fibonacci Sequence
( fn fib n
( if ( < n 3 ) 1 i
( + ( fib ( - n 1 )) ( fib ( - n 2 )))))
( fib 35 ) => 9227465
; //LED blink program for Arduino
( p-mode 32 T)
( fn heartbeat on
( dig-w 32 on)
( sleep 1000 w)
( ! on))
; //Prints `15`
( print
( do a= + b= 10 c= 5
( a b c)))
; //Prints `Hello!`
( fn my-print
( print str))
( do str= " Hello! "
( my-print ))
; //Filter function, found in core.chi
; //Note: `empty?`, `st`, `append`, and `odd?` are all implemented in Chika in core.chi
; //Note: `out` is an optional argument, as `append` accepts nil as a vector
( fn filter f v ; ; out
( if ( empty? v)
out
( do next= ( st v)
( recur f ( sect v)
( if ( f next)
( append out next)
out)))))
( filter odd? [ 0 1 2 3 ]) => [ 1 3 ]
; //Returns [15 9], using an inline-function with one argument - `#`
( map {# 12 3 } [+ -])
; //Subscribes to all inter-program messages to do with displays, and prints their payloads
( sub " display/+ " {print # 1 }) เปิด Chika_Arduino.ino ใน Arduino IDE อัปโหลดไปยัง Arduino ของคุณ
ตรวจสอบให้แน่ใจว่ามีการ์ด SD ที่แทรกด้วยไฟล์ init.kua ควรโหลดโปรแกรมเพิ่มเติมภายในไฟล์ init.kua พร้อมการดำเนินการ load
อุปกรณ์ที่เหมาะสม:
ขณะนี้มีตัวเลือกเล็กน้อยสำหรับการรวบรวมและดำเนินการ Chika บน Linux
ในเทอร์มินัลคุณสามารถเรียกใช้ ./compile.sh เพื่อคอมไพล์ chika vm สำหรับเครื่องของคุณซึ่งใช้คอมไพเลอร์ดั้งเดิมเพื่อคอมไพล์ corpus/programs/init.chi
ในการเรียกใช้ไฟล์แหล่งที่มาของ Chika .chi หรือไฟล์ที่รวบรวมได้ .kua คุณสามารถเรียกใช้งาน chika ที่ใช้งานได้ด้วยเส้นทางของมันเช่น: ./chika ../corpus/programs/fibonacci.chi สิ่งนี้จะรวบรวม fibonacci.chi เป็น fibonacci.kua ในไดเรกทอรีการทำงานของปฏิบัติการ
ไฟล์ต้นฉบับสามารถเตรียมไว้ล่วงหน้าด้วย shebang ไปยัง CHIKA ที่เรียกใช้งานได้เพื่อเรียกใช้ไฟล์ .chi โดยตรง
บนพีซี: เรียกใช้งานที่สามารถใช้งานได้เช่น./ chika ./chika c source.chi เรียกใช้โดยไม่มีธง c เพื่อรวบรวมแล้วเรียกใช้ไฟล์ผลลัพธ์
บน PC/Arduino: ใช้ comp op ภายใน chika เพื่อรวบรวมไฟล์ต้นฉบับ .chi
หมายเหตุ: อาจใช้เวลาสักครู่บน Arduino เนื่องจากมันรวบรวมด้วยหน่วยความจำที่ จำกัด มากส่วนใหญ่เขียนหนึ่งไบต์ไปยังไฟล์ในแต่ละครั้ง
หมายเหตุ: การรวบรวมปล่อยไฟล์ชั่วคราวจำนวนมากซึ่งควรถูกลบหลังจากการรวบรวมที่ประสบความสำเร็จ
แต่ละโปรแกรมที่โหลดลงใน VM มีอายุการใช้งาน:
ทั้งหมดนี้เป็นตัวเลือก แต่อย่างน้อยก็ต้องระบุการเต้นของหัวใจหรือการเข้าร่วมในโปรแกรม
รายการคือรหัสที่ดำเนินการเมื่อเริ่มต้นโปรแกรมก่อนการเต้นของหัวใจหรือข้อความใด ๆ และไม่ได้อยู่ในฟังก์ชั่นใด ๆ มันสามารถเรียกฟังก์ชั่น แม้กระทั่งก่อน การประกาศในไฟล์ต้นฉบับ รายการสุดท้ายที่ส่งคืนเมล็ดรายการสถานะโปรแกรม รหัสรายการจะถูกขนถ่ายหลังการใช้งานดังนั้นอาจไม่ถูกเรียกว่าหลังจากนั้น
การเต้นของหัวใจจะต้องหยุดโปรแกรมที่สิ้นสุดทันทีหลังจากเข้าร่วมโดยรวมถึงฟังก์ชั่นที่เรียกว่า heartbeat นี่คือการดำเนินการแบบแบนต่อฟังก์ชั่นการเต้นของหัวใจสไตล์, รูปแบบกลม ฟังก์ชั่นการเต้น heartbeat จะผ่านสถานะคงที่ของโปรแกรมเป็นพารามิเตอร์และผลตอบแทนจะคงอยู่เป็นสถานะใหม่
ข้อความจะออกอากาศตลอด VM และดำเนินการฟังก์ชั่นการโทรกลับใด ๆ ก็ผ่านสถานะของโปรแกรมและส่งคืนสถานะใหม่
ฉลากและชื่อฟังก์ชั่นสามารถรวม (เกือบ) อักขระใด ๆ ที่ไม่รวมช่องว่าง
ชื่อฟังก์ชั่นจะต้องไม่เริ่มต้นด้วยตัวเลข
#num : บรรทัดแรกของไฟล์เท่านั้น (หรือที่สองถ้ามี shebang อยู่) แจ้งให้ VM ทราบว่าจะใช้ RAM จำนวนเท่าใด ( num สูงสุด 64Kib) โดยโปรแกรม มิฉะนั้นจะใช้ค่าสูงสุดเริ่มต้น
(func[ N args]) : รูปแบบที่มีฟังก์ชั่นในตำแหน่งหัวและอาร์กิวเมนต์ 0-n คั่นด้วยช่องว่าง อาร์กิวเมนต์สามารถเป็นแบบฟอร์ม
หมายเหตุ: func สามารถใช้งานได้ทั่วไปฟังก์ชั่นโปรแกรมอินไลน์ฟังก์ชั่นการเชื่อมโยงการเชื่อมโยงขยายพารามิเตอร์หรือพารามิเตอร์ขยาย
(fn func-name[ N params] [1-N forms]) : คำจำกัดความของฟังก์ชันที่มีสัญลักษณ์พารามิเตอร์ 0-N คั่นด้วยช่องว่างและรูปแบบ 1-N
หมายเหตุ: การเรียกใช้ฟังก์ชันที่ไม่มีแบบฟอร์มส่งคืนไม่มี
{form} : ฟังก์ชั่นแบบอินไลน์ประกอบด้วยรูปแบบเดียว
หมายเหตุ: พารามิเตอร์ของฟังก์ชั่นโดยรอบไม่สามารถอ้างอิงได้ภายในฟังก์ชั่นแบบอินไลน์ พิจารณาใช้การผูกมัดแทน
หมายเหตุ: ห้ามใช้ฟังก์ชันอินไลน์ที่ซ้อนกัน
# : การอ้างอิงพารามิเตอร์ไปยังพารามิเตอร์แรกของฟังก์ชัน
$ : การอ้างอิงพารามิเตอร์แบบขยายไปยังพารามิเตอร์แรกของฟังก์ชันผู้โทรของฟังก์ชัน
#N และ $N : การอ้างอิงพารามิเตอร์ไปยังพารามิเตอร์ NTH เช่น #3 หรือ $3 สำหรับพารามิเตอร์ที่สี่ของฟังก์ชั่นหรือฟังก์ชั่นผู้โทรของฟังก์ชั่น
หมายเหตุ: การใช้ $ เมื่อไม่มีฟังก์ชั่นการโทรเป็นพฤติกรรมที่ไม่ได้กำหนด
หมายเหตุ: การอ้างอิงค่า $ สามารถลบได้โดยการเพิ่มประสิทธิภาพการโทรแบบ tail-call
//… : ความคิดเห็นซึ่งสามารถตอบสนองได้ในบรรทัดใหม่หรือในตอนท้ายของหนึ่ง
/*…*/ : ความคิดเห็นแบบหลายสาย หมายเหตุ: อินสแตนซ์ของ */ จะยกเลิกความคิดเห็นทันทีและไม่สามารถอยู่ในความคิดเห็น multiline ได้เอง
; : เครื่องหมายอัฒภาค, ถือว่าเป็นช่องว่าง
, : เครื่องหมายจุลภาค, ถือว่าเป็นช่องว่างและช่องว่างหลังจากที่ถูกลบ
…= : การผูกมัดโดยที่ … เป็นฉลาก
… : การอ้างอิงการเชื่อมโยงหรือการอ้างอิงพารามิเตอร์ขึ้นอยู่กับบริบทโดยที่ … เป็นฉลาก
.… : การอ้างอิงที่มีผลผูกพันเพิ่มเติมโดยที่ … เป็นฉลาก มันอ้างอิงอินสแตนซ์ก่อนหน้าของการผูกมัดบนสแต็ก
หมายเหตุ: พารามิเตอร์จะใช้แบบอย่างมากกว่าการผูกต่อฟังก์ชั่น
หมายเหตุ: เมื่อมีการกำหนดค่าการผูก ใหม่ เราจะต้องใช้การผูกมัดเพิ่มเติมดังนั้น VM จึงข้ามอินสแตนซ์ก่อนหน้า พิจารณา: a= (+ 1 .a) ดังนั้น a ไม่ได้อ้างถึงรายการถัดไปในสแต็กในขณะนั้น - 1
ฟังก์ชั่น if , && , or และ case ไม่สามารถแสดงในการเชื่อมโยงหรือพารามิเตอร์
เนื่องจากฟังก์ชั่นจะต้องมีเพียงรูปแบบที่มั่นใจได้ว่าการส่งคืนใช้ val
หมายเหตุ: จำนวนเต็มอยู่ในรูปแบบเลขฐานสิบหกหรือขนาดใหญ่
"…" : สตริงโดยที่ … คือ 0 ถึง 128 อักขระ ASCII หรือ "" ว่างเปล่า" และ str สำหรับการอ้างสิทธิ์สองครั้งเนื่องจากสตริงไม่มีอักขระที่หลบหนี0 หรือ 0x00 : จำนวนเต็ม 8 บิตที่ไม่ได้ลงชื่อ0w หรือ 0x0000 : จำนวนเต็มที่ไม่ได้ลงชื่อ 16 บิต0i หรือ 0x00000000 : จำนวนเต็มที่ลงนาม 32 บิตc : อักขระ ASCII ขยาย: nl newline, sp space[…] : เวกเตอร์โดยที่ … เป็น 0 ถึง 2^16 รายการที่คั่นด้วยอวกาศหรือ [] สำหรับว่างเปล่า น้ำตาลวากยสัมพันธ์สำหรับ (vec …) args : ปล่อยเวกเตอร์ของฟังก์ชั่นอาร์กิวเมนต์T : ตัวอักษรบูลีนจริงF : บูลีนตัวอักษรเท็จN : NIL ตามตัวอักษร หมายเหตุ: [square brackets] ระบุอาร์กิวเมนต์เสริม
เกี่ยวกับคณิตศาสตร์
+ / - / * / / / % / ** /
& / | / ^ / << / >> n arg:
ส่งคืนผลรวม / การลบ / การคูณ / การแบ่ง / โมดูลัส / เพิ่มเป็นกำลัง /
และ / หรือ / xor / กะซ้าย / กะขวาของจำนวนเต็ม n
Zero Args ส่งคืน NIL จะใช้พารามิเตอร์ทั้งหมดเป็นประเภทของอาร์กิวเมนต์แรก
~ n : ส่งคืน bitwise ไม่ใช่ของ n
ตัวอย่าง: (+ 1 1) => 2 , (+ 155 200) => 100 , (+ 155w 200) => 355w
rand : ส่งคืนบูลีนสุ่มหลอก
rand b : ส่งคืนจำนวนเต็มหลอกสุ่มจาก 0 ถึง b พิเศษ
rand ab : ส่งคืนจำนวนเต็มหลอกแบบสุ่มจาก a รวมถึง b EXCLUSIVE
หมายเหตุ: ลบ a หรือ b ทำให้พวกเขาเข้าใจเป็น 1
ตามเงื่อนไข
if cond if-true : ประเมินและส่งคืน if-true ถ้า cond เป็นความจริงอื่น ๆ ไม่มี
if cond if-true if-false : ประเมินและส่งคืน if-true ถ้า cond เป็นความจริงอื่น ๆ if-false
case match … N pairs … [default] : ประเมิน match จากนั้นเปรียบเทียบกับ 1st ของแต่ละคู่ของอาร์กิวเมนต์คืนที่ 2 หากการแข่งขันครั้งที่ 1; หากไม่มีการจับคู่ default หรือส่งคืน
! i : มีเหตุผลคัดค้านรายการ i
or n arg: ส่งคืนความจริงครั้งแรก Arg
&& n arg: ส่งคืนจริงถ้าทั้งหมด args ความจริง
= n arg: ความเท่าเทียมกันจริงถ้า arg ทั้งหมดเป็นประเภทเดียวกันความยาวและความเท่าเทียมกันของไบต์ เปรียบเทียบ ints ตามค่า
!= n arg: ความเท่าเทียมกันเชิงลบ
== n arg: ส่วนของผู้ถือหุ้นจะส่งคืนจริงถ้ารายการ n มีความเท่าเทียมกันของไบต์
!== n arg: ค่าลบ
< / <= / > / >= n arg: ส่งคืนจริงถ้ารายการ n อยู่ในการเพิ่มขึ้น monotonically / ไม่ลดลง / ลด / ลด / ไม่เพิ่มขึ้น
ฟังก์ชั่นที่เกี่ยวข้อง
return[ val] : ออกจากฟังก์ชั่น แต่เนิ่นๆประเมินเป็นทั้ง NIL หรือ val
recur n arg: บนสแต็กแทนที่พารามิเตอร์ด้วยอาร์กิวเมนต์ N และเรียกคืนฟังก์ชัน
val 1-N ARG: ส่งคืนอาร์กิวเมนต์แรก
do 1-n arg: ส่งคืนอาร์กิวเมนต์สุดท้าย
สตริงเวกเตอร์และหยดที่เกี่ยวข้อง
vec 0 ARG: ส่งคืนเวกเตอร์เปล่า
vec N ARG: ส่งคืนเวกเตอร์ของข้อโต้แย้ง
nth N i : ส่งคืนรายการหรืออักขระที่ดัชนี N ของเวกเตอร์หรือสตริง i หรือไม่มีถ้า N อยู่ในช่วงที่ไม่เหมาะสม
str 0 arg: ส่งคืนสตริงเปล่า
str n arg: การส่งคืนของอาร์กิวเมนต์ n เป็นสตริง
len i : ส่งคืนความยาวเวกเตอร์สตริงหรือความยาวรายการภายใน
sect v : ส่งคืน v ด้วยรายการแรก (ถ้าเวกเตอร์) หรืออักขระ (ถ้าสตริง) ละเว้น;
sect v skip : ส่งคืน v ด้วยรายการ/ตัวละครที่ skip ไปก่อน;
sect v skip take : return v ด้วย take ยาวและรายการ skip /ตัวอักษรแรกที่ถูกละไว้;
..sect : เช่นเดียวกับ sect แต่ส่งคืนรายการ/อักขระระเบิด
blob ls : ส่งคืนความยาวหยด l ด้วยไบต์ทั้งหมดที่ตั้งไว้ที่ s
get oltb : คืนรายการประเภท t และความยาว l จากออฟเซ็ต o ไบต์ของรายการ b
get ob : ส่งคืนค่า U08 ของไบต์ที่ออฟเซ็ต o ไบต์ของรายการ b
set oib : ส่งคืน Blob b ด้วยออฟเซ็ต o ไบต์ตั้งค่าเป็นไบต์ของรายการ i
หมายเหตุ: ทั้ง get และ set ค่าส่งคืน nil ถ้าขอชดเชย + len จะเกินขนาดของหยด
หมายเหตุ: ทั้งสองยอมรับการอ้างอิงเป็น b (เช่น *binding ) และจะตรวจสอบ/แก้ไขไบต์ของรายการอ้างอิงดั้งเดิม set ค่าการอ้างอิงหรือไม่มี
.. v : ระเบิดเวกเตอร์หรือสตริง v ลงบนสแต็กอาร์กิวเมนต์เป็นรายการเวกเตอร์หรือรายการอักขระ
หมายเหตุ: ชอบใน clojure ที่ผกผัน apply เช่น (+ (.. [1 2 3]) (.. [4 5 6])) => 21
หมายเหตุ: หากอาร์กิวเมนต์ไม่ใช่เวกเตอร์มันจะไม่มีรายการบนสแต็ก
binds : deduplicates การผูกใด ๆ ในอาร์กิวเมนต์ของมันซึ่งเป็นที่นิยมของสิ่งที่ใหม่กว่าและจากนั้น vectorising ซาก
ตัวอย่าง: (binds a= 1 b= 2 a= 3) => [b= 2 a= 3]
GPIO ที่เกี่ยวข้อง
หมายเหตุ: สิ่งเหล่านี้ไม่มีผลต่อพีซี
p-mode pin mode : ตั้งค่าโหมดของพินหมายเลข pin เป็น mode บูลีน - ความจริงเป็นอินพุต, เท็จเป็นเอาต์พุต; ส่งคืนศูนย์
dig-r pin : ส่งคืนสถานะอินพุตดิจิตอลของพินหมายเลข pin
dig-w [1-N pin val] : ต่อ pin val อย่างต่อเนื่องตั้งค่าสถานะเอาต์พุตดิจิตอลของพินหมายเลข pin ไปยังบูลีน val -ความจริงหรือไม่เป็นศูนย์สูงเป็นศูนย์หรือต่ำ; ส่งคืนศูนย์
ana-r pin : ส่งคืนสถานะอินพุตแบบอะนาล็อกของพินหมายเลข pin
ana-w [1-N pin val] : ต่อ pin val อย่างต่อเนื่องตั้งค่าสถานะเอาต์พุตอะนาล็อก/PWM ของพินหมายเลข pin ไปยัง val จำนวนเต็ม 16 บิต; ส่งคืนศูนย์
ana-r pin : ส่งคืนอินพุตจำนวนเต็มแบบอะนาล็อก 16 บิตของพินหมายเลข pin
ไฟล์ io ที่เกี่ยวข้อง
หมายเหตุ: ในไฟล์ Arduino ต้องมีขอบเขตไม่เกินสามอักขระ
file-r path : ส่งคืน BLOB ของเนื้อหาทั้งหมด
file-r path T : ส่งคืนขนาดไฟล์
file-r path offset : ส่งคืน BLOB ของเนื้อหาไฟล์ระหว่าง Offset Bytes และ EOF
file-r path offset count : ส่งคืนเนื้อหาไฟล์ระหว่างออฟเซ็ตและการนับจำนวนไบต์
ทั้งหมดกลับมาไม่มีความล้มเหลว
file-a path content : ผนวกหยดหรือรายการเป็นสตริงเป็นไฟล์
file-w path content[ offset] : เขียน blob หรือ item เป็นสตริงไปยังไฟล์โดยเลือกด้วยการชดเชยไบต์ (มิฉะนั้น 0); ส่งคืนความสำเร็จเป็นบูลีน
ทั้งสองกลับมาประสบความสำเร็จเป็นบูลีน
หมายเหตุ: สตริงถูกเขียนโดยไม่มีเทอร์มินัลว่าง
file-d path : ลบไฟล์ที่ path ; ส่งคืนความสำเร็จเป็นบูลีน
ประเภทและการหล่อ
type i : ส่งคืนรหัสพิมพ์ของรายการ i
type ab : ส่งคืนรหัสประเภทของรายการ a & b หากเท่ากันมิฉะนั้นจะ nil
cast it : ส่งคืนไอเท็ม i เลือกเป็นรหัสประเภท t
หมายเหตุ: กว้างขึ้นถึงทินเนอร์จะถูกตัดทอนทินเนอร์ไปยังกว้างขึ้นจะเป็นศูนย์
String to Blob จะขาดการเลิกจ้างเป็นโมฆะ Casts to Strings จะถูกผนวกเข้ากับการเลิกจ้างเป็นโมฆะ
การทำซ้ำ
reduce f[ s*N] i : การลดผลตอบแทนของเวกเตอร์หรือสตริง i ถึง f ด้วยเมล็ด 0-N f คือ (item acc) => acc
map fv*N : ส่งคืนการแมปของเวกเตอร์ 1-N ผ่าน f โดยที่ f คือ (item*N) => mapped
ตัวอย่าง: (map str [a b c] [1 2 3]) => [a1 b2 c3]
for fv*N : ส่งคืนการแมปซ้ำของเวกเตอร์ 1-N ผ่าน f โดยที่ f คือ (item*N) => mapped
ตัวอย่าง: (for str [a b c] [1 2 3]) => [a1 a2 a3 b1 b2 b3 c1 c2 c3]
loop nf : ทำซ้ำ n 16 บิตของฟังก์ชั่น f โดยที่ f คือ (0…n) => any ; ผลตอบแทนการกลับมาครั้งสุดท้ายของ f
loop seed nf : เหมือนกับข้างบน แต่ f คือ (acc 0…n) => any ที่ acc เป็น seed แรกจากนั้นการกลับมาของการทำซ้ำก่อนหน้านี้
loop seed abf : เหมือนกับข้างบนยกเว้น n ตั้งแต่ a ถึง b
ตัวอย่าง: (loop 2 {print "hello" #}) พิมพ์ "hello0" และ "hello1", ส่งคืน nil
ตัวอย่าง: (loop 0 5 +) => 10
ตัวอย่าง: (loop 0 5 10 +) => 35
ข้อความที่เกี่ยวข้อง
หัวข้อคือสตริงที่คั่นด้วยสแลชไปข้างหน้า ( / ) หัวข้อ UN /การสมัครสมาชิกใช้ wildcards /+/ สำหรับ ทุก ๆ และ /# สำหรับ สิ่งใดก็ตาม
ตัวอย่าง: หัวข้อ house/kitchen/fridge ตรงกับ house/+/fridge หรือ house/# หรือ +/kitchen/+ หรือ # แต่ไม่ใช่ garage/# หรือ house/bedroom/fridge หรือ house/+/sink
pub topic[ payload] : ส่งข้อความตลอดทั้ง VM พร้อม topic หัวข้อสตริงและเป็นทางเลือก payload payload (มิฉะนั้นไม่มี) ทุกประเภท;
ส่งคืน NIL หรือหากข้อความทำให้โปรแกรมอื่นเผยแพร่ข้อความโปรแกรมการเผยแพร่ต้นฉบับถูกสมัครเป็นสมาชิก
ส่งคืนสถานะที่ส่งคืนโดยตัวจัดการการสมัครสมาชิกของโปรแกรมการเผยแพร่ต้นฉบับ
หมายเหตุ: การเผยแพร่เป็นทันทีและซิงโครนัส - โปรแกรมของคุณจะต้องรอเมื่อสมาชิกประมวลผลข้อความ
sub topic f[ provide-topic] : สมัครสมาชิกฟังก์ชั่น f ไปยัง topic หัวข้อข้อความ
ที่ไหนถ้า provide-topic คือความจริง f คือ (state topic payload) => new-state ,
อื่น (ค่าเริ่มต้น) f คือ (state payload) => new-state ; ส่งคืนศูนย์
หมายเหตุ: เฉพาะฟังก์ชั่นโปรแกรมเท่านั้นที่ได้รับการยอมรับว่าเป็น f - เพื่อใช้การดำเนินการดั้งเดิมใช้ฟังก์ชันอินไลน์
unsub topic : ลบการสมัครสมาชิกก่อนหน้าของ topic ; ส่งคืนศูนย์
unsub : ลดการสมัครสมาชิกโปรแกรมทั้งหมด; ส่งคืนศูนย์
ระบบและโปรแกรมที่เกี่ยวข้อง
ms-now : ส่งคืนมิลลิวินาทีตั้งแต่การเริ่มต้น CHVM
sleep ms : เลื่อนการเต้นของหัวใจ ต่อไป ของโปรแกรมสำหรับ ms Miliseconds; ส่งคืนศูนย์
print 0-n arg: พิมพ์ผลของ str ของ n args; ส่งคืนศูนย์
load path : โหลดโปรแกรม Chika ที่คอมไพล์ที่ path (ไม่มีส่วนขยายไฟล์); ส่งคืนความสำเร็จในการโหลดโปรแกรม
comp path-in[ path-out] : รวบรวมไฟล์ต้นฉบับ (Idiomatially *.chi ) ที่ path-in เป็น binary chika, บันทึกที่เส้นทางเดียวกันกับส่วนขยายเปลี่ยนเป็น .kua หรือ at path-out (idiomatially *.kua )
halt : ยุติโปรแกรม Chika ทันที
Binary Chika ที่คอมไพล์ประกอบด้วย ฟังก์ชั่น เพียงอย่างเดียว ฟังก์ชั่นมี รูปแบบ แบบฟอร์มประกอบด้วย args (ซึ่งสามารถเป็นแบบฟอร์ม) และจบด้วย การดำเนินการ รูปแบบเลขฐานสิบหกคือ:
การทำงาน
NNNNLLLL…
NNNN , uint16_t รหัสฟังก์ชันที่เพิ่มขึ้น; LLLL , uint16_t ฟังก์ชั่นความยาวร่างกาย; … , LLLL -length Function Body
รูปร่าง
00…args…OO
00 , รูปแบบเครื่องหมาย; [args] , 0-n args; OO การดำเนินการ
อาร์ก
หรือ 00… รูปแบบ
AA , uint8_t arg-code; … ร่างกายอาร์กิวเมนต์ขนาดตัวแปร
การดำเนินการ
OO
OO , uint8_t op-code
00 frm แบบฟอร์ม
สิ่งที่ต้องทำ
สิ่งที่ต้องทำ