`

一个结合了Lisp的强大能力、python的易读性和C的性能的编程语言:Nimrod

阅读更多

一个结合了Lisp的强大能力、python的易读性和C的性能的编程语言:Nimrod

项目主页:http://nimrod-code.org/

 

Nimrod是一个新型的静态类型、命令式编程语言,支持过程式、函数式、面向对象和泛型编程风格而保持简单和高效。Nimrod从Lisp继承来的一个特殊特性--抽象语法树(AST)作为语言规范的一部分,可以用作创建领域特定语言的强大宏系统。

Nimrod是一个编译型的具有垃圾收集的系统编程语言,有着极其卓越的生产/性能比。Nimrod的设计集中在三个E上:即效率(efficiency)、表达能力(expressiveness)和优雅(elegance)。

 

Nimrod示例:

 

import strutils

echo "Type in a list of ints of ints (separate by whitespace):"
let tokens = stdin.readLine.split
echo tokens.each(parseInt).max,"is the maxmum."
 

 

Nimrod是高效的:

 

  • 原生代码生成(目前通过编译到C语言),不依赖虚拟机:Nimrod生成无依赖的小执行程序易于再发布。
  • 一个快速的非追踪(non-tracing)垃圾收集器,支持实时系统如游戏。
  • 系统编程特性:可以管理你自己的内存,直接访问硬件。指向垃圾收集器的内存的指针和指向手动管理内存的指针是有区别的。
  • 零开销迭代器(zero-overhead iterators)。
  • 跨模块内联。
  • 有内联的动态方法绑定而无虚方法表。
  • 用户定义函数的编译时计算。
  • 整个程序死代码消除:仅用于包含在可执行程序中的函数。
  • 基于值的数据类型:如对象和数组可以分配在栈上(stack)。

 

Nimrod表达能力强

 

  • Nimrod编译器和所有标准库都用Nimrod实现。
  • 内建高级数据类型:字符串、集合、序列等等。
  • 现代类型系统:本地类型推断(local type inference)、元组、变式、泛型等等。
  • 用户可定义操作符;使用新操作符的代码通常比重载内建操作符的代码更易读。如=~操作符定义在re模块。
  • 宏可以在编译时修改抽象语法树。

 

Nimrod是优雅的

 

  • 宏可以使用命令范式构造解析树。Nimrod进行元编程时不需要使用不同的代码风格。
  • 宏不能改变Nimrod的语法,因为没有这个必要。Nimrod的语法已经足够灵活。
  • 语句可以用缩排(注:和python的缩进排版语法一样)组合语句但可以分成多行。缩排不能包含制表键(tabulators),因此编译器看到的代码和人看到的一样。

 

与外部世界共舞

 

  • Nimrod编译器运行在Windows、Linux、BSD和Mac OS X上,移植到别的平台很容易。
  • Nimrod编译器也可以生成C++或Objective C代码,接口很容易。
  • 有大量的绑定:如已经有对GTK2、Windows API、POSIX API、OpenGL、SDL、Cairo、Python、Lua、TCL、X11、libzip、PCRE、libcurl、mySQL、SQLite的绑定包含在标准发行中。
  • C到Nimrod的转换实用程序:对C库的新绑定可以用c2nim容易的产生。
  • 一个Pascal到Nimrod的转换实用程序:大量的Object Pascal子集可以自动转换到Nimrod。

 

到1.0的路线图

Version 0.9.0

闭包closures

Version 0.9.X

 

  • recursive iterators/coroutines递归迭代器/协程
  • 2-phase type system for better interaction between macros, templates and overloading 在宏、模板和重载间更好交互作用2相类型系统
  • term rewriting macros 项重写宏
  • the syntactic distinction between statements and expressions will be removed语句和表达式间的语法差别将被移除
  • the need for forward declarations may be removed前向声明的需要可能会移除

0
0
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics