日期:2014-05-17  浏览次数:20696 次

菜鸟求助,到底什么是高级语言?
  最近一直有个问题困扰着我,到底什么是高级语言?
  从很多书上都可以了解到,最早以前的程序员是通过编写0,1代码来编程的,也就是直接让硬件来识别0,1,进而得到所需要的结果。后来由于这种编程方式过于繁琐,人们发明了汇编,用一些简单的单词的缩写来代表一些二进制串,提升了编程的效率,那也就是直接同硬件交互,换了种方式罢了。随着技术地发展,汇编也渐渐不能满足人们的需要,人们便发明了高级语言。高级语言将复杂的汇编进一步简化,发展出了更加简单,灵活的语法。
  不知我的描述是否有误,若是这样的话,程序的产生总会经历这样一个过程:高级语言->汇编->机器语言。
  我的问题便来了,既然高级语言仅仅是对机器语言的种种抽象,那经过编译后的程序代码应该可以直接更硬件交互才对,不需要操作系统的支持。不是说Windows操作系统就是用C语言写的么,在没有操作系统的情况下,编译器链接器等等也可以将高级语言成功地转换成一个二进制程序,那应当是我可以写出一个C/C++程序,只要硬件接口相同,无论什么平台都可以执行的啊。为什么说C程序是不可移植的,而java程序非要通过一个虚拟机来解释执行呢?(操作系统跟编译原理还没学到- -)
汇编 操作系统

------解决方案--------------------
高级语言都是抽象的,跨平台
代码库如果设计时考虑了跨平台,例如boost编码时考虑了各种平台的差异,预编译好各种平台的动态运行库,可以给个人代码调用
当然也可静态编译

------解决方案--------------------
那它编译完的还不是最终能由硬件执行的机器码,而是依赖特定平台的中间码。