写点什么

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

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

关注

评论

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

用DevEco Studio模拟器这些能力 没真机也能高效调测鸿蒙原生应用

HarmonyOS开发者

2024年终总结:终于把北京房贷还清啦!

王中阳Go

面试题 找工作 年终总结 就业辅导 程序员创业

如何在 Windows 上安装 Python 环境的详细指南

克莱因瓶

人形机器人的ChatGPT时刻即将到来,如何转入?

机器人头条

自动驾驶 大模型 人形机器人 科技、

流程+数据,双轮驱动世界一流财务管理体系访谈分享

用友智能财务

投资 访谈 会计

如何让敏捷落地?谈谈敏捷工具在团队中的应用实践

爱吃鱼的小雨

敏捷开发 敏捷项目管理 敏捷工具 scrum工具 敏捷研发工具

专业解读:JNPF低代码开发平台怎样为企业财务管理创新转型提供数字化赋能

不在线第一只蜗牛

低代码

云投集团:流程+数据,双轮驱动世界一流财务管理体系

用友智能财务

报表 财务 会计

利用原生IP做海外电商平台店铺运营有哪些好处

Ogcloud

海外原生IP 海外IP 原生IP 海外IP代理 海外静态IP

通义灵码 2.0 全新升级,阿里云正式推出繁星计划

阿里云云效

阿里云 云原生 通义灵码

2025年,全球人形机器人市场迎来新格局!!

机器人头条

自动驾驶 科技 大模型 人形机器人

工作流程图怎么制作?10个流程图模板案例盘点!

职场工具箱

流程图 画图软件 绘图 在线白板 流程图绘制工具

我在腾讯用AI写代码

CodeBuddy

加入我们|申请成为亚马逊云科技 Community Builder,共建云端社区!

亚马逊云科技 (Amazon Web Services)

通义灵码 2.0 全新升级,阿里云正式推出繁星计划

阿里巴巴云原生

阿里云 云原生

TikTok直播网络方案推荐

Ogcloud

TikTok 直播专线 tiktok直播 tiktok直播专线 tiktok直播网络

SimCorp最新买方调查显示,人工智能必须更好地融入投资流程

财见

《CPython Internals》阅读笔记:p151-p151

codists

CPython Internals

地平线Vision Mamba:超越ViT,最具潜力的下一代通用视觉主干网络

地平线开发者

自动驾驶 算法 地平线征程6

图片秒变短视频!阿里妈妈“淘宝星辰·图生视频”向商家开放使用

新消费日报

场景题:如何实现亿级用户在线状态统计?

王磊

Kyutai开源端侧模型Helium -1 preview;FoloToy内测「超级智能体」,支持联网查询和语音调整音量语速

声网

火山引擎上线鸿蒙原生智能美化解决方案 轻松提升图形视频美化体验

HarmonyOS开发者

火山引擎

群体基因组文献解读-Prediction of axillary lymph node metastasis in triple-negative breast cancer by multi-omics analysis and an integrate

INSVAST

基因检测 生信分析 Sentieon 三阴性乳腺癌 变异分析

去哪儿 Node 生成 1 亿张图片实践 (Satori + Sharp)

Qunar技术沙龙

人工智能 Ai绘图

10 分钟了解 18 个冷门编程概念

俞凡

最佳实践

GitLab 国际站中国大陆等地区停服,如何将数据快速迁移到云效

阿里云云效

阿里云 云原生

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