关于 Raku 的宏系统的分享

作者 | Carl Masak
整理 | J.M.zhu

作者简介:

Carl Masak, 2019 年加入华为,在进入华为之前,一直做开源贡献,研究领域主要在语言设计、开发领域,是 Perl6 早期成员之一( Perl6 目前改名为 Raku [1] )。

本次技术分享来自 SIG-元编程技术例会,本文内容为提取讲演视频后的翻译稿,视频也已经发布在 B 站,欢迎大家点开学习。

SIG-元编程技术分享 | A Simple Introduction of Macro System of Raku_哔哩哔哩_bilibiliSIG-元编程技术分享 | A Simple Introduction of Macro System of Rakuhttps://www.bilibili.com/video/BV1344y147et


# Introduction #

大家好,今天我们讨论的是宏,以及为了宏所做的语言特性设计还有一些设计中的困难。

# 概述

宏有很多其普通语言特性没有的功能,例如,

  1. 帮助用户隐藏一些细节,去更多关注上层设计。这可能是宏相对来说最简单的一个功能,但在很多场景下,这非常有用。

  2. 引入一个新的语言特性。例如,宏可以定义语言原生可能没有的 if 或者 while 这类控制语句。

  3. 变更求值顺序。例如,众所周知的布尔操作符(与、或、非等等),它们都有短路特性,这是一种语言结构,它在一定程度上改变了求值行为。

在其他一些场景下,我们希望语言可以做到延迟计算、多次计算或者不计算等等,宏提供了这样的能力,这对常规的函数或者普通的语言特性来说,是很难的。

我在 2004 年的时候就参与了 Raku [1] 的开发。在 2000 年 Raku 开始有一些设计的时候,我就因为机缘巧合在网上认识了这个团队,开始逐步深入得使用这个语言,也见证着这个语言一步步变得完善。在这过程中,我发现,没有人关注宏这个特性,但我又非常希望可以使用它。因此,我开始自己尝试设计和实现它。最终,它大致上被实现了。不过,我曾被卡在一个有趣的地方。那时,我发现我完全不理解什么是 hygiene (宏的卫生性),它不是一个类似我们用肥皂洗手让手变得卫生,那样简单的概念。但我知道,我得把它加入到 Perl6 中。所以,我开始了另一个子项目 ALMA [2],这是我设计的一种玩具语言。我需要快速的整理我的想法,找出什么是卫生性,什么应该做到卫生,以及如何才能做到卫生。这花费了我 4 年里的大部分时间&#

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值