Python和JavaScript是目前最火的两大编程语言,但是2020年,什么编程语言将会取而代之呢?

作者|RichardKennethEng
译者|明明如月,责编|郭芮
以下为译文:
Python和JavaScript是目前最火的两大编程语言。然而,他们不可能永远屹立不倒。最终,必将像其他编程语言一样跌下神坛。这很可能在接下来的十年左右上演。
那么什么编程语言将会取而代之呢?下面给出我的候选者名单!

Dart

多亏了Flutter框架和Google的认可,该语言迅速流行开来。这和Rails框架让Ruby流行起来的原因非常相似。如果谷歌的Fuchsia系统能够火起来,Dart将受益最大。
核心优势:它是一种比JavaScript更棒的编程语言。
主要缺点:不得不面对JavaScript语言和JavaScript的强烈拥护者的挑战。
曼德布洛特集样本:
classComplex{
double_r,_i;
Complex(this._r,this._i);
doublegetr=_r;
doublegeti=_i;
StringtoString="($r,$i)";
Complexoperator+(Complexother)=newComplex(r+,i+);
Complexoperator*(Complexother)=
newComplex(r**,r*+*i);
doubleabs=r*r+i*i;
}
voidmain{
doublestart_x=-1.5;
doublestart_y=-1.0;
doublestep_x=0.03;
doublestep_y=0.1;
for(inty=0;y20;y++){
Stringline="";
for(intx=0;x70;x++){
Complexc=newComplex(start_x+step_x*x,start_y+step_y*y);
Complexz=newComplex(0.0,0.0);
for(inti=0;i100;i++){
z=z*(z)+c;
if(){
break;
}
}
line+=?"":"*";
}
print(line);
}
}

Elixir

Elixir是基于一种基于Erlang虚拟机的函数式编程语言,对并发的支持非常好。作为一个纯粹的函数式编程语言,它有望将这种范式变为主流。
核心优势:它让函数式编程变得异常简单,对并发的支持非常棒。
主要缺点:需要有OTP基础,但掌握OTP却没那么容易。
曼德布洛特集样本:
defmoduleMandelbrotdo
defsetdo
xsize=59
ysize=21
minIm=-1.0
maxIm=1.0
minRe=-2.0
maxRe=1.0
stepX=(maxRe-minRe)/xsize
stepY=(maxIm-minIm)/ysize
(0..ysize,fny-
im=minIm+stepY*y
(0..xsize,fnx-
re=minRe+stepX*x
62-loop(0,re,im,re,im,re*re+im*im)
)|
)
defploop(n,_,_,_,_,_)whenn=30,do:n
defploop(n,_,_,_,_,v),do:n-1
defploop(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)

Golang

得益于其闪电般的编译速度、简单和高效的并发支持,另外一个谷歌受支持的编程语言Golang已经崭露头角。唯一缺的就是泛型支持,但是这个特性已经在规划上了。
核心优势:上手简单,对并发的支持非常出色。
主要缺点:缺少泛型支持(暂时的)。
曼德布洛特集样本:
packagemain
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
)
funcmandelbrot(acomplex128)float64{
i:=0
forz:=a;(z)2imaxEsc;i++{
z=z*z+a
}
returnfloat64(maxEsc-i)/maxEsc
}
funcmain{
scale:=width/(rMax-rMin)
height:=int(scale*(iMax-iMin))
bounds:=(0,0,width,height)
b:=(bounds)
(b,bounds,(),,)
forx:=0;xwidth;x++{
fory:=0;yheight;y++{
fEsc:=mandelbrot(complex(
float64(x)/scale+rMin,
float64(y)/scale+iMin))
(x,y,{uint8(red*fEsc),
uint8(green*fEsc),uint8(blue*fEsc),255})
}
}
f,err:=("")
iferr!=nil{
(err)
return
}
iferr=(f,b);err!=nil{
(err)
}
iferr=;err!=nil{
(err)
}
}

Julia

Julia的优势在于对数学计算的支持非常出色。它对数学的语法支持非常好,堪称数据科学家的福音。假如有任何编程语言可以颠覆Python,它将是一个强有力的竞争者。
核心优势:为科学家精心设计。
主要缺点:面临着数据科学之王Python的竞争。
曼德布洛特集样本:
usingImages
@inlinefunctionhsv2rgb(h,s,v)
constc=v*s
constx=c*(1-abs(((h/60)%2)-1))
constm=v-c
constr,g,b=
ifh60
(c,x,0)
elseifh120
(x,c,0)
elseifh180
(0,c,x)
elseifh240
(0,x,c)
elseifh300
(x,0,c)
else
(c,0,x)
(r+m),(b+m),(g+m)
functionmandelbrot
constw,h=1000,1000
constzoom=0.5
constmoveX=0
constmoveY=0
constimg=Array{RGB{Float64}}(h,w)
constmaxIter=30
forxin1:w
foryin1:h
i=maxIter
constc=Complex(
(2*x-w)/(w*zoom)+moveX,
(2*y-h)/(h*zoom)+moveY
)
z=c
whileabs(z)2(i-=1)0
z=z^2+c
constr,g,b=hsv2rgb(i/maxIter*360,1,i/maxIter)
img[y,x]=RGB{Float64}(r,g,b)
save("mandelbrot_",img)
mandelbrot

Kotlin

