namelosw
2021-07-10 14:32:11 +08:00
简单地说其实是有很多纯 CRUD 系统的,比如给你的数据库客户端或者 CRUD 的 GraphQL,这类产品绝大部分问题是你想覆盖一部分逻辑进去就很恶心,特别是 UAC 等等。
假设考虑做一个内网不需要考虑安全的 admin 后台,前端直接发 SQL 到后端 eval,其实就是跳过 CRUD 了。问题就是考虑安全的时候,又不太好把后端的逻辑编译进 SQL 里,有存储过程,但是能力有限而且很恶心。这里面缺乏一种随意嵌入逻辑的「柔性」。
换句话说 CRUD 存在主要是因为我们用的语言和工具表现力不够抽象以解决 CRUD 问题,很多代码用能想出来但是用 Java 写不出来的。Fortran 没有二维数组,Cobol 没有函数,Go 没有泛型,很多东西缺了功能就会缺表现力。不只是编程语言,工具和系统也是,比如 MySQL 里不能随意嵌入 Java,Redis 只能嵌入 Lua 之类的。
表现力强的语言社区里,用户对表现力强的部分也不够信任,比如 Clojure 和 Elixir 社区对于宏的态度是「用宏的第一条规矩就是不用宏。能用函数就函数,不能用函数再用宏」。
不过也有一些被埋没的流派,其实感觉并没有真被规模化地探索过,拿宏作为例子,Paul Graham 说过他的代码 25% 都是宏(一般 Elixir 和 Clojure 程序能有 5%就很高了,很多人都完全不用),还有 Let Over Lambda 那本书里一些激进的双关等等。
有意思的是现在人们都在说 AI 写代码之类的,其实代码写代码最简形式早就有了,也就是宏,或者说 symbolic programming,一度被认为是编程界的下一个重心,结果随着上一波 AI 破产被遗忘了。