并行编程语言SmallC

关键字: 软件项目 SmallC

上班以后就一直没搭理毕设的事情,结果可想而知,这两天连日的熬夜,上班都在打哈欠,呵呵。

不过,现在也是越来越能体会那句话:“编码其实很快,主要是设计慢。”这次毕设,设计比编码还不仅仅是慢一点!我从去年年底开始构思,直到上周才算正式敲定,编码只花了两天(途中还抽空陪学弟学妹们玩了一下ACM选拔)就基本上搞定,这几天主要是完善完善,让系统更稳定。

简单介绍一下我的毕设:这次的目标是设计并实现一门新的编程语言,用于并行程序的设计与开发。

因为我们的目标之一也是让大家容易学习和接受一门新语言,所以这门语言的语法大部分还是继承C语言的。其中一项重点特色就是改进了语句结束符:C语言里,一条语句结束都是用分号“;”;而在我的新语言里,我另加入句号作为并行结束符,而分号的意义和传统的一致,代表是语句之间是串行关系。其实这也符合我们自然语言里的标点符号,分号表示我还没说完,而句号才表示一句话已经说完了。其他的特性,也就是一些类似“弱类型”、“关联数组”、“无限精度”等脚本语言的小甜品。

看两个例子吧,^_^。

代码1:biginteger.sc

sum = 1;
for (i = 1; i < 100; i++) {
    sum *= i;
};;
println(sum).

结果1:

933262154439441526816992388562667004907159682643816214685929\ 638952175999932299156089414639761565182862536979208272237582\ 511852109168640000000000000000000000

这段代码基本上都是用分号结尾。目的是求99的阶乘,这段代码展示了SmallC中整数默认就是无限精度的特性。

你可能已经注意到for语句之后有两个分号,在SmallC中它们不是可有可无。和C语言不通,SmallC中的代码块(即大括号之间的内容)也是语句,也需要结束符;而for语句同样是一条语句,因此代码中第一个分号是块语句的分号,第二个分号是for语句的分号。

代码2:if.sc

/*
 * 有时是 True,有时是 False
 * 看谁先获得锁
 */
i = 1 on locking i.
if (i) {
  println("True");
} else {
  println("False");
} on locking i.

这段代码很有意思,它没用到随机函数,但执行结果却是随机的!其实这也就是并行编程让人很崩溃的地方,两个线程同时争夺资源时,你真的无法确定谁先谁后。

这段代码里有两条语句,即两个句号。SmallC中使用变量无需声明,可以直接使用。对于字符串,默认值是空串;对于数字,默认值是0。而“on locking”是这么语言的两个关键字,出现在语句的尾部,顾名思义,就是锁住对应的变量进行同步处理。

先透露这么多,呵呵,其他的有空再啰嗦。

zzp-me我的毕设:SmallC