2020 年,大火的 Python 和 JavaScript 是否会被取而代之?

sw

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博文精选

文章版权声明:除非注明,否则均为纵投光影网原创文章,转载或复制请以超链接形式并注明出处。

上一个 徐静蕾促成《风犬》与张一白合作,中二风格有争议但改不了

下一个 深圳首个!古树保护与社区治理融合微改造项目在光明启用