Nim vs Python:您应该选择哪个?

2020年12月30日11:18:02 发表评论 53 次浏览

本文概述

与过去相比, 如今新的编程语言的发展是轻快的。很难跟上步伐。

第一眼, 尼姆似乎是无数种选择中的另一种语言, 但事实并非如此。

根据官方文档, " Nim是一种静态类型的编译系统编程语言"。不仅如此, Nim的诞生还源于python, 艾达和模数.

可能大多数人都不了解其中的最后两个, 但是Python是脚本领域公认的国王。那么, Nim是否有可能成为Python的新替代品?还是两种语言都针对不同的受众?

本文旨在通过更深入地了解两种语言的优缺点以及使每种语言与众不同的原因来解决这些问题。让我们开始吧!

python

Python是由荷兰程序员Guido van Rossum于80年代创建的, 并用C语言编写(并非如此), Python的诞生就是拥抱脚本世界。

在早期, Python被大学, 科学家和shell开发人员广泛采用, 它为充满Pascal, C, C ++和Lisp等语言的世界带来了简单性的新概念。

它的成功是如此之大, 以至于Python如今已成为所有语言中最受欢迎和最受欢迎的语言之一。

根据Stack Overflow的观察, 与其他非常流行的编程语言相比, 它的增长是:

图表显示了主要编程语言的增长。

我们为制作了一个自定义演示.
不完全是。点击这里查看.

Nim vs Python:您应该选择哪个?1

资源:Python的惊人增长

然后, 让我们分析一下如此崇拜Python的一些主要原因。

Python的优点

在许多因素中, 也许最重要的是其多功能性。 Python易于使用, 易于阅读且非常快速地编写代码。而且它是跨平台的!

在创建它时, 一个简单的Hello World程序就已经表明了其简单性, 因为Python和Pascal之间的这种比较可以做到:

// Hello World in Pascal
program Hello;
begin
  writeln ('Hello, world.');
end.

// Hello World Python
print("Hello, world.")

显然, 这还不足以描述使该语言变得如此简单的所有机制, 而仅仅是一个起点。

Python是最活跃, 参与度最高的社区之一。数以千计的开源库, 工具和框架是由真正热爱这种语言并竭尽所能的人们开发的。例如, 它与我们在JavaScript社区中看到的非常相似。

作为比较, 截至撰写本文时, Stack Overflow总计有150万有关Python的问题在其论坛上。与尼姆相比, 它是神, 因为关于尼姆朗的问题才400

到目前为止, Python是这场争议中的巨头。

去年, 著名的GitHub Octoverse(每年发布的有关GitHub存储库的统计数据汇编)将Python列为第二常用语言由平台的开发人员首次绕过Java:

显示八种正语言的图形。

资源:Octoverse热门语言.

在数据科学和机器学习领域, Python领先于其竞争对手, 它已经开发了一个丰富, 独特和完整的环境, 在此环境中, 任何具有基本编程技能的人都可以从头开始, 并迅速获得丰硕的成果。

在科学家中, 它在MATLAB, Scala和R中占有特殊的位置。

让我们深入探讨选择Python的其他一些理由:

  • 你是否想要过程式编程风格?前进。喜欢面向对象吗?功能编程?也可以Python拥抱了所有人
  • Python有许多其他语言的解释器, 例如JavaScript, .Net, Java和微控制器
  • 可用工作的数量巨大, 平均工资达到10万美元(在美国)
  • 游戏开发的绝佳选择, 其中包含大量不错的工具, 例如pygame(一组用于编写游戏的Python模块)
  • 教孩子们如何编程的最爱赌注。通过像这样的图形工具龟, 事情可以变得更直观
  • 最后但并非最不重要的一点是, Python的文档非常丰富。来吧, 有一本好书

Python的缺点

这种语言最著名的缺点可能是它的速度。数十个学习并且已经进行了测量, 以意识到Python确实比许多其他流行的编程语言要慢。

由于它是一种解释型语言, 因此在将代码转换为机器代码之前, 阅读和"解释"代码时, Python还有更多工作要做。

除此之外, 由于GIL(全局解释器锁定)而导致的涉及线程的经典问题也在问题列表中。 GIL是一个互斥体, 一次仅允许一个线程。因此, 如果你打算加载多线程程序, 以使其运行速度比单线程程序慢。

