2020年编程语言展望

时下最热门的语言是JavaScript,Java和Python,但是编程语言的新陈代谢也在不断发展着,新的优秀语言层出不穷,立足取代他们地位。有一首歌唱的好:"由来只有新人笑,有谁知道旧人哭",对编程语言也是如此。那么在2020的今天,谁是最有前途的语言呢?我们需要拉一个列表,一起说道说道。

Dart

和Ruby借助RoR一样,Dart语言也是借助有一个强有力的框架Flutter以及有个好爹谷歌的缘故,该语言迅速流行起来。

优势:一种比JavaScript更好的语言。

缺点:与JavaScript及其庞大生态系统直面竞争。

实例:

class Complex { 
 
double _r,_i; 
 
Complex(this._r,this._i); 
 
double get r => _r; 
 
double get i => _i; 
 
String toString() => "($r,$i)"; 
 
Complex operator +(Complex other) => new Complex(r+other.r,i+other.i); 
 
Complex operator *(Complex other) => 
 
new Complex(r*other.r-i*other.i,r*other.i+other.r*i); 
 
double abs() => r*r+i*i; 
 
} 
 
void main() { 
 
double start_x=-1.5; 
 
double start_y=-1.0; 
 
double step_x=0.03; 
 
double step_y=0.1; 
 
for(int y=0;y<20;y++) { 
 
String line=""; 
 
for(int x=0;x<70;x++) { 
 
Complex c=new Complex(start_x+step_x*x,start_y+step_y*y); 
 
Complex z=new Complex(0.0, 0.0); 
 
for(int i=0;i<100;i++) { 
 
z=z*(z)+c; 
 
if(z.abs()>2) { 
 
break; 
 
} 
 
} 
 
line+=z.abs()>2 ? " " : "*"; 
 
} 
 
print(line); 
 
} 
 
} 

Elixir

Elixir有一个美好的名字,翻译为中文是"灵丹妙药,长生不老药",它源自于Erlang,改进了语法以及对有更强大的并发人支持。作为一种纯函数式语言,是否可以作为了主流,并长久不衰,长生不老呢?需要我们拭目以待。

优势:功能编程非常简单,强大的并发性。

缺点:需要熟悉函数式编程和函数式思维,学习曲线不直。

实例:

defmodule Mandelbrot do 
 
def set do 
 
xsize = 59 
 
ysize = 21 
 
minIm = -1.0 
 
maxIm = 1.0 
 
minRe = -2.0 
 
maxRe = 1.0 
 
stepX = (maxRe - minRe) / xsize 
 
stepY = (maxIm - minIm) / ysize 
 
Enum.each(0..ysize, fn y -> 
 
im = minIm + stepY * y 
 
Enum.map(0..xsize, fn x -> 
 
re = minRe + stepX * x 
 
62 - loop(0, re, im, re, im, re*re+im*im) 
 
end) |> IO.puts 
 
end) 
 
end 
 
defp loop(n, _, _, _, _, _) when n>=30, do: n 
 
defp loop(n, _, _, _, _, v) when v>4.0, do: n-1 
 
defp loop(n, re, im, zr, zi, _) do 
 
a = zr * zr 
 
b = zi * zi 
 
loop(n+1, re, im, a-b+re, 2*zr*zi+im, a+b) 
 
end 
 
end 
 
Mandelbrot.set 

Golang

谷歌的又一个嫡儿子。在攻城掠土方面,Golang已经取得了不错的成绩。Golang编译速度快,便捷的语法,静态变量,基于协程的高性能并发支持。当然也有槽点,比如繁琐错误语法、混乱模块机制,和缺乏泛型,当然golang社区也一直在努力改进,这些槽点预计将来都会消失。

优势:语法简单,静态类型,很好的并发性。

缺点:缺少泛型,错误语法,模块机制。

实例:

package main 
 
import ( 
 
"fmt" 
 
"image" 
 
"image/color" 
 
"image/draw" 
 
"image/png" 
 
"math/cmplx" 
 
"os" 
 
) 
 
const ( 
 
maxEsc = 100 
 
rMin = -2. 
 
rMax = .5 
 
iMin = -1. 
 
iMax = 1. 
 
width = 750 
 
red = 230 
 
green = 235 
 
blue = 255 
 
) 
 
func mandelbrot(a complex128) float64 { 
 
i := 0 
 
for z := a; cmplx.Abs(z) < 2 && i < maxEsc; i++ { 
 
z = z*z + a 
 
} 
 
return float64(maxEsc-i) / maxEsc 
 
} 
 
func main() { 
 
scale := width / (rMax - rMin) 
 
height := int(scale * (iMax - iMin)) 
 
bounds := image.Rect(0, 0, width, height) 
 
b := image.NewNRGBA(bounds) 
 
draw.Draw(b, bounds, image.NewUniform(color.Black), image.ZP, draw.Src) 
 
for x := 0; x < width; x++ { 
 
for y := 0; y < height; y++ { 
 
fEsc := mandelbrot(complex( 
 
float64(x)/scale+rMin, 
 
float64(y)/scale+iMin)) 
 
b.Set(x, y, color.NRGBA{uint8(red * fEsc), 
 
uint8(green * fEsc), uint8(blue * fEsc), 255}) 
 
} 
 
} 
 
f, err := os.Create("mandelbrot.png") 
 
if err != nil { 
 
fmt.Println(err) 
 
return 
 
} 
 
if err = png.Encode(f, b); err != nil { 
 
fmt.Println(err) 
 
} 
 
if err = f.Close(); err != nil { 
 
fmt.Println(err) 

Julia

Julia是一门强大的数值计算语言。其语法对数学支持非常好,很适合数据科学家编写应用。是取代Python统计分析和数值计算的预备选手之一。

优势:对数学友好。

缺点:要与Python竞争。

实例:

using Images 
 
@inline function hsv2rgb(h, s, v) 
 
const c = v * s 
 
const x = c * (1 - abs(((h/60) % 2) - 1)) 
 
const m = v - c 
 
const r,g,b = 
 
if h < 60 
 
(c, x, 0) 
 
elseif h < 120 
 
(x, c, 0) 
 
elseif h < 180 
 
(0, c, x) 
 
elseif h < 240 
 
(0, x, c) 
 
elseif h < 300 
 
(x, 0, c) 
 
else 
 
(c, 0, x) 
 
end 
 
(r + m), (b + m), (g + m) 
 
end 
 
function mandelbrot() 
 
const w, h = 1000, 1000 
 
const zoom = 0.5 
 
const moveX = 0 
 
const moveY = 0 
 
const img = Array{RGB{Float64}}(h, w) 
 
const maxIter = 30 
 
for x in 1:w 
 
for y in 1:h 
 
i = maxIter 
 
const c = Complex( 
 
(2*x - w) / (w * zoom) + moveX, 
 
(2*y - h) / (h * zoom) + moveY 
 
) 
 
z = c 
 
while abs(z) < 2 && (i -= 1) > 0 
 
z = z^2 + c 
 
end 
 
const r,g,b = hsv2rgb(i / maxIter * 360, 1, i / maxIter) 
 
img[y,x] = RGB{Float64}(r, g, b) 
 
end 
 
end 
 
save("mandelbrot_set.png", img) 
 
end 
 
mandelbrot() 

Kotlin

Kotlin是优化版本的Java,作为Java的取代者之一。谷歌已经在安卓开发中支持Kotlin。

优势:更强大的Java。

缺点:好要依靠Java的阴影活着。

import java.awt.Graphics 
 
import java.awt.image.BufferedImage 
 
import javax.swing.JFrame 
 
class Mandelbrot: JFrame("Mandelbrot Set") { 
 
companion object { 
 
private const val MAX_ITER = 570 
 
private const val ZOOM = 150.0 
 
} 
 
private val img: BufferedImage 
 
init { 
 
setBounds(100, 100, 800, 600) 
 
isResizable = false 
 
defaultCloseOperation = EXIT_ON_CLOSE 
 
img = BufferedImage(width, height, BufferedImage.TYPE_INT_RGB) 
 
for (y in 0 until height) { 
 
for (x in 0 until width) { 
 
var zx = 0.0 
 
var zy = 0.0 
 
val cX = (x - 400) / ZOOM 
 
val cY = (y - 300) / ZOOM 
 
var iter = MAX_ITER 
 
while (zx * zx + zy * zy < 4.0 && iter > 0) { 
 
val tmp = zx * zx - zy * zy + cX 
 
zy = 2.0 * zx * zy + cY 
 
zx = tmp 
 
iter-- 
 
} 
 
img.setRGB(x, y, iter or (iter shl 7)) 
 
} 
 
} 
 
} 
 
override fun paint(g: Graphics) { 
 
g.drawImage(img, 0, 0, this) 
 
} 
 
} 
 
fun main(args: Array<String>) { 
 
Mandelbrot().isVisible = true 
 
} 

Lua

Lua是一种小型,简单,快速,可嵌入,可移植且灵活的语言。

优点:小型、内嵌,nginx编程

缺点:已经26年了,年事已高。

实例:

Pharo

Pharo是Smalltalk的现代化变体,是一种非常有生产力的面向对象语言。实际上,Smalltalk是OOP的典范,并且已经启发了几乎所有其他OOP语言。但是,也没有其他一种语言能比Smalltalk更好地实现OOP。

Pharo也是世界上最简单和最优雅的语言之一,可以让我们在15分钟内学习Smalltalk的全部语法,

优势:生产率高,生产率提高5倍。

缺点:需要不同的编程思想。

实例:

Rust

Rust是一种设计为内存安全的编程语言,通过borrow和变量生命周期控制消除了与存储器相关的编程错误。Rust承诺编程会更安全。而且Rust效率也非常高,语法也非常优雅,目前热度很高,Github中Rust新项目层出不穷。

优势:开发更加可靠,有从系统级到应用级,浏览器引擎(Firefox),Web开发等各方面的实例。门槛有点高,可以筛选掉一批写bug的码农。

缺点:学习曲线比较陡峭,门槛较高,把一批新手挡在外面。

实例:

WebAssembly

WebAssembly可以说是一匹黑马。预计在接下来十年左右的时间里,可能会衍生出许多升至顶级的语言。WebAssembly 是一种接近机器语言的跨平台二进制格式。目前四大主流浏览器厂商谷歌Chrome、苹果Safari、微软Edge 和 Mozilla FireFox 均以支持了WebAssembly 的初始版本,而且为了安全规范,去年各大厂商又成立了字节码联盟,立足于通过协作制定和实施标准,完善 WebAssembly 在浏览器之外的生态。

优点:广泛的浏览器和语言支持。

缺点:生态体系尚未完善。

相关推荐