我自 2011 年起,就是 Python 的用户与爱好者了。当时,一个好友建议我用 Python 代替 Perl 试试 ,一个崭新的世界向我开放了。在这个世界里可读性比什么都重要,还有一种简明的规则。

即使用了 7 年多的 Python ,我对它的热情还是一如往昔。但是,岁月流逝之下任何人都该去追寻新的机遇与冒险。是时候尝试下别的语言了!

Python 的问题

首先,列举我在 Python 中遇到的一些问题:

打包:这方面是大多数解释型语言都会遇到的问题。打包成一个包括整个 virtualenv 的可安装程序, FPM 之类的工具可以让这个过程非常容易,但是它仍然缺少一个单一二进制程序的优雅。

静态类型:就像一些人从开始使用 C++ 到完全喜爱它,我确实怀念我在 C++ 中用过的类型安全。这与编译时检查密切相关,它确实帮助我们保证我们的代码的质量,甚至在执行之前。

速度:大多数解释型语言的又一个问题。Python 对于许多任务都足够快,但是仍然远远落后于编译型语言。

冗长:我们只有在 Python 3.6 才有 f-strings ,它确实是一个解脱。然而,我们在类和结构中仍然有非常冗长的 self 语法,到处都是 self.var = var ,这可能会在 Python 3.7 的数据类 中部分解决。

隐式私有类成员:我说的私有就是那该死的私有!作为一个前 C++ 程序员,我发现 Python 的私有属性和方法的下划线前缀格式有一点…变态?:‘)

进一步来说,我不确定我真的喜爱 Python 在几个领域的发展方向,尤其是在异步和类型方面。

协程:尽管大受欢迎,Python 中新的异步方法让人感觉非常不友好而且很难掌握。现有代码在非阻塞之前也需要大量的工作。随着越来越多的库开放使用,以及随着我了解且会使用新的库越来越多,我觉得这种情况会随之改善。

类型注解(和 mypy ):说实话,类型注解很受欢迎…如果他们真的在 CPython 做了什么的话。如果没有主 CPython 发布版本主流支持的情况下,使用类型注解作为各式结构体(如数据类)这种想法看起来毫无意义。与此同时,mypy 目前还不是主流,但长远来看,作为一个 Python 类型校验展示了巨大的潜能,特别是在将 --strict 标识开启的时候。

我应该说明我仍然是 Python 的忠实粉丝和支持者,而且认为它仍然是当前最好的解释型语言之一;特别是当你考虑到它惊人的生态系统和成熟度。

我在寻找什么

我的出发点是 Python 和 Ruby 。 我经常在需要的地方使用 Ruby ,也非常喜欢它。 Ruby 解决了 Python 所具有的几个问题(适当的私有/受保护的属性,较少冗长的语法等等),但仍然存在性能问题,并且缺少静态类型。

因此,我开始寻找具有以下特点的新语言:

与 Python 和 Ruby 类似的语法

单二进制分发

编译,静态类型和快速

面向对象(哦类,我多么爱你。。。。。。)

候选项

下列语言被排除在外

GO:没有关键字参数、没有异常、没有类、没有泛型以及命名风格的可怕,这些都导致我拒绝了Go(尽管也许这种简单性吸引了很多人)。我实际上花了相当一段时间在 Go 的学习和编码上,我觉得这是最令人沮丧的。在 C 之后,像 C++ 这样的语言已经取得了很多进步,并为我们提供了更大的灵活性,但感觉 Go 似乎让我们回到了 C 语言的时代。

Elixir:一种引人入胜的函数式语言,但缺少面向对象的功能,以及单个二进制分发不是此语言的目标的事实对我的用例来说有点失望。然而,我们团队中的许多人将 Elixir 作为他们所有新项目的主要语言,并且发现它在使用中非常出色。Elixir 拥有丰富且可靠的传统,如果你想要一种函数式语言,你一定要考虑它。

Rust:这是个有趣的语言,我花了一些时间尝试学习。真的,我只是觉得 Rust 并不对症于我的用例。这是一种相当复杂的语言,我和其他很多人似乎都不喜欢它。

Julia:这种语言实际上是针对科学计算的,而不是我的用例。它也缺乏我想要的面向对象能力。

Pony:一种非常吸引人的语言,似乎借鉴了很多 Python ,但也借鉴了一些我不喜欢的东西(例如,强调前缀变量,缺乏对称性等)。我大体上感觉 Pony 与我的想法不一致,认为它不具有与其他语言一样的吸引力,这使得它现在相当原始。

我真正感兴趣并希望在未来进一步研究的语言有:

Nim:Nim 是最初我准备用来领跑的下一个语言,我希望将来能花更多的时间来研究它。

Swift:另一种流行的面向对象语言,除了开发 iOS 和 Mac 应用程序外,绝对值得关注。

但是,最终,我决定致力于学习 Crystal !

原因如下:

Crystal 很快就能熟悉,因为它大部分遵循 Ruby 的语法

它编译成一个快速、单一的可执行文件

整个标准库都是用 Crystal 编写的,可以在需要时很容易阅读

它提供了与 Ruby 类似的完全面向对象的方法(包括真正的受保护的和私有的成员)

Crystal 使用静态类型,但也提供了联合(能够定义可以具有多种类型的变量)

它提供了开发类似于 Ruby 的 DSL 的能力(这是我一直感兴趣的)

与 C 库的绑定完全原生,并且以 Crystal 编写(与 Python 中的 ctypes 类似,只不过更好)

注意事项

Crystal 是一个非常年轻的语言,仍然没有发布 1.0 版本。它通常会在版本中引入重大更改并且限制库。

不过,我打算仅在我的个人项目中使用这种语言,并且愿意成为早期使用者,因为我觉得这种语言有足够的前景值得使用。

