写点什么

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

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

关注

评论

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

GreatSQL社区与Amazon、Facebook、Tencent共同被MySQL致谢

GreatSQL

greatsql

低代码平台技术分享官 | 漫话iGIX前端设计模式

inBuilder低代码平台

前端

探索容灾架构演进之路-从单点到异地多活

柠檬汁Code(binbin0325)

容灾 异地多活 备份 & 恢复 部署架构 同城双活

第六期 |《实时洞察 智能运营一用友企业绩效管理白皮书》解读

用友BIP

企业绩效

面试官:网关如何实现限流?

王磊

Java 面试 java面试

微信多开插件:WeChatHooks for mac

加油,小妞!

微信多开 WeChatHooks 微信插件

捆绑销售商业环境中,SaaS初创企业面临采购行为习惯转变

B Impact

WordPress 基于亚马逊云的部署实践(四)- 负载均衡+弹性伸缩

wangkx

AWS 亚马逊云 弹性伸缩 负载均衡器

龙蜥社区召开理事闭门会,讨论多项社区规划

OpenAnolis小助手

阿里云 开源 龙蜥社区 开放原子 理事会

10m带宽香港服务器的优势

Geek_f19a80

服务器

CnosDB有主复制演进历程

CnosDB

开源 时序数据库 CnosDB

边缘计算平台如何助力元宇宙实现?

3DCAT实时渲染

边缘计算平台

阿里云智能集团不再推进分拆,并加大投入

B Impact

OpenAI 治理结构为什么可以罢免CEO Sam Altman面临怎样管理问题

B Impact

INFINI Labs 产品更新 | 发布 Easysearch Java 客户端,Console 支持 SQL 查询等功能

极限实验室

console Gateway 客户端 easysearch 极限科技

物联专栏丨云边协同技术加速AloT能力向边缘侧快速演进

inBuilder低代码平台

物联网

MacBook触控板窗口管理推荐 Swish免激活最新

胖墩儿不胖y

Mac软件 触控板管理工具

Qualcomm IPQ6010-IPQ6018-IPQ6000- chip with open source OpenWiFi- customized network

wifi6-yiyi

wifi openwrt IPQ6010 Qualcomm openwifi

Kubernetes Gateway API 攻略:解锁集群流量服务新维度!

SEAL安全

Gateway 运维‘ kubernetes 运维 企业号11月PK榜

光纤的跳线和尾纤

小齐写代码

基于 DAG 任务编排实现

Bingo

Java DAG 任务编排 规则表达式

2.5A、3MHz开关充电器解决方案

芯动大师

向量数据库—加速大模型训练推理

不叫猫先生

大模型 向量数据库

万字长文:从 C# 入门学会 RabbitMQ 消息队列编程

快乐非自愿限量之名

C# 编程语言

「Macos最新」XMind for mac v24.01中文版

加油,小妞!

思维导图 XMind

华为云康宁:携手伙伴,基于核心技术构筑健康可持续新生态

华为云开发者联盟

云计算 后端 华为云 大模型 华为云开发者联盟

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