写点什么

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:172924
用户头像

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

关注

评论

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

架构实战营-毕业设计项目

阿体

安全世界观 | 常见WEB安全问题及防御策略汇总

架构精进之路

安全 8月日更

当农产品拥有“身份证”区块链技术如何助力农产品溯源监管?

CECBC

Github访问量破百万!原来是美团大牛的分布式架构实战笔记上线了

Java~~~

Java 面试 分布式 微服务 架构师

新手小白花几个月勇敢裸辞转行网络安全

网络安全学海

网络安全 信息安全 转行 渗透测试 安全漏洞

阿里开发人员献礼“Java架构成长笔记”,深入内核,拒绝蒙圈

Java~~~

Java spring 面试 微服务 架构师

初学字典-python

加里都好

毕业感想

薛定谔的指南针

架构实战营

从java注解漫谈到typescript装饰器——注解与装饰器

zhoulujun

Java 注解 装饰器 ts 元数据

JIT-动态编译与AOT-静态编译:java/ java/ JavaScript/Dart乱谈

zhoulujun

Java dart JIT

Java架构速成笔记:七大专题,1425页考点,挑战P8岗

Java~~~

Java spring 面试 微服务 架构师

【架构实战营】毕业设计

swordman

架构实战营

06-高可用复杂度

Lane

设计千万级学生管理系统的考试试卷存储方案-模块四

小牧ah

架构实战营

腾讯技术官手撸笔记,全新演绎“Kafka部署实战”,已开源

Java~~~

Java MySQL 面试 MQ 架构师

微信朋友圈的高性能复杂度分析

Saber

架构实战营

模块四作业

秀聪

架构训练营

模块四作业

Mr.He

架构实战营

Android Jetpack Compose

Changing Lin

8月日更

单向数据流-从共享状态管理:flux/redux/vuex漫谈异步数据处理

zhoulujun

React Redux vuex vue2 状态机

三维旋转笔记:欧拉角/四元数/旋转矩阵/轴角-记忆点整理

zhoulujun

矩阵旋转 欧拉角 三维旋转 四元数

JavaScript 开发人员应该理解的 this

devpoint

JavaScript js变量声明 this 8月日更

记录一次基于Qt的内存数据修改工具开发

星河寒水

qt 内存数据修改 Cheat Engine

其实,这就是「幸存者偏差」

非著名程序员

提升认知 认知提升 个人提升 8月日更

毕业设计作业

薛定谔的指南针

架构实战营

架构实战营模块四作业

王晓宇

架构实战营

05-高性能复杂度

Lane

手撸二叉树之二叉树中第二小的节点

HelloWorld杰少

数据结构与算法 8月日更

华为大佬的“百万级”MySQL笔记,基础+优化+架构一键搞定

Java~~~

Java MySQL 数据库 面试 架构师

13W字!腾讯高工手写“Netty速成手册”,3天能走向实战

Java~~~

Java 面试 微服务 Netty 架构师

04-可扩展架构

Lane

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