面向用户的套件
1983年4月的《Pascal News》刊载INMOS公告,称200美元的occam评估套件正在供应。编译器与编辑器运行于UCSD p-System第四版,已有Apple 2等宿主版本。套件生成p-code,由宿主系统执行,供用户设计、运行中等规模程序并学习并行思维。
更早的公开介绍已有记录。1987年公布的INMOS美国专利列出1982年11月30日《Electronics》的occam介绍文章,并说明语言手册于1983年在英国出版、分发。因此,这里的1983年定位于早期工具与文档的公开传播,不把它当作设计工作的单一起点。
让语言表达同时发生的事
大卫·梅(David May)回忆,他在加入INMOS前研究机器人,曾为此开发消息传递语言。机器人需要协调多项活动,这使他希望编程语言直接表达并发任务及其交互,而非把这些工作全留给中断、驱动程序和操作系统。托尼·霍尔(Tony Hoare)也从自己的研究出发参与了这一思路。
在INMOS的英国布里斯托尔团队中,梅将语言、指令集和原型编译器一起反复修改:语言构造能否高效地映射到机器上,就是设计本身的一部分。项目曾使用“INMOS系统语言”等名称,后来取名occam,呼应奥卡姆剃刀。在这种设计方式下,机器怎样运行程序和人怎样描述任务,需要同时考虑。
参考:[2]
三行程序里的通信
公告用一个片段说明顺序组合: SEQ in?char out!char
SEQ使下属操作依次执行:先从通道in读入char,再向out送出这个值。问号表示输入,叹号表示输出;缩进划定组合范围。与之相对,PAR组合允许组成进程并行执行。通道把发送者与接收者配对,传送需要双方会合,并不自带消息缓冲区。
参考:[1]
进程与处理器之间
INMOS的专利展示了另一层具体安排:每个进程有自己的工作区,保存变量和调度所需信息。等候执行的进程用指针串成链表;处理器暂时停下一个进程时,可据此转向下一个。同一机器内的通道可由内存单元表示,外部串行链路则配有相应寄存器。
这说明,语言中分开描述的活动,不必各自占有一颗处理器。进程是组织工作的单位,工作区、调度与通信机构负责将这种组织落实到机器。这种安排把语言中的并发分解为可调度的工作和明确的通信,给语言与硬件之间提供了具体连接。
后续版本另有阶段:occam 2参考手册初版于1988年出版,occam 2.1修订稿于1994年准备。这些日期来自1995年的2.1手册,属于后续版本史。