【问题标题】:Working with a severely limited interpreted language使用严重受限的解释语言
【发布时间】:2009-07-19 00:44:03
【问题描述】:

我正在使用一种称为 JS 的嵌入式语言进行编码。

我希望能够以任意顺序调用三个函数。 (ABC、ACB、BAC、BCA、CBA、CAB。)

诀窍?该语言没有用户定义的函数。

它确实有一个条件和一个循环结构。

我想我有三个选择。

  1. 复制一大堆代码。
  2. 编写一个预处理器(这将创建所有重复的代码)。
  3. 执行一个包含三个迭代的循环,使用一个数组来控制每次循环时调用哪个功能。

我讨厌 #1。重复的代码很讨厌。如何在不搞砸的情况下更改任何内容?

我猜#2 没问题。至少我在源代码中没有重复的代码。但是我的输出代码是我要调试的,我想知道我是否想偏离它。从好的方面来说,我可以在语言中添加一些糖。

我认为我最好的选择是#3。

还有其他想法吗?没有转到。没有功能。没有现有的预处理器。

#3 的有趣之处在于它本质上是臭名昭著的 for/switch 噩梦。

【问题讨论】:

  • 我对这种语言有点好奇,但是在网上搜索 JS 发现很多 Javascript 而不是这种嵌入式语言。你有一个好的起点吗?
  • 我希望能够以任意顺序调用 bit-crusher、低通滤波器和 waveshaper 音频效果(例如)。

标签: audio signal-processing reaper


【解决方案1】:

也许是某种突变状态机,即:

int CODEWORD=0x123;

while (CODEWORD)
{
    switch(CODEWORD&15)
    {
    case 1:
       /// case 1
       break;
    case 2:
       /// case 2
       break;
    case 3:
       //// case 3
       break;
    }
    CODEWORD=CODEWORD>>4;
}

DRY,没有预处理器,没有数组。 for/switch 似乎有些不可避免。

【讨论】:

  • 对。没有开关。所以我必须用条件来伪造它,这是一个三元。我喜欢它避免了数组。
  • 另外,请注意此代码将执行 3,然后 2,然后 1!
  • 没关系。我可能会有一个设置数组,它会根据用户在 GUI 中选择的顺序来查找代码字。
【解决方案2】:

您也许可以使用 C 预处理器而不是自己编写。这至少可以让您尝试一下,看看它是否是一个可行的解决方案。

【讨论】:

  • 是的,我能做到。阻止我的是嵌入式语言可以即时更改,这非常酷。预处理器会搞砸流程,但可能真的有助于保持代码健全。
【解决方案3】:

技术上最好的解决方案(假设您可以访问代码或开发人员)是修改 JS 语言来做您真正需要的事情。

否则,最佳解决方案取决于您尚未解释的问题的各个方面:

  1. “函数”是递归的吗?
  2. 有函数参数吗?
  3. 您是否需要(您可能需要)JS 中未提供的其他控制结构?
  4. 函数调用顺序是否取决于运行时参数?
  5. 您是否有足够的技能和信心来设计和实现满足您当前和预计需求的预处理器语言?
  6. 从长远来看,是否实施预处理器可以节省您/同事的时间?

如果对 5.并且的答案有足够多的答案是“是”,那么您的选项 #2 就是正确答案。否则......像你的 #1 或 #3 这样丑陋的解决方案实际上可能是一个更好的主意。

编辑:如果您没有源代码访问权限并且开发团队没有响应您的需求,请考虑寻找开源替代方案。

【讨论】:

  • 好问题。 1. 没有。 2. 显然没有传入,因为没有用户函数,但它们会访问全局变量和内存。 3. 不需要,但愿意。 4. 是的。用户可以随时更改。 5. 是的。 6. 不确定。这就是我要解决的问题。
  • 修改语言不实用。源代码已关闭,并且经常发生可执行更改。还有一个我必须连接的实时调试器。也许我应该给贾斯汀弗兰克尔发电子邮件,告诉他我想要一份工作。 :-)
  • 或寻找开源替代品。
猜你喜欢
  • 2011-05-05
  • 2010-09-06
  • 1970-01-01
  • 2011-03-16
  • 1970-01-01
  • 1970-01-01
  • 2019-10-14
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多