现在,大多数程序员都可以写出一个具有典范意义的“Hello World”程序:class HelloWorld {public static void main (String args[]){①引自:http://www2.latech.edu/~acm/helloworld/java.htmlfor(;;){System.out.print("Hello World");同时也会真正地、从个人意识中忘掉这样一个程序的含义以及需求不过是:print("Hello World");如果仅以这段程序而言,用户的需求仅用上述代码即可实现。而Java或其他一些应用程序开发语言则在这样的代码中加入了更多的概念,诸如:□类与对象等,例如:class HellWorld□名字空间、导入导出等,例如:System.out以及隐式地导入System□方法、属性、事件等,例如:print□类方法、类静态成员等,例如:static□引用、值与无值,以及基本类型系统等,例如:void□可见性、作用域等,例如:public□字符串值、字符串类等,例如:"Hello World"与String args[]□应用入口与运行环境约束等,例如:void main()除了这些概念①,在具体的开发环境中还会有容器、包、配置脚本、服务、模型、验证器、指示字、伪指令、分发、部署、版本容器、基线等概念,以应付不同角色的需求。
当一门语言从“实现程序功能”变成要“实现产品需求”时,其内部的语言设计思想也渐渐地变得不遵守“算法+数据结构=程序”这一经典法则。回顾“第五章语言及其面临的系统”,我们可以将这一切的变化以及可预期的、语言进化的方向都归结为:通过在程序组织上的结构化来解决规模问题。
①其大部分与“面向对象”这一语言范式有关,部分则出于应用环境、语法习惯等在语言的具体设计上的选择。
解决“不确定”问题,需要首先将其背景置入到“确定”与“不确定”得以出现的本质原因中去。
正是数据不确定带来了对观察者的限制,进而这种限制带来了所谓数据连续或非连续这样的特性。但反过来说,如果数据是确定的,我们将不必限制观察者,也不必讨论系统是并发的还是串行的问题。
在一个足够小的生存周期中,我们可以做到数据确定;在可做到数据确定的前提下,我们将数据的生存周期扩展到足够大,则可以做到数据连续。在现实系统中,前者影响的是实时性,后者影响的是并发性。也就是说,高实时与高并发是最难兼得的系统特性,因为高实时意味着数据的生存周期小,也就意味着并发中面临数据失效(即连续性的背景——生存周期,达不到足够大)的可能性大。yipindushu.com
大而化之,从结构的层面来讲,其中是可以有很多种解释的。
聪明的曹冲称出了大象的重量。此前我们仅仅将这一思想归纳为“通过某种系将大象的重量映射为石头的重量",但这还远远不够。因为我们只触碰到了这个问的一个解——映射,而“为什么需要映射”才真正是问题的本身。
曹冲的高明之处在于,他认识到“不能称象”的本质原因是:大象不能被分“不能分割"才是灾难之源。因此,如果系统如我们此前所讨论的,是“通过在组织上的结构化来解决规模问题"的一种策略,那么程序所解决的问题集“能否分以及“如何正确地分割”,就是所有系统问题的核心所在。
对此,曹冲称象的故事提出了一种可能的解:如果“被运算对象”是不可分割那么我们可以将它映射为可分割的对象。但即使这个解总是存在的,我们也只是了问题的一半。因为在曹冲称象的故事中,我们忽略了一个非常重要的事物:秤秤,实质上就是一个数据处理系统:□其一,它具备一个数据处理系统的两个基本要素:处理信息与反馈信息,称一块肉,并反馈结果:二斤六两。
□其二,它存有一个基本限制:能够处理的信息边界,例如只能称重100斤也正是因为秤的数据处理能力有限,我们才称不出大象的重量。所以整个“称象问既可以看做是“象太大",也可以看做是“秤太小”。
我们的计算机理论是基于这样一个事实,即计算系统的本质就是“算数”。而运算对象”的分割只是解决了其中“数的问题”。因此在我们将逻辑上的计算系统映一个实际实现,例如“称象”或者“计算机"时,我们也可以尝试去解决“算的问换言之,系统应付规模问题的总法则只有两个:运算能力的分布,以及运算对象的分布。
【但什么是“分布”呢?】
版权声明
本站素材均来源与互联网和网友投稿,欢迎学习分享
【节应用开发的背景与成因13:http://www.yipindushu.com/xuexifangfa/16455.html
推荐文章
01-01
1 如何激发和培养学生的学习兴趣02-28
2 成人学习汉字最高效的学习方法09-13
3 正能量语录,为你的生活注入活力01-30
4 如何提高小学生学习兴趣02-04
5 九年级语文学习方法