Uploaded avatar of ErikSchierboom

应用八月到啦!

@ErikSchierboom
大约3年前
视频

简介

大家好,欢迎。希望大家一切都好。 希望你们在 Jurasic July 期间,在探索一些历史悠久、影响深远的语言时玩得开心。 现在来到 2023 年的第 8 个月,也是我们的第 7 个主题月:Appy August。

我们说的 app 指的是什么?

它可以指很多东西:

  • Web 应用,如今我们很多人日常工作的基本盘
  • 原生 app,比如运行在手机或平板上的那些
  • 直接运行在 Windows、Mac 或 Linux 操作系统上的桌面 app
  • 特定领域的应用
  • 商业应用
  • 还有更多!

那么有哪些语言呢?

我们这次要看足足 14 门语言:ABAP、CoffeeScript、Dart、Delphi、Elm、Java、JavaScript、Kotlin、Objective-C、PHP、PureScript、ReasonML、Swift 和 TypeScript。

徽章

本月在其中任意一门语言里完成 5 个练习,即可获得徽章。 至于全年徽章,你需要完成:

  • 变位词:给定一个单词和一组可能的变位词,找出它的变位词
  • 电话号码:清理一个电话号码
  • 三角形:对三角形进行分类
  • RNA 转录:把一段 DNA 序列转换为其 RNA 互补链
  • Scrabble 得分:给定一个单词,算出它的 Scrabble 得分

概览

ABAP

  • 由 SAP SE 在 20 世纪 80 年代开发;只要看看这个缩写原本代表什么,就能明白它的设计目标:Allgemeiner Berichts-Aufbereitungs-Prozessor,这是德语,意思是“通用报表处理处理器”。后来 ABAP 变得更为通用,缩写也更新为 Advanced Business Application Programming 以反映这一点
  • 强类型、静态类型语言
  • 多范式:支持命令式和面向对象编程
  • 编译为字节码。有意思的是,源代码存储在数据库里
  • 所有代码都在 SAP 系统的环境中运行,该系统由一个关系型数据库和一个或多个应用服务器组成
  • 专有技术、闭源,不过我们的一位维护者做了一个很棒的开源重新实现
  • 用于商业应用,比如财务、物料管理、会计和管理。客户遍布全球,包括 Apple、Amazon、Walmart 等众多大公司

它为什么出色

  • 不断演进,新功能定期加入
  • 可靠:功能稳定,背后有几十年的经验积累
  • 标准库庞大

突出特性

  • 与 SAP 系统和数据库无缝集成,也能与许多其他系统集成
  • ABAP Dictionary 包含 SAP 系统中数据的全部元数据,包括表、视图和结构。其中的类型可用于给变量做静态类型标注,即使类型是一张表也可以
  • ABAP Workbench 是 ABAP 系统的一部分,包含一整套用于编辑程序的工具,还包括屏幕设计

CoffeeScript

  • 这门语言最早在 2009 年由 Jeremy Ashkenas 提交了第一批 commit,第一条提交信息写的是“神秘语言的首个提交”。
  • 动态类型、多范式(面向对象、命令式、函数式、原型式)
  • 编译为 JavaScript(即所谓的_转译_)。CoffeeScript 的黄金法则是:“它就是 JavaScript。” 它是最早一批成功“转译到 JS”的语言之一
  • 它流行起来,是因为当时用 JS 的人头疼的一些问题,CoffeeScript 没有(比如 “this” 绑定行为不同,或者不支持类)。从 3.1 版起被纳入 Ruby on Rails。
  • 2017 年,这门语言发布了 2.0 版,目标是让它与最新的 JavaScript 标准接轨。此后大约每年更新一次。
  • 其编译器最初用 Ruby 编写,2010 年被一个用 CoffeeScript 编写的自举编译器取代(该编译器不依赖 NodeJS,可以直接在浏览器中运行)
  • CoffeeScript 很有影响力,它促使 JavaScript 采纳了某些特性(lambda 箭头语法、类)
  • 曾经被 Dropbox 使用,也用在 Rails 中

