写点什么

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

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

关注

评论

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

与创新者同行!Apache Doris 首届线下峰会即将开启,最新议程公开!|即刻预约

SelectDB

数据库 大数据 数据仓库 数据分析 实时数仓

AIGC | LLM 提示工程 -- 如何向ChatGPT提问

极光JIGUANG

人工智能 AIGC ChatGPT LLM

软件测试|神操作!用 Python 操作 xmind 绘制思维导图

霍格沃兹测试开发学社

Docker安装mysql

Programming abstractions in C阅读笔记:p176-p178

codists

操作系统的概述

芯动大师

Easysearch Chart 0.2.0都有哪些变化

极限实验室

Helm easysearch

软件测试|手把手教你用Python来模拟绘制自由落体运动过程中的抛物线

霍格沃兹测试开发学社

软件测试|教你如何用Python获取昨天今天明天的日期

霍格沃兹测试开发学社

软件测试|Python高手教你玩转 Excel 自动化

霍格沃兹测试开发学社

为什么你的企业需要一个海外服务器?

一只扑棱蛾子

服务器 海外服务器

软件测试|f-string格式化输出的这些用法,90%的Pythoner不知道

霍格沃兹测试开发学社

软件测试|Python实用炫酷技能——推导式

霍格沃兹测试开发学社

深度学习在语音识别中的应用及挑战

来自四九城儿

软件测试|教你轻松玩转Python日期时间

霍格沃兹测试开发学社

X2RTC正式上线!抢先体验已开启

X2Rtc

开源 音视频 RTC

软件测试|Python删除列表元素的3种方法,你都会吗?

霍格沃兹测试开发学社

ACK 云原生 AI 套件:云原生 AI 工程化落地最优路径

阿里巴巴云原生

阿里云 AI 容器 云原生 ACK

企业一张网,数字雨林生长时

脑极体

FaceFusion:探索无限创意,创造独一无二的面孔融合艺术!

汀丶人工智能

人工智能 深度学习 计算机视觉 图像生成

软件测试|Python神器logging,你真的了解吗?

霍格沃兹测试开发学社

Generative AI 新世界 | 文生图领域动手实践:预训练模型的微调

亚马逊云科技 (Amazon Web Services)

机器学习 开源 #人工智能 生成式人工智能 Amazon SageMaker

NFT交易平台搭建数字藏品系统开发

V\TG【ch3nguang】

软件测试|一步到位教会你Python字典操作(一)

霍格沃兹测试开发学社

软件测试|PC端应用自动化最佳解决方案——Pywinauto

霍格沃兹测试开发学社

nft数字藏品系统搭建 | 元宇宙交易平台开发

V\TG【ch3nguang】

运维 | 了解 nginx 配置中 root 与 alias 的区别 | nginx

Appleex

nginx 运维

软件测试|pip命令,你真的会了吗?

霍格沃兹测试开发学社

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