7
20
2011
18

Cyclone——安全的C语言

还在对 C 语言糟糕的内存管理咬牙切齿吗(垃圾收集器)?还在对各种乱七八糟的 NULL 指针调试得天昏地暗吗?还在对 C 语言蹩脚的异常处理内牛满面吗?

何不试试 Cyclone

先用一个打开 passwd 文件的例子给大家看看,这是 C 语言版:

FILE *f = fopen ("/etc/passwd", "r");
if (f == NULL)
{
    /* 一堆错误处理 */
}

int c;
c = getc (f);
/* 又一堆错误处理 */

尤其是这样多了的麻烦劲,搞得我有时候想用 setjmp 来处理错误。

好了,看看 Cyclone:

FILE *f = fopen ("/etc/passwd", "r");
int c;
try
{
  c = getc ((FILE *@notnull)f);
}
catch
{
  case &Null_Exception:
    printf ("Couldn't open /etc/passwd.\n");
    exit (1);
  case &Invalid_arguments:
    printf ("Invalid arugment (%s)", s);
    exit (1);
}

是不是很直观?其中还有一种叫做let的操作符,语法是 let 变量 = N; 也就是说,你不必去管变量类型了,在临时变量的时候,能稍微起一点作用(虽然有点鸡肋)。

其中一句简介,真是深得我心:“认真的C程序员可以写出来安全的程序,不过在实践中,相当多的C程序都不咋地安全。”还有,Cyclone程序会在编译时、链接时、运行时不断检查来确保安全。

还等什么呢?快去试试吧!

PS:目前最好的教程是User's Guide了。要用GCC4编译得用SVN里面的最新版。

PS2:我也只是新发现,从User's Guide里面摘抄了一些内容。注意这个东西不一定与C兼容。

Category: | Tags: cyclone c 安全c | Read Count: 1617
Avatar_small
λ 说:
Jul 20, 2011 10:16:49 PM

为什么不要 C++ 或 Perl、Lua 之类的,非要 Cyclone 呢?仅仅是语法相似的话感觉没什么意思。

Mike Ma 说:
Jul 21, 2011 01:59:43 AM

Cyclone是编译语言,而C++和C的区别也不在内存管理,Perl、Lua和Python是解释语言,执行速度是一大劣势。而Cyclone和C相似,很多人不用看就能直接上手,省事~

Avatar_small
λ 说:
Jul 21, 2011 02:27:27 AM

呃,这样……Cyclone支持尾调用么?

Avatar_small
Mike Ma 说:
Jul 21, 2011 02:31:27 AM

C支持的应该都支持。。。我没试过。。。最标准的文档,你看user's guide吧

Avatar_small
λ 说:
Jul 21, 2011 02:34:14 AM

C和C++都没有尾调用,我试过了。Cyclone假如有尾调用的话就好了,我去看看……

Avatar_small
Mike Ma 说:
Jul 21, 2011 02:35:23 AM

你指的是
return Foo(somevar);
么?话说我还不知道尾调用是什么玩意……

Avatar_small
λ 说:
Jul 21, 2011 02:54:07 AM

嗯,就像这样,不过是在一个函数中的。最后不会返回调用它的函数而是直接从Foo返回。

Avatar_small
λ 说:
Jul 21, 2011 02:54:56 AM

在官方网站找不到关于尾调用的信息呢。

Mike Ma 说:
Jul 21, 2011 03:20:41 AM

这个啊,我记得C就有这样的功能啊

Avatar_small
λ 说:
Jul 21, 2011 03:50:25 AM

噢,是有的,不过不是运行时的,而是编译时就要决定的。运行时是改变不了返回方式的。

Avatar_small
Mike Ma 说:
Jul 21, 2011 06:02:07 AM

我不觉得这个需要放到运行时啊,因为类型在编译时就确定了

doyle 说:
Jul 21, 2011 12:41:28 PM

注意到是说运行时,不是运行时环境...

doyle 说:
Jul 21, 2011 12:57:01 PM

不我注意到我在胡扯,请忽略我刚才的胡扯

doyle 说:
Jul 21, 2011 01:01:38 PM

http://www.ibm.com/developerworks/cn/linux/l-ceylon/index.html?ca=drs-
看这个,IBM developerworks上的文章
这玩意儿是跑在jvm上的呀.
话说...和vala比较会如何?

Mike Ma 说:
Jul 21, 2011 01:06:23 PM

那是Ceylon,这是Cyclone,看清楚。。。

和Vala比较倒比较有趣,应该是相近的。
Cyclone需要检查各种内存问题,Vala则是动态的OO实现。。

doyle 说:
Jul 21, 2011 01:23:24 PM

哦...今天眼睛问题很严重啊...我也刚发现自己看错了,想过来留言纠正...(因为正好两个标题同时出现在了greader上...)

Avatar_small
pingf 说:
Jul 21, 2011 04:26:29 PM

这个注定小众了,感觉倒不如直接用vala之类的,
看了下其还引入了一些比较恶心的语法
比如,其所谓的bounded pointer
void foo(int *@numelts(4) arr);

Mike Ma 说:
Jul 22, 2011 10:23:17 AM

这个东西确实很不好看。。。

vala好点


登录 *


loading captcha image...
(输入验证码)
or Ctrl+Enter

Powered by Chito | Hosted at is-Programmer | Theme: Aeros 2.0 by TheBuckmaker.com