它为什么出色

  • 受 Python、Ruby 和 Haskell 启发,语法简洁干净。比 JavaScript 更精简,省去了大量圆括号和大括号,部分原因在于它使用有意义的缩进(空白很重要)
  • 语义简化,比如不会有 let、var、const 的困惑,因为它们根本不存在;== 会被转译为 ===(严格相等),函数绑定也避免了常见的 “this” 错误
  • 基于表达式,也就是说你可以把 if 表达式的结果赋给一个变量
  • 大量语法糖,比如用 @ 代替 this,可以用 yes/on 代替 true,用 // 做整除,还能用 @ 代替 this 等等

突出特性

  • 编译出的 JavaScript 干净、可读,源码与生成的代码一一对应。
  • 与 JavaScript 互操作性极佳:你可以轻松地在 CoffeeScript 里使用 JS 写的代码(反过来也一样)。可以用任何现成的 JS 库
  • 增添了 JavaScript 中缺失或曾经缺失的特性:列表推导、字符串插值、存在运算符(?)、链式比较
  • 语言小巧,编译器约 500 kb(压缩后 100 kb)

Dart

  • 由 Google 的 Lars Bak 和 Kasper Lund 设计
  • 2011 年首次发布
  • 目标是创造一门快速、高效、特别适合构建 UI 的语言
  • 静态类型
  • 多范式:以面向对象为主,也支持函数式和命令式
  • 可以被解释执行,也可以即时编译
  • 主要用于构建 app,也能用来构建后端

它为什么出色

  • 语法熟悉,容易上手
  • 现代类型系统:类型推断、模式匹配、async/await
  • 出色的文档
  • 通过健全的空安全系统保证安全性:不再有空指针异常
  • 工具支持良好,支持多种 IDE。为短反馈循环而优化,比如通过快速热重载
  • 生态不断壮大,有大量可用的库

突出特性

  • 可以编译为 JS、原生代码,也能编译为 Swift 和 Kotlin,非常适合移动 app。
  • Flutter 库可用于快速构建移动、Web、桌面或嵌入式 app。一次编写,多平台运行
  • 出色的并发支持,包括 async/await、isolate(轻量级并发运行构件)、future 等

Delphi

  • Delphi 由 Borland 开发,1995 年发布。
  • 它是一门 Object Pascal 编程语言,由 Anders Hejlsberg 开发,他也是 C# 的首席架构师之一
  • 强类型、静态类型
  • 编译为原生代码
  • 多范式:以面向对象为主,也支持命令式、声明式和事件驱动
  • 用于商业应用、图形界面,以及学校(教授编程)

它为什么出色

  • 容易学习。Object Pascal 把 Pascal 的简洁清晰与面向对象编程特性结合起来,让代码更易编写和维护
  • 集成开发环境(IDE):Delphi IDE 提供友好且功能丰富的环境,简化了开发流程。它提供代码导航、调试工具、代码补全等效率特性,让开发更高效。
  • 稳定:自 20 世纪 90 年代初问世以来,一直是可靠稳定的开发工具和语言,包括强大的向下兼容性。用早期版本 Delphi 编写的代码,只需极小调整就能在新版本中编译运行。
  • 跨平台支持:Delphi 的能力已扩展到 Windows 之外,提供跨平台开发支持,让开发者可以面向 macOS、iOS、Android 等多个操作系统。这能面向更广的用户群开发应用,也扩大了项目的覆盖范围。
  • 强大的社区与支持:Delphi 有一个专注而活跃的开发者社区,为生态贡献库、工具和资源。

突出特性

  • 高性能可执行文件:Delphi 应用以速度与性能著称。Delphi 编译器生成高度优化的原生可执行文件,这对某些类型的应用至关重要,比如需要实时处理或大量计算的任务。
  • 快速应用开发(RAD)环境:可视化拖拽式设计工具让开发者能轻松创建用户界面并将其与功能连接起来,加快开发流程。
  • 基于组件的架构:依赖基于组件的架构,用可复用的组件来构建应用。这让代码更易复用,也缩短了开发时间。
  • 事件处理:Delphi 使用内置事件模型,让开发者能轻松响应用户操作和其他事件。事件处理简化了捕获用户输入或系统事件并做出恰当响应的过程。
  • 数据库连接:Delphi 提供原生数据库访问组件,可与各种数据库系统无缝集成。这一内置支持简化了由数据库驱动的应用开发。

Elm

  • 这门语言由 Evan Czaplicki 为他的本科毕业论文创建,2012 年发布
  • 最初研究的是面向 GUI 的函数响应式编程(FRP,即带信号的 FRP),但 2017 年放弃了 FRP,转而采用 TEA(The Elm Architecture,Elm 架构)
  • 静态强类型的函数式语言
  • 语法受 Haskell 启发
  • 开源语言,但很有主见;其开发方式是 Evan 先进行长时间的深度工作,之后才公开。所以 PR 可能很久都不合并,项目看起来像是停滞了,但这只是 Evan 的工作风格。
  • 用于网站,比如 NoRedInk、Vendr、Rakuten、Brilliant

它为什么出色

  • 这是一门非常小的语言,是 ML 系静态类型函数式语言中最容易上手的之一。这一点几乎让它很适合用来教函数式编程。
  • 它的编译器错误信息是你见过最友好、最有帮助的。
  • 语言稳定:最近一次发布是在 2019 年
  • 生态中的包不多,但质量很高。
  • 强大的 lint 生态,有 elm-review(为 Exercism 的 Elm 赛道分析器提供支持)。

突出特性

  • The Elm Architecture(TEA)贯穿所有 Elm app,因此审查陌生的 Elm 应用非常容易。
  • 没有运行时异常!只有极少数情况例外。
  • 更新依赖不会破坏代码,语义化版本由编译器强制执行。
  • 只要能编译通过,它就能正常工作(逻辑错误除外)。一旦你习惯了它,就很难再回到其他语言。
    • Matthew Griffith 的 “elm-ui” 让样式和布局也能做到“编译通过就能用”,你不需要写 CSS。
  • 全栈 Web 应用:Lamdera 是一个衍生项目,用 Elm 构建全栈 Web 应用,前端和后端之间无需任何胶水代码。

Java

  • 由 Sun Microsystems 的 James Gosling 开发,1995 年发布。
  • 最初的五个目标:
    • 简单、面向对象、易于熟悉。
    • 健壮、安全。
    • 体系结构中立、可移植。
    • 高性能。
    • 可解释、多线程、动态。
  • 强类型、静态类型
  • 编译为字节码(原生编译正在开发中)
  • 多范式:命令式、面向对象和函数式
  • 这门语言和虚拟机都有官方规范,因此也有多种实现(比如 OpenJDK JVM 和 Oracle 的 Hotspot VM)
  • 用于大量软件,从网站到嵌入式系统,从 app 到数据库

它为什么出色

  • (几乎)到处都能运行(Java 更新程序会很乐意提醒你 ;))
  • 通用:几乎可用于任何工作负载,包括 app、网站和嵌入式系统
  • 与其他 JVM 语言(如 Kotlin、Groovy、Scala 和 Clojure)互操作
  • 工具支持出色,无论 IDE 还是构建系统等其他工具

突出特性

  • JVM 是一个成熟、稳定、高性能的虚拟机,并且一直在改进
  • 庞大的生态,可用库数量极多。这些库和 Java 一样成熟、稳定、功能齐全
  • 持续演进:语言和运行时仍在发展,语言定期更新以更现代化并回应用户的抱怨(比如减少样板代码和冗长写法)。运行时方面,也不断启动新项目来进一步演进运行时(比如 project loom 提供轻量级并发构件,以及通过 GraalVM 实现原生编译)

JavaScript

  • 1995 年 Brendan Eich 受雇于 Netscape,要提供一门让网页变得动态的语言。众所周知,第一个原型只用了 10 天就做出来
  • 1997 年标准化为 ECMAScript
  • 动态、弱类型
  • 过去只能解释执行,如今常常采用即时编译
  • 多范式:原型式(相当罕见),也有面向对象、命令式和函数式
  • 对造就今天成功的 Web 影响巨大。比如 AJAX 对添加交互性很有帮助。它是 Web 开发事实上的标准,因为它是唯一被浏览器内建支持的编程语言
  • 可能是如今使用最广的语言
  • 用于后端、前端、脚本和命令行工具

它为什么出色

  • 通用:可用于许多工作负载:后端、前端、脚本、命令行工具。许多用于 Web 的工具都是用 JavaScript 写的(并运行在 nodejs 上)
  • 运行时(如 V8)经过高度优化,性能可以非常高,尽管这门语言高度动态
  • 语言相对小巧,因而相对容易学习。能在浏览器里运行更是加分,因为学习过程中能得到可视化反馈
  • 规范频繁更新,不断引入新特性,比如 async/await、字符串插值。工具方面也很活跃,deno、esbuild 和 bun.js 等新工具相继出现,帮助处理 JavaScript 代码库
  • JSON 支持一流,JSON 的全称就是 JavaScript Object Notation 便是明证
  • 设计上很适合事件驱动、非阻塞的代码

突出特性

  • 庞大的生态。可用库数量极多(2022 年 9 月有 210 万个包),而且还有很多编译到 JavaScript 的其他语言
  • 能在大多数平台和硬件上运行,从 Windows 到 Apple,从树莓派到手机,从 Web 服务器到无服务器平台。Web 浏览器内建原生支持,所以无需安装运行时。
  • 非常适合 Web 开发,有众多框架可选(React、Vue、Angular),也有大量帮助构建 Web 应用的工具(比如 eslint、parcel)
  • 可以同构使用,也就是同一门语言(和代码库)既能用于后端也能用于前端。这让维护更容易,也允许前端和后端之间复用代码
  • 极高的流行度意味着:有大量学习资源(视频、博客、课程),以及庞大的社区可以交流

Kotlin

  • 由 JetBrains 于 2010 年开发,这家公司以其 IDE 闻名(比如 IntelliJ、CLion、GoLand 和 Rider)
  • JetBrains 的大部分产品都是用 Java 写的,但他们想要一门能减少样板代码、加快开发速度并支持他们缺失的一些特性的 JVM 语言。Scala 有这些特性,但编译太慢。于是 Project Kotlin 启动了。
  • 强类型、静态类型
  • 多范式:命令式、面向对象、函数式、声明式
  • 默认编译为 JVM 字节码,但也能编译为 JS 和原生代码(对无法或不便使用虚拟机的平台很有用,比如 iOS 设备)
  • 2019 年被 Google 指定为编写 Android app 的首选语言
  • 用于构建网站、app(主要是 Android),甚至整个 IDE(就是前面提到的那些 IDE)

它为什么出色

  • 通用:几乎可用于任何工作负载,包括 app 和网站。2019 年 Google 认定 Kotlin 是开发 Android app 的首选语言
  • 运行在 JVM 上,因此享有它的全部好处:成熟、高性能的虚拟机,以及数量庞大的可用库
  • 缓解了人们对 Java 的许多不满,比如受检异常、空安全和冗长
  • 现代语言:高级类型推断、基于表达式、不可变性、模式匹配、协程、通道
  • 工具支持出色(毕竟它的 IDE 本身就是用这门语言写的 :)

突出特性

  • 高效:Kotlin 吸收其他语言最优秀的部分,融为一门一致而高效的语言,某些情况下甚至比原版更进一步(比如局部扩展方法)
  • 协程:在许多语言中,async/await 是内建在语言里的,而在 Kotlin 中它是借助语言的协程特性以库的形式实现的。协程是一种处理挂起函数的方式,相比 future 和 promise,它为异步操作提供了更安全、更不易出错的抽象。
  • 出色的并发:async/await、通道、不可变性都有助于实现优秀的并发
  • Compose multiplatform 让你能用同一套代码库、以声明式语法构建共享 UI

Objective-C

  • 最初由 Brad Cox 和 Tom Love 在 20 世纪 80 年代初开发,被 NeXT 选中用于其 NeXTSTEP 操作系统。由于 Apple 的 macOS 直接承袭自 NeXTSTEP,它成了 Apple 软件的首选语言
  • 设计目标是把 SmallTalk 的面向对象思想与 C 结合,以消息传递作为核心的面向对象构件
  • 是 C 的超集,所以任何 C 代码都是合法的 Objective-C 代码,两者可以在同一个代码库中结合使用
  • 静态类型与动态类型
  • 编译型
  • 在 2014 年 Swift 出现之前,一直是编写 macOS 和 iOS 应用的标准语言
  • 用于 macOS 和 iOS app

它为什么出色

  • C 与面向对象特性的融合可以非常强大
  • 运行时轻量,资源效率高
  • 轻量的类语法
  • 快速枚举让 for 循环比 C 更容易写
  • 强大的向下兼容性

突出特性

  • 支持自动引用计数(ARC),当对象不再被引用时自动释放内存,让内存管理更容易
  • 动态运行时支持方法交换(method swizzling,动态改变某个 selector 的行为,类似 monkey patching)、反射和消息转发(很适合观察者或代理模式)
  • 协议和接口把接口特性带给了 C,分类接口甚至允许扩展已有类型

PHP

  • 由 Rasmus Lerdorf 于 1993 年开发和实现,1995 年首次发布
  • 名字是一个递归缩写:PHP: Hypertext Preprocessor
  • 动态、弱类型,也可以逐步添加运行时的强类型断言
  • 多范式:命令式、函数式、面向对象、过程式、反射式
  • 解释执行或即时编译
  • 最早的服务器端渲染平台
  • 用于网站(Facebook、Wikipedia 等众多网站),以及许多内容管理系统(Wordpress、JOOMLA)。

它为什么出色

  • 无处不在:77.4% 的网站都在使用 PHP^1,不受具体平台限制
  • 语法简单,与其他成熟编程语言相似,如 Java、JavaScript、C,因此容易学习
  • 通用。用途广泛,从创建小型 Web 脚本到构建企业运行的大型服务器端应用。
  • 非常成熟,应用广泛。有大量学习资源、框架和库。
  • 强大的数据库支持
  • 仍在积极开发,不断发布现代特性
  • 跨平台。到处都能运行,Windows、Mac、Linux、Unix
  • 开源且免费

突出特性

  • 运行和部署简单。没有构建链,也不需要编译器。
  • 渐进式类型系统。在需要的地方添加类型,用动态类型简化开发中的某些部分。
  • 快速原型开发。创建一个网页来测试你的想法,并在自己的机器上运行。

PureScript

  • 由 Phil Freeman 设计,2013 年发布第一个版本
  • 他开始开发 PureScript,是因为对当时其他把 Haskell 转译为 JavaScript 的尝试都不满意
  • 强类型、静态类型
  • 编译为 JS
  • 纯函数式语言
  • 语法和特性受 Haskell 启发
  • 用于构建 Web 应用,也能借助 Electron 构建服务器端应用或桌面应用

它为什么出色

  • 拥有许多让 Haskell 出色的特质:
    • 强大有力的类型系统:代数数据类型、类型类、高阶类型
    • 富有表现力:模式匹配、类型推断
    • 安全:没有 null,类型不可变
    • 纯函数式:副作用被编码进类型系统
  • 轻松地、类型安全地在 JSON 与类型之间解码/编码
  • 编译出可读的 JavaScript
  • 工具支持良好

突出特性

  • 函数式内核非常适合构建没有运行时错误的类型安全 Web 应用
  • 与 JS 互操作性极佳
  • 编译出高效的 JS

ReasonML

  • 由 Facebook 的 Jordan Walke 创建,2016 年发布第一个版本
  • 基于 OCaml,但去掉了它的怪癖,并为 JS 互操作而设计
  • 静态类型的函数式语言
  • 编译型
  • 用于构建网站(比如在 Facebook)

它为什么出色

  • 拥有 OCaml 的全部优点,但身处 Web 环境:
    • 强大的类型系统:所有值都用更简单的类型(比如 record、variant 和 option)标注,优先于复杂类型。不再有 undefined 错误,提升了可靠性
    • 富有表现力:模式匹配、类型推断、解构
    • 安全:没有 null,默认不可变
  • 编译出可读的 JavaScript
  • 可以编译为 OCaml(反之亦然),这意味着它能使用整个 OCaml 生态(比如编译为原生二进制文件)

突出特性

  • ReasonML 编译速度极快,意味着快速的迭代循环。
  • 与 JS 互操作性极佳,无论是从 ReasonML 代码中使用 JS,还是把 ReasonML 导出为 JS。它甚至能生成 TS 类型。也能与 C 互操作。甚至支持类似 JSX 的语法

Swift

  • Swift 的开发由 Chris Lattner 于 2010 年启动,2014 年在 WWDC 大会上向全球公布。
  • 目标是接替 Apple 的旧编程语言 Objective-C(自 80 年代初以来一直没有重大变化),用一门新的现代语言取而代之。设计上可与大部分 Objective-C 互操作。
  • 强类型、静态类型
  • 编译型,使用 LLVM 完成到机器码的编译(就像 Rust 那样)
  • 多范式:函数式、面向对象、命令式、声明式
  • 最初是专有软件,2015 年开源
  • 主要用于移动和桌面 app,也用于后端和无服务器场景

它为什么出色

  • 现代语言:类型推断、模式匹配、代数数据类型、Unicode 字符串
  • 高效:Swift 吸收其他语言(如 Rust、Python、C# 和 Ruby)最优秀的部分,融为一门一致而高效的语言
  • 安全:不暴露指针,有可空类型来防止空指针异常,显式错误处理,以及通过 ARC(自动引用计数)自动管理内存
  • 定期更新。早期 Apple 不怕为那些被证明不好用的东西引入破坏性变更。这防止了“历史包袱”的积累。通常还会提供工具帮助迁移代码。自 Swift 5 起,应用二进制接口(ABI)保持稳定
  • 与 Objective-C 不同,Swift 能运行在所有主流平台上:macOS、Windows 和 Linux

突出特性

  • 快。编译出高效的机器码,因此运行很快
  • 与 Objective-C 无缝互操作,也能很好地与 C 和 C++ 互操作
  • 社区庞大,有大量优秀的资源可用

TypeScript

  • 在 Microsoft 创建,起因是用 JS 开发大型应用时令人沮丧。设计者之一是 Anders Hejlsberg,他是 C# 的首席架构师,也是 Delphi 和 Turbo Pascal 的创造者
  • 第一个版本于 2012 年发布
  • 多范式:函数式、原型式、命令式、面向对象和泛型
  • 使用渐进类型和鸭子类型
  • 编译型(编译为 JS)
  • 用于网站(前端和后端)、脚本和命令行工具

它为什么出色

  • 强大而灵活的类型系统:联合类型、字面量类型、元组。基本上 JS 代码里能用的任何模式,在 TS 中都能以类型安全的方式描述。类型系统强大到甚至是图灵完备的
  • 作为 JS 的超集,可以逐步引入到 JS 代码库中
  • 兼具两者的优点:动态类型和静态类型
  • 流行度增长迅速,许多工具要么提供 TypeScript 类型,要么被转换为 TypeScript。可用资源也很多
  • 语言定期更新,并率先采纳即将到来的 ECMAScript 特性

突出特性

  • 更高的安全性和正确性:静态类型能消除许多用 JS 时常犯的错误
  • 与 JS 无缝互操作。可以添加自定义类型定义,以类型安全的方式使用 JS 代码。大量库都有现成的自定义类型定义
  • 工具/IDE 支持出色。许多 IDE 都提供类型标注、代码补全,甚至安全的规模化重构
  • 享有在 JS 生态中运行的所有好处:海量包、丰富工具、庞大社区等等。

该试试哪个?

  1. 如果你想构建原生 app,Dart、Delphi、Java、Kotlin 和 Swift 都是很好的选择。话虽如此,其他任何能编译为 JS 的语言也可以用来构建原生 app。值得一提的是,构建 iOS/macOS app 的官方语言是 Swift,构建 Android app 的是 Kotlin
  2. 如果你想构建 Web 应用,CoffeeScript、Dart、Elm、Java、JavaScript、Kotlin、PHP、PureScript、ReasonML 和 TypeScript 都很不错
  3. 如果你对函数式编程感兴趣,Elm、PureScript 和 ReasonML 是自然而然的选择,CoffeeScript、Dart、Java、JavaScript、Kotlin、Swift 和 TypeScript 也支持函数式编程
  4. 至于面向对象编程,ABAP、Dart、Delphi、Java、Kotlin、Objective-C、PHP 和 Swift 是合乎逻辑的候选,CoffeeScript、JavaScript 和 TypeScript 也支持这一范式
  5. 如果你对编写商业应用感兴趣,ABAP 和 Delphi 再合适不过了
Translation missing: zh-CN.number.nth.ordinalized Aug 2023 · 觉得有用吗?