panda是脚本语言解释器,它基于javascript,但裁剪了部分语法特性;
panda是轻量级语言,它被设计用来作为嵌入式硬件的解释器;
panda很容易学习。
首先,需要一个解释器来执行你编写的脚本,目前有几种方式:
解释器在显示出一个漂亮(丑陋)的logo后,开始等待用户输入。
你可以键入panda/javascript语句,解释器将进行语法解析、编译为字节码、解释执行,最后将执行结果通过终端返回。
如果你使用panda交互解释器,看到的输出大概就是下面的样子
$ panda/repl >
cd your_workspace_path git clone https://github.com/cupkee/panda.git
在编译panda之前,你需要安装gcc编译器以及libreadline库
编译步骤:
正向你所看到的,之前用到的交互解释器只是一个例子程序。
你完全可以将panda用到自己的项目中,作为配置解释器、命令行或其它。
我非常需要实际使用中发现bug的反馈,以便不断对程序进行完善。
欢迎你通过以下两种方式提交bug:
panda一个裁剪板的javascript解释器,基础语法与javascript相同,非常易于学习掌握
var a, b, c
var a = 0, b, c = 'hello'
panda解释器在计算表达式时与标准javascript区别
不同类型的值进行运算时,不会进行类型转换,直接返回NaN(非数字)
运算符
> 1 + 1 2 > (10 + 5) * 3 / 5 9 > 1, 2, 3, 5 + 6 11 > 1 > 2 false > 'hello' + 'world' "helloworld" > 'a1' < 'b2' true > 'hello' + 1 NaN > 1 * 'hello' NaN ...
if语句是根据条件选择不同分支处理的语句
if (true) { // always execute } else { // never execute } if (a > 100) { ... }
while语句是进行循环处理的语句
while(a++ < 100) { ... }
break用于跳出循环
continue用于跳转到循环条件判断
return 用于从函数跳出,并可指定返回值
在panda中扩展了javascript定义函数的语法
function fn() { // statements ... } // 匿名函数 var fn = function () { // statements ... }
在panda中提供了def关键字,作为function的别名
def fn() { // statements ... } // 匿名函数 var fn = def () { }
在panda中定义单语句函数时,可以不带"{}"
def fn() return 0; var fn = def() return 1;
panda支持javascript程序中常用的即时调用
(def(x, y) { ... return x + y; })(100, 50); // return 150
在panda中不支持new的相关语义,但保留new关键字(不要把"new"作为变量或函数名)。
panda支持闭包
var fn = (def(n) { var c = n; return def() return c++; })(100); fn() // 100 fn() // 101
panda中的数组和对象与javascript非常相似,但目前只提供了有限的方法。(一个好消息是:panda是开源代码,你可以随意添加需要的方法)
Buffer对象来源于nodejs, panda同样也没有实现完整操作接口
Date对象目前没有实现, 但已经在计划之中
panda对复合类型的支持还在持续完善中, 参考test和example中的代码了解更多(不用担心,代码非常容易理解)
以下是一些使用复合对象的例子
/* array example */ var a = []; // 定义空数组,赋值到变量a a.push(1); a.push('hello'); a.length(); // 2 a[0] // 1 a[1] // 'hello' a[2] // undefined a.shift() // 1 a.length() // 1 a.pop() // 'hello' a.length() // 0 a[0] // undefined a.unshift('hi'); a.push('panda'); a.length() // 2 a[0] // 'hi' a[1] // 'panda' a.foreach(def(value, index) { ... }); /* object example */ var o = {}; // 定义空对象,赋值到变量o o.length(); // 0 o.a // undefined o.a = 1; // 1 o.a // 1 o['a'] // 1 o['a'] = 'hello // 'hello o['a'] // 'hello o.length(); // 1 o.foreach(def(key, value) { ... });
请参考test和example中的代码,非常简单。
panda目前已经具备了解释器库的基本特性,而且很容易使用,可以用在很多项目中实现很有意思的功能
但以下几点需要注意:
panda还不完善,接口没有达到稳定状态,后续还将保持更新
panda首先被设计用在资源有限的嵌入式处理器,最小4k内存就可以工作,但对于大内存条件没有经过良好测试
panda内建了内存管理和垃圾收集机制,但当前的gc算法对大内存环境没有进行优化,随着内存使用量的增大gc占用的时间会有较大增长
panda不依赖任何操作系统层的支持, 整合到应用中非常简单,但操作系统提供的高级特性(如:多线程/任务,事件处理)需要集成开发人员处理
panda被cupkee(一个开源智能硬件操作系统)用来作为解释器,它的特性和开发进度是被cupkee驱动的
使用并反馈bug或特性需求
为panda提交代码
其它你觉得有帮助的任何事