计算机编程语言和Java脚本语言是目前最火的两大编程语言,但是2023 年,什么编程语言将会取而代之呢?
作者理查德肯尼斯英格
译者|明明如月,责编|郭芮
以下为译文:
计算机编程语言和Java脚本语言是目前最火的两大编程语言。然而,他们不可能永远屹立不倒。最终,必将像其他编程语言一样跌下神坛。这很可能在接下来的十年左右上演。
那么什么编程语言将会取而代之呢下面给出我的候选者名单!
镖
多亏了摆动框架和谷歌的认可,该语言迅速流行开来。这和轨道框架让红宝石流行起来的原因非常相似。如果谷歌的紫红色系统能够火起来,镖将受益最大。
核心优势:它是一种比Java脚本语言更棒的编程语言。
主要缺点:不得不面对Java脚本语言语言和Java脚本语言的强烈拥护者的挑战。
曼德布洛特集样本:
类复合体{
double _r,_ I;
复杂(这个. r,这个. I);
double get r=_ r
double get i=_ i
String toString='($r,$ I)'
复数运算符(复数其他)=新复数(r other.r,I other。I);
复数运算符*(复数其他)=1
new Complex(r*other.r-i*other.i,r*other。我其他。r * I);
双abs=r * r i * i
}
void main {
双start _ x=-1.5;
双start _ y=-1.0;
双步_ x=0.03
双步_ y=0.1
for(int y=0;y20y ) {
字符串行=””;
for(int x=0;x70x ) {
复合体c=新复合体(start_x step_x*x,start _ y step _ y * y);
复数z=新复数(0.0,0.0);
for(int I=0;i100i ) {
z=z *(z)c;
if(z.abs2) {
打破;
}
}
line=z . ab S2 ” “:” * “;
}
打印(行);
}
}
长生不老药
长生不老药是基于一种基于占线小时虚拟机的函数式编程语言,对并发的支持非常好。作为一个纯粹的函数式编程语言,它有望将这种范式变为主流。
核心优势:它让函数式编程变得异常简单,对并发的支持非常棒。
主要缺点:需要有动态密码基础,但掌握动态密码却没那么容易。
曼德布洛特集样本:
def模块Mandelbrot dodef set doxsize=59 ysize=21 minIm=-1.0 maxIm=1.0 minRe=-2.0 maxRe=1.0 stepx=(maxRe-minRe)/xsize stepy=(maxIm-minIm)/ysizeenum。每个(0.ysize,fn y -im=minIm stepY * yEnum.map(0.xsize,fn x -Re=minRe stepX * x62 – loop(0,Re,im,Re,im,re * re im * im)end)| io。putsend)end defp循环(n,_,_,_,_,_)当n=30时,do: ndefp循环(n,_,_,_,v)当4.0版时,do: n-1defp loop(n,re,im,zr,zi,_) doa=zr * zrb=zi * ziloop(n
得益于其闪电般的编译速度、简单和高效的并发支持,另外一个谷歌受支持的编程语言戈朗已经崭露头角。唯一缺的就是泛型支持,但是这个特性已经在规划上了。
核心优势:上手简单,对并发的支持非常出色。
主要缺点:缺少泛型支持(暂时的)。
曼德布洛特集样本:
主包装
导入(
' fmt '
'图像'
'图像/颜色'
'图像/绘图'
'图像/png '
'数学/cmplx '
操作系统
)
常量(
maxEsc=100
rMin=-2 .
rMax=.5
iMin=-1 .
iMax=1 .
宽度=750
红色=230
绿色=235
蓝色=255
)
func mandelbrot(一个复杂的128)浮动64{
我:=0
对于z:=a;cmplx .ABS(z)2i max ESC;我{
z=z*z a
}
返回float64(maxEsc-i)/maxEsc
}
功能主要{
比例:=宽度/(rMax – rMin)
高度:=int(scale * (iMax – iMin))
界限:=图像Rect(0,0,宽度,高度)
乙:=图像NewNRGBA(边界)
画吧。绘制(b,边界,图像NewUniform(颜色。黑色),图像ZP,画吧Src)
对于x:=0;x宽度;x {
对于y:=0;y高度;y {
fEsc :=mandelbrot(复杂(
浮动64(x)/刻度rMin,
float64(y)/scale iMin))
b.设置(x,y,颜色NRGBA{uint8(red * fEsc),
uint8(绿色* fEsc)、uint8(蓝色* fEsc),255})
}
}
f,err :=os .创建(《mandelbrot.png》)
如果呃!=零{
fmt .Println(错误)
返回
}
如果err=png .编码(f,b);呃!=零{
fmt .Println(错误)
}
如果err=f . Close呃!=零{
fmt .Println(错误)
}
}
朱莉娅
朱莉娅的优势在于对数学计算的支持非常出色。它对数学的语法支持非常好,堪称数据科学家的福音。假如有任何编程语言可以颠覆Python,它将是一个强有力的竞争者。
核心优势:为科学家精心设计。
主要缺点:面临着数据科学之王计算机编程语言的竞争。
曼德布洛特集样本:
使用Images@inline function hsv2rgb(h,s,v)const c=v * sconst x=c *(1-ABS((h/60)% 2)-1))const m=v-cconst 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 w)
科特林是升级版的Java。实际上,它可以完全替代Java 语言(一种计算机语言,尤用于创建网站)语言(一种计算机语言,尤用于创建网站)编程语言,谷歌已经将其打造成机器人开发的首选语言。
核心优势:比Java 语言(一种计算机语言,尤用于创建网站)语言(一种计算机语言,尤用于创建网站)更强大。
主要缺点:科特林非常庞大,甚至比Java 语言(一种计算机语言,尤用于创建网站)语言(一种计算机语言,尤用于创建网站)更庞大。
曼德布洛特集样本:
导入java.awt.Graphics
导入java.awt.image.BufferedImage
导入javax.swing.JFrame
类Mandelbrot:JFrame(' Mandelbrot Set '){
伴随对象{
私人常量值最大ITER=570
私有常量值缩放=150.0
}
私有值图像:BufferedImage
初始化{
设定界限(100,100,800,600)
isResizable=false
默认关闭操作=退出打开关闭
img=BufferedImage(宽度,高度,BufferedImage .TYPE_INT_RGB)
对于(y在0到高度之间){
对于(0中的x直到宽度){
var zx=0.0
var zy=0.0
val cX=(x – 400) /缩放
值cY=(y – 300) /缩放
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或(条目shl 7))
}
}
}
覆盖趣味绘画(g:图形){
g.drawImage(img,0,0,this)
}
}
fun main(args: Array){
Mandelbrot.isVisible=true
}
左上臂
核心优势:Lua是一种小巧、简单、快速、可嵌入、可移植和灵活的编程语言。
主要缺点:Lua被忽视了26 年了。现在还能掀起风浪吗?
曼德布洛特集样本:
本地最大值=250
本地minX,maxX,minY,maxY=-2.5,2.5,-2.5,2.5
本地混音,mxX,miY,mxY
函数重映射(x,t1,t2,s1,s2)
局部f=( x – t1 )/( t2 – t1)
局部g=f * ( s2 – s1 ) s1
返回g;
结束
函数drawMandelbrot
本地pts,a,as,za,b,bs,zb,cnt,clr={}
对于j=0,hei – 1 do
对于i=0,wid – 1 do
a=重新映射(I,0,wid,minX,maxX)
b=remap( j,0,hei,minY,maxY)
CNT=0;za=a;zb=b
而(计数最大值)会
as=a * a-b * b;bs=2 * a * b
a=za asb=zb bs
如果数学. abs( a)数学. abs( b ) 16、则中断结束
cnt=cnt 1
结束
如果cnt==maxIterations,则clr=0
else clr=remap( cnt,0,maxIterations,0,255)
结束
pts[1]={ i,j,clr,clr,0,255 }
爱情.图形.积分(点数)
结束
结束
结束
函数开始分形
love.graphics.setCanvas(画布);爱。图形。清晰
love.graphics.setColor( 255,255,255)
drawmandelbrotlove . graphics . set canvas
结束
函数爱. load
wid,hei=love.graphics.getWidth,love.graphics.getHeight
画布=爱情。图形。新画布(wid,hei)
星形分形
结束
函数love.mousepressed( x,y,button,istouch)
如果button==1,则
start drag=true mix=x;miY=y
其他
minX=-2.5;maxX=2.5minY=minXmaxY=maxX
星形分形
startDrag=false
结束
结束
函数love.mousereleased( x,y,button,istouch)
如果开始拖动,则
本地l
如果x混合,那么mxX=x
else l=x;mxX=miXmiX=l
结束
如果y miY,那么mxY=y
else l=y;mxY=miYmiY=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=MX xminy=miYmaxY=mxY
星形分形
结束
结束
函数爱.画
爱情。图形。绘画(画布)
结束
法罗
法罗是闲聊的现代版变体,是一个非常高效的面向对象编程语言。事实上,闲聊是面向对象的典范,几乎所有的其他面向对象编程语言都受到它的启发。却没有一个编程语言比闲聊面向对象的程度更高。
法罗也是世界上最简单、最优雅的编程语言之一,你只需要15 分钟就能掌握闲聊的全部语法。
关键优势:开发效率非常高,编程效率能提升接近5倍。
主要缺点:它需要一种与众不同的编程思维。但是人总是害怕改变,很难接受这种编程思维。
分形树样本:
对象子类:# fractaltreeinstancewariblenames:“”类变量名称:“”池字典:“”类别:' RosettaCode ' '用于分形树类的方法'树:a点长度:长度角度:一个角度| p a |(a长度10)如果为true:[p:=Pen new。振作起来。p转到:一个点。p转:一个角度。p下来。5次重复查看完整版本转弯:5 .].a:=a角-30.3倍重复:【自身树:p位置长度:长度* 0.7角度如:a a=a 30 .]].绘制显示恢复后:[显示填充白色。自己树:700@700长度:200角度:0。]'执行分形树新抽牌。锈
由于内存安全特性——借用检查器,生锈已经赢得广泛认可。这一特性实际上消除了所有内存相关错误生锈。提供了更安全的编程特性。
关键优势:有助于提高软件的可靠性。
主要缺点:它学起来很难。借用检查器比较复杂且难以理解。
曼德布洛特集样本:
外部板条箱图像;外部机箱编号_复杂;使用STD:fs:File;请使用num _ Complex:复杂;fn main { let max _ iterations=256 u16;设img _ side=800u32设cxmin=-2f 32;设cxmax=1f32设cy min=-1.5f 32;设cymax=1.5f32设scalex=(cxmax – cxmin)/img_side为f32设scaley=(cymax – cymin)/img_side为f32//新建一个ImgBuflet mut imgbuf=image:image buffer:new(img _ side,img _ side);//为imgbuf.enumerate_pixels_mut中的每个像素for (x,y,像素)计算{设cx=cxmin x为f32 * scalex设cy=cymin y为f32 * scaley设c=复数*新(cx、cy);设mut z=Complex:new(0f32,0f 32);设mut I=0;对于0中的t.max _ iterations { if z . norm 2.0 { break;} z=z * z c;I=t;}*pixel=image:Luma([i为u8]);}//保存imagelet fout=mut File:create(' fractal。png’).解开包装;image:ImageLuma8(imgbuf).保存(fout,image:PNG).解开包装;}打字稿
以打字打的文件是一个增强版的JavaScript .它主要新增了静态类型的特性。
由于以打字打的文件和Java脚本语言完全兼容,已经掌握了Java脚本语言的前端网开发者们可以轻松掌握打字稿,因而深受他们青睐。
核心优势:它是Java脚本语言的超集,对Java脚本语言开发者来说没啥太大变化。
主要缺点:由于它是Java脚本语言的超级,这就导致了它同样也继承了Java脚本语言的一些历史包袱。
分形树样本:
//为绘图var画布设置CanvasElement=document。createelement(“canvas”)画布。宽度=600画布。高度=500文档。身体。变量CTX:canvasrenderingcontext 2d=canvas。获取上下文(' 2d ')CTX。填充样式=' # 000 ' CTX。line width=1//const const degToRad:number=Math .PI/180.0常量总深度:数字=9/* *在画布上画线的助手函数*/函数drawLine(x1:数字,y1:数字,x2:数字,y2:数字):void {ctx.moveTo(x1,y1)ctx.lineTo(x2,y2)}/**在给定点和给定角度绘制一个分支然后调用自己两次*/function drawTree(x1:数字,y1:数字,角度:数字,深度:数字):void {if(深度!==0){设x2:number=x1(数学。cos(角度* degToRad)*深度* 10.0)设y2:number=y1(数学。sin(angle * degToRad)* depth * 10.0)画线(x1,y1,x2,y2,angle – 20,depth – 1)drawTree(x2,y2,angle 20,depth-1)}//treectx。beginpathdrawtree(300,500,-90,总深度
网程序集是一匹黑马。在接下来的十年左右的时间,它可能会衍生出一系列编程语言,这些编程语言有望登顶编程语言排行榜。
虽然网程序集只是一个编译目标,但是它有充足理由被应用到网领域之外。哪种基于网程序集的编程语言能够荣登榜首?谁也说不准。
原文:https://黑客正午。未来的语言-b 61332 KD
作者:Richard Kenneth Eng,Smalltalk传播者,退休的软件工程师,复仇者联盟的粉丝。译者:明明如月,知名互联网公司Java 语言(一种计算机语言,尤用于创建网站)语言(一种计算机语言,尤用于创建网站)高级开发工程师,CSDN博客专家。
本文为CSDN翻译,转载请注明来源出处。
只十分钟,唾手可得的工作机会就被我搞砸了!
锈入坑指南:鳞次栉比CSDN博文精选