2025 AI基础设施风向标,不看必后悔!#AI基础设施峰会 了解详情
写点什么

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

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

关注

评论

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

小红书多模态团队建立新「扩散模型」:解码脑电波,高清还原人眼所见

小红书技术REDtech

CV 计算机视觉 脑机接口 扩散模型 AAAI

百万并发!API 网关抗住了亚运会流量高峰

阿里巴巴云原生

阿里云 云原生

应用监控 eBPF 版:实现高效协议解析的技术探索

阿里巴巴云原生

阿里云 云原生 可观测

秒级弹性!探索弹性调度与虚拟节点如何迅速响应瞬时算力需求?

阿里巴巴云原生

阿里云 云原生 弹性调度

写作,写作,先写后作

zhumingwu

mac系统u盘启动盘制作教程,更新至macOS Sonoma 14

Rose

mac系统

i人事2023:在不确定性的年份做正确的事情

ToB行业头条

一种快速开发适配鸿蒙的App思路:基于小程序技术

FinFish

鸿蒙操作系统 小程序容器 小程序技术 鸿蒙Next 鸿蒙5.0

《凤凰架构:构建可靠的大型分布式系统》PDF

程序员李木子

《Java核心编程》PDF

程序员李木子

左耳听风 - 分布式架构「读书打卡 day 14」

Java 工程师蔡姬

读书笔记 程序员 个人成长 分布式 职业发展

期待已久!阿里云容器服务 ACK AI 助手正式上线

阿里巴巴云原生

阿里云 容器 云原生

高效工作必备神器:这款在线软件能完美替代Visio!

彭宏豪95

在线白板 办公软件 绘图工具 效率软件 Visio

阿里云 SAE 2.0 正式商用丨云原生 2023 年 12 月产品技术动态

阿里巴巴云原生

阿里云 云原生

云原生网关哪家强:Sealos 网关血泪史

阿里巴巴云原生

阿里云 云原生 Sealos

C# Break 和 Continue 语句以及数组详解

小万哥

C# 程序人生 编程语言 软件工程 后端开发

Kube Queue:Kubernetes 任务排队的利器

阿里巴巴云原生

阿里云 Kubernetes Kuber 云原生

Programming Abstractions in C阅读笔记:p248-p253

codists

DRM音频格式转换好帮手-NoteBurner iTunes DRM Audio Converter 兼容M1和macos14系统

Rose

DRM 音频转换器

10分钟白嫖一套监控系统

Yestodorrow

可观测性 用户体验 网站监控 # 监控系统

如何从 Jira 成功迁移到极狐GitLab,看这个就够了!

极狐GitLab

Koordinator v1.4 正式发布!为用户带来更多的计算负载类型和更灵活的资源管理机制

阿里巴巴云原生

阿里云 云原生 Koordinator

Live Home 3D Pro for Mac(苹果电脑3D室内家居设计软件)

Rose

Mac软件 Live Home 3D Pro 家居设计软件 Live Home 室内设计

2023 IoTDB Summit:中核武汉核电运行技术股份有限公司主管工程师方华建《IoTDB 在核电数字化转型过程中的应用实践》

Apache IoTDB

百度智能云千帆AppBuilder新手指南

AI大咚咚

AI API LLM AI原生应用

钉钉飞书的AI大战,一场繁花还是一地鸡毛?

脑极体

AI

听GPT 讲Rust源代码--compiler(28)

fliter

Apache Dubbo 下一代云原生微服务挑战赛启动报名!五大赛题 50 万奖金池

阿里巴巴云原生

Apache 阿里云 云原生 dubbo

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