R++是专为懒人设计的国产编程语言,支持无操作系统裸奔、编译成机器码、android、cocos2dx绑定、中文编程、闭包、惰性求值、JSON、Lisp的S表达式、内联汇编、伪代码、模板、宏、多重继承、元编程、反射、自省、指针、引用。
为什么需要它?
1.目前DIY操作系统一般使用gcc+nasm,R++是编译型语言,抽象能力强过C,可直接内联汇编,不需要面对讨厌的AT&T汇编,绝对是您DIY操作系统的利器(支持GRUB从U盘或硬盘引导)。
2.R++没有GC,所以理论运行速度和C++一样,可以作为lua的替代者候选。
3.R++既可以编译运行又可以解释运行,既可以用静态类型又可以用动态类型。语法层支持C++、JS、Lisp、python、asm混合编程,一种语言,五种语法。
4.R++*度极高,目前除了语法解析暂不开源外,整个用户态的源码都是开放的,您可以随意DIY运算符的优先级,增加新运算符,增加修改“内置类型”,甚至于int、double这些基础类型都是由用户自定义的,一切由您做主。
5.它的语法相当简洁,支持N种省略语法,最大程度减少您的击键次数。
6.R++支持多种花括号风格,无论是python的无花括号风格还是K&D风格,或者是花括号单独占一行,随你喜欢。
7.它是C++的山寨版,如果您习惯了C++的语法,又需要一种类似C++的脚本语言,似乎选择R++是一个明智的决定。
8.既然它是C++的山寨版,所以R++几乎不需要学习成本,很多C++和C的代码经少量修改都可以移植过来,甚至能够写出同时兼容R++和C++的代码。
9.又因为它是C++的山寨版,R++所有数据类型和C++二进制兼容,无论是静态链接还是动态链接,想怎样就怎样。
10.R++源代码文件可以使用任意后缀,在R++的世界里,一切都是代码。
11.支持中文编程是必须的。
R++2.0正在紧急研发中,敬请期待:
下面是用160行R++代码实现的flappy bird:
下载地址:
http://pan.baidu.com/s/1i31IG77
用R++写窗口程序十分简单:
import rcc.h main { cc.jump_scene(lambda(void* parent){ void* a=cc.label_create("hello") cc.set_pos(a,240,400) cc.add_child(parent,a) cc.set_color(a,255,255,255) }) }
仅用1行代码就实现了一个带三角函数、乘方的完全功能四则混合计算器:
main{void[meta(‘(){putsl ‘+getsl+‘}‘)]}
仅用60行代码就实现了一个http服务器:
/* 简单的http服务器,参考《深入理解计算机系统》 运行后在浏览器输入http://127.0.0.1/example/1.h */ import rsock.h import rfile.h import rdir.h main { rsock svr rsock client svr.listen(80) for svr.accept(client) proc(client,client.recv_s(65536)) client.close } class http_item { rstr name rstr cont } proc(rsock& client,rstr& s) { s.print vstr=s.split(‘\r\n‘) rbuf<http_item> vitem for i in vstr pos=vstr[i].find(‘ ‘) http_item item item.name=vstr[i].sub(0,pos) item.cont=vstr[i].sub(pos+1) vitem+=item proc(client,vitem) } proc(rsock& client,rbuf<http_item>& v) { if v.empty||v.get(0).name!=‘GET‘ return path=v[0].cont.sub(0,v[0].cont.find(‘ ‘)) path=‘.‘+path rfile file(path) s=‘HTTP/1.1 200 OK\r\n‘ s+=‘Server: R++ Web Server\r\n‘ s+=‘Content-Length: ‘+file.size+‘\r\n‘ s+=‘Content-type: ‘+get_type(path)+‘\r\n\r\n‘ s+=file.read_all client.send_s(s) } rstr get_type(rstr name) { name=rdir.get_suffix(rdir.get_name(name)) if name==‘htm‘||name==‘html‘ return ‘text/html‘ elif name==‘gif‘ return ‘image/gif‘ elif name==‘jpg‘ return ‘image/jpg‘ else return ‘text/plain‘ }