![](/style/images/good.png)
![](/style/images/bad.png)
2020年编程语言展望
source link: https://news.51cto.com/art/202001/609684.htm
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
2020年编程语言展望 - 51CTO.COM
2020年编程语言展望
时下最热门的语言是JavaScript,Java和Python,但是编程语言的新陈代谢也在不断发展着,新的优秀语言层出不穷,立足取代他们地位。
作者:虫虫安全来源:今日头条|2020-01-21 22:08时下最热门的语言是JavaScript,Java和Python,但是编程语言的新陈代谢也在不断发展着,新的优秀语言层出不穷,立足取代他们地位。有一首歌唱的好:"由来只有新人笑,有谁知道旧人哭",对编程语言也是如此。那么在2020的今天,谁是最有前途的语言呢?我们需要拉一个列表,一起说道说道。
![2020年编程语言展望](https://s3.51cto.com/oss/202001/22/cad256683171189d89c0224f651b7be5.jpg-wh_651x-s_65712544.jpg)
和Ruby借助RoR一样,Dart语言也是借助有一个强有力的框架Flutter以及有个好爹谷歌的缘故,该语言迅速流行起来。
优势:一种比JavaScript更好的语言。
缺点:与JavaScript及其庞大生态系统直面竞争。
实例:
![2020年编程语言展望](https://s4.51cto.com/oss/202001/22/7c6f94801ab14bd53737ada38f4964b0.jpg)
- 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
![2020年编程语言展望](https://s1.51cto.com/oss/202001/22/9c1eebef2c5d224768f936a3dbd53d22.jpg)
Elixir有一个美好的名字,翻译为中文是"灵丹妙药,长生不老药",它源自于Erlang,改进了语法以及对有更强大的并发人支持。作为一种纯函数式语言,是否可以作为了主流,并长久不衰,长生不老呢?需要我们拭目以待。
优势:功能编程非常简单,强大的并发性。
缺点:需要熟悉函数式编程和函数式思维,学习曲线不直。
实例:
![2020年编程语言展望](https://s1.51cto.com/oss/202001/22/2b7e483b8c52d48bdff07c47551908f9.jpg)
- 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
- 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)
- Mandelbrot.set
Golang
![2020年编程语言展望](https://s1.51cto.com/oss/202001/22/9adf25b42201c680f6dc8ccebfe96be9.jpg)
谷歌的又一个嫡儿子。在攻城掠土方面,Golang已经取得了不错的成绩。Golang编译速度快,便捷的语法,静态变量,基于协程的高性能并发支持。当然也有槽点,比如繁琐错误语法、混乱模块机制,和缺乏泛型,当然golang社区也一直在努力改进,这些槽点预计将来都会消失。
优势:语法简单,静态类型,很好的并发性。
缺点:缺少泛型,错误语法,模块机制。
实例:
![2020年编程语言展望](https://s1.51cto.com/oss/202001/22/78864bf2dc50ea8bc6a16b7b69d16159.jpg)
- package main
- import (
- "fmt"
- "image"
- "image/color"
- "image/draw"
- "image/png"
- "math/cmplx"
- const (
- maxEsc = 100
- rMin = -2.
- rMax = .5
- iMin = -1.
- iMax = 1.
- width = 750
- red = 230
- green = 235
- blue = 255
- func mandelbrot(a complex128) float64 {
- 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
![2020年编程语言展望](https://s4.51cto.com/oss/202001/22/860dab30ee48b96f3d7a547d773d9917.jpg)
Julia是一门强大的数值计算语言。其语法对数学支持非常好,很适合数据科学家编写应用。是取代Python统计分析和数值计算的预备选手之一。
优势:对数学友好。
缺点:要与Python竞争。
实例:
![2020年编程语言展望](https://s1.51cto.com/oss/202001/22/f083cb979fc44676cfe1164d18ee187b.jpg)
- 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)
- (c, 0, x)
- (r + m), (b + m), (g + m)
- 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
- while abs(z) < 2 && (i -= 1) > 0
- z = z^2 + c
- const r,g,b = hsv2rgb(i / maxIter * 360, 1, i / maxIter)
- img[y,x] = RGB{Float64}(r, g, b)
- save("mandelbrot_set.png", img)
- mandelbrot()
Kotlin
Kotlin是优化版本的Java,作为Java的取代者之一。谷歌已经在安卓开发中支持Kotlin。
![2020年编程语言展望](https://s5.51cto.com/oss/202001/22/5ddcf9bafb2e17f983a8c6b22a4d3de6.jpg)
优势:更强大的Java。
缺点:好要依靠Java的阴影活着。
![2020年编程语言展望](https://s2.51cto.com/oss/202001/22/8936858286ad578a265eb0de564ce8ea.jpg)
- 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
![2020年编程语言展望](https://s2.51cto.com/oss/202001/22/d686e08ed7e4758b8de1ad8c3ddcf1e5.jpg)
Lua是一种小型,简单,快速,可嵌入,可移植且灵活的语言。
优点:小型、内嵌,nginx编程
缺点:已经26年了,年事已高。
实例:
![2020年编程语言展望](https://s3.51cto.com/oss/202001/22/5dfb9cc7af6f629ee7135a8cc9652ca6.jpg)
Pharo
![2020年编程语言展望](https://s4.51cto.com/oss/202001/22/cd7fb2844dd78700cfde0a2d0be07550.jpg)
Pharo是Smalltalk的现代化变体,是一种非常有生产力的面向对象语言。实际上,Smalltalk是OOP的典范,并且已经启发了几乎所有其他OOP语言。但是,也没有其他一种语言能比Smalltalk更好地实现OOP。
Pharo也是世界上最简单和最优雅的语言之一,可以让我们在15分钟内学习Smalltalk的全部语法,
优势:生产率高,生产率提高5倍。
缺点:需要不同的编程思想。
实例:
![2020年编程语言展望](https://s5.51cto.com/oss/202001/22/d7f0e8858838e29154ef16e79b9bc4d2.jpg)
![2020年编程语言展望](https://s1.51cto.com/oss/202001/22/47c41fe363ce069ca14400d9041fc8e7.jpg)
Rust是一种设计为内存安全的编程语言,通过borrow和变量生命周期控制消除了与存储器相关的编程错误。Rust承诺编程会更安全。而且Rust效率也非常高,语法也非常优雅,目前热度很高,Github中Rust新项目层出不穷。
优势:开发更加可靠,有从系统级到应用级,浏览器引擎(Firefox),Web开发等各方面的实例。门槛有点高,可以筛选掉一批写bug的码农。
缺点:学习曲线比较陡峭,门槛较高,把一批新手挡在外面。
实例:
![2020年编程语言展望](https://s3.51cto.com/oss/202001/22/cec0f28592c6aac5770e2472cd90b081.jpg)
WebAssembly
![2020年编程语言展望](https://s2.51cto.com/oss/202001/22/d3d8db9d93443c52ea95eb386e32b764.jpg)
WebAssembly可以说是一匹黑马。预计在接下来十年左右的时间里,可能会衍生出许多升至顶级的语言。WebAssembly 是一种接近机器语言的跨平台二进制格式。目前四大主流浏览器厂商谷歌Chrome、苹果Safari、微软Edge 和 Mozilla FireFox 均以支持了WebAssembly 的初始版本,而且为了安全规范,去年各大厂商又成立了字节码联盟,立足于通过协作制定和实施标准,完善 WebAssembly 在浏览器之外的生态。
![2020年编程语言展望](https://s5.51cto.com/oss/202001/22/ea02ac7baf61159ac5d24970bf7358d4.jpg)
优点:广泛的浏览器和语言支持。
缺点:生态体系尚未完善。
实例:
![2020年编程语言展望](https://s1.51cto.com/oss/202001/22/70c8a46d62c0dd44094ebb0b49a0fb10.jpg)
- 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();
【编辑推荐】
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK