0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

若开始自己的项目,该使用怎样的编程语言?

5RJg_mcuworld 来源:未知 作者:胡薇 2018-10-17 09:08 次阅读

我喜欢编程语言。每种语言都有自己的特点。最近,我开始纠结一个问题:如果开始自己的项目的话,我该用什么语言。

好多优秀的编程语言

在阅读此文之前,需要先说明几件事情。虽然在工作中大部分的时候我都用 Java、JavaScript 和 Ruby 来创建产品应用,但我一直在学习新的语言和新的框架。我相信,语言和语言(或框架)特有的社区能给你带来新的思想,这些思想早晚会有用处:函数式编程可以给你带来许多面向对象的编程知识,而全职从事 Rails 应用可以给你许多测试的经验(如果你写测试的话)。但问题是,如果你想学会所有每种语言的优秀概念,那么最终会在各种优秀的功能中迷失方向。

另一个关键点是,我一直在用控制台。我使用电脑的绝大部分时间都是在用浏览器和控制台。没错,我编程用的是 Vim。我喜欢没有空值的类型系统(我喜欢可选类型),这种类型系统很强大。因此我不喜欢 Java 的类型系统,但我用过的最新版本只是 Java 6,所以很有可能现在的情况不一样了!Java 的类型系统正是我尝试 Ruby 的原因,因为 Ruby 社区总是在谈论他们与 Java 的区别。听上去就像是,如果我写 Java 代码,我实际上是在帮助编译器干活,而不是编译器帮我干活。

我想说的最后一件事就是我在寻觅的语言可能并不是你在寻找的语言!这篇文章里我会介绍一些我在最近几个月在工作和个人项目中用过的语言。

Ruby

我很喜欢 Ruby。Ruby 是个非常强大的描述性语言,有许多成熟的函数库(称为“宝石”——gem),它们能帮你快速建立应用。Rails 已经非常成熟,非常容易使用。测试在社区的融入程度比任何其他语言都要深。Ruby 是个纯粹的面向对象语言,所以不管你使用什么函数库,大多数代码都有相同风格的 API,即类的 API。社区也很强大,Ruby 的开发者似乎会给已有的函数库贡献代码,而不是每次都编写自己的函数库(比如广为流传的 ActiveRecord 和 Sequel 就是很好的例子)。这种共识帮助人们扩展函数库,其中的例子之一就是 Rails Admin 的 gem。

在速度方面 Ruby 并不是最快的。部署通常很重,需要很长时间才能加载。使用 Ruby 很愉快,但在现实中,运行 Rails 应用需要很多时间和很多成本,特别是在 Heroku、AWS ECS 等“无服务器”的容器平台上,因为它要占用许多内存、磁盘空间、流量和启动时间,而这些都要额外花钱。在本地运行 Rails 完全没问题,Bundler 也很好用,但有时候它的“热重载”机制会出问题。

JavaScript

我也喜欢 JavaScript。绝大多数前端工作都是在 Web 上,因为每个人都有浏览器,所以发布很容易。所以使用其他语言似乎是件很奇怪的事情:“能招一个人为什么要招两个?”JavaScript 也很容易学习,而且因为它流传甚广、易于上手,所以使用 JavaScript 基本不会有错。使用这个简单的语言实现原型非常容易,你可以直接启动 node 命令行环境,或者直接打开 devtools!它们非常好用,任何开发 web 的人知道它们,所以你有很多开发者!太好了。

难怪这是我们 Wix 使用的主要语言。

但是,JS 也有问题。npm 模块的状态与 JS 的状态不一样,在类型系统方面社区有分歧(Flow vs. TS),函数库和其他东西也是。我也有自己的喜好,所以……我觉得我也是社区的一部分。这种缺乏“社区精选”的结果就是虽然 npm 上有很多模块,但很多模块都不成熟。我几年前写过一篇文章,讲述的是我在完全使用 JavaScript 几年后又转回 Ruby 的故事。我称之为“倒退”。

Swift

最近我开始学习 Swift 进行 iOS 开发。之前我对它的了解为零,因为我了解的一切都只是怎样创建 React 应用。虽然这没什么问题,但我想尝试些新东西。

Swift 是个静态类型的编译语言。它最初被用于 Apple 生态环境下的应用程序开发,但它是开源的,现在也可以用来开发 Linux 上的可执行文件。我知道的最多产的一名 npm 作者 Sindre Sorhus 说他想做更多 Swift 的工作。我完全理解他!Swift 的快速启动时间和好用的编译过程可以保证运行时的错误越来越少。而且它没有 NULL 值,但是却有 Optional 类型。在 throw 之前必须明确声明函数会 throw 的内容,但并不是像 Java 那样通过 throws 声明进行,而是有个非常巧妙地语法糖,就像是“try 一下,如果万一失败还有 optional”。模式匹配通过与 Swift 枚举类型的完美配合,变得非常强大。它还有类型推断,虽然在方法定义中不能使用,但我觉得应该问题不大。真是个完美的语言!

但为什么 Swift 不是我的最终选择?因为 Swift 只适合在 XCode 中使用。通常我使用 Vim,用别的编辑器会觉得效率很低。我尝试过 VSCode 和 Atom,但都不太好。也许,最终我会写一个 Swift CLI 工具能帮我编写编辑器插件来改善开发体验,但至少现在这个东西还不存在。Swift 也没有静态编译,所以你必须设置好 Swift 才能使用命令行程序。对于 Mac 应用来说这不是问题,但在 Linux 服务器上,我希望编译出的二进制文件能包含一切。

ReasonML

我很喜欢这个 Facebook 为 OCaml 做的崭新语法。整个工具链感觉很成熟、很优秀。OCaml 的包管理器 OPAM 自带表情图标,让这个看上去很老的工具其实不是那么老。Merlin 和 OCaml/Reason 语言服务器也非常优秀,而且能与 Vim 配合得很好。它还有个完美工作的自动完成引擎(!)、跳转到定义、鼠标悬停类型定义和更多的功能。优秀的开发工具从编辑器中分离,对于一门语言来说这是非常好的。

Reason 可以用 BuckleScirpot 编译成 JS,因此可以将 Reason/OCaml 代码转换成高性能的 JS 代码。这非常好,因为这就相当于 JS 也有了类型系统,你还可以享受 JS 的函数库。我很喜欢它。实际上,我唯一不喜欢的就是我得建立大量的类型定义才能使用依赖,但通常这并不是问题:我们不需要对整个模块建模,只需要对输入、输出和使用到的特定函数、类和方法建模即可。因为 Reason 并不是完全的函数式(有副作用),因此在我看来, Reason 是最好的能编译成 JS 的语言。

Reason 也能编译成字节码或原生代码。使用纯 OCaml/Reason 意味着只要编译器通过,就不会有运行时的错误,它也能静态编译,生成很小的二进制文件,启动速度也很快。而且它编译速度非常快!

OCaml工具链非常快!

在尝试原生 Reason 应用时我遇到的最大问题就是我不知道别人在干什么,别人怎样使用函数库。大多数人都使用OCaml,但因为 OCaml 和 Reason 可以互换,所以我可以用 Chrome 扩展把 OCaml 当做 Reason 来阅读。但依然不清楚。一些 OCaml 代码不能转换成 Reason,也许是因为 Chrome 插件中缺乏 PPX。据我的理解,PPX 是一种语法扩展,基本上就是一些宏,将代码从一种语法转换成另一种语法。可以理解成 Babel 插件或类似的东西。原生的 Reason/OCaml 不支持多核心,但要想实现并发,可以使用 Lwt,这是个类似于 Promise 的库。但我还没找到哪怕一篇 Lwt 的指南或文章!

而且,似乎即使是原生 OCaml/Reason开发,入门的门槛也非常高,而且非常打击积极性。社区不会解答问题也不会分享知识,绝大多数情况下都是要求提问者去看源代码或借口,但我相信最终这会改变,因为这只是 JS 开发的开始。

Golang

Go 是个非常好的语言。它很容易学习,编译和运行都很快,还有 goroutine 和通过 CSP 实现的简单并发。它支持多核心,而且可以编译出静态二进制文件,能在最简洁的Linux上快速启动。它在变量定义时有类型推断,但函数定义中没有。它支持接口,看上去像是来自于有良好基础的专业社区。

