SZDIY聚会2013-01-24小记
本周四的SZDIY活动非常难得邀请到目前在香港的一位资深Hacker,活跃于各大Hackerspace的前google wave的开发者Jonas Karlsson来给我们分享他最近在设计的一门好玩的语言panda,由于演讲嘉宾的功力深厚,这次演讲内容相当有意思。

- 问题
Jonas介绍,为什么会提出设计一门新语言的想法?因为他感觉到现在手机、平板的大量应用,个人电脑的含义已经超越了传统的PC台式机及笔记本了。我们逐渐习惯于在一个小屏幕上做各种各样的事情,但惟独有一件事情是做得很不方便的——那就是写代码。因为当你用高级语言随便写一个小程序的时候,都必须要打很多字,而且还有各种特殊字符,必须在键盘间来回切换,十分麻烦,如果要想写个功能稍完整一点的程序,那几乎是个噩梦。
#include
main() { cout
return 0; }
看看上面这个hello
world程序,如果用下图这个键盘来打的话,要输入“”、“#”、“;”这样的符号要切换多少次键盘?

因此,Jonas就希望设计一个超级简化,在平板上也能轻轻松松实现编程的语言。
- 设计

Jonas把他的设计原则扩充了一下,便是以上几条。包括:直接的数据操作、没有随便命名的变量、增量开发、方便在平板上触控编程,由此对该语言提出的要求是:高抽象层次的,很少语法的,同时可以立即看到结果的。结果最终他设计出来的Panda语言竟号称没有if和loop(条件和循环)!如何做到?

原理是他把程序的语法抽象成最简单的两种元素——数据和过滤器。有linux基础的人都应该明白Pipe(管道)在shell环境里是如何强大,而Panda的实现是基于Javascript同时用了类似这种管道思想去处理数据的。由于Javascript是一种弱类型的语言,它为这个数据管道提供了很方便的容错性。过滤器说白了就是一个应用于返回对象的函数,它把输入的数据处理完后作为返回值传给下一个过滤器。闲话不多说,上几个例子就明白!
- 应用 如图所示,真正的代码就只有输入框里的一行字: *a=1..3 “” b=1..3 ‘=’ times(a,b) nl
而它的结果是下图中1到3的乘法表。简单地解释下这一行的语法:“1..3”是一个从1到3的整数集合;“a=1..3”则会使输出循环3次,像一个循环变量一样,同时“b=1..3”也有相似的作用;而()
“*” () ‘=’ ()
nl,这一段是相当于输出的格式,nl是回车(newline)的意思;times(a,b)这里则表示输出a和b当前的值的乘积。一行语句,一个简单的乘法表就出来了。

下面把这行代码稍扩充一下,就成了一个质数检测程序,把3..20内的所有非质数都打印出来:

别以为这个语言只能做简单的算术,由于它以Javascript为基础,同时运行环境又是在网页上,它可以非常方便地对html元素进行封装和操作。下图就是为我们展示一行语句把新车间的首页上的缩略图片都列出来(方式有点像jQuery的选择器),完全是所写即所得。试想一下把这个语言用在一些抓取网页内容的任务上。。。

对于新学习的语言,最难的往往是记那些函数库,自动提醒的功能是少不了的,它可以让你知道当前的对象能做什么,如下图粉红色标出的短语。
以上例子全都是一行代码写成,简洁得让人可怕,当然,实现这套环境可不容易。Jonas的高强就在于,这个环境本身也部分使用Panda语言写,极大地减轻了他的工作量。当时有些观众认为,可能这个语言只能在某些任务上表现出色,未必能在广阔的领域上发挥作用。而Jonas向我们展示了他仍在开发中的一些代码,我们已经可以看到,它甚至具备了socket通信,开发Web服务器和数据库的潜力,想想如果和nodejs合起来会产生什么样的效果?
对Panda语言感兴趣的朋友可以在这链接里找到一个测试版和介绍: http://yesco.org/panda.html
另外,SZDIY官网由danfei同学本周更新了首页(可是竟然要翻墙?!) http://szdiy.org/ 特别鸣谢柴火创刻空间为聚会提供场地: http://www.chaihuo.org/
分享: