设为首页 收藏本站
查看: 728|回复: 0

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

[复制链接]

尚未签到

发表于 2017-5-8 11:24:57 | 显示全部楼层 |阅读模式
一个结合了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前向声明的需要可能会移除
  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-374631-1-1.html 上篇帖子: 了不起的盖茨比读后感---Java程序员学Python学习笔记(二) 下篇帖子: Python编写的客户端给服务器发送指令执行相应的命令并返回结果
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表