热烈庆祝国产编程语言R++1.8研发成功

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这些基础类型都是由用户自己定义的,一切由您做主。(假设您想制作属于自己的编程语言并进入有用阶段,R++将是您的最佳參考。没有之中的一个)

5.它的语法相当简洁,支持N种省略语法,最大程度降低您的击键次数。

(R++支持类似《算法导论》的伪代码)

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+'}')]}


类似《算法导论》的伪代码:

/*
能够把R++当做伪代码写,
以下就是《算法导论》开篇的插入排序代码
(因为R++数组从下标0開始而算法导论从1開始,故略微改动了下)
*/

define ← =

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
}



仅用60行代码就实现了一个httpserver:

/*
简单的httpserver,參考《深入理解计算机系统》
执行后在浏览器输入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'
}


posted @ 2017-07-05 21:00  yxysuanfa  阅读(1241)  评论(0编辑  收藏  举报