文档章节

生活在REPL中,工具与程序一体

redraiment
 redraiment
发布于 2016/01/31 19:44
字数 751
阅读 73
收藏 3
点赞 1
评论 0

最近对《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

redraiment

粉丝 128
博文 21
码字总数 25032
作品 6
杭州
架构师
生活在REPL中(续):在REPL中动态加载依赖的库

在之前的文章《生活在REPL中:工具与程序一体》中,我描绘了把当做来使用的场景,在中做诸如访问数据库、加解密等日常开发工作。 但使用中最郁闷的就是依赖的类库无法动态加载。例如代码运行...

redraiment ⋅ 2016/04/17 ⋅ 0

TPYBoard 获取MicroPython提示

REPL(交互式解释器)全称是 Read Evaluate Print Loop, pyboard 允许用户和 MicorPython 的交互式连接。使用REPL 是测试代码和运行指令的最易方式。使用 REPL 可以往 main.py 中增添脚本内...

bodasisiter ⋅ 2016/08/22 ⋅ 1

Scala入门之工具篇

我初次接触Scala时,由于对Scala相关的工具不够熟悉,学习的效率低下。所以本文主要介绍Scala编程所必备的工具。一般而言,我们接触一门编程语言,都需要接触这门语言的编译器、REPL、构建工...

碎镜 ⋅ 2017/11/29 ⋅ 0

follow大神教程——实践java爬虫之一

学习http://blog.csdn.net/pleasecallmewhy/article/details/17594303 抓取搜狗首页logo 运行结果: http://www.sogou.com/images/logo/new/sogou.png sogou审查元素中有这句<img src="http:......

realsa ⋅ 2014/06/30 ⋅ 0

用node开发repl应用

前言 每次看到一些库然后,执行就可以跑起来,这不就是一个shell工具了吗,那么我不就可以不用学习shell语法,直接用js写命令行脚本了吗! 什么是REPL应用 所谓的repl应用就是一个终端命令行工具,...

打杂程序猿 ⋅ 2014/01/21 ⋅ 1

强心针:Java在数据科学领域同样是王者!

  【IT168 评论】一直以来,Python和R语言都被认为是数据科学专属的两种语言,事实上它们并不是唯一可以用于数据科学的语言,Java同样可以用户数据科学。本文中,Aaron Lazar将列出10大理由...

it168网站 ⋅ 2017/12/06 ⋅ 0

修复 MySQL 主从复制错误的 Python 小工具--mysql_repl_repair

mysqlreplrepair mysqlreplrepair.py是一款用于修复mysql主从复制错误的python小工具,该工具可以修复由于主从数据不一致导致的1062(duplicate key), 1032(key not found)错误。当遇到复制出...

dukope ⋅ 2017/09/06 ⋅ 0

MySQL高可用之MHA

MHA,MySQL的高可用架构,在基于主从架构的模式下,当主服务器挂掉之后,由MHA中manager来决定从哪台slave从服务器当中选择一台作为master主服务器,通常是比较从服务器中的数据,哪个最全,...

wujunqi1996 ⋅ 01/12 ⋅ 0

nodejs里的repl

nodejs里的repl 什么是REPL? REPL(Read-Eval-Print Loop) 中文的话有翻译成“交互式解释器”或“交互式编程环境”的。不过我觉得不用翻译,直接REPL就好了,这样的术语,翻译成中文后,读者...

i5ting ⋅ 2015/08/06 ⋅ 1

Common Lisp菜鸟指南(译)

Common Lisp菜鸟指南(译) 原文见:http://ghostopera.org/blog/2012/06/24/the-newbie-guide-to-common-lisp/ 译文自:http://reverland.org/Tech/2012/06/26/common-lisp/ 渣翻译,见谅。......

yyliu ⋅ 2012/06/27 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

从 Confluence 5.3 及其早期版本中恢复空间

如果你需要从 Confluence 5.3 及其早期版本中的导出文件恢复到晚于 Confluence 5.3 的 Confluence 中的话。你可以使用临时的 Confluence 空间安装,然后将这个 Confluence 安装实例升级到你现...

honeymose ⋅ 今天 ⋅ 0

用ZBLOG2.3博客写读书笔记网站能创造今日头条的辉煌吗?

最近两年,著名的自媒体网站今日头条可以说是火得一塌糊涂,虽然从目前来看也遇到了一点瓶颈,毕竟发展到了一定的规模,继续增长就更加难了,但如今的今日头条规模和流量已经非常大了。 我们...

原创小博客 ⋅ 今天 ⋅ 0

MyBatis四大核心概念

本文讲解 MyBatis 四大核心概念(SqlSessionFactoryBuilder、SqlSessionFactory、SqlSession、Mapper)。 MyBatis 作为互联网数据库映射工具界的“上古神器”,训有四大“神兽”,谓之:Sql...

waylau ⋅ 今天 ⋅ 0

以太坊java开发包web3j简介

web3j(org.web3j)是Java版本的以太坊JSON RPC接口协议封装实现,如果需要将你的Java应用或安卓应用接入以太坊,或者希望用java开发一个钱包应用,那么用web3j就对了。 web3j的功能相当完整...

汇智网教程 ⋅ 今天 ⋅ 0

2个线程交替打印100以内的数字

重点提示: 线程的本质上只是一个壳子,真正的逻辑其实在“竞态条件”中。 举个例子,比如本题中的打印,那么在竞态条件中,我只需要一个方法即可; 假如我的需求是2个线程,一个+1,一个-1,...

Germmy ⋅ 今天 ⋅ 0

Springboot2 之 Spring Data Redis 实现消息队列——发布/订阅模式

一般来说,消息队列有两种场景,一种是发布者订阅者模式,一种是生产者消费者模式,这里利用redis消息“发布/订阅”来简单实现订阅者模式。 实现之前先过过 redis 发布订阅的一些基础概念和操...

Simonton ⋅ 今天 ⋅ 0

error:Could not find gradle

一.更新Android Studio后打开Project,报如下错误: Error: Could not find com.android.tools.build:gradle:2.2.1. Searched in the following locations: file:/D:/software/android/andro......

Yao--靠自己 ⋅ 昨天 ⋅ 0

Spring boot 项目打包及引入本地jar包

Spring Boot 项目打包以及引入本地Jar包 [TOC] 上篇文章提到 Maven 项目添加本地jar包的三种方式 ,本篇文章记录下在实际项目中的应用。 spring boot 打包方式 我们知道,传统应用可以将程序...

Os_yxguang ⋅ 昨天 ⋅ 0

常见数据结构(二)-树(二叉树,红黑树,B树)

本文介绍数据结构中几种常见的树:二分查找树,2-3树,红黑树,B树 写在前面 本文所有图片均截图自coursera上普林斯顿的课程《Algorithms, Part I》中的Slides 相关命题的证明可参考《算法(第...

浮躁的码农 ⋅ 昨天 ⋅ 0

android -------- 混淆打包报错 (warning - InnerClass ...)

最近做Android混淆打包遇到一些问题,Android Sdutio 3.1 版本打包的 错误如下: Android studio warning - InnerClass annotations are missing corresponding EnclosingMember annotation......

切切歆语 ⋅ 昨天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部