硬件层有硬件层的抽象例如IIC, ISP,Modbus等协议其实就是一种抽象. 将各种模块抽象成一种标准接口.
软件层的抽象就更多了, 驱动是一种抽象, 编程语言也是一种抽象. 操作系统也是一种抽象.
甚至算法本身也可以抽象. 例如词法分析中的有限状态机就是一种抽象. 抽象出了另外一个层面的东西. 将原本需要m*n次的计算, 缩短成了. m次. 实在是太牛了. 如果没有这个发明, 那么 编译时间将大的恐怖.
似乎程序员是在不断的造高楼大楼, 不断的抽象. 大厦越来越高. 使用上越来越简单, 但是系统本身却越来越复杂.
抽象带来了很多很多的好处, 尤其是减少编程, 提高代码可复用性上. 抽象的功劳无可替代.
但是抽象也带来了系统自身的复杂化,以及程序员对底层所做事情无知. 还有高额的性能损耗.
那么是否有另外一种方法能够既保证抽象所带来的的好处, 又能降低系统复杂度提高系统性能.
我觉得还是有的,
- 我觉得编程语言可以改进一下, 将编程语言的函数调用和转换在编译时就可以进行转换. 从顶层调用直接穿透到底层的代码. 编译成最底层的代码. 省去中间的函数调用. 新编译器, 应该对现有的编程语言增加更多维护的语法支撑… 例如Java语言中注解的引入, 是在对已有业务代码的控制维度增加了可操控性, 有利于编写框架.
C语言中宏的引入, 是在代码翻译和灵活性上有巨大作用的. 但是我个人觉得. C语言中的宏还不是很完善, 目前只是简单的文本替换, 最好是能够在编译前的文本替代和运算, 而不是简单的文本替换. 这样的超级宏功能或许会引发新的编程方法. 既面向抽象文本接口栈的编程, 而不是面向抽象函数的编程. 目前是面向抽象函数的编程, 也就是一层调用一层. 抽象函数有个缺点, 每个函数都要编译成可运行的代码, 在执行的时候都需要执行一次. 而面向抽象文本接口栈的编程, 则会有编译器直接穿透到底层. 直接编译出底层的代码. 省去中间运行时的代码. 此方向上再积极发展一些的话, 应该可以带来非常多的好处. 这对编译器的要求极高. 此处仅为个人的一点点思考. 思考还不够完善. 可行性有待考虑.
- 接口协议层的抽象应该出工业标准.例如IIC,ISP等.( 目前已经实现)
如果一个系统, 程序员写完代码, 可以直接转换成可运行的FPGA电路芯片代码. 那将是多么快的速度. 多个芯片之间又可以灵活切换