百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 编程字典 > 正文

2020 年,大火的 Python 和 JavaScript 是否会被取而代之

toyiye 2024-06-21 11:56 9 浏览 0 评论

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

作者 | Richard Kenneth Eng

译者 | 明明如月,责编 | 郭芮

以下为译文:

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

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

Dart

多亏了 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

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)
end
end

Mandelbrot.set

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 编程语言,谷歌已经将其打造成 Android 开发的首选语言。

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

  • 主要缺点:Kotlin 非常庞大,甚至比 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 是一种小巧、简单、快速、可嵌入、可移植和灵活的编程语言。

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

曼德布洛特集样本:

local maxIterations = 250

local minX, maxX, minY, maxY = -2.5, 2.5, -2.5, 2.5

local miX, mxX, miY, mxY

function remap( x, t1, t2, s1, s2 )

local f = ( x - t1 ) / ( t2 - t1 )

local g = f * ( s2 - s1 ) + s1

return g;

end

function 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

end

end

function startFractal

love.graphics.setCanvas( canvas ); love.graphics.clear

love.graphics.setColor( 255, 255, 255 )

drawMandelbrot; love.graphics.setCanvas

end

function love.load

wid, hei = love.graphics.getWidth, love.graphics.getHeight

canvas = love.graphics.newCanvas( wid, hei )

startFractal

end

function 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

end

end

function 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

end

end

function love.draw

love.graphics.draw( canvas )

end

Pharo

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

由于内存安全特性——借用检查器,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

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

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

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

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

分形树样本:

// Set up canvas for drawing
var canvas: HTMLCanvasElement = document.createElement('canvas')
canvas.width = 600
canvas.height = 500
document.body.appendChild(canvas)
var ctx: CanvasRenderingContext2D = canvas.getContext('2d')
ctx.fillStyle = '#000'
ctx.lineWidth = 1

// constants
const degToRad: number = Math.PI / 180.0
const 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 tree
ctx.beginPath
drawTree(300, 500, -90, totalDepth)
ctx.closePath
ctx.stroke

WebAssembly

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

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

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

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

本文为 CSDN 翻译,转载请注明来源出处。

只十分钟,唾手可得的工作机会就被我搞砸了!

Rust 入坑指南:鳞次栉比 | CSDN 博文精选

相关推荐

为何越来越多的编程语言使用JSON(为什么编程)

JSON是JavascriptObjectNotation的缩写,意思是Javascript对象表示法,是一种易于人类阅读和对编程友好的文本数据传递方法,是JavaScript语言规范定义的一个子...

何时在数据库中使用 JSON(数据库用json格式存储)

在本文中,您将了解何时应考虑将JSON数据类型添加到表中以及何时应避免使用它们。每天?分享?最新?软件?开发?,Devops,敏捷?,测试?以及?项目?管理?最新?,最热门?的?文章?,每天?花?...

MySQL 从零开始:05 数据类型(mysql数据类型有哪些,并举例)

前面的讲解中已经接触到了表的创建,表的创建是对字段的声明,比如:上述语句声明了字段的名称、类型、所占空间、默认值和是否可以为空等信息。其中的int、varchar、char和decimal都...

JSON对象花样进阶(json格式对象)

一、引言在现代Web开发中,JSON(JavaScriptObjectNotation)已经成为数据交换的标准格式。无论是从前端向后端发送数据,还是从后端接收数据,JSON都是不可或缺的一部分。...

深入理解 JSON 和 Form-data(json和formdata提交区别)

在讨论现代网络开发与API设计的语境下,理解客户端和服务器间如何有效且可靠地交换数据变得尤为关键。这里,特别值得关注的是两种主流数据格式:...

JSON 语法(json 语法 priority)

JSON语法是JavaScript语法的子集。JSON语法规则JSON语法是JavaScript对象表示法语法的子集。数据在名称/值对中数据由逗号分隔花括号保存对象方括号保存数组JS...

JSON语法详解(json的语法规则)

JSON语法规则JSON语法是JavaScript对象表示法语法的子集。数据在名称/值对中数据由逗号分隔大括号保存对象中括号保存数组注意:json的key是字符串,且必须是双引号,不能是单引号...

MySQL JSON数据类型操作(mysql的json)

概述mysql自5.7.8版本开始,就支持了json结构的数据存储和查询,这表明了mysql也在不断的学习和增加nosql数据库的有点。但mysql毕竟是关系型数据库,在处理json这种非结构化的数据...

JSON的数据模式(json数据格式示例)

像XML模式一样,JSON数据格式也有Schema,这是一个基于JSON格式的规范。JSON模式也以JSON格式编写。它用于验证JSON数据。JSON模式示例以下代码显示了基本的JSON模式。{"...

前端学习——JSON格式详解(后端json格式)

JSON(JavaScriptObjectNotation)是一种轻量级的数据交换格式。易于人阅读和编写。同时也易于机器解析和生成。它基于JavaScriptProgrammingLa...

什么是 JSON:详解 JSON 及其优势(什么叫json)

现在程序员还有谁不知道JSON吗?无论对于前端还是后端,JSON都是一种常见的数据格式。那么JSON到底是什么呢?JSON的定义...

PostgreSQL JSON 类型:处理结构化数据

PostgreSQL提供JSON类型,以存储结构化数据。JSON是一种开放的数据格式,可用于存储各种类型的值。什么是JSON类型?JSON类型表示JSON(JavaScriptO...

JavaScript:JSON、三种包装类(javascript 包)

JOSN:我们希望可以将一个对象在不同的语言中进行传递,以达到通信的目的,最佳方式就是将一个对象转换为字符串的形式JSON(JavaScriptObjectNotation)-JS的对象表示法...

Python数据分析 只要1分钟 教你玩转JSON 全程干货

Json简介:Json,全名JavaScriptObjectNotation,JSON(JavaScriptObjectNotation(记号、标记))是一种轻量级的数据交换格式。它基于J...

比较一下JSON与XML两种数据格式?(json和xml哪个好)

JSON(JavaScriptObjectNotation)和XML(eXtensibleMarkupLanguage)是在日常开发中比较常用的两种数据格式,它们主要的作用就是用来进行数据的传...

取消回复欢迎 发表评论:

请填写验证码