dsl – 使用rakudo编译和执行用perl6子集编写的程序

假设我想使用仅作为Perl6子集的简单语言作为扩展/嵌入语言来“编写”我自己的Perl 6程序.

例如,让这种语言只有:

>变量声明
>表达
>文字

使用Perl6语法,可能是内置函数的非常有限的子集.

除此之外的任何内容都应该导致编译错误,不应该
执行.

是否可以(重新)使用Rakudo编译器,或者只能通过手写的解释器/编译器来完成?

让我澄清一下我的动机.

>使用(子集)宿主语言(在本例中为Perl 6)作为
用于编写脚本/应用程序的配置文件的DSL语言
主持语言.这可以通过EVAL完成
(perl6 ‘do(file)’ equivalent),
但它根本不安全,因为无法控制EVAL可以做什么.
>使用(子集)宿主语言作为扩展/脚本语言
用宿主语言编写的应用程序就像编写Blender脚本一样
Python或WoW与Lua.我想在这种情况下需要使用某些API的app核心?但究竟应该/可以做到什么?

但同样,为什么主机语言配置/脚本?
在conf文件的情况下,我不喜欢使用像YAML或JSON这样的“外语”,因为:

>将数据从这些格式转换为本机Perl6内存数据结构所需的额外代码/库,但我们已经有了所有(语言和编译器)来表达conf的内容;
> conf文件可以使用本地语言代码(即回调)和编译时检查;
>在我的情况下,conf文件的可移植性不是问题;

在扩展/脚本的情况下:再次,我没有看到任何理由使用Lua或Python for Perl 6应用程序,但我再次不喜欢发明我自​​己的扩展/脚本语言并为它编写解释器/编译器的想法Perl 6
如果我已经有Perl 6 / Rakudo.

最佳答案 我知道这不是您正在寻找的答案,但我认为JSON可以很好地处理大多数配置. JSON在JavaScript社区之外被广泛接受.许多语言都使用它.事实上,
JSON::Fast与Rakudo-Star一起出现(由 it’s
json_fast submodule证明).您可以使用这个单线程将JSON文件转换为Perl 6数据结构(好吧,包括使用JSON :: Fast的双线程):

use JSON::Fast;
my %json = from-json(slurp($filename));

此外,JSON是一个相当不错的数据结构.如果您需要简单,它可以很简单,但您可以使用嵌套的哈希和数组进行非常复杂的配置,几乎任何组合.

点赞