Questions tagged «history»

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

2
谁先进行了异步/等待?
Python在2015年在3.5中添加了async / await构造。Javascript社区朝着它迈进了一大步,并在2017年发布的ES8草案中增加了非常相似的实现(据我了解)。Typescript在2015年的1.7版中还添加了异步方法,使未经训练的人看起来完全像js异步方法。 C#在2012年添加了异步方法,这些方法看起来与async / await的所有其他实现类似,并且基于F#的行为类似但外观不同的异步工作流,该工作流于2010年在F#2.0中引入。这是我所知道的最早关于异步编程语言的示例-具有异步/等待对的C#和具有异步流的F#。 是否有较早的示例在此上下文中将关键字用作语言构造(或库)?从我有限的信息来看,似乎每个人都模仿了C#实现的优秀部分,但是C#是否从其他人那里复制了它呢?

1
为什么.NET框架没有将类定义为一流类型的概念?
熟悉历史的人都知道,C#和.NET框架最初是由Delphi的首席开发人员Anders Hejlsberg设计的,“ Delphi被重写为Java感觉”。从那时起,事情发生了很大的分歧,但是在早期的相似性是如此明显,以至于甚至有人认真地猜测.NET实际上最初是Borland的产品。 但是最近我一直在看一些.NET东西,而Delphi最有趣,最有用的功能之一似乎完全消失了:类作为一流数据类型的概念。对于不熟悉它的人,类型TClass代表对类的引用,类似于Type.NET中的类型。但是,在.NET Type用于反射的地方,Delphi将其TClass用作语言的非常重要的内置部分。它允许各种有用的习惯用法,如果没有它,它们就不会存在,也不会存在,例如类子类型变量和虚拟类方法。 每种OO语言都有虚拟方法,其中不同的类以不同的方式实现方法的相同基本概念,然后根据运行时所调用对象实例的实际类型在运行时调用正确的方法。Delphi将此概念扩展到了类:如果您将TClass引用定义为特定的类子类型(即class of TMyClass,该变量可以接受继承自的任何类引用TMyClass,但不能继承继承体系中的任何内容),且该类引用附加了类范围虚拟方法通过使用类的实际类型,可以在没有实例的情况下调用它们。例如,将此模式应用于构造函数会使Factory实现变得很简单。 .NET中似乎没有任何等效的东西。与类引用一样有用(尤其是虚拟构造函数和其他虚拟类方法!),有没有人说过为什么将它们遗漏? 具体例子 形式反序列化 Delphi VCL DFM以DSL格式保存表格,以描述组件层次结构。表单阅读器解析DFM数据时,它跨如下所述的对象运行: object Name: ClassName property = value property = value ... object SubObjectName: ClassName ... end end 有趣的是这里的ClassName部分。每个组件类都会及时TClass在组件流式系统中注册initialization(请考虑静态构造函数,只有一点点不同,保证在启动时立即发生。)这会将每个类注册在string-> TClass哈希图中,且类名称为键。 每个组件都来自TComponent,它具有一个虚拟构造函数,该构造函数采用单个参数Owner: TComponent。任何组件都可以重写此构造函数以提供自己的初始化。当DFM阅读器读取类名称时,它会在上述哈希图中查找该名称并检索相应的类引用(如果不存在则引发异常),然后在其上调用虚拟TComponent构造函数,这被认为是很好的因为注册函数采用了从TComponent继承的类引用,所以您最终得到了正确类型的对象。 缺少这一点,WinForms等效项...坦白地说,这是一个很大的混乱,需要任何新的.NET语言来完全重新实现其自身的格式(反序列化)。当您考虑时,这有点令人震惊。因为拥有CLR的全部目的是让多种语言使用相同的基本基础结构,所以DFM风格的系统将具有完美的意义。 可扩展性 如果您尝试检索不在集合中但在数据源中可用的名称,那么我编写的图像管理器类可以提供数据源(例如图像文件的路径),然后自动加载新的图像对象。它具有一个类变量,该类变量的类型为class of基本图像类,表示要创建的任何新对象的类。它具有默认值,但是在出于特殊目的创建新图像时,有一些要点应以不同方式设置图像。(在没有Alpha通道的情况下创建它,从PNG文件中检索特殊的元数据以指定图片大小,等等。) 这可以通过编写大量的配置代码并将特殊选项传递给所有可能最终创建新对象的方法来完成...或者您可以仅使基本图像类的子类覆盖虚拟方法,已配置有关方面,然后根据需要使用try / finally块临时替换“默认类”属性,然后将其还原。使用类引用变量执行此操作要简单得多,而不是使用泛型即可完成。

5
他们如何在受保护的内存之前调试分段错误?
现在,当我用C中的指针犯了一个编程错误时,我遇到了一个很好的分段错误,程序崩溃了,调试器甚至可以告诉我哪里出错了。 在没有内存保护的情况下,他们是如何做到的?我可以看到一个DOS程序员在弄错时摆弄着他,并使整个操作系统崩溃。虚拟化不可用,因此他所能做的就是重新启动并重试。真的那样吗?

3
为什么逻辑运算符(例如||,&&等)没有复合赋值运算符?
此问题是从Stack Overflow 迁移而来的,因为可以在Software Engineering Stack Exchange上回答。 迁移 6年前。 根据ECMA-262,第11.13部分,以下是复合赋值运算符的详尽列表:*= /= %= += -= <<= >>= >>>= &= ^= |=。 据部分11.11,var c = a || b将会把a价值成c,如果ToBoolean(a)是真实的,将把b价值为c其他。这样,逻辑“或”通常用作合并运算符,例如 function (options) { options = options || {}; } 通常,使用合并来指定变量的默认值,如上所示:a = a || b。 复合赋值运算符似乎||=很有用,它允许以更短,更简洁的方式编写上述代码:a ||= b。然而,它不存在(虽然*=,+=和其它复合赋值运算符是)。 问题是,为什么?


4
什么是第一个分层文件系统?
此问题是从Stack Overflow 迁移而来的,因为可以在Software Engineering Stack Exchange上回答。 迁移 8年前。 “包含目录和文件的目录”似乎已经存在了很长时间,但是必须首先存在。
20 history 

1
所有大写常量的命名历史是什么?
用大写字母命名常量的惯例背后的历史是什么? 我的直觉是从C预处理程序开始的,在C预处理程序中,人们开发了一种做法,以所有大写形式命名预处理程序宏,以便它们可以有效地存在于单独的命名空间中,并避免名称冲突。我的信念是,这种做法后来被误解并混为一谈,也适用于非预处理程序常量(enums,const变量)。 在所有大写字母中命名预处理器宏对我来说确实有用。用这种方式命名通用常量不是那么多(如果它与宏名称产生冲突,则会适得其反)。 我在基地外吗?大写常量的惯例是否早于C?

6
为什么Web赢得了远程应用程序的空间而X却没有呢?
X Window System已有25年的历史,它在昨天(15日)生日。 您可能已经知道,它最重要的功能之一就是将服务器端和客户端分开,这是Microsoft,Apple或Wayland的窗口系统所没有的。 早在过去(对措词不清表示抱歉),由于服务器和客户端之间的这种分离,许多人认为X在其他制作窗口的方法中将占主导地位,从而允许应用程序在用户单击并在其上键入内容时在其他位置的服务器上运行在家里拥有电脑。 这种用法显然仍然存在,但充其量是被边缘化的。当我们编写和使用在服务器上运行的程序时,我们几乎总是将Web与html / css / js一起使用。 为什么网络赢了,而X没有赢?用于网络的技术(称为html / css / js)是一团糟。结合所有后端框架(Rails,Django和所有后端框架),它确实是一个可以穿越的丛林。Web仍然凭借创造力和进步而蓬勃发展,而远程X应用程序却没有。
19 history  web 

9
Windows从来没有像样的外壳的原因是什么?[关闭]
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案会得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意测验或进一步的讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 8年前关闭。 我正在阅读有关SO的主题:为什么脚本语言(例如...)不适合作为Shell语言?。特别是,我喜欢JörgW Mittag的回答,从中我学到了一些有趣的东西Windows PowerShell。因此,经过20多年的努力,Windows终于有了一个经过精心设计的外壳程序(Windows 1.0-1985,PowerShell稳定版-2009)。另一方面,自1978年以来,Unix系统就拥有大量的外壳。我读过一些有关MS求职面试的文章,给我留下了非常“怪异”的印象。我想知道为什么与使用这些工具进行所有工作的Unix人员相比,他们不需要命令行工具。
19 windows  history  shell 



3
什么时候以及为什么指针开始被视为冒险?
似乎在考虑在编程语言中使用指针时,已经有了逐渐的转变,因此,人们普遍认为指针被认为是有风险的(如果不是彻头彻尾的“邪恶”或类似的强化)。 这种思想转变的历史发展是什么?是否有特定的开创性事件,研究或其他发展? 例如,简单回顾一下从C到C ++到Java的过渡,似乎显示出一种补充指针,然后完全用引用替换指针的趋势。但是,真正的事件链可能比这更微妙和复杂,并且不是那么连续。使其成为那些主流语言的功能可能起源于其他地方,也许很久以前了。 注意:我并不是在问指针,引用和其他东西的实际优点。我的重点是这种明显转变的理由。
18 history  pointers 

3
将命令行参数命名为“ argv”的约定从何而来?
似乎Python,PHP和Ruby都使用名称“ argv”来引用命令行参数列表。名称“ argv”从何而来?为什么不使用“ args”之类的东西呢? 我的猜测是它来自C,其中v代表“向量”。维基百科的脚注说: 该变量名称中的向量术语在传统意义上用于指代字符串。 但是,此信息没有任何来源。真的,我很好奇它的根源可以追溯到更远的时候。C之所以使用它,是因为之前有东西使用过它?

2
为什么C在TIOBE受欢迎程度索引中如此之高,而C ++也在此之下,却没有那么受欢迎?[关闭]
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 6年前关闭。 我无法解决这个问题。如果使用了很多C,但不是C ++,有人可以向我解释使C比C ++更常用的最重要原因吗?这些C代码在哪里写? 这是否与高度依赖命令式编程但不能承受实现或调整C ++编译器的成本的工业部门有关?有那么多内核黑客吗? tiobe是否相关?我从没涉足任何文章,也没有发表评论或解释tiobe的排名是多少,它实际上表明了该行业的喜好,以及它可以表明该行业的实际用途,从而确定了该行业的实际需求。很难解释。 我只是觉得奇怪,即使这些C / C ++职位很烂,许多公司也想要C#,php,java职位,而不是C或C ++职位(只是与我的失业状况和我的采访有关)。我会选择那些。还是这意味着语言炒作在这里起着重要作用?

3
为什么要有五个餐饮哲学家?
我想知道为什么餐饮哲学家问题是基于五个哲学家的案例。为什么不四个? 我猜想我们在讨论五位哲学家的例子时也可以观察到所有令人不快的问题,当我们得到四位思想家时,也会发生。那仅仅是出于历史原因吗?

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.