50万奖金+官方证书,深圳国际金融科技大赛正式启动,点击报名 了解详情
写点什么

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

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

关注

评论

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

HDFS 细粒度锁优化,FusionInsight MRS有妙招

华为云开发者联盟

hdfs NameNode 元数据 FusionInsight MRS FGL

前沿聚焦:2022最受关注的六大技术热词,你都知道吗?

华为云开发者联盟

零代码 NFT 数字人 元宇宙 云边端协同

Java Core「4」java.util.concurrent 包简介

Samson

学习笔记 5月月更 Java core

又一国际知名律师事务所选择福昕PDF

联营汇聚

通用池化框架实践之GenericKeyedObjectPool

FunTester

小程序如何实现一键转换成App

Geek_99967b

小程序容器 小程序转app

Linux环境编译动态库

Loken

音视频 5月月更

Linux 使用 cp 命令强制覆盖功能

AlwaysBeta

Linux 运维

vue + electronの文件读写

空城机

Electron 5月月更

linux之curl命令

入门小站

Linux

软件开发的核心原则

宇宙之一粟

软件设计原则 5月月更

云原生时代,热门监控工具对比与使用场景分析

云智慧AIOps社区

云原生 监控 Grafana Prometheus 监控宝

Kube-OVN v1.10.0:新增Windows节点支持,用户自定义子网ACL等10+硬核功能

York

云原生 网络 cni

P2P传输模式

工程师日月

计算机网络 5月月更

1.2架构的定义(一)

凌晞

架构 架构设计

聚焦无障碍阅读,福昕捐出2000套福昕高级PDF编辑器

联营汇聚

IoT技术的最后决战!百万大奖究竟花落谁家?

华为云开发者联盟

IoT 华为云 iotda NSBD-IOT

Kernel SIG直播:关于 Plugsched 调度器热升级 | 第 18 期

OpenAnolis小助手

Linux 直播 内核 sig 龙蜥大讲堂

开发者的福音 提前为你揭秘2022鲲鹏开发者创享日武汉站

极客天地

模块2-微信朋友圈高性能复杂度分析

Fan

架构实战营

技术立根,行业立范,发展立本:中国工业互联网的2.0新征程

脑极体

使用 awk 命令统计文本

程序员小航

后端 awk Linxu

小程序怎样一键转化成APP

Geek_99967b

小程序生态 小程序容器 小程序转app

flask框架学习总结(四)【 文件上传,实现最小应用,路径变量,模板继承】

恒山其若陋兮

5月月更

vue响应式原理简述

达摩

Vue vue源码解读

发布订阅模式和观察者模式【vue】

达摩

Vue 观察者模式 发布订阅

做一个能对标阿里云的前端APM工具

光毅

阿里云 性能优化 前端

开发一个社区网站,只要20分钟?

华为云开发者联盟

ide 敏捷开发 devcloud 网站开发

在线文本删除空行工具

入门小站

工具

在线HTML转SQL工具

入门小站

工具

微信视频号严查教育招生类账号:应该抵制恶意网络营销

石头IT视角

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