博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
冒号和他的学生们(连载10)——超级范式
阅读量:2425 次
发布时间:2019-05-10

本文共 2295 字,大约阅读时间需要 7 分钟。

Normal 0
冒号和他的学生们

——程序员提高班纪事

 

 

  1. 超级范式

智能繁衍:机器人生产机器人                                             ——题记

 

摘要:元编程简谈

 

引号忽然想起一事,问道:“有一本名为《C++模版元编程》的书,既然提到了模板,想来也属于泛型编程吧?”

冒号答道:“模板元编程Template Metaprogramming,与GP密切相关但自成一派,隶属于另一种编程范式——元编程Metaprogramming),简称MP。这里的前缀‘meta-’常译作‘元’,其实就是‘超级’、‘行而上’的意思。比如,元数据Metadata)是关于数据的数据,元对象Metaobject)是关于对象的对象,依此类推,元编程自然是关于程序的程序,或者说是编写、操纵程序的程序。”

叹号皱着眉:“听着有点绕。”

冒号投影出另一段代码——

C++(元编程):

template

struct factorial

{

     enum { value = N * factorial::value };

};

 

template <>                // 特化specialization

struct factorial<0>    // 递归中止

{

     enum { value = 1 };

};

 

void main()

{

    cout << factorial<5>::value << endl; // 等价于 cout << 120 << endl;

}

 

“以上用模板元编程实现了阶乘运算。”冒号讲解道,“与前面三种基本范式的阶乘实现有着根本的不同:这里阶乘的值是在编译时而非运行时计算出来的。换句话说,这段代码以模板形式通过编译器生成了新的代码,并在编译期间获得执行。”

叹号不解:“这又说明什么呢?”

冒号并不直接回答:“假设你需要批量处理用户文档,其格式结构预先给定,但既不像CSV(逗号分隔)那么简单,也不像XML那么标准,并且用户随时可能改变格式标准,请问如何设计这段程序?”

叹号略一思索,便回答:“三大模块:阅读器读出输入文档,解析器按照格式标准去解析,处理器对解析结果进行处理。”

“显然关键在解析器,如果你是从头做起,那么问题至少有四。”冒号扳着指头数:“第一、费时写解析器代码;第二、费时调试解析器代码;第三、如果用户更改格式标准,你得重复做上两件事;第四、如果这段程序是大型程序的一部分,任何改动都可能意味着软件的重新编译、连接、测试、打包、部署等等。如果因为你的缘故公司不得不频频发布补丁包的话,你的饭碗恐怕是朝不保夕了。”

还是句号机灵:“既然谈到了元编程,一定是利用元编程,根据不同的格式标准自动生成相应的解析器代码。不过——此法虽一劳永逸,但难度似乎不小啊。”

“思路对头!”冒号赞许道,“大家听说过LexYacc吗?它们能根据格式标准生成相应的解析器代码。更妙的是,格式标准不限于静态数据,甚至可以含有动态指令!这意味着用户不仅能定义业务数据格式,还能定义业务流程乃至领域特定语言DSL(Domain Specific Language),而这其实涉及到另一种编程范式:语言导向式编程 Language-Oriented Programming)。如果在此基础上再用图形界面包装一下,那么你的客户会欣喜地发现,他们的经理只要点点鼠标就可以改变整个业务流程了,而这一切不仅不需要软件开发方的参与,连本公司的技术人员也免了。这时候倒是你的老板发愁了:你的设计太过完美,客户的后续开发费怕是赚不到了。”

众人一乐。

冒号续道:“如果知道LexYacc本来就是编写编译器和解释器的工具,你就不会惊讶于它们的强大了。顺带说一句,编译器本身就是元编程的典型范例——把高级语言转化为汇编语言或机器语言的程序,不就是能写程序的程序吗?其实元编程的例子比比皆是:许多IDEVisual StudioDelphiEclipse等均能通过向导、拖放控件等方式自动生成代码;UML建模工具将类图转换为代码;Servlet引擎将JSP转换为Java代码等等。”

逗号恍然大悟:“原来元编程就是编写能自动生成源代码的程序。”

“也不尽然。”冒号修正道,“自动生成源代码的编程也属于另一种编程范式——生成式编程Generative Programming)的范畴。有的元编程虽不生成源代码,却能修改程序。从低级的汇编语言到一些高级的动态语言如PerlPythonRubyJavaScriptLispProlog等均支持此类功能。”

问号问道:“编写病毒算不算元编程?”

“编写一个只是删除或感染文件的病毒,不必用到元编程。”冒号应道,“但如果要求此病毒能自我变异,那就需要元编程了。”

引号自言自语:“程序的程序,就是程序的平方。”

“也可以是程序的立方,四次方……理论上是无限次方。元程序将程序作为数据来对待,能自我发现和自我赋权,有着其他程序所不具备的自觉性自适应性智能性,可以说是一种最高级的程序。它要求编程者超越常规的编程思维,在一种崭新的高度上理解编程。想象一下,”冒号激情勃发,“如果有一天机器人能自我学习、自我完善,甚至能生产机器人,实现‘智能繁衍’,是不是很美妙?”

“我怎么觉得特恐怖呢?”叹号此言令人忍俊不禁。

 

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/14674535/viewspace-369132/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/14674535/viewspace-369132/

你可能感兴趣的文章
程序员必看,这本深度学习宝典刷爆IT圈!
查看>>
python学习心得体会(一)
查看>>
程序员薅羊毛神器来了!
查看>>
自学 Python后,自己一个人可以通过此技能挣什么钱?
查看>>
Java三种面试者是面试官最讨厌的,见之即毙!
查看>>
当程序员要具备什么条件?
查看>>
行啊,人工智能玩大了!
查看>>
手拿3份AI的offer?这些人凭什么这么刚?
查看>>
给大家推荐一本Python书,京东断货王,火遍IT圈!
查看>>
会Python,程序员必备的软技能,你会吗?
查看>>
Python小白说:“看完这篇文章才知道这样学习最高效”
查看>>
CSDN社群十问十答(Python第一期)
查看>>
CSDN社群十问十答(Java第一期)
查看>>
CSDN社群十问十答(区块链第一期)
查看>>
这届AI程序员厉害了,还没出校门就被预定?
查看>>
良心帖!看完这篇,你的Python入门基础就差不多了!
查看>>
人工智能还会火多久?
查看>>
安装pygame和pip的问题以及过程
查看>>
想做高薪AI工程师!有这么难吗?
查看>>
天呀!人工智能会像Android和iOS一样,归于平淡吗?
查看>>