我喜欢编程语言。 他们每个人都有我希望其他人拥有的这一吸引人的东西。 最近,我开始使用新的副项目时会使用哪种语言,这让我分心。
在阅读之前,有几件事值得了解。 在我短暂的职业生涯的大部分时间里,我都使用Java,JS和Ruby创建了生产应用程序,但我不断学习新的语言和框架 。 我相信特定于语言和语言(或框架)的社区带来了新的想法,您以后可以在其他情况下使用这些想法:函数式编程可以教给您很多有关面向对象的编程的知识,而全职使用Rails应用程序可以教您您会经常进行测试(如果您会练习的话)。 从每种语言学习所有令人敬畏的概念的问题在于,您最终会因在一种语言中寻找其他语言的所有优点而感到沮丧。
要知道的另一件事是我一直在使用终端。 我在计算机上的大部分时间都花在浏览器和终端之间。 是的,我在Vim中编码。 我喜欢没有空值的类型系统(我喜欢可选类型)并且它很强。 我不喜欢Java的类型系统,尽管我使用的Java的最新版本是Java 6,所以很可能某些事情已经改变了! Java的类型系统是我尝试Ruby的原因,因为Ruby社区一直在谈论它们与Java有多少不同。 总是感觉就像我在编写Java代码时,我在帮助编译器,而不是相反。
我要说的最后一件事是,我正在寻找的语言可能不是您正在寻找的语言! 在本文中,我将介绍过去几个月中使用的一些语言,也许用于认真的工作和/或用于有趣的项目。
红宝石
你看,我就是爱露比。 Ruby是一种出色的表达语言,具有许多成熟的库(我们称它们为“宝石”),可以帮助您快速启动和运行应用程序。 Rails非常成熟并且易于使用。 比起我使用过的任何其他语言,测试更多地融入了社区核心。 Ruby是一种纯OOP语言,因此,无论您选择哪种库,大多数代码都将共享相同的API样式-类。 社区也很强大-Ruby开发人员似乎在为已制成的库贡献代码,而不是每次都编写自己的库(ActiveRecord和Sequel是令人敬畏且广为使用的库的示例)。 关于库的这种共识有助于扩展库,我通常以Rails Admin gem作为使生活更轻松的示例。
就速度而言,Ruby并不是最佳状态。 部署通常很繁重,并且需要花费一些时间来加载。 练习Rails真是棒极了,而且很有趣,但是实际上,运行Rails应用程序既费时又费钱:特别是在RAM,磁盘,流量和启动时间等“无服务器”容器平台(例如Heroku,AWS ECS)上,您需要为所有这些事情支付额外费用。 在本地运行Rails非常好,Bundler很棒—但是有时,“热重载”机制存在问题和陷阱,Rails使用该机制是因为中型应用程序的启动时间可能需要5-10秒 。
的JavaScript
我也喜欢JavaScript。 我的大部分前端工作都是在Web上进行的,因为每个人都拥有浏览器-因此运输非常容易。 对大多数同事来说,选择另一种语言听起来很奇怪:“您为什么要招聘2个人而不是1个人?”。 JavaScript也是一种简单的语言,并且因为它是如此的广泛且容易上手,所以使用它似乎不会出错。 使用这种简单语言进行原型实现非常容易,您始终可以弹出node REPL或打开开发工具! 还有开发人员工具...哦,开发人员工具! 它们令人惊叹,无处不在,并吸引了为网络开发的人们的关注,这是很多开发人员! 太好了
难怪这是我们在Wix中使用的主要语言。
但是……JS也有它的问题。 npm模块的状态与JS本身的状态没有什么不同-社区在类型系统(Flow vs TS),库和所有其他方面有所分歧。 我也有我的偏好 ,所以……我想我是社区的一部分。 缺乏“社区选择”的结果是,尽管npm中包含很多模块,而且我的意思是说很多,但其中大多数都不成熟。 几年前 ,我已经写了一篇有关它的博客文章,当我决定在几年的纯JavaScript开发之后再给Ruby一个机会。 我称之为“回归”。
迅速
最近,我开始学习Swift来完善我的iOS开发游戏。 以前它是零级的,因为我只知道如何制作React Native应用程序-完全可以,但是我想体验一些新东西。
Swift是一种静态类型的编译语言。 它最初是为开发用于Apple生态系统的应用程序而制作的,但现已开源,现在可用于在Linux系统上开发可执行文件。 我认识的npm库中最多产的作者之一Sindre Sorhus表示他想做更多Swift工作。 我能理解他! Swift的快速启动时间和有用的编译过程可以确保您运行时错误的机会越来越少。 您没有NULL,而您具有Optional类型。 你不能throw瞒着你的函数抛出,而不是冗长Java的throws声明,在它周围有很好的语法糖中的“尝试和包裹在可选的,在失败的情况下”的形式。 您具有与Swift枚举完美匹配的模式匹配,这使其功能非常强大。 它们还具有类型推断,其中不包括方法定义,但我想很好。 呜呼。 很棒的语言!
为什么Swift不是我的赢家? 在不是XCode的编辑器中使用Swift并不是那么容易或有趣。 我通常使用Vim,与其他编辑人员的交流会非常缓慢。 我尝试使用VSCode或Atom,但效果不佳。 也许最终,我将编写一个Swift CLI工具,该工具将帮助我编写编辑器插件,并使开发人员自己感到赞不绝口,但是现在-它不存在。 Swift还没有静态编译,因此您需要使用Swift设置环境才能使用CLI。 对于Mac应用程序来说很好,但是服务器是Linux,我希望二进制文件是独立的。
ReasonML
我对Facebook制作的OCaml的这种新语法感到着迷。 整个工具链都感觉很成熟而且很棒。 OCaml的程序包管理器OPAM带有表情符号,它表明用于这种老式语言的工具根本不算老。 Merlin和OCaml / Reason语言服务器也很棒,甚至可以与Vim一起出色地工作。 有一个可以正常工作的自动完成引擎(!),定位定义,悬停类型定义以及更多功能。 与编辑器脱钩的惊人开发工具对于语言而言是如此强大。
可以使用BuckleScript将Reason编译为JS,后者可以从Reason / OCaml代码生成高性能的JS。 这很棒,因为现在您已经拥有具有出色的JS互操作性的完全类型化的系统,并且可以使用所需的库了。 我上瘾了。 实际上,我唯一不喜欢的是我必须创建许多类型定义来使用依赖关系,但通常情况下还可以:我们不必为整个模块建模,而不必为a的输入和输出建模。我们使用的特定功能/类/方法。 因为Reason不是纯粹的功能(您可能会有副作用),对我来说, Reason感觉是目前构建JS的最佳方法 。
原因也可以编译为字节码/本机。 使用纯OCaml / Reason意味着,即使代码编译,也不会出现运行时错误,它也可以以较小的占用空间和快速启动的方式静态构建。 并且它构建起来非常快。 我的意思是 快速。 快速。
我在尝试构建本机Reason应用程序时注意到的最大问题是,我不知道人们在做什么以及如何使用某些库。 它们大多数是OCaml,但是由于OCaml和Reason是可以互换的,因此我只是使用Chrome扩展程序将事物读取为Reason代码。 不过,还不清楚。 可能由于Chrome扩展程序中缺少PPX,导致无法将OCaml代码转换为Reason。 据我了解,PPX是语法的扩展—基本上是将代码从一种语法版本转换为另一种语法的宏。 您可以将其视为Babel插件或类似的东西。 Native Reason / OCaml还没有多核支持,但是对于执行并发进程,您可以使用Lwt,这是一个类似于Promise的库。 我仍然没有找到任何简单的Lwt指南/博客帖子!
同样,对于本机OCaml / Reason开发而言,入门水平似乎很高,并且可能令人沮丧。 社区不解释任何事情,而是将知识当作是理所当然的,并且大多数情况下是让读者看一下实现或接口,但是我坚信这最终会改变的,因为这只是JS开发人员转换的开始。 ????
高朗
Go是一种很棒的语言。 它易于学习,可快速编译和运行,具有goroutines和使用CSP的简单并发性 。 它具有多核支持,您可以编译静态二进制文件,该文件将在快速启动时间的普通Linux系统上运行。 它具有变量声明的类型推断,但没有函数定义。 它具有界面,并且看起来像一个具有良好基础的专业社区。
Go编写了许多强大的模块和应用程序(例如Docker,Kubernetes,CockroachDB),这意味着您可以制作一个二进制文件,其中包含应用程序内部的基础结构,以便进行小型且轻松的分发(例如在rapiberry pi上)。 这是非常强大的。
就使用通用数据结构(图形,树)和算法而言,缺少通用性(应该在下一个主要版本中添加)对我来说很奇怪:它迫使每次编写东西或使用代码生成步骤,也可以工作,但我更希望编译器为我做。 另外,我还不完全了解称为VGO的新模块系统,但是随着社区对它的熟悉,我们会听到更多有关该模块系统的信息,并且将提供更多简单的指南。 最后,个人而言,我认为语言本身并不漂亮。 我知道我知道。 这不是为什么不使用语言的好理由,但这使我避免完全测试它或使用它进行辅助项目。 它只是不好玩,简单,无聊而又好。 我相信最终我会最终将其用于生产系统,并且会喜欢它。 你知道,口味可以改变!
水晶
我们从Ruby开始,所以让我们以Crystal结束。
Crystal是另一种相当新的语言-仍然不是1.0-看起来几乎像Ruby,但是它是经过编译和静态类型化的,而且速度很快! 它像Ruby一样支持OOP,并且具有很多不错的功能,例如类型推断,可选类型,用于并发的CSP和像Golang代码生成之类的编译时宏,但都在编译器内部。 还有一些针对Crystal的新Web框架,例如Lucky和Amber。 凯末尔(Kemal)是Sinatra,但Crystal除外。 ORM也可用,并且因为Crystal类似于Ruby(带有一点Elixir),所以您可以找到使用几乎相同的API以及类型安全性的ORM。 这是一件大事!
由于该语言还很年轻,因此尚需时间才能投入生产。 我希望Crystal并发使用所有可用的内核(例如Go),而不是必须手动进行分叉。 我希望引发异常的方法将返回result类型,因此错误处理将是明确的。 我希望枚举中可以包含值,因此我们可以像枚举Swift枚举和OCaml变体一样使用枚举。 更好的编辑器支持也可能会有所帮助:自动补全和悬停时的类型提示是非常棒的补充。 此外,在Scry中 ,语言服务器的自动完成功能在标准库上起作用,而在用户代码上不起作用。 我也有一点担心,Crystal不会升级到1.0版。 但我真的希望如此。
您可能会说,我希望我的编程未来能够混合使用Crystal,Go和ReasonML。 我不确定我最喜欢哪种语言,但我认为它们是我的最佳选择。 我想我们只需要等待,看看从现在开始的几个月到几年内所有这些语言会发生什么情况????
你最喜欢什么语言? 为什么?
From: https://hackernoon.com/the-programming-language-im-looking-for-948d93f7a396