Questions tagged «history»

有关编程和计算历史的问题。

9
“仅返回”的概念从何而来?
我经常跟程序员谁说:“ 不要把多个return语句相同的方法。 ”当我问他们告诉我的原因,我得到的是“ 编码标准是这么说的。 ”或者“ 这是令人困惑的。 ”当他们通过单个return语句向我展示解决方案时,代码对我来说看起来更难看。例如: if (condition) return 42; else return 97; “ 这很丑,您必须使用局部变量! ” int result; if (condition) result = 42; else result = 97; return result; 50%的代码膨胀如何使程序更易于理解?我个人觉得比较困难,因为状态空间刚刚增加了另一个很容易避免的变量。 当然,通常我会写: return (condition) ? 42 : 97; 但是许多程序员避免使用条件运算符,而是喜欢长格式。 “仅返回”的概念从何而来?产生这种约定是否有历史原因?



4
苏联的太空计划使用了哪些软件编程语言?
我对苏联的太空计划产生了兴趣,并有兴趣发现Buran航天器上的软件大约是1988年用Prolog编写的。 有谁知道在较早的任务中可能使用了哪些语言,尤其是1970年代初期的Mars PrOP-M火星漫游者任务,这些任务在某种程度上是自主的并且可以越过障碍物? 编辑 我来自Buran Prolog的资料是1990年5月从CIA网站获得的这份解密文件。我找不到OCR版本,因此这里是p中的相关引文。0449: 根据开放源文献,苏联人使用法国开发的编程语言Prolog来为Buran车辆开发车载系统软件...


6
Java 8为什么不包含不可变的集合?
Java团队做了很多出色的工作,消除了Java 8中函数编程的障碍。特别是,对java.util集合的更改在将转换链接到非常快速的流式操作方面做得很好。考虑到他们在集合上添加一流的函数和函数方法做得多么出色,为什么他们完全无法提供不可变的集合甚至不可变的集合接口呢? 在不更改任何现有代码的情况下,Java团队可以随时添加与可变接口相同的不可变接口,减去“ set”方法并使现有接口从其扩展,如下所示: ImmutableIterable ____________/ | / | Iterable ImmutableCollection | _______/ / \ \___________ | / / \ \ Collection ImmutableList ImmutableSet ImmutableMap ... \ \ \_________|______________|__________ | \ \___________|____________ | \ | \___________ | \ | \ | List Set Map ... 当然,诸如List.add()和Map.put()之类的操作当前会返回给定键的布尔值或先前值,以指示该操作是成功还是失败。不可变集合必须将此类方法视为工厂,并返回包含添加元素的新集合-该集合与当前签名不兼容。但这可以通过使用其他方法名称(例如ImmutableList.append()或.addAt()和ImmutableMap.putEntry())来解决。由此产生的冗长性将远远超过使用不可变集合的好处所抵消,并且类型系统将防止调用错误方法的错误。随着时间的流逝,旧的方法可能会被弃用。 永恒收藏的胜利: 简单性-当基础数据不变时,关于代码的推理就更简单了。 文档-如果某个方法采用不可变的集合接口,则您将知道它不会修改该集合。如果某个方法返回一个不可变的集合,则说明您无法对其进行修改。 并发-不可变集合可以在线程之间安全地共享。 …

14
为什么0为假?
这个问题听起来很愚蠢,但是为什么大多数编程语言都将0求值false和其他任何[整数]值true呢? 字符串比较 由于问题似乎太简单了,所以我将对自己进行一些解释:首先,对于任何程序员来说,这似乎都是显而易见的,但是为什么没有编程语言呢?实际上可能是,但是没有我用了-在哪0求和true,所有其他[整数]值都在false?这句话似乎是随机的,但我举了一些例子,可能是个好主意。首先,让我们以字符串三向比较为例,以C strcmp为例:任何以C为第一语言的程序员都可能会编写以下代码: if (strcmp(str1, str2)) { // Do something... } 由于strcmp返回的0结果是评估false字符串何时相等,因此初阶程序员尝试执行的操作很失败,而且他通常一开始并不理解为什么。曾0评估,以true代替,这个功能可能已在其最简单的表达式中使用-上面的一员-平等的比较时,以及适当的检查-1,并1在需要时将已只是做。bool在大多数情况下,我们会认为返回类型是(在我们看来)。 此外,我们引入一个新的类型,sign即只需要值-1,0和1。那可能很方便。想象一下,在C ++中有一个太空飞船运算符,我们想要它std::string(好吧,已经有compare函数了,但是太空飞船运算符更有趣)。该声明当前将是以下声明: sign operator<=>(const std::string& lhs, const std::string& rhs); 已经0被评估为true,飞船运营商甚至不存在的,我们可以宣称operator==这种方式: sign operator==(const std::string& lhs, const std::string& rhs); 这operator==将立即处理三向比较,并且仍然可以用于执行以下检查,同时在需要时仍能够检查哪个字符串在字典上优于另一个字符串: if (str1 == str2) { // Do something... } 旧错误处理 现在我们有了例外,因此本部分仅适用于不存在此类旧语言的旧语言(例如C)。如果我们看一下C的标准库(还有POSIX),我们可以肯定地看到maaaaany函数0在成功时返回,否则返回任何整数。我可悲地看到有些人做这种事情: #define TRUE 0 // ... if (some_function() == …

14
是什么触发了lambda函数在现代主流编程语言中的流行?
在过去的几年中,匿名函数(又名lambda函数)已成为一种非常流行的语言结构,几乎每种主流/主流编程语言都已经引入了它们,或计划在即将发布的标准修订版中引入它们。 但是,匿名函数是数学和计算机科学中一个非常古老且非常著名的概念(由数学家Alonzo Church于1936年左右发明,并自1958年以来被Lisp编程语言使用,请参见此处)。 那么,为什么今天的主流编程语言(其中许多起源于15至20年前)从一开始就不支持lambda函数,而仅在后来才引入它们呢? 在过去的几年中,是什么导致了匿名功能的广泛采用?是否有某种特定的事件,新的要求或编程技术引发了这种现象? 重要的提示 这个问题的重点是在现代主流(因此,除了少数例外,非功能性)语言中引入匿名功能。另外,请注意,匿名函数(块)存在于Smalltalk中,这不是一种功能语言,并且标准命名函数甚至在程序语言(如C和Pascal)中已经存在很长时间了。 请不要通过谈论“采用功能范式及其好处”来概括您的答案,因为这不是问题的主题。


11
“ goto”语句导致什么样的错误?有历史上重要的例子吗?
我知道,除了打破嵌套在循环中的循环之外,其他方法都是这样。该goto语句是易于出错的编程风格,因此一直被人们回避和谴责。 替代文字: “尼尔·斯蒂芬森(Neal Stephenson)认为给他的唱片公司定名为“ dengo”很可爱”, 请参见以下原始漫画:http://xkcd.com/292/ 因为我很早就学到了 对于什么类型的错误goto实际上导致什么,我真的没有任何见识或经验。那么我们在这里谈论什么: 不稳定吗? 无法维护或无法读取的代码? 安全漏洞? 还有其他东西吗? 实际上,“ goto”语句会导致哪种错误?有历史上重要的例子吗?

3
为什么编程语言(尤其是C)使用大括号而不是方括号?
实际上,“ C样式语言”的定义可以简化为“使用花括号({})”。我们为什么要使用该特定字符(为什么不使用更合理的字符(如[],至少在美国键盘上不需要Shift键)? 这些花括号会给程序员的生产力带来实际的好处,还是新的语言设计师应该寻找替代品(例如,Python背后的人)? Wikipedia告诉我们C 使用大括号,但不是为什么。Wikipedia上有关基于C的编程语言列表的一篇文章表明,此语法元素有些特殊: 广义上讲,C系列语言是使用类似C的块语法的语言(包括大括号来开始和结束块)。

2
到底是什么JavaScript?
这一切始于我正在寻找一种方法来测试我的网页的JavaScript一致性,例如W3C HTML Validator。我还没有找到。所以让我知道你是否知道任何... 我在JavaScript的官方页面中找到了ECMA Script。这些人已经将脚本语言标准化(我不再喜欢用JavaScript!),并将其称为ECMA-262(维基百科)。他们的最新作品是5.1版 JavaScript由Mozilla Corporation开发,其最后一个稳定版本是1.8.5(请参阅此),它基于ECMA的5.1版。 链接的Wikipedia页面提到了方言。Mozilla的JavaScript 1.8.5与JScript 9(IE)和JavaScript(Chrome的V8 [ Wiki ])以及许多其他语言一起被列为方言。我是否知道JavaScript 1.8.5是ECMA-262的派生产品,而SpiderMonkey [ Wiki ]是运行它的引擎?Chrome拥有自己的方言,而运行它的程序是V8引擎? 基于所有基于ECMA-262的方言,我再也无法理解“什么是JavaScript ”?有没有真正的跨浏览器脚本语言?各种实现者是否齐心协力就方言交叉兼容性达成共识?这是ECMA的努力吗?


4
那么,“艾伦·凯”这个真正的“面向对象”是什么意思?
据报道,艾伦·凯(Alan Kay)是“面向对象”一词的发明者。人们经常引用他所说的话,今天我们所说的面向对象不是他的意思。 例如,我刚刚在Google上找到了这个: 我用“面向对象”这个词来形容,我可以告诉你我没有C ++ -艾伦·凯(Alan Kay),OOPSLA '97 我依稀记得听到一些非常有见地的关于他没有意思。类似于“消息传递”的东西。 你知道他的意思吗?您能否详细说明他的意思以及它与当今常见的OO有何不同?如果有的话,请分享一些参考。 谢谢。

10
为什么艾伦·凯(Alan Kay)说:“互联网做得很好,但是网络是由业余爱好者提供的”?
好的,我这样解释。完整报价: 互联网做得如此之好,以至于大多数人将其视为像太平洋这样的自然资源,而不是人造的。上一次具有如此规模的技术如此无误的是什么时候?相比之下,网络是个玩笑。网络是由业余爱好者完成的。-艾伦·凯(Alan Kay)。 我正在尝试了解Internet和Web的历史,并且这种说法很难理解。我在其他地方读到过,互联网现在所使用的东西与设计时所用的东西截然不同,也许是其中的原因。 是什么使互联网如此出色,什么使网络如此业余? (当然,艾伦·凯很容易犯错,这里没有人是艾伦·凯,所以我们无法确切知道他为什么这么说,但是有什么可能的解释?) *另请参见原始采访 *。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.