很长一段时间没更新内容啦,并不是不想写,而是找不到灵感,不知道改写些什么?

因为,我写了很多大数据相关的内容,已经很久没有玩Hadoop相关的东西啦。

除最近,帮助公司搭建了一套CDH集群,基本也是大家在上面跑一些大数据量的AI算法。

而我,最近在写一些Java后端以及需求整理的工作,没有特别值得和大家分享的,也就一些踩坑底层库踩坑的内容值得写一篇介绍一下。

我最近也进行一些深度思考,我依然关注大数据相关动态,包括一些Hadoop 3.0的东西。

很长一段时间,我写的都是一些零碎的东西,计划系统性的写一些深入的内容。

看完《自制编程语言》一周有余,系统了解了自制一门类似Python、Ruby、Java编程语言都需要那些知识。

编程语言制作,博大精深,不太敢妄言,编程语言引起的腥风血雨已经太多了。有编程语言的地方就有江湖呀。

好啦,言归正传,我们看看通过站在巨人的的编程库上,我们如何制作一门编程语言,都需要那些工具。

一门编程分类:

  • 解释类
  • 编译类

解释类,比如Python就是解释类语言,Java则是编译类语言。解释类语言,在运行时即时翻译,解释型语言运行速度往往比编译的程序慢,但往往更具灵活性,因为它们能够与执行环境互相作用。

编译型语言,把高级定义的字符串代码整体翻译为机器可执行的代码的过程就称为编译。因此,一个编译型语言,是将人可阅读和编写高级语言作为输入数据,然后输出成目标可执行的文件或二进制代码,由CPU直接运行,效率自然会高很多。

而在自制编程语言一书中,介绍了两门编程语言,而且有代码实现,都是使用C编写的,基本编程语言基本构成可以了解一番,整本书觉写得一般,大段介绍代码逻辑,其实看书的人大多是想要看到思路以及为什么如此实现,有什么讲究,经验可以介绍,这部分内容很少,整体比较枯燥吧,我大概陆续总共10多个小时,看完此书,了解如何制作一门编程语言可以一看。

书中列举的,参考Java,Python,C++,Ruby等语言实现的一些功能探讨,值得一看。编程语言最核心的难点应该就是符号处理吧。

书中介绍的两门编程语言,Crowbar与Diksam都是简历在Lex、Yacc的基础上的,基本上核心的编程语言难题都交给它俩。

编程语言语法处理过程:

  • [1] 词法分析: 将源代码分割为若干个记号(token)的处理。
  • [2] 语法分析: 即从记号构建分析树(parse tree)的处理。分析树也叫作语法树(syntax tree)或抽象语法树(abstract syntax tree,AST)。
  • [3] 语义分析: 经过语法分析生成的分析树,并不包含数据类型等语义信息。因此在语义分析阶段,会检查程序中是否含有语法正确但是存在逻辑问题的错误。
  • [4] 生成代码: 如果是C语言等生成机器码的编译器或Java这样生成字节码的编译器,在分析树构建完毕后会进入代码生成阶段。

执行词法分析的程序称为词法分析器(lexical analyzer)。lex 的工作就是根据词法规则自动生成词法分析器。

执行语法分析的程序则称为解析器(parser)。yacc 就是能根据语法规则自动生成解析器的程序。

一个词法分析器加上一个语法解析器,我们就可以很快的制作一门属于自己的编程语言。

Yacc、Lex都是比较值得深入研究的,要学习的东西太多啦。

说实话,看完之后的我还有些懵,不合适进行评论或者写一些心的,编程语言技术有大量参考和先辈经验,借助一些工具,制作来看难度不大,但做出来和做好是两个概念,留待以后有机会去专门研究吧。

我目前阶段仅限了解,人的精力有限,未来很长一段时间,还会阅读更多经典计算机相关书籍。

欢迎关注,Computer Foundations Practices

我会分享一些我自己的心得体会。