Kotlin是升级版的Java。实际上,它可以完全替代Java编程语言,谷歌已经将其打造成Android开发的首选语言。
核心优势:比Java更强大。
主要缺点:Kotlin非常庞大,甚至比Java更庞大。
曼德布洛特集样本:
classMandelbrot:JFrame("MandelbrotSet"){
companionobject{
privateconstvalMAX_ITER=570
privateconstvalZOOM=150.0
}
privatevalimg:BufferedImage
init{
setBounds(100,100,800,600)
isResizable=false
defaultCloseOperation=EXIT_ON_CLOSE
img=BufferedImage(width,height,_INT_RGB)
for(yin0untilheight){
for(xin0untilwidth){
varzx=0.0
varzy=0.0
valcX=(x-400)/ZOOM
valcY=(y-300)/ZOOM
variter=MAX_ITER
while(zx*zx+zy*){
valtmp=zx*zx-zy*zy+cX
zy=2.0*zx*zy+cY
zx=tmp
iter--
}
(x,y,iteror(itershl7))
}
}
}
overridefunpaint(g:Graphics){
(img,0,0,this)
}
}
funmain(args:ArrayString){
=true
}

Lua

核心优势:Lua是一种小巧、简单、快速、可嵌入、可移植和灵活的编程语言。
主要缺点:Lua被忽视了26年了。现在还能掀起风浪吗?
曼德布洛特集样本:
localmaxIterations=250
localminX,maxX,minY,maxY=-2.5,2.5,-2.5,2.5
localmiX,mxX,miY,mxY
functionremap(x,t1,t2,s1,s2)
localf=(x-t1)/(t2-t1)
localg=f*(s2-s1)+s1
returng;
functiondrawMandelbrot
localpts,a,as,za,b,bs,zb,cnt,clr={}
forj=0,hei-1do
fori=0,wid-1do
a=remap(i,0,wid,minX,maxX)
b=remap(j,0,hei,minY,maxY)
cnt=0;za=a;zb=b
while(cntmaxIterations)do
as=a*a-b*b;bs=2*a*b
a=za+as;b=zb+bs
(a)+(b)16thenbreak
cnt=cnt+1
ifcnt==maxIterationsthenclr=0
elseclr=remap(cnt,0,maxIterations,0,255)
pts[1]={i,j,clr,clr,0,255}
(pts)
functionstartFractal
(canvas);
(255,255,255)
drawMandelbrot;
wid,hei=,
canvas=(wid,hei)
startFractal
(x,y,button,istouch)
ifbutton==1then
startDrag=true;miX=x;miY=y
else
minX=-2.5;maxX=2.5;minY=minX;maxY=maxX
startFractal
startDrag=false
(x,y,button,istouch)
ifstartDragthen
locall
ifxmiXthenmxX=x
elsel=x;mxX=miX;miX=l
ifymiYthenmxY=y
elsel=y;mxY=miY;miY=l
miX=remap(miX,0,wid,minX,maxX)
mxX=remap(mxX,0,wid,minX,maxX)
miY=remap(miY,0,hei,minY,maxY)
mxY=remap(mxY,0,hei,minY,maxY)
minX=miX;maxX=mxX;minY=miY;maxY=mxY
startFractal
(canvas)

Pharo

Pharo是Smalltalk的现代版变体,是一个非常高效的面向对象编程语言。事实上,Smalltalk是面向对象的典范,几乎所有的其他面向对象编程语言都受到它的启发。却没有一个编程语言比Smalltalk面向对象的程度更高。
Pharo也是世界上最简单、最优雅的编程语言之一,你只需要15分钟就能掌握Smalltalk的全部语法。
关键优势:开发效率非常高,编程效率能提升接近5倍。
主要缺点:它需要一种与众不同的编程思维。但是人总是害怕改变,很难接受这种编程思维。
分形树样本:
Objectsubclass:000'
=1
//constants
constdegToRad:number=/180.0
consttotalDepth:number=9
/**Helperfunctionthatdrawsalineonthecanvas*/
functiondrawLine(x1:number,y1:number,x2:number,y2:number):void{
(x1,y1)
(x2,y2)
}
/**Drawsabranchatthegivenpointandangleandthencallsitselftwice*/
functiondrawTree(x1:number,y1:number,angle:number,depth:number):void{
if(depth!==0){
letx2:number=x1+((angle*degToRad)*depth*10.0)
lety2:number=y1+((angle*degToRad)*depth*10.0)
drawLine(x1,y1,x2,y2)
drawTree(x2,y2,angle-20,depth-1)
drawTree(x2,y2,angle+20,depth-1)
}
}
//actualdrawingoftree
drawTree(300,500,-90,totalDepth)

WebAssembly

WebAssembly是一匹黑马。在接下来的十年左右的时间,它可能会衍生出一系列编程语言,这些编程语言有望登顶编程语言排行榜。
虽然WebAssembly只是一个编译目标,但是它有充足理由被应用到Web领域之外。哪种基于WebAssembly的编程语言能够荣登榜首?谁也说不准。
原文:
作者:RichardKennethEng,Smalltalk传播者,退休的软件工程师,复仇者联盟的粉丝。译者:明明如月,知名互联网公司Java高级开发工程师,CSDN博客专家。
只十分钟,唾手可得的工作机会就被我搞砸了!
Rust入坑指南:鳞次栉比|CSDN博文精选