20

2020年编程语言展望

 4 years ago
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年编程语言展望

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

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

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

实例:

2020年编程语言展望
  1. class Complex { 
  2. double _r,_i; 
  3. Complex(this._r,this._i); 
  4. double get r => _r; 
  5. double get i => _i; 
  6. String toString() => "($r,$i)"; 
  7. Complex operator +(Complex other) => new Complex(r+other.r,i+other.i); 
  8. Complex operator *(Complex other) => 
  9. new Complex(r*other.r-i*other.i,r*other.i+other.r*i); 
  10. double abs() => r*r+i*i; 
  11. void main() { 
  12. double start_x=-1.5; 
  13. double start_y=-1.0; 
  14. double step_x=0.03; 
  15. double step_y=0.1; 
  16. for(int y=0;y<20;y++) { 
  17. String line=""; 
  18. for(int x=0;x<70;x++) { 
  19. Complex c=new Complex(start_x+step_x*x,start_y+step_y*y); 
  20. Complex z=new Complex(0.0, 0.0); 
  21. for(int i=0;i<100;i++) { 
  22. z=z*(z)+c; 
  23. if(z.abs()>2) { 
  24. break; 
  25. line+=z.abs()>2 ? " " : "*"; 
  26. print(line); 

Elixir

2020年编程语言展望

Elixir有一个美好的名字,翻译为中文是"灵丹妙药,长生不老药",它源自于Erlang,改进了语法以及对有更强大的并发人支持。作为一种纯函数式语言,是否可以作为了主流,并长久不衰,长生不老呢?需要我们拭目以待。

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

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

实例:

2020年编程语言展望
  1. defmodule Mandelbrot do 
  2. def set do 
  3. xsize = 59 
  4. ysize = 21 
  5. minIm = -1.0 
  6. maxIm = 1.0 
  7. minRe = -2.0 
  8. maxRe = 1.0 
  9. stepX = (maxRe - minRe) / xsize 
  10. stepY = (maxIm - minIm) / ysize 
  11. Enum.each(0..ysize, fn y -> 
  12. im = minIm + stepY * y 
  13. Enum.map(0..xsize, fn x -> 
  14. re = minRe + stepX * x 
  15. 62 - loop(0, re, im, re, im, re*re+im*im) 
  16. end) |> IO.puts 
  17. defp loop(n, _, _, _, _, _) when n>=30, do: n 
  18. defp loop(n, _, _, _, _, v) when v>4.0, do: n-1 
  19. defp loop(n, re, im, zr, zi, _) do 
  20. a = zr * zr 
  21. b = zi * zi 
  22. loop(n+1, re, im, a-b+re, 2*zr*zi+im, a+b) 
  23. Mandelbrot.set 

Golang

2020年编程语言展望

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

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

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

实例:

2020年编程语言展望
  1. package main 
  2. import ( 
  3. "fmt" 
  4. "image" 
  5. "image/color" 
  6. "image/draw" 
  7. "image/png" 
  8. "math/cmplx" 
  9. const ( 
  10. maxEsc = 100 
  11. rMin = -2. 
  12. rMax = .5 
  13. iMin = -1. 
  14. iMax = 1. 
  15. width = 750 
  16. red = 230 
  17. green = 235 
  18. blue = 255 
  19. func mandelbrot(a complex128) float64 { 
  20. for z := a; cmplx.Abs(z) < 2 && i < maxEsc; i++ { 
  21. z = z*z + a 
  22. return float64(maxEsc-i) / maxEsc 
  23. func main() { 
  24. scale := width / (rMax - rMin) 
  25. height := int(scale * (iMax - iMin)) 
  26. bounds := image.Rect(0, 0, width, height) 
  27. b := image.NewNRGBA(bounds) 
  28. draw.Draw(b, bounds, image.NewUniform(color.Black), image.ZP, draw.Src) 
  29. for x := 0; x < width; x++ { 
  30. for y := 0; y < height; y++ { 
  31. fEsc := mandelbrot(complex( 
  32. float64(x)/scale+rMin, 
  33. float64(y)/scale+iMin)) 
  34. b.Set(x, y, color.NRGBA{uint8(red * fEsc), 
  35. uint8(green * fEsc), uint8(blue * fEsc), 255}) 
  36. f, err := os.Create("mandelbrot.png") 
  37. if err != nil { 
  38. fmt.Println(err) 
  39. return 
  40. if err = png.Encode(f, b); err != nil { 
  41. fmt.Println(err) 
  42. if err = f.Close(); err != nil { 
  43. fmt.Println(err) 

Julia

2020年编程语言展望

Julia是一门强大的数值计算语言。其语法对数学支持非常好,很适合数据科学家编写应用。是取代Python统计分析和数值计算的预备选手之一。

优势:对数学友好。

缺点:要与Python竞争。

实例:

2020年编程语言展望
  1. using Images 
  2. @inline function hsv2rgb(h, s, v) 
  3. const c = v * s 
  4. const x = c * (1 - abs(((h/60) % 2) - 1)) 
  5. const m = v - c 
  6. const r,g,b = 
  7. if h < 60 
  8. (c, x, 0) 
  9. elseif h < 120 
  10. (x, c, 0) 
  11. elseif h < 180 
  12. (0, c, x) 
  13. elseif h < 240 
  14. (0, x, c) 
  15. elseif h < 300 
  16. (x, 0, c) 
  17. (c, 0, x) 
  18. (r + m), (b + m), (g + m) 
  19. function mandelbrot() 
  20. const w, h = 1000, 1000 
  21. const zoom = 0.5 
  22. const moveX = 0 
  23. const moveY = 0 
  24. const img = Array{RGB{Float64}}(h, w) 
  25. const maxIter = 30 
  26. for x in 1:w 
  27. for y in 1:h 
  28. i = maxIter 
  29. const c = Complex( 
  30. (2*x - w) / (w * zoom) + moveX, 
  31. (2*y - h) / (h * zoom) + moveY 
  32. while abs(z) < 2 && (i -= 1) > 0 
  33. z = z^2 + c 
  34. const r,g,b = hsv2rgb(i / maxIter * 360, 1, i / maxIter) 
  35. img[y,x] = RGB{Float64}(r, g, b) 
  36. save("mandelbrot_set.png", img) 
  37. mandelbrot() 

Kotlin

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

2020年编程语言展望

优势:更强大的Java。

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

2020年编程语言展望
  1. import java.awt.Graphics 
  2. import java.awt.image.BufferedImage 
  3. import javax.swing.JFrame 
  4. class Mandelbrot: JFrame("Mandelbrot Set") { 
  5. companion object { 
  6. private const val MAX_ITER = 570 
  7. private const val ZOOM = 150.0 
  8. private val img: BufferedImage 
  9. init { 
  10. setBounds(100, 100, 800, 600) 
  11. isResizable = false 
  12. defaultCloseOperation = EXIT_ON_CLOSE 
  13. img = BufferedImage(width, height, BufferedImage.TYPE_INT_RGB) 
  14. for (y in 0 until height) { 
  15. for (x in 0 until width) { 
  16. var zx = 0.0 
  17. var zy = 0.0 
  18. val cX = (x - 400) / ZOOM 
  19. val cY = (y - 300) / ZOOM 
  20. var iter = MAX_ITER 
  21. while (zx * zx + zy * zy < 4.0 && iter > 0) { 
  22. val tmp = zx * zx - zy * zy + cX 
  23. zy = 2.0 * zx * zy + cY 
  24. zx = tmp 
  25. iter-- 
  26. img.setRGB(x, y, iter or (iter shl 7)) 
  27. override fun paint(g: Graphics) { 
  28. g.drawImage(img, 0, 0, this) 
  29. fun main(args: Array<String>) { 
  30. Mandelbrot().isVisible = true 
2020年编程语言展望

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

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

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

实例:

2020年编程语言展望

Pharo

2020年编程语言展望

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

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

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

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

实例:

2020年编程语言展望
2020年编程语言展望

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

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

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

实例:

2020年编程语言展望

WebAssembly

2020年编程语言展望

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

2020年编程语言展望

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

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

实例:

2020年编程语言展望
  1. request = new XMLHttpRequest(); 
  2. request.open('GET', 'simple.wasm'); 
  3. request.responseType = 'arraybuffer'; 
  4. request.send(); 
  5. request.onload = function() { 
  6. var bytes = request.response; 
  7. WebAssembly.instantiate(bytes, importObject).then(results => { 
  8. results.instance.exports.exported_func(); 

【编辑推荐】

【责任编辑:张燕妮 TEL:(010)68476606】
点赞 1

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK