开阔视野的文章和博客
本文记录一下一些开阔视野的文章和博客:
Lambda cube
interpreters vs compilers
Closures (闭包) 和 Objects (对象)
- 关于对象与闭包的关系的一个有趣小故事 - Script Ahead, Code Behind - ITeye博客:评论是精髓
- JVM的规范中允许编程语言语义中创建闭包(closure)吗? - 知乎
- 为什么Java闭包不能通过返回值之外的方式向外传递值? - 知乎
Y组合子(Y combinator)
- How to reinvent the Y combinator – Surely I Am Joking
- 康托尔、哥德尔、图灵——永恒的金色对角线(rev#2) – 刘未鹏 | Mind Hacks
- Y不动点组合子用在哪里? - 知乎
- 函数式编程的 Y Combinator 有哪些实用价值? - 知乎
- Y组合子(Y Combinator)| The Little Schemer 第九章 - 知乎
- Y组合子的一个启发式推导 - 知乎
- Compiling up to the λ-calculus: Church encodings and the Y combinator
CPS (Continuation-Passing Style)
- By example: Continuation-passing style in JavaScript
- Continuation Passing Style | HE Tao
- 示例:JavaScript中的后续传递风格_知识库_博客园
协变、逆变和不变
- 协变与逆变 - 维基百科,自由的百科全书
- 协变 (Covariant)、逆变 (Contravariant) 与不变 (Invariant)_小麦先生的博客-CSDN博客_contravariant
- 逆变、协变与子类型,以及Rust - 知乎
递归函数和语义
惰性求值 (Lazy Evaluation) 和 贪婪求值 (Greedy evaluation)
- The Point of Laziness | Existential Type
- 及早求值 - 维基百科,自由的百科全书:Eage Evaluation,又称贪婪求值
- 惰性求值 - 维基百科,自由的百科全书
代数数据类型 (algebraic data type)
- 代数数据类型 - 维基百科,自由的百科全书
- ReScript的特性二: 代数数据类型 - 知乎
- Functional Python, Part I: Typopædia Pythonica - Tweag:Python代数数据类型
- Functional Python, Part II: Dial M for Monoid - Tweag:Python Monoid
- Functional Programming illustrated in Python: Part 0 | by Brian Candler | Medium:Python中的FP系列文章
类型系统
- Type system - Wikipedia
- 类型系统 - 维基百科,自由的百科全书
- What is the difference between System F and Hindley-Milner type system? - Theoretical Computer Science Stack Exchange
- Hindley–Milner type system - Wikipedia
- 类型安全 - 维基百科,自由的百科全书
- OCaml 类型系统的缺陷有哪些? - 知乎:有关于value restriction (值限制)的部分。
Collections, Container and Iterators
- Collections - Computer Science Wiki
- Container (type theory) - Wikipedia
- Collection (abstract data type) - Wikipedia
- Iterator - Wikipedia
type inference 和 type check
- 类型推断(Java™ 教程-Java Tutorials 中文版>学习 Java 语言>泛型(更新))
- 你不知道的JAVA系列一 Type Inference - yeak2001 - 博客园
- 类型推断(Java™ 教程-Java Tutorials 中文版>学习 Java 语言>泛型(更新))
- Python 类型检查实践 | 张吉的博客
write a linter
- GitHub - caramelomartins/awesome-linters.:该仓库收集了针对各种语言的linter
- Making a Python Linter from Scratch | by Benjamin Campbell | Python in Plain English
- How to write a linter in Python 🐍✨
多态 (polymorphism)
- 多态 (计算机科学) - 维基百科,自由的百科全书
- Polymorphism (computer science) - Wikipedia
- 鸭子类型 - 维基百科,自由的百科全书
- ReScript的特性一: 鲜为人知的Row polymorphism - 知乎
- Row polymorphism - Wikipedia
multimethod (multiple dispatch)
- 为什么要多重派发?(Why multiple dispatch?) - 知乎
- Python 有什么奇技淫巧? - 知乎 - 掘金
- Clojure - Multimethods and Hierarchies
- Clojure - Runtime Polymorphism
meta-programming
- 怎么理解元编程? - 知乎:编写能改变语言语法特性或者运行时特性的程序。一种语言本来做不到的事情,通过你编程来修改它就可以做到。
- Wat:其中给出了运行时meta programming的经典范例
call/cc
Parsers
- How Desmos uses Pratt Parsers - Desmos Engineering:编译器如何将代码解析为AST
Dynamic Programming (动态规划)
- 动态规划 - 维基百科,自由的百科全书
- 什么是动态规划(Dynamic Programming)?动态规划的意义是什么? - 知乎
- Dynamic Programming Pattern | Our Pattern Language
抽象泄露
不同语言处理机制
- Musings about the best error handling mechanism | Amazing CTO
- Error handling patterns · Andrea Bergia’s Website
软件架构
- arc42 Template Overview - arc42:Software Architecture Template。
- The Ultimate Guide To Software Architecture Documentation
- Rewrite, refactor, or reinvent? | Herb Caudill:项目是否应该推翻重写的6个案例
Competitive Programming
- Competitive-Programming-A-Complete-Guideline:关于Competitive Programming的介绍
开发实践
正则表达式
一些概念
- Language primitive - Wikipedia:language primitives是在一种编程语言中可以使用的最简单的元素。一个primitive是对程序员来说可以获得的最小"unit of processing",或者可以是语言中表达式的atomic元素。Primitives是units with a meaning,也就是是语言中的semantic value。它们不同于parser中的tokens,其是最小的elements of syntax (语法元素)。
- C Keywords and Identifiers:keywords是预定义的,保留的单词,其对compiler/interpreter有专门的meaning。keywords是语法的一部分,不能作为一个identifier。identifier指那些对给定entities (如variable, functions, structures等)的名称。
发展历史
- A Guide to the Terminal, Console, and Shell:讲述了Terminal/Console/Shell的由来和发展
- The End of Localhost:该文讲述使用localhost进行本地调试的方法可能被云端调试终结
其它领域
- Visual Information Theory – colah’s blog:视觉信息论,通过可视化表示信息。该博客的其它文章也非常推荐,作者引用高达60000
有限状态机
- XState Visualizer:实现了有限状态机的JS库,设计很简洁
浏览器
- Chrome 浏览器运行原理你了解多少?:介绍了Chrome浏览器的运行原理
Linux相关
- Behind “Hello World” on Linux:在Linux上运行一个简单的
.py
文件后,背后发生了什么