simula

1967年发布的Simula67是首个面向对象编程语言,它定义了现代面向对象编程的基础概念。同年,Dijkstra提出GOTO语句是有害的的观点,推动了结构化程序设计的发展。这些事件对软件技术产生了深远影响。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

simula

编辑本段简介

  1967年5月20日,在挪威奥斯陆郊外的小镇莉沙布举行的IFIP TC-2 工作会议上,挪威科学家Ole-Johan Dahl和Kristen Nygaard正式发布了Simula 67语言。Simula 67被认为是最早的 面向对象程序设计语言,它引入了所有后来面向对象程序设计语言所遵循的基础概念:对象、类、继承。之后,在1968年2月形成了Simula 67的正式文本。
  挪威科学家Ole-Johan Dahl,Kristen Nygaard
  也是在1968年,荷兰教授E.W.Dijkstra提出了“GOTO语句是有害的”观点,指出程序的质量与程序中所包含的GOTO语句的数量成反比,认为应该在一切高级语言中取消GOTO语句。这一观点在计算机学术界激起了强烈的反响,引发了一场长达数年的广泛的论战,其直接结果是 结构化程序设计方法的产生。
  相信当时没有任何人预见到当年发生的这两件事对后来计算机技术,特别是软件技术所产生的深远影响。尽管这两种方法的思想差异巨大,但是多年以后,无论是Ole-Johan Dahl和Kristen Nygaard,还是E.W.Dijkstra,都因其在这一年所取得的成就,获得了计算机界的诺贝尔奖——图灵奖。 为了纪念挪威的这两位科学家的卓越贡献,在挪威研究基金会(Norwegian Research Council)的筹划下,Simula研究所 (Simula Research Laboratory)于2001年1月正式成立。
  随着 计算机技术的迅猛发展,硬件成本不断降低,而软件成本却不断增加,因此,如何缩短软件生产周期和提高维护效率,研制出高质量的软件产品成为一个重要课题。

编辑本段程序设计思想的进步

  在20世纪60年代,软件曾出现过严重危机,由 软件错误而引起的信息丢失、系统报废事件屡有发生。为此,1968年,荷兰学者E.W.Dijkstra提出了程序设计中常用的GOTO语句的三大危害:破坏了程序的静动一致性;程序不易测试;限制了 代码优化。此举引起了软件界长达数年的论战,并由此产生了 结构化程序设计方法,同时诞生了基于这一设计方法的 程序设计语言Pascal。
  由瑞士计算机科学家Niklaus Wirth开发的Pascal,一经推出,它的简洁明了以及丰富的数据结构和控制结构,为 程序员提供了极大的方便性与灵活性,同时它特别适合微计算机系统,因此大受欢迎。 结构化程序设计思想采用了模块分解与功能抽象和自顶向下、分而治之的方法,从而有效地将一个较复杂的程序 系统设计任务分解成许多易于控制和处理的子程序,便于开发和维护。因此, 结构化方法迅速走红,并在整个20世纪70年代的软件开发中占绝对统治地位。
  但是,到了70年代末期,随着计算机科学的发展和应用领域的不断扩大,对 计算机技术的要求越来越高。结构化程序设计语言和 结构化分析与设计已无法满足用户需求的变化,于是 面向对象技术开始浮出水面。
   面向对象程序设计方法起源于Simula 67语言。在程序设计语言的发展史上,20世纪60年代后期是承上启下的重要时期。这一时期有三种重要的语言问世,即Simula 67、由一批顶尖计算机科学家共同设计的Algol 68、以及为IBM 360 系列机配套开发的PL/I。这三种语言虽均有所创新,但Simula 67的面向对象概念的影响是最巨大而深远的。它本身虽因为比较难学、难用而未能广泛流行,但在它的影响下所产生的面向对象技术却迅速传播开来,并在全世界掀起了一股OO热潮,至今盛行不衰。面向对象程序设计在软件开发领域引起了大的变革,极大地提高了软件开发的效率,为解决 软件危机带来了一线光明。
  但是,事实表明,面向对象程序设计方法虽然比结构化方法能更自然地表现现实世界,但它不是灵丹妙药,并不能解决所有问题,它本身存在固有的内在的局限性。最近兴起的 面向方面编程(AOP)正是为了改进上述程序设计方法学的不足。AOP被视为是“后” 面向对象时代的一种新的重要的程序设计技术。而从更广义的范畴看,在过去的40年里,软件 体系结构试图处理日益增长的软件复杂性,但复杂性却仍继续增加,传统的体系结构好像已经达到了其处理此类问题的极限。新兴的Web 服务通过允许应用程序以对象模型中立的方式实现互连,从而提供了一个更强大、更灵活的编程模型,并将对 软件开发方法产生巨大的影响。
