我知道,很多(确有很多吗?)人会觉得Haskell这样的纯粹的静态强类型函数式语言太过于严肃抽象了,只适合用来完成生冷坚硬的科学任务。可是,亲爱的Paul Hudak(http://cs-www.cs.yale.edu/homes/hudak/)却在一次名为"Haskell and the Arts"的讲演中让我们看到,原来严谨思辨的Haskell也可以为许多领域的艺术家提供独特的助力。
演讲者在一开始就向所有的人提出了几个问题:
我们能不能创造出一个机器人指挥家?
象房子那么大的萨克斯会发出怎么样的声音?
能不能用动画模拟出一段新的编舞?
我们还能不能创造新的艺术表达方式?(请看Smule创造了什么样的电子陶笛:http://www.tudou.com/programs/view/_moJVfRuZzk/)
那么Haskell已经做了哪些有意思的事情呢?
首先是Conal Elliott(http://conal.net/)完成的几项原创性工作:
Fran - 函数式反应动画(Functional Reactive Animation),http://conal.net/fran/
Pan - 函数式图象变换与合成,http://conal.net/pan/
Vertigo - 函数式的3D物体构建,http://conal.net/Vertigo/
这些工作的背后是一种非常有洞察力的编程范式――函数式反应编程(FRP, Functional Reactive Programming),由Conal发明,现在已经成为FP社区的一个非常重要的研究领域(http://www.haskell.org/haskellwiki/Research_papers/Functional_reactive_programming)。简单来说,FRP特别适合用来描述和构造那些会随时间变化并且和外界进行交互的系统,很多常见的艺术表现形式都属于这种系统,比如交互式图形和动画、音乐,舞蹈等等。
以上提到的工作都是视觉相关的,对于声音,Haskell更是拿手。我记得在《Programmers at Work》里有某位受访者(Scott Kim?http://www.scottkim.com)说过,程序员和音乐家有个显著的共同点,那就是都用某种抽象的标记法来表达他们的情感。我想,Haskore(http://haskell.org/haskellwiki/Haskore)的出现可以在某种程度上统一这两个不同群体所用的语言了吧。作为一种内嵌在Haskell里的用来描述音乐的EDSL(Embeded Domain-Specific Language),它只需要说“是什么”而不用管“怎么做”,高阶函数、代数数据类型(algebraic data types)、惰性计算(lazy evaluation)、元类型(type classes)这些编程的抽象机制让创作者拥有比传统曲谱更为自由的组合能力,从而令“音乐程序”变得异常的简洁优美和富有活力。而与之配合的实时声音合成系统HasSound利用与FRP相似的概念来描述数据流(data flow),那些具有独特气质的声音音源便可以象搭建一个数字信号处理电路那样直观地创造出来。
我说过Haskell还可以用来编舞吗?啊哈,这就是Dance了:http://www.haskell.org/yale/papers/dance-30-tr/dance.pdf。你可以把它看成是交互式的拉班舞谱(labanotation),写就之后可以马上在电脑上给出实时的舞姿模拟。
Paul在演讲中提到了animusic这家公司的作品,有兴趣去看看这个:http://v.youku.com/v_show/id_XMTY2NzY2MTI=.html。它其实是一个完整的3D虚拟音乐会的片断,如果觉得不过瘾,自己搜搜,不会吃亏的。类似的还有前不久引起轰动的日本虚拟偶像初音未来的演出。Paul觉得,对于这种集图形动画、音乐音效为一身,纯粹由电脑演绎并且要求每个方面节奏高度协调一致的作品来说,Fran、Haskore、Dance及其相关的思想都是大可以派上用场的。我本人对此表示谨慎地乐观,说到底,一切都需要实践去检验。将来有机会,我们还可以谈谈交互式虚拟戏剧研究领域对类似问题的一些解决方法。
如果你和我一样,为这些充满创意的工作所打动,想亲身感受Haskell的艺术魅力,那么向你们推荐我正在读的这本Paul Hudak著的《The Haskell School of Expression》。作者会用各种各样活泼可爱的多媒体程序来展现Haskell的优美,并在序言中表示了相当的信心:阅读本书一定能给读者带来非常愉悦的体验。正如其它可以被奉为经典的书籍一样,简洁成SOE的缩写已是它价值的明证。
越来越发现,在这个喧嚣疯狂的世界上还有许多事情远比欺骗与被欺骗、掠夺与被掠夺、伤害与被伤害更有意思,比如演讲的副标题所提出的:“程序员如何帮助、启发甚至成为艺术家(How Functional Programmers can Help, Inspire, or even Be Artists)”。当你对生活多少有点儿恍惚绝望的时候,尝试去思索和实践这样的课题,也算是给自己的心灵带来一种安慰吧?!