写点什么

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

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

关注

评论

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

企业级npm仓库搭建

龙之幽谷

前端 nexus NPM仓库

MobSDK 客户端API

MobTech袤博科技

API an'droid

如何建设前端物料平台?

龙之幽谷

前端 组件化

软件测试 | 测试开发 | Pytorch GPU 训练环境搭建

测吧(北京)科技有限公司

测试

软件测试 | 测试开发 | 利用 rpush 和 blpop 实现 Redis 消息队列

测吧(北京)科技有限公司

测试

软件测试 | 测试开发 | Golang死信队列的使用

测吧(北京)科技有限公司

测试

新书上市 | 连接组,向人类科学的最终前沿进军

图灵社区

神经网络 大脑 脑科学

JS基础——JS数据类型

龙之幽谷

前端 js

软件测试 | 测试开发 | Mysql 之执行计划

测吧(北京)科技有限公司

测试

刘奇:能否掌控复杂性,决定着分布式数据库的生死存亡

PingCAP

#TiDB

软件测试 | 测试开发 | 如何提取 IOS Runtime Headers

测吧(北京)科技有限公司

测试

Eclipse Theia技术揭秘——脚手架源码分析

龙之幽谷

开发工具

软件测试 | 测试开发 | Spring boot 之 RestTemplate访问

测吧(北京)科技有限公司

测试

软件测试 | 测试开发 | 自定义form表单验证

测吧(北京)科技有限公司

测试

企业级前端组件建设

龙之幽谷

前端 组件库

leetcode 572. Subtree of Another Tree 另一棵树的子树 (简单)

okokabcd

LeetCode 数据结构与算法

开发者有话说 | 一位工作十余年工程师的成长之路

矜辰所致

个人成长 经历分享 9月月更 成长感悟

软件测试 | 测试开发 | 使用 ReportLab 绘制 PDF

测吧(北京)科技有限公司

测试

认识 ESP-IDF-v4.3+工程结构(ESP32-C3应用调整示例)

矜辰所致

ESP32-C3 9月月更 ESP-IDF

用 nodejs 搭建脚手架

coder2028

node.js

软件测试 | 测试开发 | 如何提取 IOS Document_apis

测吧(北京)科技有限公司

测试

软件测试 | 测试开发 | web自动化测试-执行 JavaScript 脚本

测吧(北京)科技有限公司

测试

医疗卫生机构应该多久进行一次等保测评?

行云管家

网络安全 信息安全 等保测评 等级测评

软件测试 | 测试开发 | gitlab 服务端 hook, 拦截糟糕的提交到仓库

测吧(北京)科技有限公司

测试

Eclipse Theia技术揭秘——构建桌面IDE

龙之幽谷

开发工具

运维学网络安全还是云计算好?哪个更有前景?

行云管家

云计算 运维 网络安全

Eclipse Theia技术揭秘——自定义布局

龙之幽谷

开发工具

VSCode技术揭秘(一)

龙之幽谷

vscode 开发工具

架构实战营模块1作业

乖乖IvyShine

新书上市 | 连接组,向人类科学的最终前沿进军

图灵教育

神经网络 大脑 脑科学

Eclipse Theia技术揭秘——初识Theia

龙之幽谷

开发工具

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