JavaScript、PHP、Golang、Haskell、Elixir,哪个才是最佳编程语言?

简介:   在过去的几年里,我有机会尝试了多种不同的编程语言。  我非常喜欢学习不同的语言、方法和范式。我是一个充满好奇心的人,一直对编程语言十分着迷。每种编程语言都是不同的,在本文中,我们来讨论一下以下五大编程语言的优点以及缺点。

  在过去的几年里,我有机会尝试了多种不同的编程语言。

  我非常喜欢学习不同的语言、方法和范式。我是一个充满好奇心的人,一直对编程语言十分着迷。每种编程语言都是不同的,在本文中,我们来讨论一下以下五大编程语言的优点以及缺点。

  JavaScript

  Haskell

  Go

  PHP

  Elixir

  JavaScript、PHP、Golang、Haskell、Elixir,哪个才是最佳编程语言?

  快速的原型设计:你可以利用 JavaScript 迅速编写出一些原型来验证自己的想法。你甚至可以使用Node.js 在最短的时间内构建后端的概念证明。

  灵活性:在 ES6 元编程功能的助力下,JavaScript 的人气越来越高。但是,即便不使用这些功能,你也可以通过 JavaScript 编写一些非常通用的功能,并利用它编写客户端、服务器甚至移动应用(例如 React Native等)。

  社区:JavaScript 的社区非常棒。每次遇到问题,都可以通过 StackOverflow 寻找到答案。npm 仓库是一个非常了不起的软件包的来源,有了它,你只需要使用 JavaScript 一种语言就能够编写整个应用程序。

  函数式编程:你可能知道,刚开始的时候 JavaScript 是“一种类似于 Scheme 的浏览器编程语言,只不过使用的是 Java 语法。”如今即使 JavaScript 不是纯粹的函数式编程语言,但它也保留了一些函数式编程的特性,例如高阶函数、匿名函数(ES6+ 中的箭头函数)等等。

  语法:最新版的 JavaScript 引入了一些语法糖,可以让你轻松地编写更具可读性的代码。比如对象/数组解构、箭头函数、展开运算符等。

  异步:你可以尝试一下如何处理异步代码,相信你会喜欢的。

  动态类型:JavaScript 的动态类型非常糟糕。比如,我知道为什么 10 + "10"==="1010",但是我不喜欢这种方式。类型的强制转换很可能会在运行时出问题(而不是在编译或构建时出问题)。

  其他编译语言(例如 ReasonML 或 Haskell)实际上不需要类型注释,它们可以在编译时推断类型。但是如果遇到一个整数和一个字符串求和,它们会抛出错误(可能这个例子不太适合)。

  顺便说一下,TypeScript 和 Flow 都可以解决这个问题。

  荒唐的特性:JavaScript的一些荒唐的特性通常都是由类型的强制转换引发的。

  比如, + {}===[object object],但是{} +===0

  typeof NaN==="number",但 NaN 实际的意思是:“不是数字”。

  如果你是一名JavaScript 程序员,那么就会明白我所说的这些荒唐的特性了。

  尾调用优化(Tail call optimization,TCO):虽然 EcmaScript 为递归函数指定了 TCO,但似乎只有 WebKit 支持。

  对象/数组常量是可变的:就像 Java 的 final 一样,你可以在初始化后修改对象和数组,即便它们是常量。

  JavaScript、PHP、Golang、Haskell、Elixir,哪个才是最佳编程语言?

  思想的转变:在接触 Haskell 之后,你将以完全不同的方式思考代码。

  性能:Haskell 是一种编译语言,由于其纯函数式的性质,编译器可以在编译时采用很多优化。

  类型系统:Hindley-Milner 类型系统很棒。类型声明清晰且易于理解。此外,Haskell 类型系统可以在编译时推断类型并检查错误。

  语法:在习惯了 Haskell 的语法后,阅读 Haskell 代码就是一种乐趣。

  类:非常类似于 Java 的接口,但由于分层设计而更加强大。

  设计良好:Haskell 没有常见的设计错误(例如 JavaScript 犯的错误),而且更偏向于软件的正确性,而不是“不惜一切代价拥有 X 功能”。

  模式匹配:无需多说,Haskell 模式匹配既有趣又强大:

  sayMe :: (Integral a)=> a -> StringsayMe 1="One!"sayMe 2="Two!"sayMe 3="Three!"sayMe 4="Four!"sayMe 5="Five!"sayMe x="Not between 1 and 5"

  惰性求值:只有在绝对必要时,函数才会被计算。

  学习难度过高:Haskell 是一门很有魅力的编程语言,但有时让你感觉没有范畴论的博士学位就不配学这门语言。学习曲线真的很陡峭。

  缺乏有效的资源:学习 Haskell 真的非常非常困难。我阅读了 5 本书并参加了 3 门在线课程,但仍然无法得心应手。很难找到导师。

  Monad:基本上就是自函子范畴的幺半群。听懂了?顺便说一句,问题不在于 monad,而是我压根搞不明白这是个什么玩意儿。

  术语:你之前所学的关于编程的术语都没用,在 Haskell 中,你基本不用纠结大专列表、整数、循环以及其他常见的编程关键字,你需要花费大把时间讨论monad、幺半群、函子、可应用性。感觉就像从头开始学习编程。

  JavaScript、PHP、Golang、Haskell、Elixir,哪个才是最佳编程语言?

  学习难度低:我在第一次接触 Go 语言的时候,大约使用了一个小时就构建了一个Web服务器。Go 的语法与 C 有点类似,因此如果你有JavaScript、PHP、Java、C 的经验的话,学习 Go 会非常容易。

  出色的性能:即使不怎么关心代码的编写方式,也可以获得不错的性能。

  并发处理很简单:使用 goroutines 编写并发代码非常简单。

  了不起的生态系统:Go 的生态系统庞大且拥有大量高质量的软件包。

  Go 模块:有了 Go 模块后,大多数时候你都不需要关心 $GOPATH。而且它们还可以更轻松地管理应用程序的依赖项。

  没有泛型:Go 不支持泛型类型,因此很难构建可重用的函数,例如filter、sort等。

  没有箭头函数:虽然使用 Go 编写匿名函数在技术上是可行的,但是我想念箭头函数的形式。

  没有三元运算符:这一点似乎不重要,但是这行代码:

  myVar :=10 > 5 ? "foo" : "bar"

  比下面这段代码强太多了吧:

  var myVar stringif 10 > 5 { myVar="foo"} else { myVar="bar"}

  错误处理:尽管使用 Go 编程有一段时间了,但还是觉得这种错误处理很奇怪:

  val, err :=someFunc("foo")if err !=nil { handleError(err)}JavaScript、PHP、Golang、Haskell、Elixir,哪个才是最佳编程语言?

  易于上手:PHP 是我的第一门编程语言,我利用它构建了很多东西。

  易于部署:使用 Node.js、Ruby、Python、Elixir 时,你必须设置一个应用程序服务器才能将网站公开到互联网。但是 PHP 只需要 Apache 或 NGINX。

  丰富的生态系统:与JavaScript 一样,,许多开发人员已经用这种语言构建了大量的软件库。

  快速的原型设计:与 Node.js 一样,我可以在短短几个小时内构建最小化可行产品或概念验证。

  简单易用:有时我感觉 PHP 就好像是 Node.js 的先驱。你可以利用 PHP 随意编写代码,然后就可以正常工作,并不会遇到太大问题。这一点与 OCaml、Haskell、Elm 以及其他强类型语言有很大的不同,因为在使用这些语言的时候,你花费在思考如何编写代码上的时间甚至超过了实际编写代码的时间。

  .htaccess:我不明白为什么应该使用这个文件。由于浏览器的缓存,一旦写错一次,网站就彻底废了。

  模块系统:PHP 本身没有合适的模块系统。你需要通过 include,将整个文件包含到另一个 PHP 文件中(相当于复制粘贴)。

  你可以使用 PHP 的 OOP 特性,但如此一来,你就必须采用 OOP 了。

  此外,所有常规函数都可以从全局范围访问(如果不使用命名空间的话)。

  糟糕的设计:PHP 语言本身存在几个设计错误,例如:

  无法使用 try/catch 处理 trigger_error。

  不支持动态范围。

  实例方法中的静态变量的范围不是实例。这意味着一旦设置一个变量,它就是所有实例的全局变量。

  整数字节大小因操作系统而异。

  类似于 JavaScript 的荒唐特性:与 JavaScript 非常相像,PHP 也有一些非常荒唐的特性:

  "foobar"==0 为 true,"foobar"==true 为 true,但是 0==true 为 false

  以下代码会导致三元运算符出错。
  
  不支持 Unicode:PHP 委员会仍在讨论支持 Unicode。PHP 7 引入了 Unicode 转义语法。

  语法:我发现过程式 PHP 很难阅读。面向对象式的 PHP 更合理,也许是因为它更有条理。你尝试过阅读 WordPress 的源代码?

  糟糕的功能:Rasmus Lerdorf 曾经说过:“与其压根没有某个功能,还不如有一个丑陋的功能……”抱歉,我不赞同。

  我的意思是,如果你要构建一个博客、一个最小化可行产品或其他东西,那么这样做没问题,但是不能在建立一门完整的编程语言时采用这种态度。

  软件的正确性远比社区需要的功能重要。

  JavaScript、PHP、Golang、Haskell、Elixir,哪个才是最佳编程语言?

  OTP:开放电信平台(Open Telecom Platform,OTP)拥有创建大规模可扩展实时分布系统所需的一切。

  性能:Elixir 的性能非常出色。尽管与 Java 相比,单个函数的速度可能会慢一些,但是,在尝试并行化和水平扩展后,Elixir 的性能可以轻松击败 Java。

  元编程:Elixir 元编程功能非常出色。

  语法:Elixir 的语法类似于 Ruby,无论是阅读还是编写代码都是一种乐趣。

  动态类型:Elixir 是一种动态类型语言。这意味着你不可能拥有 Haskell 的强类型优势。

  魔法:有时,Elixir 的元编程功能将程序的工作方式隐藏到宏后面。

  括号:括号在 Elixir 中是可选的,但大部分时间都需要。我更喜欢 Haskell 处理括号的方式。

