“尤尼华科”电脑面世
离开摩尔学院后,埃克特而且Mauchly努力获得资金来建造他们的最新设计,他们称之为通用自动计算机,简称UNIVAC。(与此同时,他们与诺公司为了建立二进制自动计算机它于1949年完工,成为美国第一台存储程序计算机。1951年3月,这对合伙人向美国人口普查局交付了第一台UNIVAC,尽管他们的公司、他们的专利和他们的才能已经被淘汰收购了雷明顿·兰德公司于1950年发行。尽管它需要一些经验ENIAC在美国,UNIVAC从一开始就是作为存储程序计算机建造的,因此它在架构上确实不同。它使用了操作员键盘和控制台打字机用于输入和磁带的所有其他输入和输出。打印输出记录在磁带上,然后由单独的磁带打印机打印。
UNIVAC I被设计为一种商业数据处理计算机,旨在取代当时的打孔卡会计机。它每秒可以读取7200个十进制数字(它不使用二进制数字),使它成为目前最快的商业机器然而,建立。它使用埃克特的水银延迟线大大减少了所需的真空管数量(到5000个),从而使主处理器占用“仅仅”14.5 × 7.5 × 9英尺(大约4.4 × 2.3 × 2.7米)的空间。这是一台真正的商业机器,标志着学术计算研究与办公室的融合自动化19世纪末20世纪初的趋势。因此,它开创了“大铁”时代——即大规模生产的大型计算设备。
年代大铁
回顾20世纪50年代早期的计算机发展,我们必须看到许多公司和实验室都在竞争——技术竞争和日益激烈的商业竞争——以生产当时科学研究所需的少数计算机。年结束后立即启动了几个计算机建造项目二战期间1945年,主要是在美国和英国。这些项目的灵感主要来自1946年的一份文件,”电子数字计算仪器的逻辑设计初探,由数学家指导下的一个小组制作约翰·冯·诺依曼的高等研究院在普林斯顿大学.冯·诺依曼的文件被称为国际会计准则文件,清晰的表达存储程序的概念——一个被称为单一最大的概念创新在计算机的历史上。(冯·诺伊曼的原则在前面的章节中有描述走向经典计算机)。在这份报纸发行后的几年里,大多数计算机都是按照它的计划设计的,但到1950年,仍然只有少数几台存储程序计算机在工作。
当时商业用途很少,因为机器很难使用。虽然计算机制造商如雷明顿兰德,巴勒斯加法机公司,和IBM已经开始建筑但是,直到1954年,一个真正的商业计算机市场才开始出现。的IBM 650在1954年底交付给大学和企业,是国际会计准则设计的十进制实现。这款低成本磁鼓计算机的售价约为每台20万美元(与之相比,科学型号IBM 701的售价约为100万美元),IBM大获成功,最终售出了约1800台。此外,通过提供大学教学计算机科学IBM 650是一个学术折扣计划(价格降低高达60%),IBM为他们的机器建立了一批工程师和程序员。(苹果后来在美国小学采用了类似的折扣策略,早期就获得了很大比例的份额微机市场。)
一个快照这个时代也必须展示什么可以被称为计算社会学。计算机的实际使用仅限于一小群受过训练的专家,而且有人反对通过使计算机更易于使用来扩大这一群体的想法。使用机器的时间很昂贵,比需要使用机器的数学家和科学家的时间还要昂贵,而且计算机一次只能处理一个问题。结果,在某种意义上,机器比科学家更受重视。如果一项任务可以由人来完成,人们认为机器的时间就不应该浪费在它身上。公众对计算机的看法也不乐观。如果当时的电影可以作为指导,那么流行的图像是一个充满房间的大脑,由穿着白大褂的技术人员负责,神秘而有点吓人——即将通过自动化取代工作。
然而,20世纪50年代早期的机器并不比现在强大多少查尔斯巴贝奇的分析机19世纪30年代(尽管他们要快得多)。虽然原则上这些都是通用计算机,但它们在很大程度上仍然仅限于解决棘手的数学问题。它们通常缺乏执行逻辑操作的手段,而且它们几乎没有文本处理能力——例如,小写字母在机器中甚至无法表示,即使有能够打印它们的设备。
这些机器只能由专家操作,准备一个计算问题(今天称为编程)需要很长时间。由于每次只有一个人能够使用一台机器,因此产生了主要的瓶颈。问题就像等待回旋加速器或航天飞机.这台机器的大部分珍贵的因为一次只做一件事,时间就被浪费了协议.
总之,机器很贵,市场还很小。为了在更广阔的商业市场甚至更广阔的科学市场中发挥作用,计算机需要应用程序:文字处理器、数据库程序,等等。这些应用程序反过来又需要编程语言来编写它们,并需要操作系统来管理它们。
编程语言
早期计算机语言发展
机器语言
一个含义存储程序模型的特点是,程序可以读取并操作其他程序作为数据;也就是说,他们有能力self-modification。康拉德·祖泽把这种可能性看作是“与魔鬼订立契约”,因为有滥用的可能,他选择不这样做实现在他的机器里。但要实现真正的通用机器,自我修正是必不可少的。
自我修正的最初应用之一是用于计算机语言翻译这里的“语言”指的是使机器工作的指令。尽管最早的机器是通过翻转开关工作的,但存储程序机器是由存储的编码指令驱动的,对这些指令进行编码的约定被称为机器语言。
为早期的计算机编写程序意味着使用机器的语言。特定机器语言的形式是由其物理和逻辑结构决定的。例如,如果机器使用寄存器来存储计算的中间结果,则必须有在这些寄存器之间移动数据的指令。
的词汇和规则语法机器语言往往非常详细,与通常用来表述问题的自然语言或数学语言相去甚远。将问题自动翻译成机器语言的愿望对用户来说是显而易见的,为了使用机器,他们要么自己成为计算机专家和程序员,要么不得不依赖可能不完全理解他们翻译的问题的专家和程序员。
从纯数学或其他方面的自动翻译"高级语言因此,在计算机对更广泛的用户有用之前,对机器语言来说是必要的。早在19世纪30年代,查尔斯·巴贝奇(Charles Babbage)和拉芙莱斯夫人(Lady Lovelace)就已经认识到这样的翻译可能是正确的完成机器(看到前面的部分Lovelace女士,第一个程序员),但他们没有尝试继续这个想法,只是简单地用机器语言编写程序。
霍华德·艾肯他也看到了从高级语言到机器语言的自动翻译的优点。艾肯提出了一种编码机器,它将专门负责这项任务,接受高级程序,并产生计算机将处理的实际机器语言指令。
但实际上并不需要一台单独的机器。IAS模型保证了存储程序计算机将具有权力作为自己的编码机器。翻译程序是用机器语言编写并在计算机上运行的,它将以数据的形式输入目标程序,然后输出机器语言指令。这个计划完全是可行的但是这些机器的成本太高,以至于用它们来做人类能做的任何事情——包括程序翻译——都被认为是不划算的。
事实上,有两股力量反对高级计算机语言的早期发展。一个是怀疑任何计算机操作员“神职人员”之外的人都可以或愿意直接使用计算机。因此,早期的计算机制造商认为,没有必要让那些本来就不会使用它们的人更容易接触到它们。第二个原因是效率.任何翻译过程都必然会增加解决问题所需的计算时间,而数学家和操作员按小时计算要比计算机便宜得多。
尽管如此,程序员们确实为计算机教学提出了专门的高级语言(hll)——即使没有自动翻译器将他们的程序转换成机器语言。他们只是徒手翻译。他们这样做是因为用介于数学和机器的高度详细语言之间的中间编程语言来转换问题,这样做的好处是更容易理解程序的逻辑结构,并纠正或调试程序中的任何缺陷。
因此,早期的hll都是以一种中间形式重铸问题的纸笔方法,这使得为机器编写代码变得更容易。赫尔曼·戈尔茨廷和他的妻子阿黛尔·戈尔茨廷以及约翰·冯·诺伊曼共同创造了这个过程的图形表示:流程图。尽管这些图表只是一种表示法,但它们被广泛传播并产生了巨大的影响,演变成了今天我们所知的流程图。
Zuse的Plankalkul
Konrad Zuse在1944-45年间开发了第一种真正的编程语言Plankalkül(“计划微积分”)。Zuse的语言允许创建过程(也称为例程或子例程;存储的代码块可能是调用重复执行常规操作(如取平方根)和结构化数据(如数据库中的记录,其中包含字母和数字数据,例如,表示姓名、地址和出生日期)。此外,它还提供了可以修改程序执行的条件语句,以及重复或循环语句,这些语句会导致有标记的语句块或子例程被重复指定次数或只要某些条件存在。
祖斯知道电脑能做的不仅仅是算术,但他意识到倾向让他们把电脑看成是计算器。因此,他煞费苦心地用Plankalkül演示了非数值解。他编写程序来检查布尔表达式(逻辑和文本处理中的一个应用程序)的语法正确性,甚至检查国际象棋的走法。
与流程图不同的是,Zuse的程序并不是为数学家的笔和纸翻译而设计的中间语言。它是专门为机器翻译而设计的,Zuse为此做了一些工作实现Plankalkül的翻译。不过,他并没有走多远;战争快结束时,他不得不把他的机器拆开,好几年都没能重新组装起来,继续工作。不幸的是,他的语言和作品大约领先于他们的时代十几年,在德国以外的地方并不为人所知。
口译员
从20世纪40年代末存储程序时代开始,HLL编码就被尝试过。short- code,或者说short-order code,实际上是第一个这样的语言实现.由John Mauchly在1949年提出,由William Schmitt实施BINAC计算机在那一年和“尤尼华科”电脑面世在1950年。Shortcode经历了多个步骤:首先,它将语言的字母语句转换为数字代码,然后将这些数字代码转换为机器语言。它是一个解释器,意思是它翻译HLL语句,然后逐个执行——一个缓慢的过程。由于解释器执行速度慢,现在很少在程序开发之外使用,它们可以帮助程序员快速定位错误。
编译器
一个替代这种方法就是现在所说的编译.在编译,整个HLL程序被转换为机器语言并存储以供以后执行。尽管翻译可能需要几个小时甚至几天的时间,但一旦翻译后的程序被存储起来,就可以随时以快速执行的机器语言程序的形式将其召回。
1952年海因茨·鲁蒂斯豪泽在战后曾与祖斯一起研究他的电脑,他写了一篇很有影响力的论文,自动设计,自动规划,自动设计,自动设计(大致可译为“代码到机器语言的计算机自动转换”),在这本书中,他奠定了编译器的基础建设并描述了两个提议的编译器。Rutishauser后来参与创建了一个最仔细定义的编程早期的语言,大陵五.(看到下一节,FORTRAN,COBOL和ALGOL。)
1952年9月,Alick Glennie是一名学生曼彻斯特大学他创建了第一个名为自动编码曼彻斯特马克一号.Autocode是第一个实际实现的编译器。(它编译的语言是同名的。)然而,格兰妮的编译器对她的影响很小。当J. Halcombe Laning为旋风电脑在麻省理工学院(麻省理工学院)两年后,他遇到了类似的缺乏兴趣。这两个编译器都有一个致命的缺点,那就是生成的代码比用机器语言手写的代码运行得慢(在拉宁的例子中,慢了10倍)。
FORTRAN, COBOL和ALGOL
格蕾丝·默里·霍珀
尽管计算机资源的高成本使得快速手工编码的机器语言程序变得更加重要,但有个人不知疲倦地致力于推广高级编程语言及其关联的编译器。格蕾丝·默里·霍珀教授数学瓦萨尔学院波基普西,纽约从1931年到1943年,他加入了美国海军预备役。1944年,她被分配到局的军械计算项目哈佛大学在那里,她在霍华德·艾肯(Howard Aiken)的指导下编写了Mark I。二战后,她加入了美国小普雷斯珀·埃克特,约翰Mauchly在他们的新公司,除了其他事情,写编译器软件BINAC和UNIVAC系统。在整个20世纪50年代,霍珀在美国各地积极宣传高级语言,并通过她的公开露面帮助消除了对这一想法的阻力。这种敦促在IBM得到了认可,管理层希望在公司成功的商业机器系列中增加计算机。