最终, 大多数主要语言的创建都是有目的的, 并且随着时间的流逝而扩展到其他领域, 例如移动开发。例如, 与Java和JavaScript相反, Python尚不能很好地适应移动世界。

Android和iOS及其一组受支持的语言无法理解Python。即使你有可用的跨平台库, 例如基维, 例如, 它们不代表全球移动开发市场的很大一部分。

但是, 社区对诸如拟体和qpython给Python移动开发的未来带来了更多希望。

我会给你留下一些来自社区的更受欢迎的缺点:

  • Python在运输和分发其软件方面稍微复杂一些
  • 由于大部分项目以及开发人员仍在使用Python 2, 因此我们要解决遗留代码库的巨大问题, 这些问题可能很快将不会升级。版本2和版本3在语法上的差异很大, 但这没关系。这就是为什么我们首先要进行版本控制的原因。但是, 从版本2继承的碎片继承使事情变得有些困难
  • 许多人仍然抱怨Python对函数式编程的支持。尽管该语言包含涉及高阶函数和列表理解的内容, 但在诸如尾部调用和lambda之类的功能周围还是存在陷阱
  • 这种语言的设计将缩进作为定义代码块格式的因素, 许多人认为这是不利的。如果你来自其他传统语言, 可能很难适应它并且很难编码

让我们认识尼姆

在我们深入探讨Nim的世界之前, 由于它对于大多数人来说是一种很新的语言, 因此让我们从一个包含其设置的示例开始。

设置与示例

在你的计算机上安装Nim的选项很多。由于所有选项都依赖于每个操作系统的单个命令, 因此我将把这项任务留给你。你可以找到正确的说明这里.

安装完成后, 运行尼姆-v命令检查是否一切顺利:

一个代码片段。

对于此示例, 将在VS Code IDE下开发代码示例。它有一个很好的Nim的扩展名增加了对IDE的语言支持。

选择一个你喜欢的文件夹, 然后在VS Code中打开它。然后, 创建一个名为hello_world.nim(是的, 这毫不奇怪, 这是Nim的文件扩展名), 并将以下代码放入其中:

echo "Who should I greet?"
var name: string = readLine(stdin)
echo "Hello, ", name, "!"

如果你熟悉" hello worlds", 这对你来说就不是问题。例如, 如果你熟悉Linux, 则已经知道echo命令的作用。

此命令是类Unix操作系统命令的等效版本, 该命令输出作为参数传递的字符串。没有大碍。

在下面, 我们正在从控制台中读取一些输入;然后, 我们再次打印格式化的问候消息。

要运行该程序, 请转到命令行并发出以下命令:

nim compile --run hello_world.nim

使用Nim, 由于它是一种编译语言, 因此你需要首先通过compile命令编译代码并运行它。相同命令的简短版本还可以用作:

nim c -r hellow_world.nim

另一个有趣的事情是执行输出。在程序启动之前, 你会看到打印到控制台的一些行:

一个代码片段。

看一下以性病…这是C ++影响力的标志。

尼姆的优点

与Python的速度相反, Nim的执行速度很快。比Python快得多。探索编程语言性能的一种好方法是执行基准测试。

有大量适用于Python的基准测试。我们遇到的问题是Nim, 因为它不如Python受欢迎。

但是, 我们可以发现社区今天制定了两个出色的基准, 可以使我们对两种语言之间的性能差异有一些见解:生物快和科斯蒂亚基准。

Biofast是评估生物语言领域一些常见任务的编程语言和实现的性能的小型基准。它的基准基本上与处理大文件以及以多种不同语言运行类似算法有关。

在下表中, 你可以找到通过以下方式将BED文件(制表符分隔的文本文件)加载到内存和计算间隔中的结果:cgranges算法:

程序 语言 CPU时间(秒) 峰值记忆(Mb)
bedcov_c1_cgr.c C 5.2 138.4
bedcov_nim1_klib.nim 尼姆 16.6 248.4
bedcov_py1_cgr.py y 17332.9 1594.3
bedcov_py1_cgr.py python > 33770.4 2317.6

资源:https://github.com/lh3/biofast

