国产编程语言R++ V15.pdf
上传人:qw****27 上传时间:2024-09-12 格式:PDF 页数:50 大小:250KB 金币:15 举报 版权申诉
预览加载中,请您耐心等待几秒...

国产编程语言R++ V15.pdf

国产编程语言R++V15.pdf

预览

免费试读已结束,剩余 40 页请下载文档后查看

15 金币

下载此文档

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

R++1.1+2=32.C3.面向对象4.S表达式5.省略括号6.常量当做对象7.运算符DIY8.无缝内联汇编9.伪代码10.模板函数11.宏12.函数指针13.动态调用函数14.元函数15.动态类型16.反射17.JIT18.多重继承19.可变参数20.默认参数21.多线程22.本地调用23.类型转换24.动态数组25.多参数组26.重载27.指针和引用28.成员变量29.局部变量30.常量31.控制结构32.模板类33.包34.堆35.数据结构36.库37.调试38.文言文39.语言特性很多语言的第一个程序都是helloworld,但是它太难了。下面是R++的第一个例子。main{a=1b=2putsa+b}R++也支持C风格,上一个程序可以写成这样:voidmain(){inta=1;intb=2;puts(a+b);}对比上一节的程序可以看到R++的一些特点:*更彻底地类型推断,C++11需要使用关键字auto,R++可以省略auto*函数定义和函数调用均可省略后面的小括号*语句后面的分号也可以省略*对于返回值为void的函数,可以省略void(标准C默认返回int)同时R++也支持Java(C#)风格,比如上一个程序可以写成这样:publicclassmain{publicstaticvoidmain(){inta=1;intb=2;puts(a+b);}}R++试图模仿Lisp,它可以很好的融合C++的中缀表达式和Lisp的S表达式:main{intaintb[=a1][=b2][rfprint[+ab]]}其中[rfprint[+ab]]等价于[rfprint(a+b)]等价于rf.print([+ab])等价于rf.print(a+b)注意S表达式不以逗号作为分隔符,所以适当的时候需要加上括号。另一个S表达式的例子:example/4.2.h控制结构(if/for/while)后面的小括号是可以省略的,比如有一个递归求和的函数:intsum(inta){ifa<=1return1returnsum(a-1)+a}那么ifa<=1等价于if(a<=1)如果if后面有括号,则括号不能省略即不要写成if(a)<=1正确的写法是if((a)<=1)如果函数调用的右边没有小括号,则本行后面所有单词均作为函数的参数比如puts(sum(9))等价于putssum(9)等价于putssum9R++v1.5表达式过长可以折行:main{if(1||2)puts"true"func(1,2)func(1,2)}func(inta,intb){putsa+b}但是左圆括号不可折行。如果表达式过长又没有圆括号(比如return),请加上圆括号。常量可以作为对象使用,这只是编译器提供的一个语法糖比如2.print会替换为int(2).print"123"+"abc"会替换为rstr("123")+rstr("abc")和C++一样,类名后面接小括号表示生成临时对象rstr("123")会生成一个临时的rstr对象int(2)会生成一个临时的int对象R++支持自定义新的运算符,也可以自定义运算符的优先级,请手动修改rinf/optr.txt这个文件。比如%2这个%后面跟的数字就是求余运算符的优先级,修改这个数字即可。但不要调换里面运算符的顺序,因为有些运算符是编译器使用的。如果要增加新的运算符,请在文件末尾增加两行。(不能自定义>>运算符)借助于R++的运算符自定义功能可以实现一些很有趣的功能比如D=(A∩B)∪(A∩C)这是数学书上的一个表达式,在R++里只要自定义∪和∩两个运算符然后设定好优先级,再写两个运算符函数friendvector<T>operator∪(vector<T>&a,vector<T>&b){...}friendvector<T>operator∩(vector<T>&a,vector<T>&b){...}这段表达式就是可以运行的。看起来就像是你自己定义了一个专用于数学集合运算的新语言因此,R++这种灵活的语法很适合实现领域特定语言(DSL)R++相同优先级的运算符都是从左往右运算