开发者社区> 问答> 正文

什么是微型语言


  在真正领略Linux下各种微型语言那震人心脾的功效之前,我们应该先要搞清楚一个问题——什么是微型语言?
  在计算机这门科学技术诞生之后的几十年里,人们经过对大量的软件错误模式进行深入研究之后,得出了一个一致的结论:程序员每百行代码的出错率和所使用的语言是无关的。依此可以推断,如果可以用更少的代码行数来完成更多的功能,那也就意味着更少的bug。如何能够做到这样的效果呢?
人们首先想到的就是模块化编程,将各种独立的功能抽象成模块,然后像搭积木一样利用很少的代码将各功能模块组合起来。但是模块化编程并没有真正做到减少代码行数,毕竟每个模块也是需要一定量的代码去构成。
  经过长期的模块化编程,人们发现在特定领域中总是有一些十分通用的功能模块,并且可以利用配置文件将这些功能模块组织起来去完成这个领域的多种不同的功能。因此这种方法开始流行起来,配置文件的结构也逐渐的复杂起来。但配置文件的结构不管有多么复杂,却很难表达复杂的控制逻辑,这迫使人们在需要处理复杂的控制逻辑时不得不再次向程序中添加新的代码。于是代码不断的膨胀,bug也随之滋生。
  面对这种状况,人们的智慧发挥了无穷的作用,索性让配置文件具备逻辑控制能力算了。这个时候,有些具备了很强逻辑控制能力的配置文件,已经具备了顺序、循环、选择分支这写作为编程语言的三大要素,从而演变成了一种解释型语言。从此人们在针对特定领域编程时,只需要组织好一份“配置文件”就行了。虽然这个时候也可以算是一种编程行为,但总的代码行数要比使用C一类的通用编程语言少很多,bug自然也少了很多,而且还能更快的完成任务。
  这种具备了逻辑控制能力的“配置文件”,就是微型语言。从它的诞生历程可以了解,它们都是针对特定领域的,不具备通用性,这也是称它们为微型语言的主要原因。
  逻辑控制能力的强弱,决定了微型语言的表达性;功能涵盖范围的宽窄,决定了微型语言的通用性。当一个微型语言的逻辑控制和功能涵盖达到了与高级通用语言相同的高度时,它也就可以看作是一种新型的通用脚本语言了。很多时候,微型语言介乎于专属配置文件和通用脚本语言之间,它们之间的界限也非常的模糊。图2-1展示了配置文件到脚本语言的这种过度趋势。
  在Linux中,微型语言是随处可见的,它们都是为专门应用领域特制的、大量减少程序行数的语言。比如前面说过的用于文本匹配的正则表达式、编写shell程序的一些实用工具(awk、sed、dc、bc)和软件开发工具(make、lex、yacc)等。






图1 配置文件到脚本语言的过度趋势

  为特定领域设计微型语言是一种强大的设计理念,这也就是所谓的数据驱动编程。它可以让我们为手头的工作定义自己的高级语言,以便严格规定合理的方法、规则和算法。这样不但降低了全局复杂度,还增加了个人向同行炫耀的资本从而增加成就感。简直就是一石二鸟的绝妙方法。
  但是讲解如何去设计一个新的高级语言,已经严重超出本书的范围了,那需要另外一本大部头的著作来完成。这样的著作比比皆是,但是笔者仅为各位读者推荐一本,就是拥有“龙书”之称的《编译原理》。但是别被人给忽悠了,“龙书”的主要作者是Alfred V. Aho,其它人的笔者不能担保其质量。
虽然讲述如何去做设计一个新的高级语言不属于本书的范围,但是让各位读者去领略一些Linux中常用微型语言,本书则是责无旁贷的。也是图2中所列出的大部分微型语言。想用好Linux,它们是必备的知识。
  正则表达式在前面的章节中已经介绍过了,本章将不再复述;XML应该有太多人熟悉了,笔者还是不要在这里自毁形象了;make由于其可以帮助我们作为研究Linux下绝大多数开源软件源代码以及内核源代码的指路明灯,因此会单独拿出来一章着重介绍。至于lex和yacc,笔者还是知道天有多高地有多厚的,那是“龙书”的责任。余下的rpm、m4、groff、awk、以及bc和dc这是本章的全部内容,那么接下来我们就领略一下那些为这些为特定领域而设计的微型语言们的风采吧!

展开
收起
jagen 2014-07-23 14:26:29 24669 0
11 条回答
写回答
取消 提交回答
  • Re什么是微型语言
    学习了,活到老,学到老,说的很有道理
    2015-12-22 11:41:30
    赞同 展开评论 打赏
  • Re什么是微型语言
    能提炼一下让菜鸟也能听懂的东东吗?
    2015-09-04 21:53:02
    赞同 展开评论 打赏
  • Re什么是微型语言
    2014-12-06 21:32:52
    赞同 展开评论 打赏
  • 从来没有听说过  第一次听到   学习了哈!
    2014-11-06 17:37:36
    赞同 展开评论 打赏
  • blce.me
    Re什么是微型语言
    高大上的赶脚啊~~~~~~
    2014-11-03 11:34:09
    赞同 展开评论 打赏
  • Re什么是微型语言
    不了解这个啊。。
    2014-10-29 09:50:08
    赞同 展开评论 打赏
  • 学习了
    2014-08-30 18:26:27
    赞同 展开评论 打赏
  • 我顶你个肺啊~,大牛威武
    2014-07-24 17:01:41
    赞同 展开评论 打赏
  • 比如 某些工程师 在处理数据和ip的时候会要求你只提供数据的一列(文本格式,不是xls那种)。

    你要是动用个c#,java,c++什么的就太费时间,用微型语言可能一句话就搞定了。
    2014-07-24 10:59:12
    赞同 展开评论 打赏
  • Re什么是微型语言
    昨天晚上把这个帖子看了两三遍,茅塞顿开!~
    2014-07-24 10:51:03
    赞同 展开评论 打赏
  • 你懂的!顶大牛
    2014-07-23 15:30:01
    赞同 展开评论 打赏
滑动查看更多
问答排行榜
最热
最新

相关电子书

更多
复杂升学环境下的语言交互:技术与实践 立即下载
视觉计算机开发者系列手册 立即下载
小米的混合开发框架实战 立即下载

相关实验场景

更多