AICon上海|与字节、阿里、腾讯等企业共同探索Agent 时代的落地应用 了解详情
写点什么

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

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

关注

评论

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

N皇后问题之位运算解法

孙苏勇

算法 DFS 位运算

中台上线半年,我总结出了“七宗罪”

punkboy

中台 企业中台 后台开发 业务中台 后台

为什么你成不了「超级个体」?

非著名程序员

程序员 互联网 提升认知 认知提升

JDK 15 都发布了,可 Java 8 依然是最爱

古时的风筝

Java Java 25 周年 Java版本

从零到部署:用 Vue 和 Express 实现迷你全栈电商应用(三)

图雀社区

vue.js Vue Node

csapp-chapter1

卓丁

深入理解计算机系统 csapp

如何让解决无法访问 GitHub 的问题?

JackTian

GitHub

【译文】为什么说Rust是机器人技术的未来

袁承兴

rust 机器人 嵌入式

从零到部署:用 Vue 和 Express 实现迷你全栈电商应用(四)

图雀社区

Vue Node

自定义 SpringBootStarter

子路无倦

SpringCloud-OpenFeign源码

云淡风轻

Spring Cloud

我的个人知识管理方法

lidaobing

个人成长 知识管理 PKM

ArrayList浅析

章小传

Java collection 原理 ArrayList

分布式事务 - 三种常见的解决方案

Java收录阁

分布式事务

除了公关,我还能为公司做点什么?(系列1)

邓瑞恒Ryan

学习 个人成长 自我管理 成长 职业成长

做一个纸上谈兵的项目经理

escray

多来点胜利,对冲颓丧

zhoo299

成长 备忘

源码分析 | 像盗墓一样分析Spring是怎么初始化xml并注册bean的

小傅哥

源码分析 小傅哥 spring源码 bean注入过程

大话设计模式 | 0 面向对象基础

Puran

C# 设计模式

GitHub上10个不可错过的另类有趣项目

码农神说

GitHub 开源 程序员

路径依赖 - 偶然决策导致的依赖。

石云升

思维模型 路径依赖 网络效应 沉没成本 价值网依赖

重磅推出:第14份年度敏捷状态报告(最新2020)

Bob Jiang

敏捷 调查报告 state of agile

csapp-chapter2

卓丁

深入理解计算机系统 csapp

科学提升认知方法之贝叶斯公式

奈学教育

贝叶斯公式

React之Context源码分析与实践

费马

源码分析 React useContext Context React-Router

从零到部署:用 Vue 和 Express 实现迷你全栈电商应用(五)

图雀社区

Vue Node

从零到部署:用 Vue 和 Express 实现迷你全栈电商应用(六)

图雀社区

node.js Vue

愚蠢写作术(2):怎么让你的文章变得冷冰冰

史方远

学习 个人成长 写作

Sula - 可能是西湖区最好用的antd配置框架

开远

大前端 antd sula 配置化开发

架构师必备的ToB产品交付之双轮驱动思维模型

常平

产品 极客大学架构师训练营

JUC整理笔记五之梳理Varhandle(下)

JFound

Java

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