【译文】我的懒惰而轻率的编程语言分类

有时,我也会像其他人一样,在一个电脑爱好者在线社区里发帖。在轻描淡写地谈论编程语言时,有时可以根据语言的表面或非表面特征将它们归为一类。这是从关于 Perl、PHP、Python、JavaScript 和 Ruby 等 “P 语言 “的共同特征的笑话开始的,但你也可以对其他语言进行分类。

这种分类并不代表最终的结论,也不能被不加批判地接受。在这里,我主要是想让它从我的脑海中消失,如果它能引发一场对话,那也不错。

P 语言

Perl、PHP、Python、Ruby、Javascript(最后两个有一个荣誉的 “P”)都是收集垃圾的 “脚本 ” 语言,让你在网络环境中快速完成任务。它们往往从一开始就很合理,但在边缘处却变得特立独行。很多时候,大量的标准库都是对 C 标准库、系统调用或其他平台库的封装。

C 语言

一位智者曾说过:”C++ 规范是编译器供应商的监管俘虏”。由于 “未定义行为 undefined behavior “做了大量荒谬的事情(比如从一个无限循环的结尾跑到下一个函数中),C 语言开发人员为了节省时间,把它缩写为 “UB”,同时威胁你说,他们可能会把你程序的结构部分也变成 UB。

此外,C 语言还有很多名字很好听的标准库函数,如 printfstrcpygets,它们可以控制你的程序计数器和内存的任意输入。有一些函数取代或淘汰了这些函数,但那些老掉牙的函数却不得不永远存在。例如,C++ 增加了访问 std::vector std::array 的安全方法,但为了不破坏大家都在使用的不安全版本,将它们命名为 at 而不是 operator[]

J 语言

Java 和 C#,这些语言都有单独的编译步骤,编译成非本地字节码,需要某种单独的可执行文件才能运行。它们都信奉 “名词王国 “的 “面向对象 “理念,倾向于在代码库中使用大量的固定模式,因此很难找到真正执行任务的代码。他们还都非常喜欢 UTF-16。

SQL

SQL

G 语言

Golang、Rust、Crystal(我的最爱),这些语言在追求 J 语言安全性的同时,也像 C 语言一样以本地字节码为目标,并愿意对 C 语言和 J 语言的语法进行修改(即使 Rust 和 Crystal 不会对类型系统进行大幅修改)。

R 语言

Erlang 和 Elixir 是其中的佼佼者。它们具有 J 语言编译为字节码的步骤,但不是在对象上调用方法,而是在轻量级进程中传递消息,而且还可以使用函数式编程的东西。Elixir 非常努力地为 P 语言人员提供了通往这些语言的匝道,但它的边缘并不那么 “idiosyncratic”,而是一种全新的东西。

F 语言

Haskell、Ocaml 和其他语言,在这些语言中,概念的名称类似于 “applicative functor”,变量的名称类似于 v m

结论

计算机

本文文字及图片出自 A lazy and flippant classification of programming languages

你也许感兴趣的:

共有 1 条讨论

  1. 这种分类并不代表最终的结论,也不能被不加批判地接受。

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注