飞天发布时刻:2024年 Forrester 公有云平台Wave™评估报告解读 了解详情
写点什么

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

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

关注

评论

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

ALC北京发起人 姜宁:通过开放与协作,我们可以实现一个人想都不敢想的事情 I OpenTEKr 大话开源 Vol.6

OpenTEKr

大话开源

如何设计贴合业务的高性能高可用中间件系统

天天向上

架构实战营

费用节省 50%,函数计算 FC 助力分众传媒降本增效

阿里巴巴云原生

阿里云 云原生 合作 函数计算FC 分众传媒

【架构实战营】模块三:命题作业

wgl

「架构实战营」

详细架构设计文档

Anlumina

#架构实战营

Golang中文件的基本操作

liuzhen007

Go 28天写作 Go 语言 12月日更

瞰见 | 初创1个月就融到3亿美金,ClickHouse 你凭什么?

OpenTEKr

狄安瞰源

【架构实战营】模块三:知识点总结

wgl

「架构实战营」

第三周学习总结

糖糖学编程

架构实战营

深入理解一下Python中的面向对象编程

宇宙之一粟

Python 面向对象 12月日更

第三模块学习总结

Anlumina

#架构实战营

百度智能云发布零碳园区解决方案,助力实现双碳目标

百度大脑

人工智能

瞰见 | 开源,会不会变成开源创业的焦油坑?

OpenTEKr

狄安瞰源

引领人工智能技术自立自强 百度吴甜获评“首都最美巾帼奋斗者”

百度大脑

人工智能「

阿里巴巴超大规模 Kubernetes 基础设施运维体系揭秘

阿里巴巴云原生

阿里云 Serverless Kubernetes 云原生 ASI

架构实战营模块三作业

lchx08

「架构实战营」

一个cpp协程库的前世今生(一)缘起

SkyFire

协程 cpp cocpp

Java 数据持久化系列之池化技术

程序员历小冰

MySQL 持久化 28天写作 池化技术 12月日更

「架构实战营」模块三《如何保证设计出合理的架构》作业

DaiChen

作业 模块三 「架构实战营」

Apache 海豚调度 PMC 郭炜:开源,不是天才的甜点,而是执着者的盛宴 I OpenTEKr 大话开源 Vol.7

OpenTEKr

大话开源

从人工到智能!百度AI开发者大会分论坛,探寻国球乒乓背后的AI之路

百度大脑

人工智能

Git基础 |打tag

xcbeyond

git 28天写作 tag 12月日更

架构模块三作业

holdzhu

「架构实战营」

VS Code 如何设置大小写转换快捷键

AlwaysBeta

vscode

外包学生管理系统详细设计文档

糖糖学编程

架构实战营

百度飞桨EasyDL桌面版正式上线,没网也能训练AI!

百度大脑

人工智能

一口气搞懂【Linux内存管理】,就靠这60张图、59个问题了

奔着腾讯去

内存泄露 内存管理 Linux Kenel 内存映射 内存池

盘点 2021|自己一个人扛起了公司的半边天

liuzhen007

技术人生 盘点2021 盘点 2021

元宇宙100讲-0x011

hackstoic

元宇宙

元宇宙很好,但VR开发者不准备停留在这里

白洞计划

学习总结 2021.12.30

mj4ever

学习笔记

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