多亏了 Flutter 框架和 Google 的认可,该语言迅速流行开来。这和 Rails 框架让 Ruby 流行起来的原因非常相似。如果谷歌的 Fuchsia 系统能够火起来,Dart 将受益最大。

核心优势:它是一种比 Java 更棒的编程语言。

主要缺点:不得不面对 Java 语言和 Java 的强烈拥护者的挑战。

核心优势:它是一种比 Java 更棒的编程语言。

主要缺点:不得不面对 Java 语言和 Java 的强烈拥护者的挑战。

曼德布洛特集样本:

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 虚拟机的函数式编程语言,对并发的支持非常好。作为一个纯粹的函数式编程语言,它有望将这种范式变为主流。

核心优势:它让函数式编程变得异常简单,对并发的支持非常棒。

主要缺点:需要有 OTP 基础,但掌握 OTP 却没那么容易。

核心优势:它让函数式编程变得异常简单,对并发的支持非常棒。

主要缺点:需要有 OTP 基础,但掌握 OTP 却没那么容易。

曼德布洛特集样本:

defp loop(n, _, _, _, _, _) when n>=30, do: ndefp loop(n, _, _, _, _, v) when v>4.0, do: n-1defp loop(n, re, im, zr, zi, _) doa = zr * zrb = zi * ziloop(n+1, re, im, a-b+re, 2*zr*zi+im, a+b)endend

Mandelbrot.set

Golang

得益于其闪电般的编译速度、简单和高效的并发支持,另外一个谷歌受支持的编程语言 Golang 已经崭露头角。唯一缺的就是泛型支持,但是这个特性已经在规划上了。

核心优势:上手简单,对并发的支持非常出色。

主要缺点:缺少泛型支持(暂时的)。

核心优势:上手简单,对并发的支持非常出色。

主要缺点:缺少泛型支持(暂时的)。

曼德布洛特集样本:

