【AICon】探索RAG 技术在实际应用中遇到的挑战及应对策略!AICon精华内容已上线73%>>> 了解详情
写点什么

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

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

关注

评论

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

东汉末年,他们却把「服务雪崩」玩到了极致(干货

Java 程序员 后端

一文看懂mybatis底层运行原理解析

Java 程序员 后端

不就是Redis吗?竟让我一个月拿了8个offer,其中两家都是一线大厂

Java 程序员 后端

为什么你不应该恨Java!

Java 程序员 后端

WeTest六周年|质领未来,向新而行

WeTest

为了加快速度,Redis都做了哪些“变态”设计(1)

Java 程序员 后端

为了加快速度,Redis都做了哪些“变态”设计

Java 程序员 后端

主流的消息队列MQ比较,详解MQ的4类应用场景

Java 程序员 后端

移动千牛开放体验治理实践与防治方案

阿里巴巴终端技术

ios android 用户体验 舆情分析 移动端

两道面试题,带你解析Java类加载机制

Java 程序员 后端

中高级开发面试必问的Redis面试题,看这篇就够了!

Java 程序员 后端

万字长文!从底层开始带你了解并发编程,彻底帮你搞懂Java锁!

Java 程序员 后端

上线GitHub七天后就标星87

Java 程序员 后端

两年JAVA程序员的面试总结

Java 程序员 后端

个性化推荐系统设计(3

Java 程序员 后端

架构实战营 模块四作业

felix

架构实战营

三分钟:极速体验JAVA版目标检测(YOLO4)

Java 程序员 后端

不是吧!你还不会在微服务中如何设计一个权限授权服务?

Java 程序员 后端

三年开发,头铁面试阿里4面技术+1面HR,终获offer

Java 程序员 后端

阿里 P8大牛的 Maven学习笔记,在 GitHub上仅一天就获赞 上万

Java maven 编程 程序员

不要再本地启动项目调试了,试SpringBoot远程调试你会发现新大陆!

Java 程序员 后端

全面解读!构建边云一体的智能应用技术实践

百度开发者中心

最佳实践 方法论 边缘计算 前沿科技

为什么建议大家使用 Linux 开发?爽(外加七个感叹号)

Java 程序员 后端

三种常见的限流算法

Java 程序员 后端

《Linux一学就会》第三章:文件系统的管理方法和xfs文件系统备份恢复

侠盗安全

Linux linux运维 云计算架构师

两年CRUD,没料到我这渣二本,备战两个月面试阿里,居然侥幸拿下P6的offer

Java高级开发

三面微软,四面雅虎,外企面经复盘总结,那些你不知道的面试技巧

Java 程序员 后端

不错,这么好的东西不白嫖也太可惜了!阿里内部首发“Springboot成长笔记”

Java 程序员 后端

为什么你的insert就死锁了

Java 程序员 后端

一文看懂 Redis 的持久化

Java 程序员 后端

七年阿里升级路,熬到P7,想给正在成长的Java程序员一点建议

Java 程序员 后端

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