6

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

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

所以我的问题是:

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

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

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

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

4

8 回答 8

12

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

一些评论:

  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。
于 2008-10-09T07:28:29.870 回答
11

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

于 2008-10-09T03:53:29.057 回答
9

为什么不使用两者的混合体?这通常是当今许多开发的方式。

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

就我个人而言,我已经使用 Lua/C++ 组合完成了很多工作,这非常棒。

于 2008-10-09T04:10:17.820 回答
6

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

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

使用 Perl 的主要原因是 CPAN。

于 2008-10-10T00:33:17.523 回答
5

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

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

于 2008-10-09T04:29:45.957 回答
4

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

于 2008-10-09T04:30:03.770 回答
1

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

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

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

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

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

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

于 2008-10-09T15:09:15.697 回答
-1

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

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

于 2008-10-09T15:22:17.153 回答