当前位置: 首页 > 科技观察

2020编程语言展望

时间:2023-03-12 06:55:15 科技观察

当今最流行的语言是JavaScript、Java、Python,但是编程语言的新陈代谢也在不断发展,新的优秀语言层出不穷,取而代之。有一首歌唱得很好:“本来只有新人笑,谁知道老人哭”,编程语言也是如此。那么2020年今天最有前途的语言是谁呢?我们需要列出一个清单并一起讨论。与拥有RoR的Dart和Ruby一样,Dart语言也有强大的框架Flutter和好爸爸Google,该语言迅速流行起来。优点:比JavaScript更好的语言。缺点:与JavaScript及其庞大的生态系统进行正面竞争。示例:classComplex{double_r,_i;Complex(this._r,this._i);doublegetr=>_r;doublegeti=>_i;StringtoString()=>"($r,$i)";Complexoperator+(Complexother)=>newComplex(r+other.r,i+other.i);Complexoperator*(Complexother)=>newComplex(r*other.r-i*other.i,r*other.i+other.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;y<20;y++){Stringline="";for(intx=0;x<70;x++){Complexc=newComplex(start_x+step_x*x,start_y+step_y*y);Complexz=newComplex(0.0,0.0);for(inti=0;i<100;i++){z=z*(z)+c;if(z.abs()>2){break;}}line+=z.abs()>2?"":"*";}print(line);}}ElixirElixir有一个很美的名字,中文翻译过来就是“灵丹妙药,长生不老药”。它源自Erlang,具有改进的语法和更强大的并发支持。作为一个纯函数式语言,它能否成为主流并长盛不衰?我们需要拭目以待。优点:函数式编程非常简单,并发性强。缺点:需要熟悉函数式编程和函数式思维,学习曲线不直。示例:defmoduleMandelbrotdodefsetdoxsize=59ysize=21minIm=-1.0maxIm=1.0minRe=-2.0maxRe=1.0stepX=(maxRe-minRe)/xsizestepY=(maxIm-minIm)/ysizeEnum.each(0..ysize,fny->im=minIm+stepY*yEnum.map(0..xsize,fnx->re=minRe+stepX*x62-loop(0,re,im,re,im,re*re+im*im)end)|>IO。putsend)enddefploop(n,_,_,_,_,_)whenn>=30,do:ndefploop(n,_,_,_,_,v)whenv>4.0,do:n-1defploop(n,re,im,zr,zi,_)doa=zr*zrb=zi*ziloop(n+1,re,im,a-b+re,2*zr*zi+im,a+b)endendMandelbrot.setGolangGoogle另一个合法的儿子。Golang攻城略地取得了不错的成绩。Golang编译速度快,语法方便,静态变量,基于协程的高性能并发支持。当然也有槽点,比如繁琐的错误语法、混乱的模块机制、缺乏泛型等。当然,golang社区一直在努力改进,预计这些插槽在未来会消失。优点:语法简单,静态类型,并发性好。缺点:缺少泛型、语法错误、模块机制。实例:packagemainimport("fmt""image""image/color""image/draw""image/png""math/cmplx""os")const(maxEsc=100rMin=-2.rMax=.5iMin=-1.iMax=1.width=750red=230green=235blue=255)funcmandelbrot(acomplex128)float64{i:=0forz:=a;cmplx.Abs(z)<2&&i0z=z^2+cendconstr,g,b=hsv2rgb(i/maxIter*360,1,i/maxIter)img[y,x]=RGB{Float64}(r,g,b)endendsave("mandelbrot_set.png",img)endmandelbrot()KotlinKotlin是Java的优化版本,是Java的替代者之一。谷歌已经在Android开发中支持Kotlin。优势:更强大的Java。缺点:不如活在Java的阴影下。importjava.awt.Graphicsimportjava.awt.image.BufferedImageimportjavax.swing.JFrameclassMandelbrot:JFrame("MandelbrotSet"){companionobject{privateconstvalMAX_ITER=570privateconstvalZOOM=150.0}privatevalimg:BufferedImageinit{setBounds(100,100,800,600)isResizable=falsedefaultCloseOperation=EXIT_ON_CLOSEimg=BufferedImage(width,height,BufferedImage.TYPE_INT_RGB)for(yin0untilheight){for(xin0untilwidth){varzx=0.0varzy=0.0valcX=(x-400)/ZOOMvalcY=(y-300)/ZOOMvariter=MAX_ITERwhile(zx*zx+zy*zy<4.0&&iter>0){valtmp=zx*zx-zy*zy+cXzy=2.0*zx*zy+cYzx=tmpiter--}img.setRGB(x,y,iteror(itershl7))}}}overridefunpaint(g:Graphics){g.drawImage(img,0,0,this)}}funmain(args:Array){Mandelbrot().isVisible=true}LuaLua是一种小巧、简单、快速、可嵌入、可移植和灵活的语言。优点:小型,嵌入式,nginx编程缺点:26年了,老了。示例:PharoPharo是Smalltalk的现代变体,是一种非常高效的面向对象语言。事实上,Smalltalk是OOP的典型代表,几乎启发了所有其他OOP语言。然而,没有其他语言比Smalltalk更好地实现OOP。Pharo也是世界上最简单、最优雅的语言之一,它可以让我们在15分钟内学会Smalltalk的所有语法。优点:生产率高,生产率提高5倍。缺点:需要不同的编程思维。示例:RustRust是一种设计为内存安全的编程语言,通过借用和变量生命周期控制消除与内存相关的编程错误。Rust承诺更安全的编程。而且,Rust也非常高效,它的语法非常优雅。目前热度非常高,Github上新的Rust项目层出不穷。优点:开发比较靠谱,从系统级到应用级都有例子,浏览器引擎(Firefox),Web开发等。门槛有点高,可以筛选出一批写bug的码农。缺点:学习曲线比较陡峭,门槛高,让一批新手望而却步。例子:WebAssemblyWebAssembly可以说是一匹黑马。预计在未来十年左右的时间里,很多语言都会崛起。WebAssembly是一种接近机器语言的跨平台二进制格式。目前四大浏览器厂商GoogleChrome、AppleSafari、MicrosoftEdge、MozillaFireFox都支持WebAssembly的初始版本,并且为了安全规范,去年各大厂商成立了字节码联盟,基于协作制定实施标准,完善浏览器外WebAssembly的生态。优点:广泛的浏览器和语言支持。缺点:生态系统尚未完善。示例:request=newXMLHttpRequest();request.open('GET','simple.wasm');request.responseType='arraybuffer';request.send();request.onload=function(){varbytes=request.response;WebAssembly.instantiate(bytes,importObject).then(results=>{results.instance.exports.exported_func();});};