经验

标准库

整个标准库非常容易阅读,我一直在引用它。库似乎也有一定的广泛性,是一个很好的基础教程。

以下是添加数组的示例:

这里是获取文件扩展名的函数:

如果你选择尝试 Crystal ,请确保让它的源码待在你身边; 它非常有价值和有用。

绑定到 C 库

这真的太神奇了!

下面是一个绑定从 Unix 系统获取用户信息的各种函数的例子:

异常处理

类似的异常处理提供给 Puby 和 Python :

写你自己的异常很简单;只需要集成 ExcepTIon 类。

导入系统和命名空间

这是来自 Python 的一些调整,但是因为 Ruby 遵循类似 C++ 的方法,把我带回到了 C++ 时代。

C++ 命名空间等同于你可以自定义 Ruby/Crystal 模块。要求任何库将导入它定义的所有项目,因此它总是完美的保证了你的整个库包含在模块中,以此来避免命名空间污染。

起初我还有点担心,但我发现它可以从任意数量的文件中轻松建立一个模块。然而,我得承认,找到事物的来源更像是一种挑战。

python是最好的语言_Python转Crystal语言或许是个不错的选择相关推荐

  1. c语言实现爬虫功能,用C/C 扩展Python语言_python 调用c语言 python实现简单爬虫功能_python实现简单爬虫...

    用C/C 扩展Python语言 Python是一门功能强大的脚本语言,它的强大不仅表现在功能上,还表现在其扩展性上.她提供大量的API以方便程序员利用C/C++对Python进行扩展.因为执行速度慢几 ...

  2. python是c语言_python与c语言

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! python语言调用c语言进行扩展,或者增加程序的运行速度都是特别方便的. 同时 ...

  3. c语言转换为python语言_python和c语言

    广告关闭 腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元! c语言是编译型语言,经过编译后,生成机器码,然后再运行,执行速度快,不能跨平台, ...

  4. python是高级语言还是低级语言_python和其他语言的比较

    Python经常被比作其他解释语言,如Java.JavaScript.Perl.TCL或Smalltalk.与C+.通用Lisp和Scheme进行比较也是有启发意义的.在本节中,我将简要地比较Pyth ...

  5. c语言与python的区别与联系_python和c语言的主要区别

    Python可以说是目前最火的语言之一了,人工智能的兴起让Python一夜之间变得家喻户晓,Python号称目前最最简单易学的语言,现在有不少高校开始将Python作为大一新生的入门语言.本萌新也刚开 ...

  6. python怎么解释语言_python属于解释语言吗

    Python是一门解释型语言? Python是一门解释性语言,我就这样一直相信下去,直到发现了*.pyc文件的存在. 如果是解释型语言,那么生成的*.pyc文件是什么呢?c应该是compiled的缩写 ...

  7. python是动态语言_Python是动态语言:动态添加或删除属性、方法

    Python是动态语言:动态编辑属性.动态编辑方法 1.运行过程中给对象绑定.删除属性 实例: class Person(): def __init__(self,name): self.name=n ...

  8. python语言是非开源语言_python是非开源语言吗

    python是非开源语言吗? python不是非开源语言,而是免费.开源的一种面向对象.解释型计算机程序设计语言,由Guido van Rossum于1989年底发明,第一个公开发行版发行于1991年 ...

  9. python怎么调用c语言_Python调用C语言程序方法解析

    Python调用C语言程序方法解析 首先我们需要将编写好的c程序文件编译为动态库文件(后缀名为.so) 使用下面的命令: gcc 原文件名.c -shared -o 新文件名.so 然后在python ...

最新文章

  1. linux 符号链接攻击防御简介
  2. Python进阶_wxpy学习:用微信监控你的程序
  3. 处理时间_6_SQL Server常见的时间格式转换
  4. C#获取摄像头拍照显示图像
  5. C库函数与系统函数的关系
  6. CH9102 USB转串口应用体验
  7. 简单的UTF8编码生成
  8. win10任务栏怎么还原到下面_详解:新版 WIN 10 V2004 任务栏和开始菜单全透明
  9. VS Code 1.18版本更新内容整理(2017年10月 October 2017)
  10. 陶哲轩实分析定理11.9.1:微积分第一基本定理(二)
  11. 拟牛顿法/Quasi-Newton,DFP算法/Davidon-Fletcher-Powell,及BFGS算法/Broyden-Fletcher-Goldfarb-Shanno...
  12. 实例构造函数与静态构造函数执行顺序
  13. Ubuntu卸载WPS安装Libreoffice
  14. win10桌面计算机打不开,win10开机后桌面无响应,win10开机后啥都打不开
  15. MVP模式在项目中的使用
  16. 在 Linux 下安装 HM,运行 HEVC 参考代码
  17. 李滔搜狐大数据之Spark广告和新闻推荐
  18. 分享一次批量文件翻译的开发过程
  19. AcWing 257. 关押罪犯
  20. Python基础(三)_函数和代码复用

热门文章

  1. 计算机毕业设计中用python神经网络编程实现手写数字识别
  2. linux 安卓svn,linux安装svn
  3. 高性能地图服务器,电子地图的背后—超速海量Xeon5500机架服务器
  4. mysql数据库密码有效期_Mysql5.7.19密码已过有效期的处理过程(密码过期password_expired)...
  5. glog 编译报错 ERROR macro is defined. Define GLOG_NO_ABBREVIATED_SEVERITIES before including logging.h.
  6. Qt捕捉窗口关闭事件
  7. 织物印花疵点专用术语大全
  8. Windows Azure Cloud Service (8) Role及其生命周期模型
  9. 4个数之和 4Sum II
  10. sublime3中如何快速生成html头部信息