写点什么

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

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

关注

评论

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

链表中移除重复节点,保罗·格雷厄姆的传奇博客,Mac三指拖动操作,大数据平台 John 易筋 ARTS 打卡 Week 17

John(易筋)

大数据 ARTS 打卡计划 链表移除相同节点 保罗格雷厄姆 mac三指操作设置

Spring 5 中文解析测试篇-Spring MVC测试框架

青年IT男

单元测试 Spring5

导致系统不可用原因及密码验证

纯纯

安全相关总结

纯纯

智能商业时代的思考(二)网络协同抓住用户

刘旭东

微信 商业价值 数据智能 网络协同 商业智能

ARTS 打卡 (20.09.07-20.09.13)

小王同学

哦!这该死的 C 语言

苹果看辽宁体育

c 后端

第五周作业

Vincent

极客时间 极客大学

第五周总结

Vincent

极客时间 极客大学

C语言指针详解

C语言与CPP编程

c c++ 编程语言 指针

洗牌算法

C语言与CPP编程

c c++ 算法 编程语言

ARTS Week16

时之虫

ARTS 打卡计划

Mysql学习笔记:InnoDB事务和ACID模型

马迪奥

MySQL innodb

程序的机器级表示-异构的数据结构

引花眠

计算机基础

极客大学-架构师训练营

9527

Elasticsearch索引容量管理实践

腾讯云大数据

大数据

鹰眼 | 分布式日志系统上云的架构和实践

腾讯云大数据

大数据

ASP.NET Core 性能优化最佳实践

newbe36524

微服务 性能优化 .net core ASP.NET Core

架构师训练营第十四周总结

张明森

简述C语言宏定义的使用

C语言与CPP编程

c c++ 编程语言

CountDownLatch 瞬间炸裂!同基于 AQS,凭什么 CyclicBarrier 可以这么秀?

程序员小航

Java 源码 AQS 源码阅读 CyclicBarrier

数据结构与算法系列之数组

书旅

数据结构 算法 数组 数据结构与算法

ARTS打卡Week 12

teoking

为什么互联网巨头们纷纷使用Git而放弃SVN?(内含Git核心命令与原理总结)

冰河

git 冰河 代码管理 代码仓库 分支合并

图计算黑科技:打开中文词嵌入训练实践新模式

腾讯云大数据

大数据

03 Spring Security 入门实例

哈库拉玛塔塔

Spring Boot kotlin spring security

前端 10 问之 Docker (第一篇)

局外人

Docker

ARTS打卡 第16周

引花眠

微服务 ARTS 打卡计划

oeasy教您玩转 linux 010213 中文 fcitx

o

你必须要了解的「架构」小历史

小齐本齐

spring Spring Cloud Spring Boot

PB级大规模Elasticsearch集群运维与调优实践

腾讯云大数据

大数据

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