我让AI列出了一些较为常见的编程语言,要纯编译型的
得到如下
经典编译型语言
名称 主要特点 C 最经典的编译型语言,直接编译为机器码。 C++ 基于C的扩展,同样通过编译器生成原生二进制文件。 Fortran 科学计算领域的老牌语言,编译为高效机器码。 COBOL 商业和金融领域的历史语言,完全编译执行。 Ada 高可靠性系统(如航空航天)的编译型语言。 Pascal/Delphi(Object Pascal) Delphi/free pascal将Object Pascal编译为本地可执行文件。 现代系统级语言
名称 主要特点 Rust 强调内存安全,直接编译为机器码。 Go (Golang) 编译为静态链接的二进制文件,无运行时依赖。 D 结合C/C++特性,直接编译为原生代码。 Zig 注重编译速度和硬实时系统,生成轻量级二进制文件。 Nim 编译为C/C++后再生成机器码,支持跨平台。 函数式与专用领域语言
名称 主要特点 Haskell 虽然支持解释模式(如GHCi),但主流使用编译器(GHC)生成机器码。 Oberon / Modula-2 强调简洁和安全的系统编程语言,完全编译执行。 OCaml 函数式编程语言,适合工业级应用和学术研究 移动与跨平台编译
名称 主要特点 Objective-C 曾是苹果开发的主要语言,面向对象 Swift Apple生态的主力语言,编译为机器码(或LLVM IR)。 Kotlin/Native Kotlin的变体,编译为本地二进制而非JVM字节码。 Scala Native Scala的变体,绕过JVM直接生成机器码。 其他
名称 主要特点 Crystal 语法类似Ruby,但性能接近C语言 Vala 生成C代码后编译为二进制,用于GNOME生态开发。 FreeBASIC 兼容BASIC语法的编译型语言。
以上这些语言,逐个分析
- c/cpp 代码繁琐,手动控制内存,这次本身就不考虑的
- Fortran/ COBOL 过于古老,而且用途领域狭窄,不考虑
- Ada本可以考虑的,已经学习了近半年, 但问了deepseek, 回答是没什么发展前途故放弃
- Pascal/Delphi(Object Pascal) 老牌语言了,最早就是 C与Delphi入的编程邪途. 除非实在没有办法,不然暂时不考虑pascal系
- Rust 语法过于奇特,所有权体系难以掌握. 不考虑
- Go (Golang) 领域狭窄,又是谷歌出的东西(谷歌出品容易放弃), 不考虑
- D 没想过,据说还行,不过与cpp拉不开差距的东西,同一代竞争中失败了,不考虑
- Nim 曾很早就关注它,但现在反而没有兴趣了,不为什么
- Zig 还不成熟,就好像五六年前的nim. 但语法简单(相对而言,在比较新的语言中算简单的), 有C的味道(学习起来比C略难,比rust简单). 可以关注,甚至把它作为C的替代品(目前工具链支持C跨平台编译极好)
- Haskell 听说用的人不少, 也许以后会考虑
- (Oberon / Modula-2) pascal系的、偏学术,在C/CPP时代竞争失败,不考虑
- OCaml 函数式编程语言,适合工业级应用和学术研究. 也许以后会考虑
- Objective-C 曾是苹果开发的主要语言,面向对象. 苹果抛弃了它,没有前途,不考虑
- Swift Apple生态的主力语言,编译为机器码(或LLVM IR). 生态小,在苹果以外的平台上竞争力较小, 不考虑
- Kotlin/Native Kotlin编译为本地二进制而非JVM字节码。 看着好,听说问题一大堆,不考虑
- Scala Native Scala的变体,绕过JVM直接生成机器码。 看着好,听说问题一大堆,不考虑
- Crystal 语法类似Ruby,但性能接近C语言. 暂时怕了, 不想再学了
- Vala 与GTK生态紧密相联,这次重点考虑它的替代品
- FreeBASIC BASIC系的,不考虑,语法过于古老,功能也较少,生态也小
编译语言也就这么些,这里已经包含了一些上古、冷门的编译语言。说起来,编译语言要适合应用(非操作系统、非功能库、业务相关处理-往往是客户打交道)开发的语言一定要有GC和庞大的标准库.说起来虚拟机语言java/c#也适合这个定义.
而为速度而生的语言(C/CPP/Zig/Rust) 几乎都没有GC, 开发起应用类型的软件真的需要很多的积累
那么对于我而言,
系统级开发语言. 纯速度型,数量极少可供选择. 选择zig/c
- Pascal/Modula-2 - 性能较弱(Pascal作为中间型语言还可以). 不考虑
- rust - 性能没问题,学习难度过高. 不考虑
- cpp - 性能没问题,学习难度过高(过程式、面对对象式、函数式、...等等混在一起,功能过多,没有良好设计,叠床架屋). 不考虑
- zig/c - 语言本身简单(C称得上极简单), 用起来靠程序员水平,拼算法拼设计 写的好牛逼写的不好傻逼, 反正不拼快速开发.
- 快速开发型(容易写容易跑),选perl/python
还有ruby/php/js可选,反正性能也就那么回事,快一点慢一点没有质的区别. 纯看喜好 中间型,速度相对快+相对容易编 的语言就比较难选了。
大部分是编译型语言也有一些奇葩(比如 julia), 带GC 带功能丰富的标准库(或生态较丰富)的语言. 这个层次的语言不要求速度最快(只要比perl/python快100%就行), 主要看中使用方便、并且有特长.- vala gtk生态的一员。
- julia的gtk、图表、数值计算、语法、协程 算是优点,相对vala也是优点(缺点就是编译很慢很慢,不如不编译). 比ocaml/haskell速度都要快一些
- ocaml 据说华尔街某大公司(Jane Street)作为主力在用
- haskell 金融机构用得多
- crystal 如上所述,虽然各方面都不错, 暂时不考虑
从应用领域来看
分为以下几大类
其中除数据展示之外,其余类型应用都没有必须使用GUI的理由。可以采用TUI/WUI(WebUI - 使用浏览器)/WebViweUI(如tarui、electrion)。
名词定义
- 本地应用指:在一台计算机上运行程序但不接受网络请求的应用方式. 一般来说本地应用对性能的要求不太严苛
- 小规模网络应用:指可以接受网络请求、但并发数较少的应用。内部RPC/本机RPC也属于这类
- 大规模网络应用:指可以接受网络请求、但并发数高(极高)的应用
下面表格由于 markdown表格的原因,并非一行对应一行 排列,第一列为空白的行说明与上一行应在同一格
应用领域 | 应用场景 | 本地应用 | 小规模网络应用 | 大规模网络应用 |
---|---|---|---|---|
数据收集、转换 | - 本地文件 | 1. 快速开发型语言 | 查看[对接外部系统/从外部系统获取数据] | 查看[对接外部系统/从外部系统获取数据] |
- 网络网页 | 2. 中间型语言 | |||
- 读取、转换、写入、装载 数据操作.常常操作数据库 | ||||
- 外部API(json-rpc/rest)获取数据 | ||||
工具软件 | - 文件管理 | 1. 快速开发型语言 | 查看[对接外部系统/从外部系统获取数据] | 查看[对接外部系统/从外部系统获取数据] |
- 数据同步 | 2. 其次中间型语言 | |||
- 调用、组合外部工具 | 3. 最后系统级语言 | |||
数据计算 | - 数学计算(不包含一般的数据清洗 | 专门的中间型语言 | 任意提供网络服务的 | 同小规模网络应用, 但可以组合提供网络服 |
合并 整理) | 专门中间型语言 | 务的语言 + 专门的中间型语言 | ||
- 推导、证明 | ||||
数据展示 | 图表 | 1. 快速开发型语言 | 提供网络服务功能的快速开发语言 | 同小规模网络应用, 视情况选择网络性能更 |
2. 中间型语言 | 强大的语言 | |||
(后台/应用)管理 | 持续运行的应用(可以是本地应用也可以 | 1. 快速开发型语言 | 参见[对外客户服务/接受请求]小规模网络应用 | 参见[对外客户服务/接受请求]大规模网络应用 |
是网络应用), 修改其运行状态、改变其 | 2. 中间型语言 | |||
配置内容 | ||||
对接外部系统 | - 为外部系统服务(接受请求) | 1. 快速开发语言 | 网络功能特化的语言(java/golang/...) | |
- 从外部系统获取数据 | 2. 中间型语言 | |||
- 向外部系统推送数据 | ||||
- 同时处理以上类型 | ||||
对外客户服务 | 以人为最终用户(操作GUI/WUI/WVUI) | 1. 快速开发语言 | 网络功能特化的语言(java/golang/...) | |
2. 中间型语言 | ||||
- 接受请求,返回数据 | ||||
- 推送数据 | ||||
链接库 | - 动态库 | 1. 系统级开发语言 | ||
- 静态库 | 2. 其次中间型语言 |
以现选中语言视角对以上再做整理
语言 | 适合应用领域 |
---|---|
python | 数据收集、工具软件、简单的数据计算、应用后台管理、对接外部系统、对外客户服务,数据展示 |
perl | 数据收集、工具软件、简单的数据计算、应用后台管理、对接外部系统、对外客户服务 |
haskell | 科学计算、工具软件、对接外部系统、应用后台管理、对外客户服务、区块链、数据展示? |
ocaml | 科学计算、工具软件、对接外部系统、应用后台管理、对外客户服务、区块链、数据展示? |
julia | 科学计算、数据展示、GUI |
zig | 工具软件、链接库 |
vala | GObject生态、GUI |
如果不用GUI,那么vala与julia的价值大大下降。如果haskell、ocaml的数据展示功能不行的话,julia还有一席之地
Ada就特殊了,没有极限性能(性能要比C弱一点,最好也就是C语言一般性能)也没有丰富庞大的标准库(有的只是与C一样可怜的最小库), 孱弱的生态. 属于系统级语言 中间型语言中什么都不沾边, 这么一分析它真的竞争力低下(虽然设计的很好,有点超越时代了,但错过了就是错过了)
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。