写点什么

Mozilla Sweet.js:用宏扩展 JavaScript

  • 2012-10-23
  • 本文字数:821 字

    阅读完需:约 3 分钟

Mozilla Sweet.js 使开发人员能够通过使用宏在语言中添加新的语法以丰富 JavaScript。这有助于开发者们为自己的风格定制 JavaScript 语法,或是为他们的空白领域,创建基于 JavaScript 的领域专用语言来扩展 JavaScript。

受到 Scheme 和 Rust 的启发,Sweet.js 使我们可以使用 macro 关键字定义卫生宏。这个例子用更简短的 def 替换了 function 关键字:

复制代码
macro def {
case $name:ident $params $body => {
function $name $params $body
}
}

现在,能够用 def 来定义函数了:

复制代码
def add (a, b) {
return a + b;
}

另一个更为有趣的示例介绍了 class 关键字:

复制代码
macro class {
case $className:ident {
constructor $constParam $constBody
$($methodName:ident $methodParam $methodBody) ... } => {
function $className $constParam $constBody
$($className.prototype.$methodName
= function $methodName $methodParam $methodBody; ) ...
}
}

class 使用示例:

复制代码
class Person {
constructor(name) {
this.name = name;
}
say(msg) {
console.log(this.name + " says: " + msg);
}
}
var bob = new Person("Bob");
bob.say("Macros are sweet!");

更多宏相关示例可在GitHub 上Mozilla/Sweet.js 项目的wiki 中找到,那里还能下到基于BSD 许可证的源代码

包含宏的Sweet.js 文件将通过 sjs 编译成纯 JavaScript 文件,无需使用任何额外的语法。 require-sweet 提供了 AMD 加载器 SweetJS gem 用于从 Ruby 编译 Sweet.js 文件。

Sweet.js 目前支持声明式的宏定义,然而据 Mozilla 研究所的 Tim Disney 所说,计划将要支持命令式的定义。这意味着宏可以包含编译时运行的任意 JavaScript 代码。

查看英文原文 Mozilla Sweet.js: Extending JavaScript with Macros


感谢崔康对本文的审校。

给InfoQ 中文站投稿或者参与内容翻译工作,请邮件至 editors@cn.infoq.com 。也欢迎大家通过新浪微博( @InfoQ )或者腾讯微博( @InfoQ )关注我们,并与我们的编辑和其他读者朋友交流。

2012-10-23 07:173029
用户头像

发布了 27 篇内容, 共 92159 次阅读, 收获喜欢 4 次。

关注

评论

发布
暂无评论
发现更多内容

新知识的地图绘制

Nydia

架构实战营 - 毕业总结

en

#架构实战营

『新华报』重庆试试彩官方平台[手机乐乎]

天马行空

重庆试试彩官方平台

爸爸想对儿子说的话

Tiger

28天写作

mongodb出现重复id怎么办?

喵叔

28天写作 12月日更

趣谈“链路追踪组件” Skywalking 和 PinPoint

悟空聊架构

链路追踪 Skywalking 28天写作 悟空聊架构 12月日更

Linux常用命令-如何操作文件?

Java个体户

Linux

《深入理解JVM虚拟机》第三章 垃圾收集器与内存分配策略

Joseph295

架构实战营 - 毕业设计

en

#架构实战营

一图看懂软件缺陷检查涉及的内容

Tom(⊙o⊙)

软件安全 静态代码检查

举重若轻流水行云,前端纯CSS3实现质感非凡的图片Logo鼠标悬停(hover)光泽一闪而过的光影特效

刘悦的技术博客

CSS html css3 LOGO HTML5, CSS3

『新华报』飞艇分析工具[手机乐乎]

天马行空

飞艇分析工具

云原生:K8s控制器汇总(附视频教程+PDF)

息之

k8s Node Deployment statefulset cronjob

linux重要的目录之proc和dev目录

入门小站

Linux

请清晰沟通选题-从策略层面定义技术演讲

将军-技术演讲力教练

『新华报』回血上岸导师[手机乐乎]

天马行空

回血上岸导师

现实扭曲力场引论

Justin

群体心理学 28天写作 玄学

『新华报』北京飞艇赛车微信群[手机乐乎]

天马行空

北京飞艇赛车微信群

『新华报』一分飞艇怎么操作的[手机乐乎]

天马行空

一分飞艇怎么操作的

在线蚂蚁文,菊花文生成工具

入门小站

工具

圣迪

Prometheus Exporter (十六)Microsoft SQL Server Exporter

耳东@Erdong

microsoft Prometheus 28天写作 exporter 12月日更

『新华报』秒速飞艇开奖[手机乐乎]

天马行空

秒速飞艇开奖

Golang Gin 框架之中间件(六)

liuzhen007

28天写作 12月日更

2.《重学JAVA》--初探JAVA

杨鹏Geek

「Java 25周年」 28天写作 12月日更

复制流动改变世界

mtfelix

28天写作

架构训练营模块一作业

沈益飞

「架构实战营」

Prometheus Exporter (十五)PostgreSQL Server Exporter

耳东@Erdong

Prometheus postgres 28天写作 exporter 12月日更

用错误的动作,让正确的事情发生(3/28)

赵新龙

28天写作

[Pulsar] JWT认证的原理

Zike Yang

Apache Pulsar 12月日更

不懂这五项权力,做什么项目经理

Ian哥

项目管理 28天写作 五项权力

Mozilla Sweet.js:用宏扩展JavaScript_JavaScript_Abel Avram_InfoQ精选文章