选择编程语言先决条件

出处: 《代码大全》

实现系统的语言对你来说是有重大意义的,因为从创建工作开始到结束你都要沉浸其中。
研究表明,程序语言选择可以通过几方面影响生产率和编码质量。
当程序员使用自己所熟悉的语言时,其工作效率要比使用陌生的语言高得多。TRW 公司的
数据表明,两个水平和经验相当的程序员如果一个用一种他已用了三年的语言编程,而另一个
则用一种他所陌生的语言编程,那么前者的效率要比后者高 30%。IBM 的调查表明,一个在某
种语言上经验丰富的程序员,其效率要比在这种语言上没什么经验的程序员高三倍(Walston
和 Felix 1977)。
使用高级语言编程,其效率和质量要比使用低级语言高得多。Pascal 和 Ada 语言的效率、
可靠性、简单性和可懂性是低级语言,如汇编和机器语言的 5 倍(Brooks 1987)。由于不必每
次都为机器正确地执行了指令而欢呼,你当然可以节省许多时间。同时,高级语言的表达能力
比低级语言要高,这样,它的每一行代码就可以表达更多的内容。表 3-2 给出了在代码量相同
的情况下,高级语言所表达的原指令与低级语言的比值(以汇编语言为代表)。


IBM公司的数据从另一个方面指出了语言特性是如何影响效率的,用解释语言工作的程序
员往往比用编译语言工作的程序员的效率更高(Jones 1986)。许多种语言都有解释和编译两种
形式(如多种版本的 c 语言),你可以用高效率的解释形式,然后再把它们转换成更容易执行的
编译形式。
一些语言比其它语言更擅长解释编程思想。你可以把自然语言(如英语)和程序语言(如
Pascal 和汇编语言)进行对比。在自然语言中,语言学家 Sapir 和 Whorf 提出的假想指出,在一
种语言的表达能力和其所能思考的问题之间存在着联系,你思考某一问题的能力取决于你所懂
得的关于这一问题的词汇。如果你不懂那些词汇,那你也就不能表达那些思想,你甚至根本无
法形成那些思想。
程序员也可能同样受到他所懂得的程序语言限制。在某种程序语言方面你所懂得的词汇,
当然会决定你如何表达你的编程想法,还很可能决定你将表达什么样的思想。
程序语言影响程序员的思想方法。一个典型的故事是这样说的:“我们正用 Pascal 语言开发
一个新的系统,而我们的程序员们却并不熟悉 Pascal 语言,他们都是搞 Fortran 语言出身的。结
果他们写出的是用 Pascal 编译的代码,但是他们真正使用的却是变形的 Fotran 语言。他们用
Fortran 的不好的特性(goto 语句和全局数据)歪曲了 Pascal 语言,而同时又把 Pascal 丰富的控
制和数据结构弃之不用”。这种现象在整个软件业都有报道(Hanson 1984,Yourdon 1986)。
3.5.1 语言描述
某些语言的发展史同其通用功能一样令人感兴趣。以下是关于一些在本书中所举的例程中所
出现的语言的描述。
Ada 语言
是一种在 Pascal 语言基础上发展的通用高级语言,它是在国防部的要求和资助下发展起来
的,特别适用于实时和嵌入式系统。Ada 强调数据抽象和信息隐蔽,迫使你区分模块的公共和
局部部分。
把这种语言命名为“Ada”是为了纪念数学家 Ada lovelace,她被公认为世界上的第一个程
序员,从 1986 年起,北约组织和国防部的所有关键任务嵌入式系统都采用 Ada 语言。
汇编语言
汇编语言,是一种低级语言,每一条语句都与一条机器指令相对应。由于语句使用特定的
机器指令,所以汇编语言是针对特定处理器的,比如 Intel 80x86 或者 Motorala 680x0。汇编是
第二代计算机语言,除非是执行速度或代码空间的需要,绝大多数程序员都避免使用它。
Basic 语言
Basic 是由 Dartmouth 学院的 John Kemeny 和 Thormas Kurtz 开发的一种高级语言。由字首
组成的 BASIC 的意思是初学者的全功能符号指令代码(Beginner’ s All-Purpos Symbolic Instruction Code),Basic 主要用于教学生们编程。由于 IBM-PC 机包含了它而使其在微机中风
行一时,Basic 原来是一种解释性语言,现在则解释性和编译性两种形式都有。
C 语言
C 是一种中级通用语言,本来是和 UNIX 操作系统相关的。C 有某些高级语言的特点,例
如,结构化数据、结构化控制流、对于机器的独立性、丰富的操作指令等。它也被称作“可移
植的汇编语言”,因为它广泛地使用了指针和地址,具有某些低级组成部分,如位操作,而且是
弱类型的。
C 是在七十年代由贝尔实验室 Dennis Ritchie 开发的。C 本来是为 DEC PDP-11 设计的,
它的操作系统、C 编译器和 UNIX 应用程序都是用 C 编写的。1988 年,ANSI 公布了 C 的编码
标准,这成了微机和工作站编程的通用标准。
C++语言
C++,是一种面向对象的语言,与 C 相似,由贝尔实验室的 Bjarne Stroustrup 于 1980 年开
发,除了与 C 兼容之外,C++提供了多态性和函数重载功能,同时,它还提供了比 C 更坚固的
类型检查功能。
Fortran 语言
Fortran 是一种高级语言,引入变量和高级循环的概念。Fortran 代表 Formula Translation,
即公式翻译的意思。 Fortran 最初是在五十年代由 Jim Bckus 开发,并且做过几次重大修订.包
括 1977 所发表的 Fotran-77,其中增加了块结构化的 IF-THEN-ELSE 语句和字符串操作。
Fortran-90 增加由用户定义的数据类型、指针、模块和丰富的数组操作。在写本书的时候(1992
年末)。Fortran 标准是如此引发争议,以致绝大多数语言商都没能最终完成它。本书中所引用
的是 Fortran-77 标准。Fortran 语言主要在科学和工程计算中使用。
Pascal 语言
Pascal 是为了教学目的而开发的高级语言。其主要特征是严格的类型、结构化控制创建和
结构化数据类型。它是在六十年代末由 Niklaus Wirth 开发,到了 1984 年,由于 Borland 国际
公司引入了微机使用的低成本编译程序,Pascal 就流行起来了。
3.5.2 语言选择快速参考表
表 3-3 给出了关于不同语言适用范围的简略参考。它也可以帮你选择应该进一步了解的语
言。但是,不要试图用它来代替对你某一特定计划进行语言选择时的详细评估。以下的排序是
很粗略的,因此阅读时应仔细辨别,因为很可能会有许多例外。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
图像直方图匹配是一种图像处理技术,其目的是通过调整图像的灰度级分布来改善图像的质量。直方图均衡化是一种常见的直方图匹配技术,可以将原始图像中的像素灰度值分布转换为更均匀的分布。但有时候,我们需要将一张图像的灰度级分布匹配到另一张图像的灰度级分布上,这就需要使用直方图匹配算法。 直方图匹配的基本思想是将目标图像的累积直方图映射到参考图像的累积直方图上,从而实现两幅图像的灰度分布匹配。下面给出一份基于Python语言实现的直方图匹配程序: ```python import cv2 import numpy as np # 读取目标图像和参考图像 target_img = cv2.imread('target.jpg', cv2.IMREAD_GRAYSCALE) reference_img = cv2.imread('reference.jpg', cv2.IMREAD_GRAYSCALE) # 计算目标图像和参考图像的直方图 target_hist, _ = np.histogram(target_img.flatten(), 256, [0, 256]) reference_hist, _ = np.histogram(reference_img.flatten(), 256, [0, 256]) # 计算目标图像和参考图像的累积直方图 target_cum_hist = np.cumsum(target_hist) reference_cum_hist = np.cumsum(reference_hist) # 对目标图像进行直方图匹配 mapping = np.zeros(256, dtype=np.uint8) for i in range(256): j = 0 while reference_cum_hist[j] < target_cum_hist[i] and j < 255: j += 1 mapping[i] = j matched_img = mapping[target_img] # 显示结果 cv2.imshow('Target Image', target_img) cv2.imshow('Reference Image', reference_img) cv2.imshow('Matched Image', matched_img) cv2.waitKey(0) cv2.destroyAllWindows() ``` 该程序首先读取目标图像和参考图像,并计算它们的直方图和累积直方图。然后,对于每个目标图像中的像素值,找到与之最接近的参考图像中的像素值,并将其赋值给匹配后的图像。最终,程序显示了原始图像、参考图像和匹配后的图像。 需要注意的是,该程序假设目标图像和参考图像的尺寸和灰度级范围相同。如果两幅图像不同,则需要对它们进行调整,以满足这些先决条件

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值