新项目:我在挑选语言时遇到了麻烦

时间:2008-10-09 03:41:30

标签: c++ perl wxwidgets packaging

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

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

所以我的问题是:

  1. PAR,Perl2exe或同等编译器可以编译多个基本测试用例吗?
  2. 速度和编译,为什么我应该使用C ++而不是Perl?

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

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

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

8 个答案:

答案 0 :(得分: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。

答案 1 :(得分:11)

使用C ++。定时器,线程,音频,SDL,wxwidgets,这些都是Perl可以做的事情,但并不擅长。此外,PAR或perl2exe是分布的笨重机制。他们工作,但他们并不理想。与此同时,C ++(我非常鼓励你看看使用Boost)是否适合这个角色。

答案 2 :(得分:9)

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

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

就我个人而言,我已经完成了一堆Lua / C ++组合,这非常棒。

答案 3 :(得分:6)

使用Perl的一个很好的理由是元编程。

Perl非常灵活,可以让你编写代码来编写代码(这就是Moose的神奇之处)。您将节省时间并减少压缩所需的错误数量。

使用Perl的最大理由是CPAN。

答案 4 :(得分:5)

我已经使用PAR为Windows打包了一个实质性的Perl / Tk程序。它需要一些摆弄,但它确实有效。

如果你至少在Perl和C ++一样经验丰富,那么Perl的开发应该更快。但是等效程序的运行时速度会变慢。所有其他标准都可以满足,所以我认为这取决于个人选择。

答案 5 :(得分:4)

个人?我说不要长时间坚持下去。无论采用哪种方式都有利有弊,但听起来你正陷入“分析瘫痪”的危险境地。如果没有别的,可以掷硬币或选择你认为最漂亮的硬币。

答案 6 :(得分:1)

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

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

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

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

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

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

答案 7 :(得分:0)

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

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