$ ls ~yifei/notes/

学习一门新编程语言要回答的 58 个问题

Posted on:

Last modified:

最近在同时学习和复习好几门新的语言:

  • Rust - 想做一个搜索,显然 Python 的性能是不行的
  • Swift(UI) - 公司项目
  • Lua - 想写几个 neovim 的插件
  • TypeScript - 公司项目和个人博客

学每一门新的语言,其中必有共通之处,拿出来对比学习,应该能够事半功倍吧。如果能回答以下问题, 并写出代码,应该基本算是上手了。

语言特性

考虑语言自身的特质。

  • 是否是强类型的?是否是动态类型?
  • 是有 GC 的语言,还是需要手工管理内存?支持 JIT 吗?
  • 字符串是如何实现的?基于 bytes 还是 unicode char?
  • 有没有方便的 REPL 环境作为学习实验之用?
  • 更倾向于面向对象还是函数式编程?

基础语法

  • 如何定义一个变量或是常量?
  • if 语句是怎样的,是否可以用作表达式?
  • falsy value 有哪些?if 语句是否只支持 boolean?
  • 是否有 switch 语句,需要 break 吗?
  • 是否有 match 语句?
  • while 循环是怎样的?
  • for 循环有哪几种风格,是否有 foreach 语句?
  • 如何打断点和日志?
  • 如何处理异常?是哪种风格?

类型系统

  • 是否支持泛型?
  • enum 类型是什么样的?不同语言和语言之间差异特别大
  • Null 类型是什么样的?处理 null 有哪些最佳实践?

集合类型

  • tuple 类型,以及是否支持解构赋值语法糖?
  • 定长数组类型是什么样的?
  • 变长数组类型(vector)是什么样的
  • 字典 / 哈希 / Map 类型分别是什么样的?
  • 集合类型是什么样的?
  • 有链表类型吗?有内置队列吗?线程安全吗?
  • 有迭代器类型吗?
  • 如何排序?
  • 有 range 类型吗?
  • 有 slice 类型吗?

工程化

  • 如何创建一个新项目,标准文件布局是什么?
  • 包管理器,如何引用第三方库?
  • 如何编译构建项目?
  • 如何发布自己的库?有没有语言的中央仓库?
  • 有没有标准的代码风格规范工具?

函数与闭包

  • 是否有内置的 map/reduce 方法?
  • 是否区分函数和闭包?
  • 函数的默认参数支持什么风格?

面向对象

  • 是否支持类?
  • 支持继承,还是原型?
  • 类的方法可见性 (private/public) 如何实现?
  • 是否支持接口,何种风格?
  • 内置的接口有哪些?包括约定的方法名

并发

  • 是否支持多线程?
  • 是否支持多进程?
  • 是否支持协程?协程模型是什么样的?支持 async/await 吗?
  • 是否有内置的线程安全的队列?

基础库

  • 如何管理内存,对于有 gc 的语言相应的入口在哪里,没有 gc 的语言最佳实践是什么?
  • 时间和日期的解析和格式化?
  • 正则表达式怎么使用?支持各种断言吗?
  • json/yaml/toml 等常用数据格式的解析,以及简单的 csv 处理等库有吗?
  • 如何执行常见的文件操作,路径操作?
  • http 请求,标准库有吗,最常用的第三方库如何使用?
  • 常用的数据库,如 redis 和 mysql/sqlite 的 driver 和 orm 有哪些?
  • 单元测试框架有哪些?
  • 有内置的命令行参数处理库吗?
  • 有内置的随机数库吗?
  • 标准编码风格和自动格式化工具有吗?
  • 环境变量和信号等如何处理?
  • web 框架有哪些?是什么风格的?
  • 性能测试 (profile) 框架有哪些?

写完这篇文章,我发现我的 TypeScript 和 Swift 水平已经还可以了,Lua 和 Rust 还需要再多加学习 =_=b

© 2016-2022 Yifei Kong. Powered by ynotes

All contents are under the CC-BY-NC-SA license, if not otherwise specified.

Opinions expressed here are solely my own and do not express the views or opinions of my employer.