转载

自制语言初试 - 入lang

Rationale(为毛要整一门语言)

自制语言初试 - 入lang

ClojureScript怎么就不好了

接上篇简单的介绍sweet.js之后, 萌发了特别crazy的idea. 如果CoffeeScript或者LiveScript也算 语言的话, 其实单单用sweet.js自制一堆macro就能实现类似的语言. 当然, 这两门语言都比较奇特, 一个 像似ruby和python的熊孩子, 另一个是F#和coffee的熊孩子, 总之, 没有一门是符合我自己的编程习惯.

而如果用Clojure写前端也就是用ClojureScript的话, 由于是完全另一门语言, 跟JS其他库交互会非常麻烦. 而像Coffee则没有 这个问题, 难道就不能有一种ClojureScript可以完全兼容JavaScript, 又可以用到Clojure的各种 奇特函数呢.

ClojureScript的数据结构移植

ClojureScript的作者David做了一个非常有意思的项目,把ClojureScript的数据结构单独导出来做成类似underscore的库 - mori . 官方的解释是

A simple bridge to ClojureScript's persistent data structures and supporting APIs for vanilla JavaScrip

恩, 这不正是我想要的吗. 可以直接在JavaScript中使用ClojureScript的数据结构.

但是…

那macro呢

David导出了所有的数据结构以及function, 但是像macro却不可能直接导成JavaScript, 因为是编译时 扩展的.

但是macro却是clojure(或者lisp语言)最吸引人的地方之一. 如果能移植过来讲会开启在用原生JS中使用到 所有ClojureScript features的无限可能. 比如就可以把core.async 移植过来.

于是为了验证移植macro的可能性, 我用Sweet.js实现了部分macro或者clojure的keyword, 我把这些 macros和mori的集合叫 ru-lang , 这样就可以用类似JavaScript的形式, 使用到所有Clojure的好处.

Hacker News 上的讨论 https://news.ycombinator.com/item?id=9749286

正文到此结束
Loading...