实际上,有很多很强大的模块和应用都是用 Go 写成的,如 Docker、Kubernetes、CockroachDB,意味着你有可能将这些二进制文件作为基础设施的一部分,从而实现小型的、简单的分发(如在树莓派上)。这一点非常强大。

在公用数据结构(图、树等)和算法方面,它没有泛型(也许下个版本就会加上了),我觉得这一点很奇怪:你必须每次都编写同样的代码,或者使用代码生成,虽然也能用,但我更希望编译器能帮我完成这一切。而且,我并没有完全理解它的模块系统 VGO,但我猜测随着社区对之越来越熟悉,以后会有更多的信息和更简单的指南。最后一点个人意见,我认为语言本身不太干净。我知道,这并不是不使用某个语言的理由,但至少我不会完整地测试它,或者在个人项目中使用它。Go 语言本身并不有趣。它很简单,很无聊,很好。我相信最后我会在某个正式系统中使用并爱上它。人的口味会变化!

Crystal

这篇文章以 Ruby 开始,那么我们以 Crystal 结束吧。

Crystal 是另一门非常新的语言,它还没到 1.0 版本。看上去很像 Ruby,但它是编译语言,有静态类型,而且很快!它像 Ruby 一样支持 OOP,而且有很多很不错的功能,如类型推断、optinoal 类型、用于并发的 CSP 和编译时宏,有点像 Golang 的 codegen,但它的编译器本身就支持。Crystal 有几个新的 Web 框架,比如 Lucky 和 Amber。还有 Kemal,虽然它是 Sinatra 的,但也可以用在 Crystal 上。还有 ORM,而且由于 Crystal 重构了 Ruby(用 Elixir 做了些修饰),你会发现它的 ORM 的 API 与 Ruby 几乎相同,而且还有类型安全。这个非常重要!

由于这个语言还非常年轻,所以它还需要一段时间才能用于产品。我喜欢 Crystal 的并发,它能使用所有的核心,就像 Go 语言一样,但 Crystal 不需要手动去 fork。我还喜欢它抛出异常会返回 result 类型,这样错误处理可以明确进行了。我希望枚举能有自己的值,这样就能像 Swift 和 OCaml 一样使用了。更好的编辑器支持也是必要的,自动完成、鼠标悬停类型提示都非常有用。此外,使用 Scry 可以使语言服务器的自动完成用于标准库,但无法用于用户自己的代码。我还有点担心 Crystal 不会到达发布 1.0 的那一天,但我真心希望它能发布。

可能你也看出来了,我希望未来的编程语言能够吸取 Crystal、Go 和 ReasonML 的优点。我不确定我喜欢哪种,但我觉得这些都是候选。我觉得我只需要等待,看看这些语言在未来几个月或几年会变成什么样子。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • JAVA
    +关注

    关注

    19

    文章

    2904

    浏览量

    102989
  • 编程语言
    +关注

    关注

    9

    文章

    1878

    浏览量

    33070

原文标题:我为何要弃 Java、JavaScript、Ruby 于不顾,而去寻找新的编程语言?

