冒号课堂节选:元编程范式

2019-04-14 16:54发布

超级范式:元编程 模板元编程即 Template Metaprogramming ,与 GP 密切相关但自成一派,隶属于另一种编程范式 —— 元编程( Metaprogramming ),简称 MP 。这里的前缀 ‘meta-’ 常译作 ,其实就是 超级 行而上 的意思。比如,元数据( Metadata )是关于数据的数据 元对象( Metaobject 是关于对象的对象,依此类推,元编程自然是关于程序的程序,或者说是编写、操纵程序的程序。 例子:假设你需要批量处理用户文档,其格式结构预先给定,但既不像 CSV (逗号分隔)那么简单,也不像 XML 那么标准,并且用户随时可能改变格式标准,请问如何设计这段程序? 最佳解法:利用元编程,根据不同的格式标准自动生成相应的解析器代码。 可用工具 Lex Yacc ( 编写编译器和解释器的工具 ) 。它们能根据格式标准生成相应的解析器代码。更妙的是,格式标准不限于静态数据,甚至可以含有动态指令!这意味着用户不仅能定义业务数据格式,还能定义业务流程乃至领域特定语言 DSL(Domain Specific Language) ,而这其实涉及到另一种编程范式:语言导向式编程( Language-Oriented Programming 。如果在此基础上再用图形界面包装一下,那么你的客户会欣喜地发现,他们只要点点鼠标就可以改变整个业务流程了,而这一切不仅不需要软件开发方的参与。   编译器本身就是元编程的典型范例 —— 把高级语言转化为汇编语言或机器语言的程序,不就是能写程序的程序吗?其实元编程的例子比比皆是:许多 IDE Visual Studio Delphi Eclipse 等均能通过向导、拖放控件等方式自动生成代码; UML 建模工具将类图转换为代码; Servlet 引擎将 JSP 转换为 Java 代码等等。   自动生成源代码的编程也属于另一种编程范式 —— 生成式编程( Generative Programming )的范畴。有的元编程虽不生成源代码,却能修改程序。 从低级的汇编语言到一些高级的动态语言如 Perl Python Ruby JavaScript Lisp Prolog 等均支持此类功能。