【问题标题】:Dyalog APL: how to write standalone files that can be executed?Dyalog APL:如何编写可以执行的独立文件?
【发布时间】:2020-06-27 03:05:10
【问题描述】:

我现在知道如何使用 APL 解释器,但我对如何将 APL 写入文件然后运行该文件感到很困惑。我目前使用ride IDE 编写 Dyalog APL。我现在想做的是:

  1. 使用 Ride IDE 开发程序(我如何访问键绑定?)。
  2. 将我的程序保存到文件中。
  3. 使用命令行参数从命令行运行程序(如何获取命令行参数?)
  4. 分发我的程序,以便其他人使用。

大多数在线文档都提到了“APL 会话”,这让我觉得可能有一些 Smalltalk 之类的东西,其中一个人只能分发“实时图像”或类似的东西。如果是这样的话,我有一组不同的问题:

  1. 如何保存和加载这些图像文件?
  2. 如何分发图像文件?
  3. 我可以从命令行执行这样的代码来获取命令行参数吗?

总的来说,我对如何在 APL 中编写软件感到很困惑!

编辑:我在 Ubuntu 上,我想以 Linux 为目标。 Windows/macOS 支持将是一个加分项,但我目前对 Linux 支持感兴趣。

【问题讨论】:

  • 能否提供您正在使用(和定位)的操作系统?
  • 完成,添加操作系统信息。
  • 谢谢。我主要知道如何在Windows上做这些事情,但明天我会努力为你得到一个官方的答案。

标签: command-line-arguments executable software-distribution apl dyalog


【解决方案1】:

目前,创建独立可执行文件(单个 .exe 文件)的功能仅存在于 Windows 上,但 Dyalog 正在努力使这种跨平台成为可能。但是,您可以非常接近。在我们开始之前,让我回答你最初的问题:

  1. 使用 Ride IDE 开发程序(我还可以如何访问键绑定?)。

有几种方便的方法可以在 RIDE 之外输入字形,既可以通过编辑器扩展,也可以通过单独的系统范围方法来进行前缀和/或转换键输入。有关详细信息,请查看 APL Wiki 在 typing glyphs 上的文章。

  1. 使用命令行参数从命令行运行程序(如何获取命令行参数?

⊢2⎕NQ#'GetCommandLineArgs' 将命令和用于启动当前应用程序的命令的参数返回。这适用于跨平台。 Try it onlineLinux下!


您所说的“实时图像”将是 APLers 所说的工作区。一旦您的应用程序按照您的意愿工作,请输入将⎕LX (Latent eXpression) 变量设置为启动您的应用程序并在完成后关闭 APL 的语句,例如⎕LX←'myApp.Run ⋄ ⎕OFF'.

接下来,使用)save /tmp/myapp 将您的应用程序保存为工作区。

您现在应该可以使用 dyalog -hello=world /tmp/myapp 等运行您的应用程序了。您当然可以将其放入 shell 脚本中以方便使用。

您将分发给客户的至少是工作区和运行时解释器,但您可能还想打包一些配套文件/依赖项。但是,在从您的应用程序中赚钱之前,请查看 Dyalog 的 prices and Licences

【讨论】:

    【解决方案2】:

    这就是我的做法(不是官方 Dyalog 推荐):

    使用 Ride IDE 开发程序(我如何访问键绑定?)。

    RIDE 很酷(我有偏见),尤其是在您想以交互方式探索语言时。

    但实际上我更喜欢使用带有this 插件的 Vim 编辑纯文本文件。 它为键绑定提供了可配置的前缀键。 我认为还有一种方法可以将 Vim 或 Emacs 配置为 RIDE 的外部编辑器 - 这样您就可以拥有熟悉的闪亮会话界面和极其高效的编辑器。

    或者,对于您可以执行的键绑定:

    setxkbmap -layout us,apl -option grp:win_switch
    

    同时按下“Windows 键”和另一个键可在任何 X11 应用程序中插入一个 APL 字符 - 方便电子邮件、聊天等。

    将我的程序保存到文件中。从命令行运行程序,

    我把这个放在上面:

    #!/bin/bash
    (echo ∇M;tail -n+3 $0;echo -e '∇\nM\n⎕off')|dyalog -script;exit $?
    ⎕io←0⋄⎕ct←0⋄⎕pw←32767 ⍝ opinionated :)
    

    然后做

    chmod +x file.dyalog
    ./file.dyalog
    

    带有命令行参数(如何获取命令行参数?)

    这有点问题。 Windows 有 2⎕NQ#'GetCommandLineArgs',但我知道没有适用于 Linux 的有效解决方案。

    请参阅下面的 cmets 和 Adám's answer

    分发我的程序,以便其他人可以使用。

    任何你喜欢的方式 - github、gitlab、bitbucket、你自己的网站、鸽子等

    “APL 会话”

    这只是“REPL”的传统 APL 术语。

    【讨论】:

    • 我只在 Dyalog v18.0 的预发布版本中测试过这个(这是我在我的 Windows 机器上现成的唯一 Linux 版本),但我相信咒语:⎕←2 ⎕ NQ # 'GetCommandLineArgs' ... 在过去的几个版本中都可以在 Linux 下使用。
    • @MortenKromberg 对,它确实返回了一些东西,但存在一些问题(至少在 v15 中)——即使你将 -script 传递给 /usr/bin/dyalog,它仍然将 arg(s) 视为ws 名称,尝试加载它,并在 stderr 上打印错误。此外,来自 ⎕nq 的结果包含 'dyalog' 和 '-script' 以及可能用于解释器本身的其他选项,这可能不是 apl 程序员想要的 argv。另见this old chat
    • 好的。如您所知,当我们炒其他鱼时,“适当的脚本支持”在我们的待办事项列表顶部附近徘徊了很长时间。我们计划在即将到来的发布周期再次破解它。在 Linux 上创建独立的可执行文件也是接下来要做的事情之一。当你看到它时相信它,当然:-)。 18.0 版(将于 5 月发布)将提供的一件事是能够直接从表示函数或命名空间的文本文件中运行代码,而无需创建工作区。这应该离我认为你希望拥有的更近一步。
    • 听起来令人兴奋。期待!
    猜你喜欢
    • 2017-07-17
    • 2012-07-03
    • 2017-08-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多