写点什么

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

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

关注

评论

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

《原则》(四)

Changing Lin

极光开发者周刊【No.0604】

极光JIGUANG

程序员 开发者 IT行业

聊聊MySQL全局锁

架构精进之路

MySQL 6月日更

“微博评论”高性能高可用计算架构

白发青年

架构实战营

理解【Apache Zookeeper】

awen

zookeeper

深入理解iOS图文混排原理并自定义图文控件

Geen练

图文混排 iOS Developer iOS 知识体系

Nacos--简介

是老郭啊

微服务 nacos 服务注册与发现

从天而降的AI“青云梯”,开发者们准备好了吗?

白洞计划

模块五- 课后作业

Presley

架构实战营 #架构实战营

拍乐云运维专家受邀QECon大会,畅谈多云环境伸缩实践

拍乐云Pano

区块链技术为版权保护与运营提供科技支撑

CECBC

【译】JavaScript 代码整洁之道-注释篇

KooFE

JavaScript 大前端 代码注释 6月日更 整洁代码

机器通用运行框架抽象

型火🔥

架构 微服务 抽象 中间件 机器

【Vue2.x 源码学习】第四篇 - 对象的深层劫持

Brave

源码 vue2 6月日更

架构实战营模块5作业

En wei

架构实战营

区块链作为“信任的机器”,将改变社会价值的传递方式

CECBC

Kubernetes手记(1)- Kubernetes概述

雪雷

k8s 6月日更

python——格式化输入输出与截取字符串

在即

6月日更

浅析「扣减库存」的方案设计

悟空聊架构

分布式 秒杀 电商 6月日更 库存

你有没有 996 ?你要不要 955 ?

escray

学习 极客时间 朱赟的技术管理课 6月日更

【立刻报名】加速开发 Perforce on Tour China 2021-龙智

龙智—DevSecOps解决方案

博睿数据重塑APM,引领IT运维新标杆

博睿数据

博睿数据 数据链DNA 服务可达

全栈程序员这个月写了啥代码?

程序员鱼皮

Java JavaScript 大前端 后端 全栈

【得物技术】JS资源分包

得物技术

CSS 大前端 js 版本 页面

Nacos-- docker搭建

是老郭啊

Docker nacos

【环球网】博睿数据CEO冯云彪:做好生态链企业的适配工作

博睿数据

博睿数据 博睿数据数据链DNA 生态链

算法如何促成亿级别扶持曝光视频?爱奇艺Budget Pacing智能扶植系统实践

爱奇艺技术产品团队

架构 推荐 算法 广告 扶植

区块链—重构新商业体系和全新商业生态环境

CECBC

MySQL基础之二:SQL语句介绍与使用

打工人!

MySQL sql查询 6月日更

数字中国的视觉进阶:ISP的来处与归途

脑极体

网络攻防学习笔记 Day35

穿过生命散发芬芳

网络攻防 6月日更

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