注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

My Unix World

不要迷恋Unix,Unix只是计算世界很小的一部分!

 
 
 

日志

 
 

【Learn】语言、编译器、通用逻辑  

2009-01-05 17:48:13|  分类: T-Logic |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |
在计算机通用应用模式中,目前基本上处于一种分功能实现的状态。
由CPU+可访问地址空间+OS构成了一个基础环境,这个基础环境提供了一系列虚拟计算机---进程。进程出现的意义在于,它完全隔绝了计算机构成的繁琐,让用户以一种简单的方式使用计算机(其实是使用虚拟的计算机)。由于计算机相当程度的发展,使得OS可以根据需要虚拟出性能强劲的计算机,这是集成电路技术带来的成果,OS只是对这项技术带来的丰富的计算资源进行了充分利用。
而即使这样,编制符合OS接口协议(SCI+CPU指令)的进程模板(文件系统中存放的遵循OS可执行协议的二进制文件),仍然不是tty的特长(计算机中,没有human,tty作为人的全权代理,就是human的化身,完全可以把它等同于人。User的本质则是指的tty不同的权限模式,Group则是对众多的权限模式进行分类,物以类聚的意思,同时方便管理)。
增加一段对于终端的思考:
    tty是计算机系统三大部分中文件的一种。
    从整体的视角看,OS才是计算机系统的主体,用户进程只是一些小的插件。人通过外设向OS发送指令,控制OS的运行。人如果想控制虚拟计算机(进程),只需要对OS发出指令,Kernel作为一个计算机内部的大管家,由它执行对进程的具体控制和操作。而如果人要直接跟进程通信,OS则起到一个中介的作用,它维护人的代理tty,由tty与进程进行直接沟通。可见,在计算机系统中,人受到的是超特权待遇,root就是皇帝,而其他用户则是皇室贵族,OS则是整个国家管理体系,而显示器、鼠标、键盘,则只是人与OS进行沟通的中介,只是一些物理介质,就像写诏书或谍报的笔和纸。唯一不同的是,显示器、键盘这一端是皇室语言,而另一端则是官员体系语言,这是两种不同的语言。打在显示器是一些像素点,而不是文字,敲打的是键盘上的一些物理按键,在一块纸板上把鼠标移动来移动去。人类用这种方式表达信息,而OS+CPU则使用电信号的变化来表达信息。硬件的作用只是转换信息的表达介质,而没有转换信息表达的方式和内容。所以,可以理解为人类通过键盘表达的通过显示器看到的信息,与OS提供给进程们的tty所体现出来的,是相同的信息,使用相同的表达方式,一切都完全相同。
其实可以把人类接口与其他硬件分开,使用两条线路与主机进行交互。也许在早期的计算机中,它们确实也是分开的,只是后来发现可以合并,以简化计算机的复杂度和节省成本。这个很早是指在8086之前,在IBM的大型机上或者第一台计算机。
在机械时代,计算机是那么亲切,但是进入电子时代之后,就什么都看不到了,只能通过软件编程,经过N多层封装之后,间接体会到。
回到原先的问题,
所以,还需要借助一些虚拟辅助芯片(编辑器进程、编译器进程、调试器进程等等),来帮助tty创建进程模板。这样,大体可以将进程分为三大类:辅助开发进程,系统管理辅助进程,各用途应用进程。这只是对进程分类,而不是对程序分类。程序也可以做出类似的分类,但程序只是文件,对程序的分类是没有根本意义的。也可以只分为辅助开发和各用途应用两大类,把系统管理工具归入到普通应用类。
辅助开发工具中,大体分为两步,编辑和编译。编辑是把tty的思想转化为普通文件,初步保存,而编译则是完成转化。其他的工具只是一些辅助工具。
在计算机应用中,把复杂度分摊在这两大部分上,OS用于构建进程--可用的计算机环境,而编译器则用于生成虚拟计算机在运行时的逻辑规范/逻辑顺序组合。在早期的计算机中,这些工作是由人工编制打孔带完成的,开发工具封装了这些工作,方便了人的使用。而这个编译工作,涉及到很重要的一个机制--编译。编译进程是一款复杂的自动编译芯片(自动编译机),它将符合某规范的输入变成符合某规范的输出。编译进程是一款专用芯片。而CPU则是通用芯片,OS是一个建立在CPU之上的通用逻辑环境。所以,编译进程与CPU的逻辑设计无本质区别。但在另一方面,编译进程也是通用处理器,它可以识别任意的源程序代码,而进行转化。编译处理机(也就是编译进程)提供了一些协议规范,一般成为语言的语法,只要遵循协议(遵守语法),它就可以识别,并解释翻译。解释型的语言更容易说明问题,解释型语言的解析引擎确实是一个通用操作平台,所以它是通用处理器。
CPU作为通用处理器,它作为一款几乎所能想到的所有领域的运算打造,具有完全的通用性。OS则是虚拟出许许多多的处理器出来。编译进程或解释引擎,一般提供某个或某些领域内的通用计算服务。
编译进程或解释引擎进程一般完成两个功能:1,完成tty协议与OS协议的转化,2,将自己定制为某个或某些领域的通用处理器。由于计算应用领域繁多,各个领域的要求不同,侧重点不同,所以,很难出现某种语言,可以一统江湖。每个领域都有特定的语言和编译器或者解释器,最多某个语言的通用性特别好,可以用在数个领域,但这是有代价的,通用性过强,导致灵活性过度,对于细节的封装不够,导致使用难度加大,开发效率变低,同时,编译器的优化也不好做。
C语言地位超然,是因为C只是替代了汇编,而没有引入专用领域的封装。但是,即使是C,仍然由于封装复杂性的同时,带来了一些灵活性的损失。也可以理解为,C语言编译器只是做了编译进程的协议转化功能,而没有做专领域应用的封装功能。
C++则是,do any thing!
对细节的封装是一种权衡,它提供了更方便的应用特征的时候,必然带来运算能力的损失,使得建立在封装之上的应用远离通用运算特征而趋近专用运算特征。好的封装首先是明确目的,明确哪些是需要封装的,哪些是用户需要定制的,只封装用户不需要的那部分的复杂细节,但保持用户希望的那些方面的灵活性。
目前广泛应用的这些语言,多数是优秀的封装。但也不排除例外。
通用处理器,是一个伟大的构想,它提供一个机制,由用户决定怎么使用。而技术的进步和计算能力的飞速提升,使得这种通用机制,成为一种通用能力。Unix又提供了这么一个通用的OS平台,通用逻辑应用的中流砥柱。

  评论这张
 
阅读(365)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2017