被忽略的方法之-mini-lanaguage

本文介绍了在软件设计中采用Mini-Language方法提升程序通用性和可配置性的经验。通过具体案例DB2DB,展示了如何利用该方法来简化复杂应用的配置流程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

mini-language方法,在UNIX领域流传很久。但没有进入软件设计方法的课程。 在这个“面向对象”的时代,有许多这种传统的好的设计方法被忽视了。 在《The Art of Unix Programming》中,整个的第8章和《The Pragmatic Programmer》的第12节都对这个方法进行了介绍。 DB2DB是我开发的一个程序。完成数据库之间数据的传输。用户在配置文件中指定源数据库和目标数据库;指定读取数据的SQL语句和插入数据的SQL语句。DB2DB在源数据库中读取数据,并对返回的每一条数据,在目标数据库中执行插入数据的SQL。因为DB2DB通用性好,被广泛的应用的公司的项目中。这个程序的设计,正是使用了mini-language的方法。 要设计通用的程序,关键之一是程序的可配置性,就把选择权交给用户,用户通过配置程序决定程序的行为。考虑一个极端的情况,一个很复杂的应用,用户可能使用一种语言来配置程序的逻辑,程序通过对配置文件解释执行,完成用户希望的功能。使用这种极端的方式思考,甚至可以把编程也看成写配置文件,比如:把SHELL脚本看成配置文件,SHELL解释程序通过对配置文件的解析和执行,完成开发人员设计的动作。 当然,大多情况下,没有必要设计一种完整意义的编程语言。这种起配置作用的不完整语言,称为“mini-language”。像/etc/passwd这样的文件使用的格式,就可以看成简单的“mini-language”设计;而像awk脚本这样的语言,可以看成一个复杂的“mini-language”,复杂到几乎和一个编程语言相当。在实际中使用mini-language方法,会设计一种针对特定问题领域的,简单的专用的语言。使用这种语言表达程序需要的信息,把最容易变动的逻辑使用这种语言描述,保证了程序通用性。 首先要确定使用mini-language要描述什么信息?描述这些信息需要使用到哪些概念?选择的概念应该尽量接近问题领域,语言尽量保持简单,也要考虑容易实现。比如DB2DB的变量定义文件,要表达的信息:把源数据库哪些表的数据导入到目标数据库的哪些表。我使用了普遍熟悉的SQL的概念,来设计它的语言,方便配置也方便实现(把SQL的解析和执行工作都交给数据库)。 可以考虑下面的思路:程序代码要实现的是一个引擎,这个引擎实现几个基本的原操作。使用“mini-language”定义一个原操作的序列。程序通过解释mini-language的代码,完成操作序列,完成程序功能。比如在DB2DB中的几个原操作,获取当前时间;通过指定SQL计算需要信息;通过指定SQL读数据;通过指定SQL把读取的数据插入等等。 如果把mini-language的配置看成是元数据。这种设计方法实际上是,抽象一个合理的模型,在代码中实现,而把具体的细节放到元数据中。其思想是:把知识放到要处理的数据或配置中,程序的逻辑保持简单,简单逻辑的程序更容易实现,也更可靠。 要设计好的mini-language, 要懂一些编译原理的基本知识。还可以使用Lex,Yacc,javaCC等工具自动生成解析的代码,当然如果语言很简单,就没有必要使用这些工具,只需要懂得一些编译原理中介绍得算法,自己实现解析代码很容易。
### 如何在 Vim 编辑器中使用 VSCode 功能 要在 Vim 中实现类似于 Visual Studio Code (VSCode) 的功能体验,可以通过安装 `vscode-vim` 插件以及配置相关工具来完成。以下是具体方法: #### 安装 VSCode 并启用 Vim 支持 如果目标是从头构建一个接近于 VSCode 的环境,则可以先通过以下方式安装并配置 VSCode 的 Vim 插件。 1. **安装 VSCode**: 下载并安装最新版本的 Visual Studio Code[^2]。 2. **安装 VSCodeVim 插件**: - 启动 VSCode。 - 进入扩展市场(快捷键:`Ctrl+Shift+X`)。 - 搜索 “Vim” 关键词。 - 选择名为“VSCodeVim”的插件并点击安装按钮。 3. **配置自定义快捷键**: - 在 VSCode 设置文件中调整 Normal Mode 和 Insert Mode 的绑定规则。 - 参考路径为 `vim.normalModeKeyBindings` 和 `vim.insertModeKeyBindings`[^1]。 ```json { "key": "ctrl+p", "command": "workbench.action.quickOpen" } ``` #### 将 VSCode 集成到本地 Vim 环境 对于希望直接增强传统 Vim 而不是切换至 VSCode 用户来说,也可以借助外部工具链模拟部分特性。 1. **Neovim 或者 Advanced Vim 版本推荐** Neovim 是现代版 Vim ,它提供了更强大的 API 接口以便更好地兼容第三方应用和服务接口调用[^3]。 2. **LSP(Lanaguage Server Protocol)** 实现智能提示等功能 利用 LanguageClient-neovim 插件加载 LSP 协议服务端程序从而获得代码补全、跳转定义等高级编辑能力。 ```bash :Plug 'autozimu/LanguageClient-neovim' ``` 3. **Tmux + NerdTree 提升多窗口操作效率** 结合 tmux 多路复用技术加上 nerdtree 文件管理插件可以让纯文本模式下的工作流更加高效流畅。 ### 总结 无论是采用原生 Vim 加强还是迁移到基于 VSCode 的轻量化解决方案都可以满足不同程度的需求偏好;而两者之间最大的区别在于前者依赖脚本定制后者则倾向于图形界面友好型设计思路[^1].
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值