Fortran和ALGOL语言历史大揭秘

Fortran

Fortran全名为FORmula TRANslation(公式转换),被称为第一代(被推广使用的)高级编程语言(同时代还有ALGOL语言),最早是IBM为704计算机做科学计算,将公式翻译成机器码,由John Backus领导设计。Fortran从最早50年代开始,一直到21世纪,还在不断发展。

最早1951年Rutishauser提出用编译程序实现高级语言的思想,Backus领导用汇编语言完成FORTRAN I.

重大发展

  • FORTRAN 早期版本就已经定义了一种高级语言应该有的基本样子,包括变量定义、子程序和过程。
  • FORTRAN 66引入数组下标。
  • FORTRAN 77之前后缀名是.for, Fortran 90之后用.f90.
  • Fortran90引入了自由格式,Fortran 90之前标准全部用大写字母FORTRAN,之后标准名称改为Fortran.
  • Fortran 2003增加了面向对象设计。

发展历史

  • Fortran有后面这些版本:I(54)/II(58)/IV(62)/66/77/90/95/2003/2018/2023(TBD).
  • FORTRAN II引入了复数类型和双精度浮点数。
  • FORTRAN 77增加了条件语句IF/ELSE.
  • Fortran 90更自由,不受之前面对卡片的固定栏目布局限制,不要求全部大写字母写代码,增加了用户自定义类型,引入指针机制,允许递归调用,支持do .. while循环,此时Fortran已具备向量和并行计算能力。
  • 1993年高性能Fortran HPF标准诞生,旨于支持并行计算和不同计算机可移植。
  • 第一个MATLAB是用FORTRAN编写。

编译执行

  • 编译型语言,编译链接成平台二进制代码再执行。

编译器

  • Intel Fortran
  • GCC gfortran
  • simply Fortran
  • PGI Fortran
  • NAG Fortran
  • Absoft Fortran

ALGOL

ALGOL,全称为算法语言(Algorithmic Language),受FORTRAN设计影响,它的设计初衷是为了让程序员更加方便地描述和实现算法,使得程序设计更加简单明了。虽然很多程序员根本不知道它的存在或者了解很少,但它为编程语言基础概念发展提供了极其宝贵的价值,可谓理论价值胜于实际价值。

示例代码

begin

printf(($gl$,"Hello, world!"))

end

重要发展

  • 最早命名为IAL(国际代数语言,International Algebraic Language), 后来改为ALGOL 58.
    • 复合语句概念(仅用于控制流)。
    • 赋值用:=, 相等用=.
    • 数组下标概念。
    • 嵌套过程声明。
    • 数字语句label.
    • switch标志。
    • 变量声明可以在程序任意位置,不必一定在procedure开始。
  • ALGOL 60引入了:
    • void类型。
    • 代码块(扩展了ALGOL 58的复合语句),使用BEGIN和END(后期改为小写begin和end).
    • 修改变量声明只能在procedure开始。
    • 它依然没有输入输出功能,原因是标准委员会意见不统一,标准输入输出留给编译器和使用者决定。这对于语言普及有很大影响。
    • BNF范式作为语言设计的文法规则,对后续编程语言影响甚远。
    • 词法作用域。
    • 函数定义嵌套。
    • 递归概念。
    • 圆括号()表达式求值,安排运算优先级。
    • 控制流程if/goto/for.
    • 过程procedure.
    • 过程参数传递方式:按值传递和按名字传递。
  • ALGOL 68标准相当庞大复杂,有很多学院理论气息,也能看到这些大师的功底,不少是现代编程语言才有的特性,不过编译器和实现极为困难,但C和Pascal深受它影响。
    • WHILE、CASE语句。
    • 切片(没错,就是Python的切片)。
    • 并行处理(你没听错,真的是并行同步控制的语句)。
    • 讨论是否引入"匿名函数"。
    • 共用体union.
    • 引用。

编译器

  • Dijkstra编写第一个ALGOL 60编译器。


