元控機
基於中央控制器(ccu)的開放式計算機體系,基礎來源於改進的馮·諾依曼計算機模型。元控機是中央控制器(ccu)控制多個元組成的計算機,元之間、元控機之間都使用元語言交流信息。元
運算、儲存、控制和微系統軟體集成到一起,並對外保留輸入輸出功能,這種模型稱之為元。元就像一個黑匣子,它內部的結構組成是無法知曉的,但可以通過輸入和輸出來控制它完成特定的工作。每一個元會由於其內部的運算、儲存和控制的數量、種類、功能的不同而表現出不同的作用。ccu
ccu則是一種更強大的元,通過一定的語言規則來控制其它的元完成更複雜的工作。元語言
交流是由有序的符號組成,符號順序追尋一定的規則,符號和規則就構成了語言。元與元的交流就建立在統一的語言基礎上,這種語言成為元語言。交流至少在兩個元中進行,元在交流中地位有主次,信息有先後,內容有長短。故語言格式里應包含時序、內容、發起者的接收對象。下面就是詳細的元語言定義。元語言的組成和規則
元語言的組成
元語言由語言的時序、內容、發起者和接收對象組成。使用格式t|a:b{n}來表示。其中t為時序,a為發起者,b為接收對象,n為內容。例如早上八點整秒小李向小王詢問“吃飯了沒?”,小王想了3秒後回答“吃了。”。用元語言描述就是
t"08h00m00s"|小李:小王{吃飯了沒?}
t"08h00m03s"|小王:小李{吃了。}
元語言中的時序
元語言的時序分為時間和順序兩種,其中時間是由ccu向元發信息時自動加上的,用於信息時間的超控。順序則是表示信息的先後,當有多條語句時顯得特別重要。時間用t“time”表示,順序用n"number“表示。時間的格式:
標準格式為t"times",其中times由時間time、有效標誌@和~、時間增量+表示。time是用ymdhms表示的時間,@是從到達時刻算起,~是從發出時刻算起,+表示從算起時刻增加。在沒有+的情況下,@和~是等價的。例如
t"time"表示元語言的傳送時間;
t"@time"表示元語言在time時間前有效;
t"time@"表示元語言在time時間後有效;
t"time1@time2"表示元語言在time1到time2時間段中有效;
t"~+time"表示元語言從發出時刻起有time時間的有效期;
t"+time~"表示元語言從發出時刻起再過time時間的有效;
t"+time1~+time2"表示元語言從發出時刻起再過time1有效,有效期為time2-time1;
t"@+time"表示元語言從接收到的時刻起有time時間的有效期;
t"+time@"表示元語言從接收到的時刻起再過time時間的有效;
t"+time1@+time2"表示元語言從接收到的時刻起再過time1有效,有效期為time2-time1;
時間由於是ccu自動控制的,所以在用戶向計算機傳送命令時可以不寫,也可以寫上用以人為的控制。例如30秒後列印“hello”,可寫為t"+30s~"|user:ccu{:printf{"hello"}}。
順序的格式:
順序格式為n"number",其中number是常數,它的大小反映了執行的順序,順序由小到大,當number的大小一樣時,表示可以並行運行而相互無影響。number不是每條元語言都必須寫上的,對於無number的元語言ccu會按照元語言的順序而順序執行。
例如四個數相加就可以寫為如下元語句:
user:ccu{:newfloat{a,b,c,d}}
user:ccu{:scanf{a,b,c,d}}
n"1"|user:ccu{:e.add(a,b)}
n"1"|user:ccu{:f.add(c,d)}
user:ccu{:printf{:add{e,f}}}
對象的格式
由於元在和ccu連線後,ccu都會根據元的特性形成一個描述列表。所以發起者和接收對象的格式可以有多種寫法,而且每一種都相互兼容。可以用元特有的id號{xxxx-xxxxx-xxxx-xxxx-xxx}表示;可以用元的設備名稱如display表示;也可以用連線埠如io_2表示。只要表述能讓ccu能通過描述列表找到要指定的元就可以。但也有一些默認的稱呼,如user表示當前用戶,ccu就表示當前的元控機,*表示所有的元設備。元語言格式的規範
在元控機中不管是設備、程式、還是變數,都被當成元處理。元只能與元交流,每一個元都可以看成元的集合。元不能直接與另一個元內部的元交流,必須以傳遞的方式交流。如a:b{b:command{}}表示a讓b執行command,而不是a執行了b的command。這種交流方式下經常出現元語句套元語句的結構。對於一些常用的元語句格式,可以進行簡寫以減少輸入。a:b{b:command{}}可寫為a:b{:command}
user:ccu{:command{}}可寫為command{}
command1{:command2{}}可寫為command1.command2{}
:command{a}:command{b}可寫為:command{a,b}
基本數據類型
在元語言中變數只有兩種類型,可用於算數計算的數字類型var和不能算數運算的字元類型char。變數名稱最好以不與其它元衝突的純英文字母單詞命名,且英文字母不存在大小寫差異。一個新命名的變數生命周期等同於父元的生命周期。其標準結構如下::var{
:size{4byte}
:signed{yes}
:float{no}
:value{}
:length{1}
:command{
:math*{}
}
}
:char{
:size{1byte}
:fontset{ascii}
:value{}
:length{1}
:command{
:strings*{}
}
}
變數的賦值和初始化
變數可用var{}和char{}來初始化,如
:var{a}
:char{b}
變數的賦值
:a.value{1}
:b.value{"a"}
一段小程式了。
:var{a;b;c}:a.value{2}:b.value{3}:c.math.add(a,b)
在元語言中變數是可擴展的,var類型在數值超過size上限時,會自動把上限提高;char類型當字元串的個數超過length時,會把length設定為字元串長度。