目录
相关文章
|
7月前
|
大数据 关系型数据库 PHP
PHP编程语言的发展与应用
PHP作为一种流行的开源服务器端脚本语言,一直以来都在不断发展和演进。本文将探讨PHP编程语言的发展历程、特点以及在当今互联网应用开发中的广泛应用,同时还会介绍一些最新的PHP技术趋势和未来的发展方向。
89 8
|
安全 Go
Golang 语言是面向对象编程风格的编程语言吗?
Golang 语言是面向对象编程风格的编程语言吗?
52 0
|
21天前
|
JavaScript 前端开发 Java
除了 JavaScript,还有哪些编程语言支持 Set 类型
【10月更文挑战第30天】这些编程语言中的 `Set` 类型虽然在语法和具体实现细节上有所不同,但都提供了类似的集合操作功能,方便开发者在不同的编程场景中处理集合相关的数据和逻辑。
|
3月前
|
Go 数据库
golang编程语言操作GORM快速上手篇
使用Go语言的GORM库进行数据库操作的教程,涵盖了GORM的基本概念、基本使用、关联查询以及多对多关系处理等内容。
47 1
|
3月前
|
设计模式 存储 算法
PHP中的设计模式:策略模式的深入解析与应用在软件开发的浩瀚海洋中,PHP以其独特的魅力和强大的功能吸引了无数开发者。作为一门历史悠久且广泛应用的编程语言,PHP不仅拥有丰富的内置函数和扩展库,还支持面向对象编程(OOP),为开发者提供了灵活而强大的工具集。在PHP的众多特性中,设计模式的应用尤为引人注目,它们如同精雕细琢的宝石,镶嵌在代码的肌理之中,让程序更加优雅、高效且易于维护。今天,我们就来深入探讨PHP中使用频率颇高的一种设计模式——策略模式。
本文旨在深入探讨PHP中的策略模式,从定义到实现,再到应用场景,全面剖析其在PHP编程中的应用价值。策略模式作为一种行为型设计模式,允许在运行时根据不同情况选择不同的算法或行为,极大地提高了代码的灵活性和可维护性。通过实例分析,本文将展示如何在PHP项目中有效利用策略模式来解决实际问题,并提升代码质量。
|
5月前
|
机器学习/深度学习 人工智能 数据挖掘
PHP和Python是两种广泛应用的编程语言
【7月更文挑战第2天】PHP和Python是两种广泛应用的编程语言
105 57
|
6月前
|
前端开发 PHP 开发者
TIOBE 6月榜单:PHP稳步前行,编程语言生态的微妙变化
PHP在TIOBE 6月榜单上升至第15位,彰显其在Web开发的持久力。PHP得益于深厚的Web根基、框架的成熟、性能优化和活跃的社区支持。排名变化反映技术生态多样性,强调成熟语言的长尾效应、生态重要性和持续改进的价值。PHP正与新兴技术融合,如Docker和前端框架,同时在企业级应用中展现实力。尽管面临性能、类型安全和云原生的挑战,PHP社区的创新将继续影响其未来。
115 9
|
7月前
|
JavaScript 前端开发 开发者
JavaScript是一种轻量级的解释型编程语言
【5月更文挑战第22天】JavaScript是一种轻量级的解释型编程语言
55 4
|
7月前
|
编解码 JavaScript 前端开发
【专栏】介绍了字符串Base64编解码的基本原理和在Java、Python、C++、JavaScript及Go等编程语言中的实现示例
【4月更文挑战第29天】本文介绍了字符串Base64编解码的基本原理和在Java、Python、C++、JavaScript及Go等编程语言中的实现示例。Base64编码将24位二进制数据转换为32位可打印字符,用“=”作填充。文中展示了各语言的编码解码代码,帮助开发者理解并应用于实际项目。
154 1
php案例:判断这个文件是什么编程语言代码的文件(判断java或者php)
php案例:判断这个文件是什么编程语言代码的文件(判断java或者php)
php案例:判断这个文件是什么编程语言代码的文件(判断java或者php)