在我工作的公司中,我们进行了大量基于文件的事务处理。处理中心围绕多种格式之间的文件转换,以适应众多公司的众多系统。

处理过程几乎总是涉及 XML 阶段,可以包括大量的文本解析、数据库查找、数据转换和数据验证。

目前执行所有这些任务的程序是用 C++ 而且它们在一台平均服务器上执行得相当快。我正在研究使用新毕业生程序员更可能熟悉的更“现代”语言的可能性。(正确的内存分配 C++ 如今似乎给很多新程序员带来了问题)

根据所提供的简短信息,诸如 python 之类的语言是否可以提供所需的功能和性能,以及解决内存分配问题(以及其他各种问题)? C++ 相关)出现哪些问题?

我喜欢这样的想法,即每次进行更改时都不需要编译程序。我知道解释语言可能不会达到我们目前获得的相同性能。

我们的系统是 Linux 基于这也限制了一些选项。

对可用功能和性能的任何评论 Python 或替代语言的建议将不胜感激。

有帮助吗?

解决方案

我喜欢这样的想法,即每次进行更改时都不需要编译程序。我知道解释语言可能不会达到我们目前获得的相同性能。

这是最大的问题;你能忍受性能受到的影响吗?你可以尝试使用Python和 使用当前的 C++ 模块扩展它 对于性能重型零件。尽管如此,如果唯一的原因是缺乏 C++ 人才,那么切换整个系统似乎是一项巨大的努力。雇用懂得 C++ 的人似乎是更便宜的选择。

其他提示

快速让程序运行和让程序快速运行哪个更重要?

如果您正在处理大量大文件,那么您最好留在 C++ 中并教您的研究生程序员什么是指针(!)

否则,我强烈建议您查看基于脚本的解决方案,因为一旦您掌握了速度,这些解决方案的开发就会快得多。老实说,至少对大多数人来说,这会更有趣。

如果每条记录的处理负载不高,您可能会惊讶地发现性能损失如此之少:文件 IO 几乎肯定会在编译的 (C) 库中处理,因此解释器开销可能相对较低。我建议值得尝试。

在命令式语言中,Perl 是一个明显的选择,Python 很流行,Ruby 也很受关注(并且可能比前两种语言更干净的 OO 功能)。然后是函数式语言的稍微深奥的领域,但我没有资格对此发表评论。

Python 可能会删除您在应用程序中使用的大部分低级内容。内存分配不再是问题。另外,至少我的大学似乎正在接受 Python 作为一种编程语言,因为学生无需编写所有正式的东西即可开始使用。唯一的问题是性能部分,因为 Python 可能永远不会像编译的 C++ 程序那么快。

我建议您花几周的时间来了解您正在考虑的编程语言。我也想看看 Ruby。也许玩一下 Haskell?

据我了解,Python 似乎能够很好地处理你所谈论的一切。XML、数据库查找、验证、解析。它通常是一个安全的选择,不仅因为简单有趣的编程体验,而且如果您遇到困难,该语言有一个很棒的社区,他们很乐意为您提供帮助。

另一种选择是将 Python 嵌入到 C++ 程序中。您可以保持应用程序的大部分内容相同,并针对经常更改的部分调用 Python,或者需要脚本语言提供的灵活性。

来自 Python 文档

前几章讨论了如何扩展Python,也就是说,如何通过将C函数的库来扩展Python的功能。也可以以相反的方式进行:通过将Python嵌入其中来丰富您的C/C ++应用程序。嵌入使您的应用程序能够在Python而不是C ++中实现应用程序的某些功能。这可以用于许多目的;一个例子是允许用户通过在Python中编写一些脚本来定制应用程序的需求。如果可以更轻松地用Python编写某些功能,也可以自己使用它。

我不想这么说,但如果你想要新的开发人员熟悉的东西,那就选择 Java。Java 是大多数应届毕业生最熟悉的语言。你仍然需要编译,但编译时间会比 C++ 短。它可以在 Linux 和几乎其他任何地方运行。它有一个很好的垃圾收集器。速度相当快。我有没有提到你们的开发人员会熟悉它?不,它不像 Python 那样“酷”,但它是一种经过验证的语言。

老实说,我怀疑是否有很多新入职的开发人员对 C++ 很不满意,但无论如何对 Python 却很擅长。熟练使用 Python 的人往往擅长手动内存管理。不擅长内存管理的人实际上往往不擅长所有语言。

我确实发现令人担忧的是,您的开发人员在内存管理方面非常糟糕,以至于您想要切换语言。这是一个表明有问题的迹象,但我不确定问题出在语言上。

如果您愿意继续使用编译语言,我会继续使用 C++,并建议选择一组好的库,并教新手如何正确使用和遵守可靠的模式。

如果您设法找到一组令人愉快的库,那么新手将很容易学习编写可靠的代码。我(当前)个人更喜欢 Qt 类库,因为它使内存处理变得简单、安全,并且使用起来很愉快。它还支持 XML 解析和生成,内置正则表达式,网络功能,跨平台,...对于非 GUI 系统也非常有用。

对我来说,使用普通的 C++、std 库和 STL 与使用 Qt 等强大的库之间存在巨大差异。也许,研究提升的好处也是非常值得的。

我建议尝试一下groovy。XML 支持很好,解析和数据验证应该不难。

然而,一些人指出,迁移可能不是最好的主意。难道您不能尝试将常见的内容分解为“macher 对象”和“验证对象”,以便新程序员使用您的 C++ 库,而不是尝试编写仅重复现有片段的容易出错的新代码吗?

另外,请务必使用现代文件 IO (iostreams),而不是像 C++ 中的 IO 那样的 C,这应该对解决内存问题有很大帮助。

另外,查看 boost 库可能会有所帮助。

Python 的性能可能是一个非常大的问题。有一次我必须在任务列表上创建涉及优化算法的程序。我从 Python 开始,创建了它超快且干净,然后发现需要很长时间才能提供结果。将其逐行重写为 C++ 结果是 100倍 速度提升...

所以有时这并不是如您所见的 5-10% 性能损失的问题。您应该根据您的情况进行调查(也许是小测试?)。

或者应该尝试将解析规则存储在数据库中,而不是将它们硬编码在代码中。作为 肯·唐斯 正确引用, 最小化代码,最大化数据. 。这样,您就不需要在每次微小的规则更改时重新编译。

如果你可以使用 Python、Ruby、Groovy 或 Perl 与使用 Python、Ruby、Groovy 或 Perl 相比,C++ 你最好选择这些高级语言之一。生产力将大大提高。如果您发现需要更高的性能,那么请选择 Java。每个人都应该了解并使用至少一种动态类型语言。

如果你需要更快地转向 c/c++,应该转向 python,因为语言使网络中的一切成为可能

如果你正在做的项目的性质允许你甚至考虑这样的举动,那么就采取行动(假设你有一些线索)。然而,在许多 C++ 项目中,您唯一的选择是移动 向下 一到两个抽象级别(例如,C 或汇编)。

我同意其他人的观点,你应该坚持使用 C++。切换到非编译语言是一种倒退。虽然许多程序员可能在处理该语言的一些麻烦方面(例如指针)时遇到困难,但至少大多数程序员都接触过一些 C++。我建议您花时间和金钱来改进您的代码库和程序员,而不是切换语言。

至于其他语言,您可能需要关注 GO lang。我的一个朋友相当广泛地使用它。它是一种现代编译语言。它往往清晰、简洁、现代。GO 应用程序的运行速度通常与用 C++ 编写的应用程序相当,并且它与网络接口良好。目前它还不是很成熟,但看起来很有希望。

祝你好运!

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top