开阔视野的文章和博客

本文记录一下一些开阔视野的文章和博客:

Lambda cube

  1. Lambda cube - Wikipedia

interpreters vs compilers

  1. The Most Common Programming Misconception: Interpreted Vs. Compiled Languages | by Nicholas Obert | JavaScript in Plain English

Closures (闭包) 和 Objects (对象)

  1. 关于对象与闭包的关系的一个有趣小故事 - Script Ahead, Code Behind - ITeye博客:评论是精髓
  2. JVM的规范中允许编程语言语义中创建闭包(closure)吗? - 知乎
  3. 为什么Java闭包不能通过返回值之外的方式向外传递值? - 知乎

Y组合子(Y combinator)

  1. How to reinvent the Y combinator – Surely I Am Joking
  2. 康托尔、哥德尔、图灵——永恒的金色对角线(rev#2) – 刘未鹏 | Mind Hacks
  3. Y不动点组合子用在哪里? - 知乎
  4. 函数式编程的 Y Combinator 有哪些实用价值? - 知乎
  5. Y组合子(Y Combinator)| The Little Schemer 第九章 - 知乎
  6. Y组合子的一个启发式推导 - 知乎
  7. Compiling up to the λ-calculus: Church encodings and the Y combinator

CPS (Continuation-Passing Style)

  1. By example: Continuation-passing style in JavaScript
  2. Continuation Passing Style | HE Tao
  3. 示例:JavaScript中的后续传递风格_知识库_博客园

协变、逆变和不变

  1. 协变与逆变 - 维基百科,自由的百科全书
  2. 协变 (Covariant)、逆变 (Contravariant) 与不变 (Invariant)_小麦先生的博客-CSDN博客_contravariant
  3. 逆变、协变与子类型,以及Rust - 知乎

递归函数和语义

  1. 递归函数(一):开篇 | 何幻
  2. 指称语义 - 维基百科,自由的百科全书
  3. 操作语义、指称语义、代数语义、公理语义学,谁能简单介绍下? - 知乎

惰性求值 (Lazy Evaluation) 和 贪婪求值 (Greedy evaluation)

  1. The Point of Laziness | Existential Type
  2. 及早求值 - 维基百科,自由的百科全书:Eage Evaluation,又称贪婪求值
  3. 惰性求值 - 维基百科,自由的百科全书

代数数据类型 (algebraic data type)

  1. 代数数据类型 - 维基百科,自由的百科全书
  2. ReScript的特性二: 代数数据类型 - 知乎
  3. Functional Python, Part I: Typopædia Pythonica - Tweag:Python代数数据类型
  4. Functional Python, Part II: Dial M for Monoid - Tweag:Python Monoid
  5. Functional Programming illustrated in Python: Part 0 | by Brian Candler | Medium:Python中的FP系列文章

类型系统

  1. Type system - Wikipedia
  2. 类型系统 - 维基百科,自由的百科全书
  3. What is the difference between System F and Hindley-Milner type system? - Theoretical Computer Science Stack Exchange
  4. Hindley–Milner type system - Wikipedia
  5. 类型安全 - 维基百科,自由的百科全书
  6. OCaml 类型系统的缺陷有哪些? - 知乎:有关于value restriction (值限制)的部分。

Collections, Container and Iterators

  1. Collections - Computer Science Wiki
  2. Container (type theory) - Wikipedia
  3. Collection (abstract data type) - Wikipedia
  4. Iterator - Wikipedia

type inference 和 type check

  1. 类型推断(Java™ 教程-Java Tutorials 中文版>学习 Java 语言>泛型(更新))
  2. 你不知道的JAVA系列一 Type Inference - yeak2001 - 博客园
  3. 类型推断(Java™ 教程-Java Tutorials 中文版>学习 Java 语言>泛型(更新))
  4. Python 类型检查实践 | 张吉的博客

write a linter

  1. GitHub - caramelomartins/awesome-linters.:该仓库收集了针对各种语言的linter
  2. Making a Python Linter from Scratch | by Benjamin Campbell | Python in Plain English
  3. How to write a linter in Python 🐍✨

多态 (polymorphism)

  1. 多态 (计算机科学) - 维基百科,自由的百科全书
  2. Polymorphism (computer science) - Wikipedia
  3. 鸭子类型 - 维基百科,自由的百科全书
  4. ReScript的特性一: 鲜为人知的Row polymorphism - 知乎
  5. Row polymorphism - Wikipedia

multimethod (multiple dispatch)

  1. 为什么要多重派发?(Why multiple dispatch?) - 知乎
  2. Python 有什么奇技淫巧? - 知乎 - 掘金
  3. Clojure - Multimethods and Hierarchies
  4. Clojure - Runtime Polymorphism

meta-programming

  1. 怎么理解元编程? - 知乎:编写能改变语言语法特性或者运行时特性的程序。一种语言本来做不到的事情,通过你编程来修改它就可以做到。
  2. Wat:其中给出了运行时meta programming的经典范例

call/cc

  1. call-with-current-continuation - Wikipedia

Parsers

  1. How Desmos uses Pratt Parsers - Desmos Engineering:编译器如何将代码解析为AST

Dynamic Programming (动态规划)

  1. 动态规划 - 维基百科,自由的百科全书
  2. 什么是动态规划(Dynamic Programming)?动态规划的意义是什么? - 知乎
  3. Dynamic Programming Pattern | Our Pattern Language

抽象泄露

  1. 抽象泄漏 - 维基百科,自由的百科全书
  2. 关于Leaky Abstraction - 知乎
  3. 一篇文章带你了解抽象泄漏(Leaky Abstractions)-51CTO.COM

不同语言处理机制

  1. Musings about the best error handling mechanism | Amazing CTO
  2. Error handling patterns · Andrea Bergia’s Website

软件架构

  1. arc42 Template Overview - arc42:Software Architecture Template。
  2. The Ultimate Guide To Software Architecture Documentation
  3. Rewrite, refactor, or reinvent? | Herb Caudill:项目是否应该推翻重写的6个案例

Competitive Programming

  1. Competitive-Programming-A-Complete-Guideline:关于Competitive Programming的介绍

开发实践

  1. 答案在代码中:“实现需求”的双重含义 | Piglei

正则表达式

  1. Weixin Official Accounts Platform

一些概念

  1. Language primitive - Wikipedia:language primitives是在一种编程语言中可以使用的最简单的元素。一个primitive是对程序员来说可以获得的最小"unit of processing",或者可以是语言中表达式的atomic元素。Primitives是units with a meaning,也就是是语言中的semantic value。它们不同于parser中的tokens,其是最小的elements of syntax (语法元素)。
  2. C Keywords and Identifiers:keywords是预定义的,保留的单词,其对compiler/interpreter有专门的meaning。keywords是语法的一部分,不能作为一个identifier。identifier指那些对给定entities (如variable, functions, structures等)的名称。

发展历史

  1. A Guide to the Terminal, Console, and Shell:讲述了Terminal/Console/Shell的由来和发展
  2. The End of Localhost:该文讲述使用localhost进行本地调试的方法可能被云端调试终结

其它领域

  1. Visual Information Theory – colah’s blog:视觉信息论,通过可视化表示信息。该博客的其它文章也非常推荐,作者引用高达60000

有限状态机

  1. XState Visualizer:实现了有限状态机的JS库,设计很简洁

浏览器

  1. Chrome 浏览器运行原理你了解多少?:介绍了Chrome浏览器的运行原理

Linux相关

  1. Behind “Hello World” on Linux:在Linux上运行一个简单的.py文件后,背后发生了什么

网络

  1. Why is DNS still hard to learn?
  2. 有关 TLS/SSL 证书的一切 | 卡瓦邦噶!

内存管理

  1. Measuring Memory Subsystem Performance - Johnny’s Software Lab