2020年编程语言展望

时下最热门的语言是JavaScript,Java和Python,但是编程语言的新陈代谢也在不断发展着,新的优秀语言层出不穷,立足取代他们地位。有一首歌唱的好:"由来只有新人笑,有谁知道旧人哭",对编程语言也是如此。那么在2020的今天,谁是最有前途的语言呢?我们需要拉一个列表,一起说道说道。

Dart

和Ruby借助RoR一样,Dart语言也是借助有一个强有力的框架Flutter以及有个好爹谷歌的缘故,该语言迅速流行起来。

优势:一种比JavaScript更好的语言。

缺点:与JavaScript及其庞大生态系统直面竞争。

实例:

class Complex {  double _r,_i;  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,改进了语法以及对有更强大的并发人支持。作为一种纯函数式语言,是否可以作为了主流,并长久不衰,长生不老呢?需要我们拭目以待。

优势:功能编程非常简单,强大的并发性。

缺点:需要熟悉函数式编程和函数式思维,学习曲线不直。

实例:

defmodule Mandelbrot do  def set do  xsize = 59  ysize = 21  minIm = -1.0  maxIm = 1.0  minRe = -2.0  maxRe = 1.0  stepX = (maxRe - minRe) / xsize  stepY = (maxIm - minIm) / ysize  Enum.each(0..ysize, fn y ->  im = minIm + stepY * y  Enum.map(0..xsize, fn x ->  re = minRe + stepX * x  62 - loop(0, re, im, re, im, re*re+im*im)  end) |> IO.puts  end)  end  defp loop(n, _, _, _, _, _) when n>=30, do: n  defp loop(n, _, _, _, _, v) when v>4.0, do: n-1  defp loop(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)  end  end  Mandelbrot.set 

Golang

谷歌的又一个嫡儿子。在攻城掠土方面,Golang已经取得了不错的成绩。Golang编译速度快,便捷的语法,静态变量,基于协程的高性能并发支持。当然也有槽点,比如繁琐错误语法、混乱模块机制,和缺乏泛型,当然golang社区也一直在努力改进,这些槽点预计将来都会消失。

优势:语法简单,静态类型,很好的并发性。

缺点:缺少泛型,错误语法,模块机制。

实例:

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

实例:

using Images  @inline function hsv2rgb(h, s, v)  const c = v * s  const 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.5  const moveX = 0  const moveY = 0  const img = Array{RGB{Float64}}(h, w)  const maxIter = 30  for x in 1:w  for y in 1:h  i = maxIter  const c = Complex(  (2*x - w) / (w * zoom) + moveX,  (2*y - h) / (h * zoom) + moveY  )  z = c  while abs(z) < 2 && (i -= 1) > 0  z = z^2 + c  end  const r,g,b = hsv2rgb(i / maxIter * 360, 1, i / maxIter)  img[y,x] = RGB{Float64}(r, g, b)  end  end  save("mandelbrot_set.png", img)  end  mandelbrot() 

Kotlin

Kotlin是优化版本的Java,作为Java的取代者之一。谷歌已经在安卓开发中支持Kotlin。

优势:更强大的Java。

缺点:好要依靠Java的阴影活着。

import java.awt.Graphics  import java.awt.image.BufferedImage  import javax.swing.JFrame  class Mandelbrot: JFrame("Mandelbrot Set") {  companion object {  private const val MAX_ITER = 570  private const val ZOOM = 150.0  }  private val img: BufferedImage  init {  setBounds(100, 100, 800, 600)  isResizable = false  defaultCloseOperation = EXIT_ON_CLOSE  img = BufferedImage(width, height, BufferedImage.TYPE_INT_RGB)  for (y in 0 until height) {  for (x in 0 until width) {  var zx = 0.0  var zy = 0.0  val cX = (x - 400) / ZOOM  val cY = (y - 300) / ZOOM  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 or (iter shl 7))  }  }  }  override fun paint(g: Graphics) {  g.drawImage(img, 0, 0, this)  }  }  fun main(args: Array<String>) {  Mandelbrot().isVisible = true  } 

Lua

Lua是一种小型,简单,快速,可嵌入,可移植且灵活的语言。

优点:小型、内嵌,nginx编程

缺点:已经26年了,年事已高。

实例:

Pharo

Pharo是Smalltalk的现代化变体,是一种非常有生产力的面向对象语言。实际上,Smalltalk是OOP的典范,并且已经启发了几乎所有其他OOP语言。但是,也没有其他一种语言能比Smalltalk更好地实现OOP。

Pharo也是世界上最简单和最优雅的语言之一,可以让我们在15分钟内学习Smalltalk的全部语法,

优势:生产率高,生产率提高5倍。

缺点:需要不同的编程思想。

实例:

Rust

Rust是一种设计为内存安全的编程语言,通过borrow和变量生命周期控制消除了与存储器相关的编程错误。Rust承诺编程会更安全。而且Rust效率也非常高,语法也非常优雅,目前热度很高,Github中Rust新项目层出不穷。

优势:开发更加可靠,有从系统级到应用级,浏览器引擎(Firefox),Web开发等各方面的实例。门槛有点高,可以筛选掉一批写bug的码农。

缺点:学习曲线比较陡峭,门槛较高,把一批新手挡在外面。

实例:

WebAssembly

WebAssembly可以说是一匹黑马。预计在接下来十年左右的时间里,可能会衍生出许多升至顶级的语言。WebAssembly 是一种接近机器语言的跨平台二进制格式。目前四大主流浏览器厂商谷歌Chrome、苹果Safari、微软Edge 和 Mozilla FireFox 均以支持了WebAssembly 的初始版本,而且为了安全规范,去年各大厂商又成立了字节码联盟,立足于通过协作制定和实施标准,完善 WebAssembly 在浏览器之外的生态。

优点:广泛的浏览器和语言支持。

缺点:生态体系尚未完善。

实例:

request = new XMLHttpRequest();  request.open('GET', 'simple.wasm');  request.responseType = 'arraybuffer';  request.send();  request.onload = function() {  var bytes = request.response;  WebAssembly.instantiate(bytes, importObject).then(results => {  results.instance.exports.exported_func();  });  }; 
  • 发表于:
  • 原文链接http://news.51cto.com/art/202001/609684.htm
  • 如有侵权,请联系 yunjia_community@tencent.com 删除。

扫码关注云+社区

领取腾讯云代金券