gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 04:58:54 31 4
gpt4 key购买 nike

假设我想使用只有 的简单语言。子集 Perl6 作为扩展/可嵌入语言来“编写”我自己的 Perl 6 程序。
例如让这种语言只有:

  • 变量声明
  • 表达式
  • 文字

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

    除此之外的任何事情都应该导致编译错误,并且不应该
    执行。

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

    让我澄清一下我这样做的动机。
  • 使用(子集)宿主语言(在本例中为 Perl 6)作为
    用于编写脚本/应用程序的配置文件的 DSL 语言
    宿主语言。这可以通过 EVAL 完成
    ( perl6 'do(file)' equivalent ),
    但它根本不安全,因为无法控制 EVAL 可以做什么。
  • 使用(子集)宿主语言作为扩展/脚本语言
    用宿主语言编写的应用程序。很像脚本 Blender
    使用 Lua 的 Python 或 WoW。我猜在这种情况下需要带有一些 API 的应用核心?但是它到底应该/如何做到呢?

  • 但同样,为什么要使用宿主语言进行配置/脚本编写?
    对于 conf 文件,我不喜欢使用 YAML 或 JSON 等“外语”,因为:
  • 将数据从这些格式转换为原生 Perl6 内存数据结构所需的额外代码/库,但我们已经拥有所有(语言和编译器)来表达 conf 的内容;
  • conf 文件可以使用带有编译时检查的本地宿主语言代码(即回调);
  • 在我的情况下,conf 文件的可移植性不是问题;

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

    最佳答案

    我知道这不是您要找的答案,但我真的认为大多数配置都可以通过 JSON 处理得很好。 JSON 在 JavaScript 社区之外被广泛接受。许多语言都使用它。事实上, JSON::Fast 附带乐堂之星(由 it's json_fast submodule 证明)。您可以使用此单行(好吧,包括 use JSON::Fast 在内的两行)将 JSON 文件转换为 Perl 6 数据结构:

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

    此外,JSON 是一种相当不错的数据结构。如果您需要简单,它可以很简单,但您可以将它用于非常复杂的配置,使用嵌套散列和数组的几乎任何组合。

    关于dsl - 用 rakudo 编译和执行用 perl6 子集编写的程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34634488/

    31 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com