假设我想使用只是Perl6的子集的简单语言作为扩展/嵌入语言来“编写”我自己的Perl 6程序。 例如,让这种语言只有:
使用Perl6语法,可能是内置函数的非常有限的子集。
除此之外的任何内容都应该导致编译错误,不应该
执行。
是否可以(重新)使用Rakudo编译器,或者只能通过手写的解释器/编译器来完成?
让我澄清一下我的动机。
但是,为什么还要为配置/脚本编写主机语言? 在conf文件的情况下,我不喜欢使用像YAML或JSON这样的“外语”,因为:
在扩展/脚本的情况下:再次,我没有看到任何理由使用Lua或Python for Perl 6应用程序,但我再次不喜欢发明我自己的扩展/脚本语言和编写解释器/编译器的想法在Perl 6中 如果我已经有Perl 6 / Rakudo。
答案 0 :(得分:1)
我知道这不是您正在寻找的答案,但我认为JSON可以很好地处理大多数配置。 JSON在JavaScript社区之外被广泛接受。许多语言都使用它。事实上,JSON::Fast
附带了Rakudo-Star(由it's json_fast
submodule证明)。你可以使用这个单行程序将JSON文件转换为Perl 6数据结构(好吧,包括use JSON::Fast
在内的两行文件):
use JSON::Fast;
my %json = from-json(slurp($filename));
此外,JSON是一个相当不错的数据结构。如果您需要简单,它可以很简单,但您可以使用嵌套的哈希和数组进行非常复杂的配置,几乎任何组合。
答案 1 :(得分:0)
Perl 6代码可以是abstracted into Blocks。您可以声明块类型变量,也可以使用where
声明块的子集。如果您能够将Perl 6块的限制表达为Perl 6表达式,则可以轻松创建Perl 6的子集,并结合这些约束。那么你的DSL将会是
您声明的(子)类型的有效对象。