速来报名!AICon北京站鸿蒙专场~ 了解详情
写点什么

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

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

关注

评论

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

从鉴黄师到阿里程序员,我成功拿下阿里offer

白亦杨

Java 编程 程序员 计算机

不要让这2个坏习惯限制了你的成长

俞凡

认知

怎么才能写出100个用户体验的关键时刻?

石云升

读书笔记 用户体验 关键时刻 7月日更

我应该在什么时候使用 Apache Druid

HoneyMoose

大厂的产品研发流程,你知道么?

Simon郎

产品 研发体系 大厂 互联网公司

根据四个商业指标找到MOT

石云升

读书笔记 用户体验 商业洞察 关键时刻 7月日更

使用数据库乐观锁的方式解决数值累加的问题

陈靓-哲露

结构化流-Structured Streaming(八-下)

Databri_AI

spark 流式计算框架 structuredStreaming

C# 三个Timer

喵叔

7月日更

完整视频+源码!十六天带你精通基于Spring Cloud微服务电商项目

Java架构追梦

Java 架构 面试 微服务 SpringCloud

Docker的学习体验

吴脑的键客

,docker

大三就拿到字节提前批,你不想成长,生活总会逼着你成长

Java架构师迁哥

线上教育培训机构如何推广自己

石头IT视角

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

极光JIGUANG

在线条码生成器

入门小站

工具

去阿里应聘P7Java岗,都会被问到哪些问题?

Java架构师迁哥

58字节常量池面试题,你如何应对?

卢卡多多

intern 字符串 7月日更

网络攻防学习笔记 Day83

穿过生命散发芬芳

网络攻防 7月日更

从鉴黄师到阿里程序员,我成功逆袭上岸

Java 编程 程序员 计算机

上线仅7天,GitHub已标星48.4k!原来是阿里巴巴内部《高并发系统设计》

Java redis 编程 架构 面试

什么是 Druid

HoneyMoose

【Kafka技术专题】「实践操作篇」单机部署实践手册(2.8.0)

洛神灬殇

kafka MQ kafka配置 消息队列 kafka架构

Apache Druid 简介

HoneyMoose

加速基因测序进程,北鲲云高性能计算平台再发力

北鲲云

我学编程时最后悔的事!

程序员鱼皮

Java c++ Python 大前端 后端

学习下服务器端漏洞,受益匪浅!

网络安全学海

运维 网络安全 信息安全 漏洞扫描 渗透测试·

Go语言:运行时反射,深度解析!

微客鸟窝

Go 语言

如何在Go 服务中做链路追踪

Rayjun

微服务 Go 语言

实践解析丨如何通过 WebAssembly 在 Web 进行实时视频人像分割

声网

大前端 WebRTC webassembly

Linux之cal命令

入门小站

Linux

微观管理?

escray

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

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