微风不燥,阳光正好,你就像风一样经过这里,愿你停留的片刻温暖舒心。

我是程序员小迷(致力于C、C++、Java、Kotlin、Android、iOS、Shell、JavaScript、TypeScript、Python等编程技术的技巧经验分享),若作品对您有帮助,请关注、分享、点赞、收藏、在看、喜欢,您的支持是我们为您提供帮助的最大动力。

欢迎关注。助您在编程路上越走越好!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/438089.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【重学 MySQL】四十九、阿里 MySQL 命名规范及 MySQL8 DDL 的原子化

【重学 MySQL】四十九、阿里 MySQL 命名规范及 MySQL8 DDL 的原子化 阿里 MySQL 命名规范MySQL8 DDL的原子化 阿里 MySQL 命名规范 【强制】表名、字段名必须使用小写字母或数字,禁止出现数字开头,禁止两个下划线中间只出现数字。数据库字段名的修改代价…

Java 计算器项目

更多有趣请关注公众号 计算器项目 代码仓库:https://gitee.com/wengxiulin/vs_code 项目图片 项目简介 这是一个用 Java 编写的简单计算器应用程序,具有基本的数学运算功能。该计算器支持加、减、乘、除等运算,并提供用户友好的图形界面…

【STM32】TCP/IP通信协议(2)--LwIP内存管理