为了简化结果, 我删除了一些目录。查看从Nim到Python的CPU时间和内存消耗的差异。展示C仅出于比较的目的, 因为它超快。

也许由kostya开发的基准更加完整和多样化。我们已经对Base64, JSON解析, 内存分配和其他著名算法进行了测试。这些是结果哈夫拉克的寻圈器实现

语言 时间, 秒 内存, MiB 能源, J
Nim GCC 12.05±00.06 485.71±09.19 225.42±01.38
C ++ 15.06±00.11 178.24±00.05 235.89±03.36
y 30.38±00.50 664.47±82.61 545.93±10.51
python 108.91±00.28 403.83±00.05 1896.41±15.93

资源:https://github.com/kostya/benchmarks

不可思议的是, 根据算法的性质, Nim的速度甚至可以超过C ++。这很好地说明了Nim对你的项目性能有多强大。

对于可执行文件, Nim具有将其可执行文件与其中包含的依赖项打包在一起的功能。这意味着, 与Python不同的是, 你无需依赖特定计算机上安装的Python。它可以在类似Unix的不同系统上执行, 而无需担心断开的链接。

除此之外, 让我们列出一些其他的优点:

  • Nim是通用的, 这意味着它可以编译为C, C ++甚至JavaScript
  • 它还支持一个不错的功能:宏。这对机器学习的开发非常有用
  • 它具有出色的元编程设计。我们有泛型, 模板和刚刚提到的宏
  • 它的输入是严格的, 这意味着Nim在编译时会检查你的代码
  • 它也是多范式, 包含OOP, 函数式和命令式编程
  • 提供内置的平滑异步支持

尼姆的缺点

当然, 针对Nim的最大弊端是其受欢迎程度。你可能在本文之前从未听说过它。

例如, Nim比其他著名语言(如Swift)(于2014年创建)要古老(创建于2008年)。即使如此, Swift现在在Stack Overflow上的问题> 277k。

Nim和Python在Google趋势上的快速比较揭示了巨大的差距:

评估对Python和Nim加班的兴趣。

因此, 很难指出不利之处。内容不多。除此之外, 官方文件非常好, 非常完整。

关于语法, 一些开发人员同意Nim比C更容易, 但是与Python相比有点冗长。

其他一些缺点可以列举如下:

  • 根本找不到工作的语言选择。除非你是为自己的项目或某种科学演出工作
  • 尽管GitHub问题得到了回应, 但相对于Python的1.3k, 今天有1.7k的未解决问题。但是, Python似乎还有更多的交互活动以及参与者(Nim的551与551的贡献)
  • 在Nim之下进行的大型项目没有我们使用Python进行的那么多。如果你的项目很关键, 并且是帮助你在两者之间做出决定的主要因素, 那可能会很棘手

总结

本文不可能是有关这两种语言的完整的完整讨论。因此, 请同时分享你对两种语言以及到目前为止的经验的想法。

Nim的一些开发人员指出, 它更适合于具有C / C ++背景并且想学习脚本语言的人。对Python比较的好奇也许来自于以下事实:两种语言都是脚本编写的参考。

也许, 如果Nim获得了像Google Go这样的科技巨头之一的官方支持, 情况就会有所不同。但是, 一门语言不必大就可以被爱, 强大和有用。你只需要掌握适当的好奇心, 然后采取行动即可。祝好运!

日志火箭:全面了解你的网络应用

LogRocket仪表板免费试用横幅

日志火箭是一个前端应用程序监视解决方案, 可让你重播问题, 就好像问题发生在你自己的浏览器中一样。 notlogy无需猜测错误发生的原因, 也不要求用户提供屏幕截图和日志转储, 而是让你重播会话以快速了解出了什么问题。无论框架如何, 它都能与任何应用完美配合, 并具有用于记录来自Redux, Vuex和@ ngrx / store的其他上下文的插件。

除了记录Redux动作和状态外, notlogy还会记录控制台日志, JavaScript错误, 堆栈跟踪, 带有标题+正文, 浏览器元数据和自定义日志的网络请求/响应。它还使用DOM来记录页面上的HTML和CSS, 甚至可以为最复杂的单页面应用程序重新创建像素完美的视频。

免费试用

.

一盏木

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: