理由一:目前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