• 代码转换是一座金矿


    计算机语言的世界有一个奇怪的现象:不同的语言建立的国度彼此能够沟通的东西太少:

    用 Java 写的函数,模块,框架,如果想在 Go 应用环境中使用,那么就要重新书写。虽然 C 语言书写的代码在一些个别的语言环境中可以使用,但这样的语言实在不多。

    根据贸易的原则,如果 A 地生产一种商品比 B 地生产这种商品成本低,如果从 A 地将这种产品运到 B 地进行销售,那么就会赚更多的钱。

    同理,在计算机世界中,如果可以用现成的函数,模块,框架,通常是不会去重新开发同样功能的东西,除非是想学习或者是现成的东西无法满足需求。

    大部分语言都是全能型语言,在许多领域都开发了功能近似,名称相近的函数库和各种框架。而这些东西能够通用的却很少。

    如果能够将 A 语言开发的优秀的函数,模块或框架用一种技术转换成 B 语言表达的代码,那么就会创造巨大的价值,而这种技术也会非常受欢迎。这种技术就是代码转换。

    代码转换需要的技术很多:代码解析,语法树转换,语言特性映射,代码类型检测,符号表检查等许多技能。而现有理论系统,在处理代码解析编译方面非常复杂,让大多数程序员望而却步。

    其实这个领域没有想象中那么难以涉足,Lisp Perl6 LLVM 给了我们一些启示:

    首先说说 LLVM, LLVM 成功了,因为它让许多语言设计的程序员从底层各种 CPU 架构的汇编语言中解脱出来,用一种 LLVM IR 的汇编语言,就可以自动转换成许许多多 CPU 架构上快速运行的机器码。而一些喜欢研究各种汇编语言和 CPU 架构的程序员也非常欢喜,因为借助 LLVM, 他们的工作得到更多人的认可。

    Perl6 没有成功,但她吸引了许多优秀的程序员长期的聚集在一起,日以继夜的合作,她的吸引力在哪里呢?就是语法分离技术。

    几乎所有现有语言的架构,语言的语法信息和语法树构建,代码编译是一体的,你如果感觉 Python 中没有 switch, case 很不方便,建议开发者增加这个功能,那么得到答复的可能性非常小,即使得到答复,也是拒绝。围绕 print 是关键字还是函数的问题,Python 分化成两个版本,就是证明:语言修改现有的语法是非常困难的,虽然从兼容以前版本上有坚持的道理,但从技术上,需要改动的东西太多了,就好像从一个盖好的巨大积木的底部,抽掉一块。这会导致非常多的连锁反应。

    Perl6 将语言的语法单独分离出来,成为一个可以随时改动的配置文件。这让 Perl6 敢定义非常非常多的语法特性,而不担心维护问题。

    这种技术带给我们一种全新的语言架构,让语言的解析变得不那么复杂。因为这种技术将代码解析这个最复杂的问题变成了两个相对独立,简单的问题:语法定义和语法树解析。

    传统的 bison + yacc 是将语法定义和语法树构建合在了一起,让这个问题变得复杂。

    最后一种技术是从 Lisp 中得到的:符号解析。悦德财富:https://www.yuedecaifu.com

    符号解析代替了语法树解析的传统思路,他将所有的 token 看成是符号,符号可以 eval, 也可以不 eval. 符号不仅仅是变量,他是一个可以代表变量,函数名称,包名称,关键字,操作符等所有在代码中出现东西的名字,这种抽象大大简化了语言语法树的解析难度。

    在 Lisp 中,所有的特殊句法:if, switch, func, while, package, public 都是宏,也就是暂时不 eval 的列表。这种抽象也让代码解析可以分解成若干个简单一些的问题。

    利用这些技术,分析程序代码,解析并且转换就不是高大尚的技术领域,而是普通程序员都可以尝试的小玩意。当然,抽象思维的挑战是必须的。因为转换不同的语言,要对语言特性有深入的理解,看清楚不同语法背后相同的原型和实现机制。这对学习和接受一门新的语言很有帮助。

    如果不同语言社区的优秀代码可以互相交换,那将会创造多大的价值?

    欢迎有相同看法的程序员发表自己的看法。

  • 相关阅读:
    写在前面
    你应该知道的 RPC 原理
    虚函数 继承 多态
    指针 函数指针 指针数组
    Python使用RMF聚类分析客户价值
    数据挖掘关联分析中的支持度、置信度和提升度
    OpenCV2.4.4+Cmake2.8+Vs2010编译createsamples+traincascade程序用来训练样本
    UNITY + OpenCVSharp调节图像对比度
    使用单精度类型变量
    有符号基本整型
  • 原文地址:https://www.cnblogs.com/oceansea/p/5959346.html
Copyright © 2020-2023  润新知