【问题标题】:New project: I am having troubles picking a language to use新项目:我无法选择要使用的语言
【发布时间】:2010-09-16 04:45:04
【问题描述】:

我正在开始我的第一个独立营利企业。我很难决定使用什么语言。我想用 Perl 编写我的应用程序,但我认为编译起来不够简单。如果我不用 Perl 写,我会用 C++ 写。

该应用程序将具有许多功能,包括wxwidgets 接口、处理 SDL、计时器、一些线程和音频处理。程序本身会有些复杂,但不会特别大。

所以我的问题是:

  1. PAR、Perl2exe 或等效程序能否编译比基本测试用例更多的内容?
  2. 除了速度和编译,为什么我应该使用 C++ 而不是 Perl?

编辑: 我的一些项目规范。

  • 多平台。我预计 50% 或更多的用户拥有 Mac,其余大部分是 Windows 用户。如果可能的话,我还想支持 Linux,因为它是我的日常操作系统。
  • 由于它是多平台,我需要一个统一的 GUI 创建工具。它需要能够使用基本类型,并允许我创建自定义事件处理程序和自定义 GUI 对象。
  • 需要音频处理。阅读和播放 wav 和/或 mp3。此外,我将使用一些自定义算法来确定音频文件的特殊属性;诸如节奏、模式等。
  • 我想要但不需要 SDL/OpenGL 支持。

其他一切都很平凡。一些不同的类和容器。一些自定义 GUI 控件。

【问题讨论】:

    标签: c++ perl wxwidgets packaging


    【解决方案1】:

    我既是 C++ 又是 Perl 程序员。 C++ 是一门不错的语言,但每当我有选择的时候,我都会选择 Perl,因为开发的速度要快得多。

    几个cmets:

    1. PAR、perlapp 和 perl2exe 不是编译器。他们是包装工。除了 perl 本身,没有 Perl 编译器。如果您想要某种形式的 Perl 代码的字节码形式,则必须等待 Parrot 上的 Perl 6。
    2. 我已经使用PAR打包了一个总共大约500k SLOC的应用程序,不包括perl本身。它运行良好,运行速度与 perl 本身相同,但启动速度较慢。这是 2005 年。从那时起,如果在打包程序的开发机器上安装 Archive::Unzip::Burst 模块,启动性能会显着提高。我已经成功地将 PAR 用于各种大小从微小到上述 500k 行的应用程序。如果您需要有关 PAR 的帮助,这里有一个活跃且友好的邮件列表。只是帮助我们和您自己不要附和“OMG,没有任何作用,帮助我,kthx!”。人们一直这样做(有时仍然会得到帮助)。 :)
    3. Perl 的线程不是很好。检查 POE 之类的东西是否适合您的账单。我是threads.pm 用户,但我不想成为。向辛勤工作的维护者 Jerry D. Hedden 致以适当的歉意。
    4. wxPerl 的状态非常好,并且围绕它有一个社区。当然,由于 wxWidgets 是 C++,所以它总是更新和完整一点。
    5. SDL Perl 是库的直接包装器。 (小)文档假设您已经知道它。根据我的经验,阅读不同语言的图书馆文档可能有点麻烦。
    6. 定时器在 perl 中很好:Time::HiRes
    7. 便携性很难。在 C++ 中比在 Perl 中更是如此,但它确实总是归结为纪律和能够在许多平台上进行测试。
    8. 对于 Windows 上的 Perl,请务必查看 Strawberry Perl。

    【讨论】:

    • 感谢您提供的信息。 Ehimient & 你反驳了我听到的谣言。许可明智地将 Perl 与我的商业应用程序打包是否可以?我不介意链接到 Perl.org 或 PAR,但我想确保我在法律范围内。
    • 完全合法。这本质上就是 perl 带有双重 Artistic+GPL 许可条款的原因。另一件事:不要认为 PAR 会跳过箍来隐藏您的源代码。尝试“解压缩 foo.exe”,其中 foo.exe 是 PAR 打包的可执行文件。另请参阅:Filter::Crypto 模块。
    【解决方案2】:

    使用 C++。定时器、线程、音频、SDL、wxwidgets,这些都是 Perl 可以做的事情,但并不擅长。此外,PAR 或 perl2exe 是笨拙的分发机制。他们工作,但他们并不理想。同时,C++(我强烈建议您使用Boost)非常适合这个角色。

    【讨论】:

      【解决方案3】:

      为什么不使用两者的混合体?这通常是现在很多开发的方式。

      我建议使用 Lua/C++ 或 Python/C++ 组合(我不确定 Perl/C++ 组合的效果如何,但这也可能是一个不错的选择)。

      我个人用 Lua/C++ 组合做了很多,非常棒。

      【讨论】:

      • 有趣的想法。你怎么做?将依赖于速度和复杂的东西提取到 C++ 中,并将其包装在您的 Lua/Python 代码中?
      • 是的,这是最好的方法。很多时候,看起来依赖于速度的许多事情在现实中并不那么重要。此外,如果您进行大量数学运算,只需将 Lua 核心换成 LuaCoCo 核心,就可以将 Lua 端数学提高 10 倍
      • 我正在做一个项目,以使 Perl/C++ 更容易组合。谷歌我的名字和 Perl 以获得更多信息。
      • Inline::CPP [ search.cpan.org/perldoc?Inline::CPP ] 是将 Perl 和 C++ 捆绑在一起的最简单方法,显然这会将 C++ 代码嵌入到主要是 Perl 的程序中。 Leon 的工作正好相反,将 Perl 嵌入到 C++ 程序中。与往常一样,有不止一种方法可以做到这一点。
      【解决方案4】:

      使用 Perl 的一个重要原因是元编程。

      Perl 足够灵活,可以让您编写代码来编写代码(这就是 Moose 的魔力所在)。您将节省时间并减少需要消除的错误数量。

      使用 Perl 的主要原因是 CPAN。

      【讨论】:

        【解决方案5】:

        我已经使用 PAR 为 Windows 打包了大量的 Perl/Tk 程序。这花了一些时间,但它奏效了。

        如果您在 Perl 方面的经验至少与在 C++ 方面的经验一样多,那么使用 Perl 进行开发应该会更快。但是等效程序的运行时速度会更慢。任何一个都可以满足您的所有其他条件,所以我认为这取决于个人选择。

        【讨论】:

          【解决方案6】:

          个人?我说不要纠结这个太久。无论哪种方式都有利有弊,但听起来你正危险地接近陷入“分析瘫痪”。如果不出意外,请掷硬币或选择您认为最漂亮的名字。

          【讨论】:

          • 感谢您富有洞察力的评论。我一直在计划和研究。大部分时间都在这个问题上,并在几周内讨论了利弊。
          • 反应很好。我,我自己,很容易出现分析麻痹,重要的是要开始。
          【解决方案7】:

          功能很重要。无论语言如何,代码都会做类似的事情,尤其是在使用相同的库和组件时。除非您通过库和工具包确定了确切的功能,否则请在 Perl 中对其进行原型设计。

          有一种观点认为,动态语言的开发将花费更少的时间。在 Perl 和 C++ 中存在类似的问题,即在正确的位置获取下拉菜单,用正确的值填充它,根据用户输入对程序状态进行适当的更改。

          如果 Perl 在某些平台上无法完成,请将代码转换为 C++。

          可能有一些指针可以帮助这种方法:

          1. 这意味着您可能会使用 OO Perl 编写原型。一旦你在一个平台上确定了高级功能——假设你可以在 Perl 中做到这一点——那么 C++ 或多或少是一种优化。

          2. 也许您可能会将原型限制为或多或少与 C++ 同源。但我不确定这一点,您可以将map 分解为一个循环,甚至只需将其替换为使用测试函数的函数指针调用的过滤器函数。

          【讨论】:

          • 中文小说和英文小说都可以写同一个故事,但是如果用英文写,再翻译成中文,就很明显了。每种语言都有不同的习语。 OO Perl 是非常糟糕的 C++,它甚至都不好笑。 C++ 同样可怕的 Perl。将自己限制在两者都包含的子集实际上忽略了“哪个更好”的问题,试图在它们不相等时使它们相等。
          【解决方案8】:

          用 C++ 编写您的核心功能,然后在相关平台的工具中为您的应用程序编写前端,例如 Mac OS X 的 Cocoa、Windows 的 .NET/Delphi/MFC 等。

          这是我开发跨平台桌面应用程序的首选方式。当然,我对你想要完成的事情知之甚少,所以对你来说可能太胖了。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2023-04-07
            • 1970-01-01
            • 2011-04-17
            • 1970-01-01
            • 1970-01-01
            • 2012-12-31
            • 1970-01-01
            相关资源
            最近更新 更多