<think>好的,用户的问题是想在Vim或类似编辑器中为Simula文件类型设置expandtab功能。首先,我需要确认用户对Vim配置有一定了解,但可能不熟悉如何针对特定文件类型进行设置。用户之前的问题是关于Makefile的&#39;missing separator&#39;错误,涉及到如何在Vim中配置使用Tab而非空格。现在用户的问题转向了另一个文件类型Simula,但这次需要启用expandtab,也就是将Tab转换为空格。这说明用户可能在使用不同编程语言时,需要不同的缩进规则,这需要针对不同文件类型进行配置。接下来,我需要参考用户提供的引用内容。引用[2]中提到,用户为高级语言(如C、Java)配置了expandtab,而脚本则使用noexpandtab。这说明针对不同文件类型设置不同的缩进策略是可行的,可以通过Vim的autocmd来实现。用户的问题是如何为Simula文件类型设置expandtab。首先,需要确认Vim是否已经支持Simula的文件类型检测。通常,Vim通过文件扩展名来识别文件类型,比如.sim可能是Simula的扩展名。如果Vim没有默认支持,可能需要用户自行配置filetype detection。 然后,需要编写.vimrc中的配置,使用autocmd针对filetype=simula来设置expandtab。根据引用[2]中的例子,可以设置tabstop、shiftwidth和expandtab。同时,要确保这些设置仅在Simula文件中生效,不影响其他文件类型。还需要考虑用户是否知道如何检查文件类型是否正确检测。例如,在Vim中执行:setfiletype?可以查看当前文件的类型。如果检测不正确,可能需要用户添加autocmd来关联文件扩展名和文件类型,比如将.sim文件识别为simula。此外,用户可能希望了解如何验证配置是否生效。比如,在插入模式下按Tab键,查看是否插入空格而非制表符。或者使用:set list命令显示隐藏字符,确认Tab显示为空格。最后,生成相关问题,帮助用户进一步解决可能遇到的问题,比如如何添加新的文件类型检测,或者在不同编辑器中如何实现类似配置。</think>### 在Vim中为Simula文件类型设置expandtab的完整方案 #### 一、核心配置方法 在`~/.vimrc`中添加以下配置,利用Vim的文件类型检测机制实现精准控制: ```vim " Simula文件类型配置 autocmd FileType simula set expandtab " 将Tab转换为空格[^2] autocmd FileType simula set tabstop=4 " 显示Tab宽度为4空格 autocmd FileType simula set shiftwidth=4 " 缩进操作使用4空格 ``` #### 二、验证配置生效 1. **检测文件类型识别**: ```vim :set filetype? " 应显示filetype=simula ``` 2. **检查Tab行为**: - 插入模式按`Tab`键应生成空格(显示为4个空格宽度) - 执行`:set list`查看隐藏字符,应显示空格符号`·`而非`^I` #### 三、文件类型检测增强(可选) 若Vim无法自动识别`.sim`扩展名,需手动建立文件类型关联: ```vim " 在~/.vimrc中添加类型检测规则 autocmd BufNewFile,BufRead *.sim set filetype=simula ``` #### 四、原理说明 - `expandtab`将物理Tab字符转换为空格,适用于需要严格空格缩进的语言[^2] - `tabstop`控制每个Tab的视觉宽度,与`shiftwidth`(缩进操作步长)保持同步可确保格式统一[^3] - 文件类型检测通过`autocmd`实现精准作用域隔离,避免影响其他语言配置[^1] #### 五、跨编辑器参考方案 | 编辑器 | 等效配置方法 | |-----------|--------------------------------------| | VS Code | 在设置中搜索"Editor: Insert Spaces",为`.sim`文件启用该选项 | | Sublime | 创建Simula语法定义文件,设置`"translate_tabs_to_spaces": true` | | Emacs | `(add-hook &#39;simula-mode-hook (lambda () (setq indent-tabs-mode nil)))` |
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值