五、LWIP内存管理 1.什么是内存管理? (1)内存管理,是指软件运行时对计算机内存资源的分配的使用的技术,其主要目的是如何高效、快速的分配,并且在适当的时候释放和回收内存资源(就比如C语言当…

使用微服务Spring Cloud集成Kafka实现异步通信(消费者)

1、本文架构 本文目标是使用微服务Spring Cloud集成Kafka实现异步通信。其中Kafka Server部署在Ubuntu虚拟机上,微服务部署在Windows 11系统上,Kafka Producer微服务和Kafka Consumer微服务分别注册到Eureka注册中心。Kafka Producer和Kafka Consumer之…

Mybatis框架梳理

Mybatis框架梳理 前言1.ORM2.模块划分2.1 ORM的实现2.2 SQL的映射2.3 插件机制2.4 缓存机制2.5 其他 3. 愿景 前言 如果让我聊一聊mybatis,我该怎么说呢?开发中时时刻刻都在用它,此时此刻,脑海中却只浮现ORM框架这几个字&#xff…

[每周一更]-(第117期):硬盘分区表类型:MBR和GPT区别

文章目录 1. **支持的磁盘容量**2. **分区数量**3. **引导方式**4. **冗余和数据恢复**5. **兼容性**6. **安全性**7. **操作系统支持**8. 对比 国庆假期前补一篇 在一次扫描机械硬盘故障的问题,发现我本机SSD和机械硬盘的分类型不一样,分别是GPT和MBR&a…

Vue3轻松实现前端打印功能

文章目录 1.前言2.安装配置2.1 下载安装2.2 main.js 全局配置3.综合案例3.1 设置打印区域3.2 绑定打印事件3.3 完整代码4.避坑4.1 打印表格无边框4.2 单选框复选框打印不选中4.3 去除页脚页眉4.4 打印內容不自动换行1.前言 vue3 前端打印功能主要通过插件来实现。 市面上常用的…

C语言 | Leetcode C语言题解之第450题删除二叉搜索树中的节点

题目: 题解: struct TreeNode* deleteNode(struct TreeNode* root, int key){struct TreeNode *cur root, *curParent NULL;while (cur && cur->val ! key) {curParent cur;if (cur->val > key) {cur cur->left;} else {cur c…

telnet发送邮件教程:安全配置与操作指南?

telnet发送邮件的详细步骤?怎么用telnet命令发邮件? 尽管现代邮件客户端和服务器提供了丰富的功能和安全性保障,但在某些特定场景下,了解如何使用telnet发送邮件仍然是一项有价值的技能。AokSend将详细介绍如何安全配置和操作tel…

github/git密钥配置与使用

零、前言 因为要在ubuntu上做点东西,发现git clone 的时候必须输账户密码,后来发现密码是token,但是token一大串太烦了,忙了一天发现可以通过配置 公钥 来 替代 http 的 部署方式。 一、生成 ssh 密钥对 我们先测试下能不能 连接…

C语言复习概要(一)

本文 C语言入门详解:从基础概念到分支与循环1. C语言常见概念1.1 程序的基本结构1.2 变量作用域和存储类1.3 输入输出1.4 编译与运行 2. C语言中的数据类型和变量2.1 基本数据类型2.2 变量的声明与初始化2.3 常量与枚举 3. C语言的分支结构3.1 if语句3.2 if-else语句…

0108 Spring Boot启动过程

Spring Boot 的启动过程可以分为以下几个关键步骤: 1. SpringApplication 初始化 Spring Boot 应用的启动是通过调用 SpringApplication.run() 方法完成的。在这个过程中,Spring Boot 会通过 SpringApplication 类对应用进行初始化,包括设置…

国庆节快乐前端(HTML+CSS+JavaScript+BootStrap.min.css)

一、效果展示 二、制作缘由 最近,到了国庆节,自己呆在学校当守校人,太无聊了,顺便做一个小demo帮祖国目前庆生!!! 三、项目目录结构 四、准备工作 (1)新建好对应的文件目录 为了方便&#xff…

Linux驱动开发(速记版)--设备树插件

第六十八章 设备树插件介绍 Linux 4.4之后引入了动态设备树,其中的设备树插件(Device Tree Overlay)是一种扩展机制,允许在运行时动态添加、修改或删除设备节点和属性。 设备树插件机制通过DTS(设备树源文件&#xff0…

挖矿病毒记录 WinRing0x64.sys

之前下载过福晰pdf编辑器,使用正常。 某天发现机器启动后,过个几分钟(具体为5min)会自动运行几个 cmd 脚本(一闪而过),但是打开任务管理器没有发现异常程序(后面发现病毒程序伪装成System系统程序,见下图)…

SpringCloud Config配置中心 SpringCloud Bus消息总线

一、SpringCloud Config 使用git储存配置信息 1)什么是 SpringCloud Config项目实现的目标是将配置文件从本地项目中抽出来放到git仓库中,项目启动时自动从git仓库中取配置文件。 但是本地项目不直接和git仓库通信,而是通过配置服务器中转。…

python如何查询函数

1、通用的帮助函数help() 使用help()函数来查看函数的帮助信息。 如: import requests help(requests) 会有类似如下输出: 2、查询函数信息 ★查看模块下的所有函数: dir(module_name) #module_name是要查询的函数名 如: i…

vmvare虚拟机centos 忘记超级管理员密码怎么办?

vmvare虚拟机centos 忘记超级管理员密码怎么办?如何重置密码呢? 一、前置操作 重启vmvare虚拟机的过程中,长按住Shift键 选择第一个的时候,按下按键 e 进入编辑状态。 然后就会进入到类似这个界面中。 在下方界面 添加 init=/bin/sh,然后按下Ctrl+x进行保存退出。 init=/bi…

iPhone、iPad、iOS储存空间不足,瘦身终极方法

如果你实在是需要瘦身,但是确实没有什么可以删除了,也不想备份到其他地方,就这样做。 删除不需要的自带应用。 你可以删除FaceTime、股票、等app,但是不要删除你需要的app。 删除的界限是这样的:你永远都不可能使用…

OceanBase企业级分布式关系数据库

简介 OceanBase 数据库是阿里巴巴和蚂蚁集团不基于任何开源产品,完全自研的原生分布式关系数据库软件,在普通硬件上实现金融级高可用,首创“三地五中心”城市级故障自动无损容灾新标准,具备卓越的水平扩展能力,全球首…