import ("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)

func mandelbrot(a complex128) float64 {i := 0for 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 的竞争。

核心优势:为科学家精心设计。

主要缺点:面临着数据科学之王 Python 的竞争。

曼德布洛特集样本:

@inline function hsv2rgb(h, s, v)const c = v * sconst 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.5const moveX = 0const moveY = 0

const img = Array{RGB{Float64}}(h, w)const maxIter = 30

for x in 1:wfor y in 1:hi = maxIterconst c = Complex((2*x - w) / (w * zoom) + moveX,(2*y - h) / (h * zoom) + moveY)z = cwhile abs(z) < 2 && (i -= 1) > 0z = z^2 + cendconst r,g,b = hsv2rgb(i / maxIter * 360, 1, i / maxIter)img[y,x] = RGB{Float64}(r, g, b)endend

save("mandelbrot_set.png", img)end

mandelbrot

Kotlin

Kotlin 是升级版的 Java。 实际上,它可以完全替代 Java 编程语言,谷歌已经将其打造成 Android 开发的首选语言。

核心优势:比 Java 更强大。

主要缺点:Kotlin 非常庞大,甚至比 Java 更庞大。

核心优势:比 Java 更强大。

主要缺点:Kotlin 非常庞大,甚至比 Java 更庞大。

曼德布洛特集样本:

class Mandelbrot: JFrame("Mandelbrot Set") {companion object {private const val MAX_ITER = 570private const val ZOOM = 150.0}

private val img: BufferedImage

init {setBounds(100, 100, 800, 600)isResizable = falsedefaultCloseOperation = EXIT_ON_CLOSEimg = BufferedImage(width, height, BufferedImage.TYPE_INT_RGB)for (y in 0 until height) {for (x in 0 until width) {var zx = 0.0var zy = 0.0val cX = (x - 400) / ZOOMval cY = (y - 300) / ZOOMvar iter = MAX_ITERwhile (zx * zx + zy * zy < 4.0 && iter > 0) {val tmp = zx * zx - zy * zy + cXzy = 2.0 * zx * zy + cYzx = tmpiter--}img.setRGB(x, y, iter or (iter shl 7))}}}

override fun paint(g: Graphics) {g.drawImage(img, 0, 0, this)}}

fun main(args: Array) {Mandelbrot.isVisible = true}

Lua

核心优势:Lua 是一种小巧、简单、快速、可嵌入、可移植和灵活的编程语言。

主要缺点:Lua 被忽视了 26 年了。现在还能掀起风浪吗?

核心优势:Lua 是一种小巧、简单、快速、可嵌入、可移植和灵活的编程语言。

主要缺点:Lua 被忽视了 26 年了。现在还能掀起风浪吗?

曼德布洛特集样本:

Pharo

Pharo 是 Smalltalk 的现代版变体,是一个非常高效的面向对象编程语言。事实上,Smalltalk 是面向对象的典范,几乎所有的其他面向对象编程语言都受到它的启发。却没有一个编程语言比 Smalltalk 面向对象的程度更高。

Pharo 也是世界上最简单、最优雅的编程语言之一,你只需要 15 分钟就能掌握 Smalltalk 的全部语法。

关键优势:开发效率非常高,编程效率能提升接近 5 倍。

主要缺点:它需要一种与众不同的编程思维。但是人总是害怕改变,很难接受这种编程思维。

关键优势:开发效率非常高,编程效率能提升接近 5 倍。

主要缺点:它需要一种与众不同的编程思维。但是人总是害怕改变,很难接受这种编程思维。

分形树样本:

"Methods for FractalTree class"

tree: aPoint length: aLength angle: anAngle| p a |

(aLength > 10) ifTrue: [p := Pen new.p up.p goto: aPoint.p turn: anAngle.p down.5 timesRepeat: [p go: aLength / 5.p turn: 5.].a := anAngle - 30.3 timesRepeat: [self tree: p location length: aLength * 0.7 angle: a.a := a + 30.]].

drawDisplay restoreAfter: [Display fillWhite.self tree: 700@700 length: 200 angle: 0.]

"Execute"

FractalTree new draw.

Rust

由于内存安全特性——借用检查器,Rust 已经赢得广泛认可。这一特性实际上消除了所有内存相关错误。Rust 提供了更安全的编程特性。

关键优势:有助于提高软件的可靠性。

主要缺点:它学起来很难。借用检查器比较复杂且难以理解。

关键优势:有助于提高软件的可靠性。

主要缺点:它学起来很难。借用检查器比较复杂且难以理解。

曼德布洛特集样本:

use std::fs::File;use num_complex::Complex;

fn main {let max_iterations = 256u16;let img_side = 800u32;let cxmin = -2f32;let cxmax = 1f32;let cymin = -1.5f32;let cymax = 1.5f32;let scalex = (cxmax - cxmin) / img_side as f32;let scaley = (cymax - cymin) / img_side as f32;

// Create a new ImgBuflet mut imgbuf = image::ImageBuffer::new(img_side, img_side);

// Calculate for each pixelfor (x, y, pixel) in imgbuf.enumerate_pixels_mut {let cx = cxmin + x as f32 * scalex;let cy = cymin + y as f32 * scaley;

let c = Complex::new(cx, cy);let mut z = Complex::new(0f32, 0f32);

let mut i = 0;for t in 0..max_iterations {if z.norm > 2.0 {break;}z = z * z + c;i = t;}

*pixel = image::Luma([i as u8]);}

// Save imagelet fout = &mut File::create("fractal.png").unwrap;image::ImageLuma8(imgbuf).save(fout, image::PNG).unwrap;}

Type

Type 是一个增强版的 Java. 它主要新增了静态类型的特性。

由于 Type 和 Java 完全兼容,已经掌握了 Java 的前端 web 开发者们可以轻松掌握 Type,因而深受他们青睐。

核心优势:它是 Java 的超集 , 对 Java 开发者来说没啥太大变化。

主要缺点:由于它是 Java 的超级,这就导致了它同样也继承了 Java 的一些历史包袱。

核心优势:它是 Java 的超集 , 对 Java 开发者来说没啥太大变化。

主要缺点:由于它是 Java 的超级,这就导致了它同样也继承了 Java 的一些历史包袱。

分形树样本:

// constantsconst degToRad: number = Math.PI / 180.0const totalDepth: number = 9

/** Helper function that draws a line on the canvas */function drawLine(x1: number, y1: number, x2: number, y2: number): void {ctx.moveTo(x1, y1)ctx.lineTo(x2, y2)}

/** Draws a branch at the given point and angle and then calls itself twice */function drawTree(x1: number, y1: number, angle: number, depth: number): void {if (depth !== 0) {let x2: number = x1 + (Math.cos(angle * degToRad) * depth * 10.0)let y2: number = y1 + (Math.sin(angle * degToRad) * depth * 10.0)drawLine(x1, y1, x2, y2)drawTree(x2, y2, angle - 20, depth - 1)drawTree(x2, y2, angle + 20, depth - 1)}}

// actual drawing of treectx.beginPathdrawTree(300, 500, -90, totalDepth)ctx.closePathctx.stroke

WebAssembly

WebAssembly 是一匹黑马。在接下来的十年左右的时间,它可能会衍生出一系列编程语言,这些编程语言有望登顶编程语言排行榜。

虽然 WebAssembly 只是一个编译目标,但是它有充足理由被应用到 Web 领域之外。哪种基于 WebAssembly 的编程语言能够荣登榜首?谁也说不准。

https://hackernoon.com/programming-languages-of-the-future-b61332kd

作者:Richard Kenneth Eng,Smalltalk 传播者,退休的软件工程师,复仇者联盟的粉丝。 译者:明明如月,知名互联网公司 Java 高级开发工程师,CSDN 博客专家。

End

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