什么是高级语言?细心的人可能会发现,越是高级的语言它的实际执行语句就越少,框架就越多。比如c#里面的类的继承等,就算你继承一万个类的嵌套,表面上来看还是没有执行任何代码。那么这些文字都用来做什么了呢?其实这些结构代码的背后是编译器在给你自动的维护着一个又一个的表格。这些表格将来会指导着编译器将那些实际执行的代码按照一定的顺序编排起来。然后这些表格可能就没用了,也就是说哪些没有明确写明(硬编码,不是指哪些抽象的类,机器不能理解抽象的指令)执行顺序的编程语言的背后一定有一个勤劳的编译器在帮你维护一个又一个的表格,并根据这些表格结合自己的硬编码来自动的生成实际指令的编排顺序与内容。
不过从另一个角度来说,对于一个没有BUG的编译器,只要用这些抽象的逻辑组成一个顺序分明的执行顺序,那么这些高级语言再经过编译之后生成的实际执行的命令的顺序也一定是分明的。所以只要掌握了抽象的顺序,高级语言也可以实现明确的指令的表达。
其实编程的本质也不过如此,用一些方法来维护某些数据,并根据这些数据做进一步的处理,直到得到想要的结果,表现在代码上就是维护一个又一个的表格。但是随着一些特殊数据的出现(高级语言中的种种的数据类型例如map)我们在维护他们的时候一定要注意使用特定的对应的方法去处理,否者可能报错。再高级一些我们要维护的数据可能是几个对象组成的列表,这个时候更要使用相应的方法来进行处理,但是本质上来说,我们维护的仍然只是数据列表而已。
但是并非低级的数据类型就可以随意的维护,恰恰相反,低级的数据类型组成的数据具有很大的随意性,同样是一个数组,你写一个二叉树的访问方法来访问它,它就会变成一颗二叉树,你写一个冒泡排序来维护它,那么它就会变成一个普通的有序数组而已。如果你通过冒泡排序来组织了一个数组,然后又试图通过二叉树的方式来读取它,那么得到的一定是一堆无用的数字而已。所以低级数据类型组成的数据也要用相应的操作方法来操作,否则就会出错,它只是不会报错而已,并不是说可以随意为之。
而且低级数据组成的结构还有一个特点那就是用什么方法组织起来的数据就要用什么方法来解释,来使用,所以有点类似于加密与解密。是的所谓的信息处理不过就是将一堆数据按照一定的排列起来,方便以后读取与处理而已,本质上来说,与结绳记事没有太大的区别。