目前我要做的一个项目是关于怎样将BioSpi语言转化成可在logix下可编绎运行的程序。BioSpi是一个并发的用于描述生物反应的语言,目前我对它的了解不深,正在搜集资料,估计资料收全后会做一些相关介绍。这里讲一讲这几天对logix的学习。
Logix是一个用FCP(Flat Concurrent Prolog)语言写成的并发系统(也可以说一个编程环境),在它上面可以并发的运行程序。CP(Concurrent Prolog)是一种为程序的并发执行而设计的逻辑编程语言。它是面向进程(process oriented)的语言,以数据流的同步和命令执行的不确定行作为它的基本控制技术。FCP是CP的一个子集,它拥有绝大多数CP具有的功能。做为了一个编程环境,logix拥有自己的编绎器,编绎器将FCP编写的程序解释成抽象的FCP机器指令,并由一个由C编写的仿真器(emulator)执行它。
Logix由三种类型的对象构成,它们分别的:Computations、Modules、Services。Computations是Logix中程序执行、控制、调试的基本单位(可以理解为一个正在运行的进程,事实上一个Computation由很多Processes构成);Modules是Logix中程序编绎的基本单位(可以理解为一段程序代码);而Services提供了调用Logix系统中底层功能的接口(可以理解为系统调用)。
那么,在Logix下编写一个程序并让它执行的过程如下:
(1) 编写调试程序的过程跟所有高级语言类似(编写,运行,修改,直到运行结果正确)。
(2) 这里我们说说编写的程序的组成以及它是怎样运行的,以一个简单的反转串列的例子来说明问题。(rev.cp)
reverse([X|Xs],Ys):-
reverse(Xs,Zs),append(Zs,[X],Ys).
reverse([],Ys):-true:Ys=[].
append([X|Xs],Ys,Zs):-true:Zs=[X|Zs'],
append(Xs,Ys,Zs').
append([],Ys,Zs):-true:Zs=Ys.
以上这段程序我们可以看做是一个Modules,在里面包含了两个Procedures,分别的reverse和append,它们分别都用到了递归调用。如果我们想编绎运行它们,可以在”@”提示符下输入下列命令:
@compile(rev) //可省
@rev#append([1,2,3],[4,5],L1)
系统开始自动运行
<1>started
<1>terminated
接着我们输出我们想要的值
@L1^
L1=[1,2,3,4,5]
这里我们可以看出,一个Modules可以由很多个Procedures组成。就象C程序可以由很多函数组成一样。一个Module可以调用很多的Services。最后面我们声的那句reverse([],Ys):-true:Ys=[].事实上代表了一个Process,所以一个Computation可以由很多Processes组成,并同时跨越很多的Services。一言一毕之,一个Computation(计算)由很多的Processes并发执行,Process在Module里定义并通过解释器解释执行,Module里可以同时调用多个的Services。
最后,Logix还提供了很多的接口(类似Windows的API),这些是编程时可以查手册的,这里不做详细介绍。
一些想法:Logix在实现程序的并发运行时做得很不错,如果有它的源代码我相信会学到更多。
一些想法:Logix在实现程序的并发运行时做得很不错,如果有它的源代码我相信会学到更多。