生活在REPL中,工具与程序一体
生活在REPL中,工具与程序一体
redraiment 发表于2年前
生活在REPL中,工具与程序一体
  • 发表于 2年前
  • 阅读 71
  • 收藏 3
  • 点赞 1
  • 评论 0

标题:腾讯云 新注册用户域名抢购1元起>>>   

摘要: 最近对《On Lisp》中提到的“自底向上程序设计”——通过改造语言来接近问题领域——有了新的体会:生活在REPL中,工具与程序一体。

最近对《On Lisp》中提到的“自底向上程序设计”——通过改造语言来接近问题领域——有了新的体会:生活在REPL中,工具与程序一体。

开发一个项目,除了用编辑器敲代码、编译器编译代码、命令行中运行等,总会用到许许多多辅助的开发工具。比如访问MySQL数据库用MySQL Workbench、访问MongoDB使用Robomongo,还有访问Redis、访问RESTful接口……每做一件事情都得有相应的辅助工具。

常见的解决方案就是“IDE”:把这些工具都塞进一个盒子里。就像IntelliJ IDEA拥有Database、Terminal等一系列插件,几乎覆盖了开发常用的所有工具,但基本上还是1+1=2的情况。

举个例子,要求从某些数据库中抓取数据并输出到文件中。于是先用MySQL客户端连接目标数据库,经过不断的调试和优化,终于写出能获得目标数据的SQL;但原始数据可能包含敏感信息,返回的结果是经过加密的数据,常见的MySQL客户端可没办法帮你调用解密程序;所以不得不自己编写代码处理,但为了不干扰现有代码,决定另起一个新工程,于是数据库连接配置、加解密服务器配置……

就在我陷入反复造轮子无法自拔时,Lisp/Clojure给了我新的启示:

  1. 改造语言,让它更接近问题领域
  2. 写代码的入口是REPL,而不是编辑器

例如我现在维护的系统中,需要访问多台数据库服务器,因此需要一个客户端能灵活地在多台数据库之间快速切换,还能汇总获取的数据一并处理。于是我通过添加一系列自定义函数来增强Clojure,通过调用(db/all :dbname "SQL statement" argments...)在指定的数据库中获取数据,并组装成Clojure可直接操作的数据结构。

现在,经过我个性化定制的Clojure REPL就是我的工作环境,在其中能访问多台MySQL、访问Redis集群、访问MongoDB、调用外部RESTful服务、加解密数据……再遇到类似上面例子中的临时需求时,我直接在REPL中调试SQL,当调试完成时代码也就写完了,返回的结果可直接用Clojure处理并保存到文件,这一切浑然天成!

这让我想起了SmallTalk,伪装成IDE的操作系统:把工作环境、测试环境、运行环境无缝地融合到了一起,真正可以随心所欲进行个性化定制的环境!

共有 人打赏支持
redraiment
粉丝 127
博文 21
码字总数 25032
作品 6
×
redraiment
如果觉得我的文章对您有用,请随意打赏。您的支持将鼓励我继续创作!
* 金额(元)
¥1 ¥5 ¥10 ¥20 其他金额
打赏人
留言
* 支付类型
微信扫码支付
打赏金额:
已支付成功
打赏金额: