AI实践哪家强?来 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:172803
用户头像

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

关注

评论

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

高项-第一章 信息化和信息系统(1)

索隆

项目管理 软考 笔记分享

参与 TDesign 收获了什么?听听社区贡献者怎么说

TDesign

设计 产品经理 设计师

已有小程序应用转App的一种技术

Speedoooo

小程序 小程序容器 小程序转app

什么数据库这么猛?5.6 版本刚开源一个半月,8.0 版本竟然就要启动了?| StoneDB 社区答疑第二期

StoneDB

MySQL 数据库 开源 StoneDB 8月月更

他只是试图运用自己的能力,给这个领域带来改变

图灵教育

通信

Beetle编译/部署自动化

转转技术团队

CI/CD

华为云CDN&云视频通信专场:828低价购,CDN0.05元/GB起,短信0.006元/条起

sofiya

付费会员之我见-02(44/100)

hackstoic

商业模式 付费会员

全链路灰度新功能:MSE 上线配置标签推送

阿里巴巴中间件

阿里云 微服务 云原生

分布式系统接口用例自动回归实践

转转技术团队

接口测试

九章云极DataCanvas YLearn因果学习开源项目荣获“可信AI实践优秀案例”奖

九章云极DataCanvas

圆壹智慧创始人兼CEO 潘麓蓉:AI制药工业落地的痛点与前进方向

阿里云弹性计算

HPC 高性能计算 AI制药

实力上榜|海泰方圆跻身2022企业网络安全服务Top15

电子信息发烧客

直播预告 | 流程挖掘如何助力头部制造业实现千万级增长?

望繁信科技

【杂谈】网络协议(一)

自然

网络 8月月更

无影云电脑

六月的雨在InfoQ

无影云电脑 云电脑 8月月更

诚邀|8月31日,【因果学习和决策优化挑战赛TOP10队伍作品秀】邀您共享因果学习智慧盛宴

九章云极DataCanvas

人工智能

多核驱动时代的降维打击 英特尔异构混合架构破局之路

科技之家

你就是函数响应式编程(FRP)啊?!【附 RxJS 实战】

掘金安东尼

前端 函数式编程 8月月更

多模态算法在视频理解中的应用

之家技术

人工智能 算法 视频 多模态

【真送礼物】1 分钟 Serverless 极速部署盲盒平台,自己部署自己抽!

阿里巴巴中间件

阿里云 Serverless 云原生

“九章云极DataCanvas AI平台赋能厦门航空”荣获AI平台应用标杆案例

九章云极DataCanvas

人工智能

TDesign 设计资源大更新,产品经理和设计师都可以省心啦~

TDesign

设计 设计师

在 WSL2 上部署 PyTorch

吴脑的键客

WSL2 Windows 10 PyTorch

开源一夏 | 23张图,4500字从入门到精通解释Redis

wljslmz

redis 开源 8月月更

前端食堂技术周刊第 49 期:Deno即将迎来重大变革、Blitz 2.0 Beta、Chrome删除HTTP/2服务端推送

童欧巴

JavaScript typescript deno

【杂谈】网络协议(二)

自然

网络层 8月月更

周一见!距离阿里巴巴开源开放周还有3天

阿里巴巴中间件

阿里云 开源

开源一夏 | 一个裸机工程转FreeRTOS的实例

矜辰所致

开源 stm32 STM32CubeMX 8月月更 FreeRTOS

[教你做小游戏] H5小游戏技术选型分析,低代码?小游戏框架?canvas或SVG?还能用React?

HullQin

CSS JavaScript html 前端 8月月更

828选华为云,实惠更实用——为什么选择华为云CDN的企业多?

sofiya

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