【ArchSummit架构师峰会】探讨数据与人工智能相互驱动的关系>>> 了解详情
写点什么

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

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

关注

评论

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

Fabarta 与青岛市城阳区政府达成战略合作,共同推动区域数据要素市场建设

Fabarta

数据挖掘 数据要素 数据资产管理 图智能 数据要素流通

全新 – Amazon EC2 R6a 实例由第三代 AMD EPYC 处理器提供支持,适用于内存密集型工作负载

亚马逊云科技 (Amazon Web Services)

Amazon EC2

如何安装OpenHarmony HAR

鸿蒙之旅

OpenHarmony 三周年连更

程序员 35 岁危机的核心实质是什么?

海拥(haiyong.site)

三周年连更

已有多人中招:这张特殊二维码可致微信闪退,还会进入安全模式

Rose

微信防撤回 微信下载 微信小助手 微信闪退

视频监控系统选择硬盘,绿盘、蓝盘、紫盘、黑盘、红盘到底选择哪个?

wljslmz

视频监控 三周年连更

pyFBI让Python运行的性能可视化

IT蜗壳-Tango

三周年连更

Prometheus实战-从0构建高可用监控平台(五)

小毛驴的烂笔头

Linux Prometheus

毕业设计-100w秒杀设计

Sam

架构实战营

锐捷网络,无边光景一时新

脑极体

网络

所谓高手,就是跨过坑和大海| 社区征文

鸿蒙之旅

三周年征文

Django笔记二十五之数据库函数之日期函数

Hunter熊

Python django extract trunc

Flink数据流元素

阿泽🧸

flink 三周年连更

Java 网络编程详解

timerring

Java

Prometheus实战-从0构建高可用监控平台(三)

小毛驴的烂笔头

Linux Prometheus

健康运动app(2)

鸿蒙之旅

OpenHarmony 三周年连更

苹果Mac电脑安装AutoCAD 2024卡死无响应,怎么办

Rose

cad AutoCAD 2024 Mac版 AutoCAD 2024下载 无响应

适用于Mac的七款最佳高清音乐播放器,专为发烧友而生!

Rose

iTunes mac音乐播放器 苹果系统 音乐软件

什么是点对点传输?什么是点对多传输

镭速

Prometheus实战-从0构建高可用监控平台(四)

小毛驴的烂笔头

Linux Prometheus

数据脱敏技术

穿过生命散发芬芳

数据脱敏 三周年连更

Linux 中的文件锁定命令:flock、fcntl、lockfile、flockfile

wljslmz

Linux 三周年连更

实现CyclicBarrier的原理和在Go中的应用

Jack

如何有效的向 AI 提问 ?

繁依Fanyi

人工智能

2023-05-08:我们定义了一个函数 countUniqueChars(s) 来统计字符串 s 中的唯一字符, 并返回唯一字符的个数。 例如:s = “LEETCODE“ ,则其中 “L“, “T

福大大架构师每日一题

Go 算法 rust 福大大

需求梳理会开2天是否合理?

BY林子

软件质量 需求分析 需求工程师 需求梳理

项目管理系统Redmine怎么样

PingCode

项目管理 项目管理软件

【深入浅出Spring原理及实战】「缓存Cache开发系列」带你深入分析Spring所提供的缓存Cache功能的开发实战指南

洛神灬殇

spring 缓存服务 三周年征文 CacheManager 缓存系统

对比编程语言的四种错误处理方法,哪种才是最优方案?

Python猫

编程

Shell语法之基本运算符

二哈侠

Shell 三周年连更 shell变量

监控服务与zabbix介绍

乌龟哥哥

三周年连更

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