理由一:目前DIY操作系统一般使用gcc+nasm,RPP支持编译运行,抽象能力强过C,可直接内联汇编,不需要面对难看的AT&T汇编,绝对是您DIY操作系统的利器(支持GRUB从U盘或硬盘引导)。
理由二:RPP以静态类型为主,没有GC,所以理论运行速度和C++一样,最终的效率肯定比动态类型的lua要高,并且不会引起GC停顿。(目前运行速度与luaJIT接近,比tcc略快)
下面是RPP性能测试数据:(双重循环求和,具体测试代码请参考rpp.pdf)
理由三:RPP与C/C++互相调用比lua还简单,而且RPP和C++共享进程内存空间,RPP变量和C++变量生命周期相同,不会出现像lua一样的这里变量已经GC了那边还在使用。
理由四:RPP既可以编译运行又可以解释运行,既可以用静态类型又可以用动态类型。语法层支持C++、JS、Lisp、python、asm混合编程,一种语言,五种语法。(目前兼容50%的C++语法,70%的C语法,编译器本身使用C++编写,其90%的源码都可以自我编译)
RPP的整体设计:
static rbool inherit_proc(tsh& sh,tclass& tci,int level=0) { if(level++>c_rpp_deep) return false; if(tci.vfather.empty()) return true; rbuf<tword> v; for(int i=0;i<tci.vfather.count();i++) { rstr cname=tci.vfather[i].vword.get(0).val; tclass* ptci=zfind::class_search(sh,cname); if(ptci==null) { ptci=zfind::classtl_search(sh,cname); if(ptci==null) return false; } if(!inherit_proc(sh,*ptci,level)) return false; v+=ptci->vword; } v+=tci.vword; tci.vword=v; return true; }
bool next_permutation<T>(rbuf<T>& v) { if v.count<=1 return false next=v.count-1 for temp=next next-- if v[next]<v[temp] mid=v.count-1 for !(v[next]<v[mid]) mid-- swap<T>(v[next],v[mid]) reverse<T>(v,temp) return true if next==0 reverse<T>(v,0) return false }
define ← = void insertion_sort(rstr& a) { for j ← 1 to a.count-1 key ← a[j] i ← j-1 while i>=0 && a.get(i)>key a[i+1] ← a[i] i ← i-1 a[i+1] ← key }
void main() { int a int b [int,=,[a,1]] [int,=,[b,2]] [rf,print,[[int,+,[a,b]]]] }
理由五:RPP自由度极高,完全开源,您可以随意DIY运算符的优先级,增加新运算符,增加修改“内置类型”,甚至于int、double这些基础类型都是由用户自定义的,一切由您做主。
理由六:它是C++的山寨版,C++程序员几乎无需学习即可使用,而且RPP所有数据类型和C++二进制兼容,无论是静态链接还是动态链接,想怎样就怎样。
理由七:它以Lisp作为中间层,编译器在运行期可用,程序在运行时可以改变其结构,新的函数可以被引进,因此支持mixin、元编程以及各种动态特性,并且同时支持call_by_name、call_by_need和call_by_value。
理由八:RPP对C++的一些复杂语法进行了简化,单纯的编译速度比C++略快。但是RPP在解释运行的时候并不会一次编译整个程序,而是在函数需要运行的时候才进行即时编译(边运行边编译),所以综合编译速度比C++快一个数量级(仅与VC++和G++对比)。
理由九:RPP的设计目标是简洁、快速、稳定。它的源码结构比lua简单得多,但实现的功能不比lua少,因此RPP将是您实现编译器的绝佳参考。另外嵌入编译器只需要包含一个头文件即可(zmain.h),您再也不用担心各种奇怪的链接错误了。
理由十:RPP支持中文编程。
RPP支持多种运行方式,方法如下:(各种运行方式支持的特性请参考rpp.pdf)
下面是RPP编写的控制台贪食蛇:
(仅v1.83及以下版本支持,新版本正在重构cocos2dx绑定)
(仅v1.83及以下版本支持,新版本正在重构cocos2dx绑定)
使用scite可以自动补全代码,但不如Visual Assist的智能补全。
Visual Assist智能补全请看视频演示:
http://www.tudou.com/programs/view/40Ez3FuqE10/
(如果您修改了编译器源码,请运行这个批处理)
RPP没有协议,任何人可以随意使用、复制、发布、修改、改名。
QQ交流群:34269848
E-mail: 287848066@qq.com