文章出处:【微信号:mcuworld,微信公众号:嵌入式资讯精选】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    plc编程语言与c语言的联系 c语言和PLC有什么区别

    PLC编程语言与C语言的联系 PLC(可编程逻辑控制器)是一种针对自动化控制系统的特殊计算机。PLC编程
    的头像 发表于 02-05 14:21 1018次阅读

    c++怎么开始编程

    C++是一种高级的、通用的编程语言,用于开发各种类型的应用程序。它是从C语言演变而来,也是一种静态类型语言,可以在不同的平台上进行开发。C++具有高度的灵活性和性能,并且广泛应用于游戏
    的头像 发表于 11-27 15:56 492次阅读

    脚本语言编程语言的区别

    脚本语言编程语言是计算机语言的两个主要分类。尽管两者都是用于编写计算机程序的工具,但它们在设计和运行方式上存在一些显著的区别。下面将详细探讨脚本
    的头像 发表于 11-22 14:33 1359次阅读

    Python编程语言属于什么语言

    Python编程语言属于高级编程语言中的一种。它是一种通用、面向对象、解释型编程语言。Pytho
    的头像 发表于 11-22 14:31 639次阅读

    什么是C语言?单片机有什么特点?为什么要用C语言编程

    随着技术的发展,电子产品越来越多,方便了我们的日常生活,大多数电子产品上都有单片机,而单片机是通过执行软件逻辑来实现功能的。而单片机编程最合适的编程语言是汇编语言,但是最常用、最普及的
    的头像 发表于 11-21 10:06 707次阅读
    什么是C<b class='flag-5'>语言</b>?单片机有什么特点?为什么要用C<b class='flag-5'>语言</b><b class='flag-5'>编程</b>?

    基于Rust开发的编程语言

    Move 是一门由 Rust 语言开发的一门面向资产的编程语言,最早由 Facebook (现 Meta )投入大量的人力物力开发,用于 Libra (现 Dime )项目,处理全球性
    的头像 发表于 11-17 12:30 348次阅读

    浅谈PLC 5种标准的编程语言

    IEC 1131-3的编程语言是IEC工作组 对世界范围的PLC厂家的编程语言合理地吸收、借鉴的基础上形成的一套针对工业控制系统的国际编程
    发表于 11-15 11:14 399次阅读
    浅谈PLC 5种标准的<b class='flag-5'>编程</b><b class='flag-5'>语言</b>

    目前流行的编程语言有哪些?如何选择

    普遍针对的是不同开发人员以及不同的开发用处,例如移动应用、游戏开发、web开发、分布式系统等。所以学习编程语言,最重要是找到最适合自己语言,并融会贯通加以使用。
    的头像 发表于 09-21 14:45 717次阅读
    目前流行的<b class='flag-5'>编程</b><b class='flag-5'>语言</b>有哪些?如何选择

    五种支持plc编程语言有哪些

    在PLC控制系统设计中,不同型号的PLC编程软件对以上五种编程语言的支持种类是不同的,所以不但对PLC的硬件性能了解外,也要了解PLC对编程语言
    发表于 08-31 14:54 692次阅读
    五种支持plc<b class='flag-5'>编程</b>的<b class='flag-5'>语言</b>有哪些

    人工智能学什么编程语言

    在这个领域求职的人来说,掌握正确的编程语言是非常重要的。以下是目前最受欢迎和最适用于人工智能开发的编程语言。 Python:目前最流行的语言
    的头像 发表于 08-12 17:44 480次阅读

    PLC编程语言的特点

    公司的产品有它自己编程语言,OMRON公司的产品也有它自己语言。但不管什么型号的PLC,其编程
    的头像 发表于 07-04 17:13 585次阅读

    西门子PLC编程语言介绍

    PLC目前有5种标准的编程语言,包括图形化编程语言和文本化编程语言
    发表于 06-29 16:00 942次阅读
    西门子PLC<b class='flag-5'>编程</b><b class='flag-5'>语言</b>介绍

    基于PASCAL的高级编程语言——SCL编程语言

    根据该标准,可对用于可编程逻辑控制器的编程语言进行标准化。SCL 编程语言实现了该标准中定义的 ST
    发表于 06-20 10:20 1062次阅读
    基于PASCAL的高级<b class='flag-5'>编程</b><b class='flag-5'>语言</b>——SCL<b class='flag-5'>编程</b><b class='flag-5'>语言</b>

    中文编程语言——青语言开源发布

    据介绍,青语言是一门面向青少年、儿童和非专业人士的中文编程语言。它完全从零开始实现了代码文本到语法树的构建,语言内核参考了 Lisp,语法上
    的头像 发表于 06-06 16:25 567次阅读
    中文<b class='flag-5'>编程</b><b class='flag-5'>语言</b>——青<b class='flag-5'>语言</b>开源发布

    怎么开始自己的第一块pcb板子

    最近想画一块自己的pcb板子,学习一下画pcb板的流程和增加自己的熟练度,是从自己感兴趣的方向着手,还是画个简单的模块或者最小系统板,大家是怎么开始画出
    发表于 05-29 00:37