温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

Python和JavaScript 2020年你认为那个走的更远

发布时间:2021-09-30 17:14:09 来源:亿速云 阅读:180 作者:柒染 栏目:编程语言

本篇文章为大家展示了Python和JavaScript 2020年你认为那个走的更远,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。

Python 和 JavaScript 是目前最火的两大编程语言,但是 2020 年,什么编程语言将会取而代之呢?

以下为译文:

Python 和 JavaScript  是目前最火的两大编程语言。然而,他们不可能永远屹立不倒。最终,必将像其他编程语言一样跌下神坛。这很可能在接下来的十年左右上演。

那么什么编程语言将会取而代之呢? 下面给出我的候选者名单!

Dart

Python和JavaScript 2020年你认为那个走的更远

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

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

  • 主要缺点:不得不面对 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

Python和JavaScript 2020年你认为那个走的更远

Elixir 是基于一种基于 Erlang 虚拟机的函数式编程语言,对并发的支持非常好。作为一个纯粹的函数式编程语言,它有望将这种范式变为主流。

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

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

曼德布洛特集样本:

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)  endend Mandelbrot.set

Golang

Python和JavaScript 2020年你认为那个走的更远

得益于其闪电般的编译速度、简单和高效的并发支持,另外一个谷歌受支持的编程语言 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

Python和JavaScript 2020年你认为那个走的更远

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

Python和JavaScript 2020年你认为那个走的更远

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

  • 核心优势:比 Java 更强大。

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

曼德布洛特集样本:

import java.awt.Graphicsimport java.awt.image.BufferedImageimport 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

Python和JavaScript 2020年你认为那个走的更远
  • 核心优势: Lua 是一种小巧、简单、快速、可嵌入、可移植和灵活的编程语言。

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

曼德布洛特集样本:

local maxIterations = 250local minX, maxX, minY, maxY = -2.5, 2.5, -2.5, 2.5local miX, mxX, miY, mxYfunction remap( x, t1, t2, s1, s2 )     local f = ( x - t1 ) / ( t2 - t1 )    local g = f * ( s2 - s1 ) + s1     return g;endfunction drawMandelbrot()    local pts, a, as, za, b, bs, zb, cnt, clr = {}    for j = 0, hei - 1 do         for i = 0, wid - 1 do             a = remap( i, 0, wid, minX, maxX )            b = remap( j, 0, hei, minY, maxY )            cnt = 0; za = a; zb = b            while( cnt < maxIterations ) do                 as = a * a - b * b; bs = 2 * a * b                 a = za + as; b = zb + bs                 if math.abs( a ) + math.abs( b ) > 16 then break end                cnt = cnt + 1             end            if cnt == maxIterations then clr = 0            else clr = remap( cnt, 0, maxIterations, 0, 255 )             end            pts[1] = { i, j, clr, clr, 0, 255 }            love.graphics.points( pts )         end    endendfunction startFractal()    love.graphics.setCanvas( canvas ); love.graphics.clear()     love.graphics.setColor( 255, 255, 255 )    drawMandelbrot(); love.graphics.setCanvas()endfunction love.load()     wid, hei = love.graphics.getWidth(), love.graphics.getHeight()    canvas = love.graphics.newCanvas( wid, hei )    startFractal()endfunction love.mousepressed( x, y, button, istouch )    if button ==  1 then         startDrag = true; miX = x; miY = y    else        minX = -2.5; maxX = 2.5; minY = minX; maxY = maxX         startFractal()        startDrag = false    endendfunction love.mousereleased( x, y, button, istouch )     if startDrag then        local l         if x > miX then mxX = x        else l = x; mxX = miX; miX = l        end        if y > miY then mxY = y         else l = y; mxY = miY; miY = l        end         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 = mxX; minY = miY; maxY = mxY        startFractal()    endendfunction love.draw()    love.graphics.draw( canvas )end

Pharo

Python和JavaScript 2020年你认为那个走的更远

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

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

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

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

分形树样本:

Object subclass: #FractalTree    instanceVariableNames: ''    classVariableNames: ''    poolDictionaries: ''    category:  'RosettaCode'"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.        ]    ].draw     Display restoreAfter: [        Display fillWhite.               self tree: 700@700 length: 200 angle: 0.    ]"Execute"FractalTree new draw.

Rust

Python和JavaScript 2020年你认为那个走的更远

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

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

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

曼德布洛特集样本:

extern crate image;extern crate num_complex; 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 ImgBuf    let mut  imgbuf = image::ImageBuffer::new(img_side, img_side);     // Calculate for each pixel    for (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 image    let fout = &mut File::create("fractal.png").unwrap();     image::ImageLuma8(imgbuf).save(fout, image::PNG).unwrap();}

TypeScript

Python和JavaScript 2020年你认为那个走的更远

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

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

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

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

分形树样本:

// Set up canvas for drawingvar canvas: HTMLCanvasElement =  document.createElement('canvas')canvas.width = 600canvas.height =  500document.body.appendChild(canvas)var ctx:  CanvasRenderingContext2D = canvas.getContext('2d')ctx.fillStyle =  '#000'ctx.lineWidth = 1 // 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.beginPath()drawTree(300, 500, -90,  totalDepth)ctx.closePath()ctx.stroke()

WebAssembly

Python和JavaScript 2020年你认为那个走的更远

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

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

上述内容就是Python和JavaScript 2020年你认为那个走的更远,你们学到知识或技能了吗?如果还想学到更多技能或者丰富自己的知识储备,欢迎关注亿速云行业资讯频道。

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI