跳到主要内容

语言与选型

语言不是「流行度排行榜」,而是问题域 + 团队能力 + 运行时约束的折中。本篇整理选型维度、常见语言族谱,以及评审时该问的问题。

选型维度

维度要问什么典型信号
问题域延迟、吞吐、安全、交付形态嵌入式 / 服务端 / 客户端 / 脚本
类型系统编译期能拦住多少错误静态强类型 vs 动态 + 测试兜底
运行时GC、所有权、VM、解释器停顿、确定性、启动时间
生态库、工具链、招聘与文档包管理、LSP、官方指南质量
互操作与现有代码、FFI、平台 APIC ABI、JNI、Wasm、Objective-C/Swift
可维护性团队已有经验、迁移成本模块边界、重构工具、格式化约定
提示

默认策略:新服务优先选团队已精通且生态成熟的语言;仅在指标证明瓶颈(延迟、内存、部署体积)时再引入第二语言。

类型系统速览

风格代表优势代价
静态强类型Rust, Swift, Go, Java, TypeScript (strict)接口契约清晰,重构安全样板、泛型学习曲线
渐进类型TypeScript, Python + type hints迁移友好严格度不一致时需 lint
动态Ruby, Python (无检)原型快回归靠测试与约定

实践:在 TypeScript / Python 项目里开启严格模式;把「边界类型」(API DTO、配置)集中定义,避免 any 扩散。

语言族与适用场景(笔记)

语言我常用来解决慎用场景
SwiftApple 平台 UI、系统 API、并发安全默认值纯 Linux 服务端(除非已有 Swift 团队)
TypeScriptWeb 全栈、工具链、与 JSON/API 紧耦合CPU 密集且无 Wasm/原生扩展
Python数据脚本、胶水、快速内部工具高并发长连接核心(应用 asyncio + 压测)
Go简单并发服务、CLI、容器侧车复杂领域模型(缺少表达力时需纪律)
Rust性能/安全关键组件、FFI、基础设施业务 CRUD 首版(迭代成本)

以上为个人知识库视角,非排名;具体项目以度量为准。

评审清单(PR / 设计)

  • 新依赖是否引入第二种内存模型或异步风格?
  • 公共 API 是否有明确类型与错误枚举?
  • 是否复用现有格式化、lint、测试框架?
  • 脚本语言是否限制在边界层(构建、迁移、运维)?

性能与语言

语言 rarely 是首要瓶颈。在换语言前:

  1. Profile:CPU 火焰图、分配、锁等待。
  2. 算法与 I/O:N+1 查询、序列化、同步阻塞。
  3. 边界:热路径用原生扩展 / Rust / C,其余保持业务语言。

相关篇章