分类 Zimbu 下的文章

Unix风格的在“echo”程序例子:

# Zimbu example program: Unix style "echo"
 FUNC Main() int
   bool    writeNewline = TRUE
   string  sep = ""
   bool    didFirst
   FOR arg IN ARG.getRawList()
     IF !didFirst && arg == "-n"
       writeNewline = FALSE
     ELSE
       IO.write(sep .. arg)
       sep = " "
     }
     didFirst = TRUE
   }
   IF writeNewline
     IO.write("\n")
   }
   RETURN 0
 }
 ARG.Status argStatus = ARG.disable()

让我们来一行一行的解释:

Zimbu example program: Unix style "echo"

注释是以#开始,直到行的结尾。

FUNC Main() int

程序的入口点。没有参数在这里。命令行参数的参数模块处理随处可见。这避免了通过它们创造的依赖。main()总是返回一个int。

bool writeNewline = TRUE

声明一个布尔型变量writenewline并初始化为true,zimbu是静态类型的语言,这意味着编译器将检查writenewline将永远作为一个布尔类型,类型检查正确后才会运行程序。

string sep = ""

声明一个变量SEP(简称分隔符(separator))为字符串型,将它初始化为空字符串。

bool didFirst

声明一个布尔型变量didfirst。没有显式初始化,则使用默认值FALSE。所有的变量都默认初始化为零(zero),错误(FALSE )或无(NIL)。

FOR arg IN ARG.getRawList()

这是一个FOR IN 迭代语句。遍历列表中的所有元素(getRawList()
),分配每个元素的值传给arg。就像Python。

在这种情况下,通过ARG.getRawList()获取了一个列表,列表中包含了所有的命令行参数,ARG Module实际上具有良好的应对方式标志,但由于echo命令是关于如何处理争论我们需要避免,例如非常具体的,--help

arg是一个循环变量。不需要声明,它是自动出现的。这是一个很小的地方你可以使用一个变量没有声明它。arg的范围是只在这个循环中出现。zimbu还允许使用一个声明的变量。
变量的类型是来源于迭代列表。因此,它是静态类型的,但我们不需要明确的声明这个类型。在这种情况下,类型的返回值来源于ARG.getRawList(),一个字符串列表。

IF !didFirst && arg == "-n"

一个条件语句。在表达中括号()不是必需的。表达式语法类似于C和Java。但是字符串值可以直接比较= =。比较对象可以用IS,有点像Python

writeNewline = FALSE

-N的说法被发现,复位writeNewline 从而省略最后的换行。

ELSE

和其他语言一样

IO.write(sep .. arg)

..运算符用于连接字符串。

sep = " "

在一个参数前面加上空格

}

if语句的结束。是的,有不平衡括号zimbu。你可以看到它作为结束,如Pascal。该代码是容易的概述,而不是单词结束的字符}。

didFirst = TRUE

在我们不再是在第一个参数。下一次我们将不检查-N的说法。这是与UNIX命令:echo -n -n hello-n hello

}

FOR 循环的结束

IF writeNewline

 IO.write("\n")   

}

当writeNewline写入新行。

RETURN 0
}

main()功能块结束。当返回0的时候,程序退出。

ARG.Status argStatus = ARG.disable()

告诉ARG Module 没用arg命令行参数被完成。声明一个变量并且初始化在,命令行参数被替换的时候。将arg的状态改为disable



Zimbu在T-Dose上的介绍 视频见youtube
zimbu_cutout.jpg

【更新】

通过Zimbu的模板(ZUT)在你的应用程序中创建一个网页或者UI,你可以用html和css 创建一个网页,然后嵌入zimbu的代码到你的网页中,增加程序的互动性。创建后的模板可以用在任何服务器端和客户端。这意味着可以在服务器端进行渲染。
事件监听很简单的,可以看下在zutdemo目录的例子,这个例子虽然不完整,但你可以看下他是怎么工作的,你也可以看官方的Zimbu模板规范Zimbu Templates Specification或Zimbu模块文档 ZUT module documentation
Zimbu 现在支持可变参数varargs,参数的个数是可变的,这里以format()方法说明,可以将任意数量的参数格式化成字符串。
这一点非常像Python,阅读更多的说明可以看language spec
同时,加入了可选参数和命名参数的支持,可以减少用略为不同的参数写入函数的几个版本的代码量,阅读更多请访问: language spec

【为是么要用zimbu】

  • 假如你想写一个新的程序,像一个文本编辑器。你会什么语言写的吗?
  • 尽可能快,所以解释语言是。
  • 你不想微内存管理,所以C是。
  • 你不需要编程人员有个度,所以C++是。
  • 你想快速启动和不依赖于一个大运行库,所以Java是。
  • 已运行在大多数系统中,用C编译器什么的,所以D是。

没有现成的语言真的满足了这些要求,让我们创建一个新的吗!

zimbu是一个实验性的编程语言。这是一个非常实用的语言,没有废话的种。它汲取了许多现有的语言的好东西,避免了它们的不足。然后提出了新的编程思路。

【目标】

更多的目标见此页面Goals page

  • 易读取,代码读的速度是写的N倍
  • 避免常见错误,写糟糕的代码是非常困难的(但你可以如果你真的想写的黑客)
  • 保持简短而明确的,不要相同的事情做两次-没有头文件,不要重复类型规格
  • 效果应该是可预见的和不依赖于另一个文件的东西
  • 高效执行:没有启动延迟,合理的内存使用/没有即时编译器的影响,减少“停止世界“垃圾收集。
  • 支持范围广泛的应用程序可以使用zimbu写一个操作系统内核,一个简短的脚本和一个大的GUI应用程序。
  • 便携式可以编译和运行在几乎所有的系统
  • 许多标准的数据类型,模块和类最需要的东西已经在那里了

【选择】

主要选择到目前为止(更多的Design page):

  • 程序到C的转换和使用C编译器生成的机器代码(也可以是其他的东西后)
  • 还生产JavaScript,所以zimbu代码可以运行在Web浏览器。
  • 主要使用静态类型检查,也支持运行时类型检查
  • 面向对象,所有的数据都是像一个对象处理的,但也有简单的类型
  • 函数式编程的支持,而回调和LAMBDA方法
  • 重要的定义在symbol,这就避免了在大项目名称冲突
  • 标准模块和类都没有重要的声明
  • 许多模块是语言的一部分,不需要第三方库
  • 所有的关键词是大写字母,你可以用其他的名字而不用担心下一个版本的打破你的计划

已经上传了一个新的快照,同样的代码也可以从
Mercurial库。
主要的变化是,对象成员都标有$。此
基本上意味着“THIS。”它可以很容易地发现使用对象
变量和方法,也为一个非常大的类。它也允许在共享部分
使用相同的名称,参数和项目。

Read more...