问题标签 [language-history]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
html - colspan 和 rowspan 什么时候可以在 HTML 表格中使用?
colspan
我和一位同事很好奇什么时候rowspan
可以在 HTML 表格中使用。
我们尝试了谷歌和维基百科,但答案似乎仍然难以捉摸。
我认为这可能是从 HTML 2 开始,或者是 90 年代早期到中期,但他坚持认为直到 2000 年或更晚才出现......
python - 在 OS 和 SYS 等易于混淆的 Python 类中命名的原因?
我注意到 SO 中与 Python 有关的相当多的问题是关于人们搞砸 Sys -class、OS class 和 no class。例如,一个容易混淆的情况是os.open("something")
:open("something")
和sys.open("something")
。我还没有理解类命名背后的原因,也许这只是一种演变。
- 我想听听
why
他们是用他们现在的名字创建的吗? - 命名是因为在班级中有 FD 之类的事情吗?
- 是因为某些类需要特殊权限而命名吗?
- 命名在多大程度上是一种设计解决方案?
如果你不能回答这个问题,请随意提出一些好的助记符来记住这些类并区分它们。
programming-languages - try/catch/finally 语法的由来
向那里的词源学向导提出的问题:哪种编程语言最先使用当今 Java/.NET 语言中的 try/catch/finally 语法?
java - 左手坐标系的历史原因
我发现 (0,0) 映射到屏幕的左上角有点不直观。在 Java Swing 中使用左手坐标系是否有历史原因?
虽然将其映射到右手系统并不太难,但我很想知道拥有左手系统是否有任何隐藏的好处。
c++ - 是否存在一个有效的用例,其中非 POD 结构优于类?
根据(2003)标准对结构的定义,它是类的特殊情况,对成员、函数和基类具有不同的默认访问修饰符。它还继续将结构的要求定义为 POD 结构。
C++ 2003 标准,ISO 14882 第 9.0.4 节:
结构是使用类键结构定义的类;它的成员和基类(第 10 条)默认是公共的(第 11 条)。联合是使用类键联合定义的类;默认情况下,它的成员是公共的,并且一次只保存一个数据成员(9.5)。[注:类类型的聚合在 8.5.1 中描述。] POD-struct 是一个聚合类,它没有非 POD-struct、非 POD-union(或此类类型的数组)或引用类型的非静态数据成员,并且没有用户定义的复制赋值运算符和没有用户定义的析构函数。类似地,POD 联合是一个聚合联合,它没有非 POD 结构、非 POD 联合(或此类类型的数组)或引用类型的非静态数据成员,并且没有用户定义的复制赋值运算符,也没有用户定义的析构函数。
鉴于此定义,非 POD 结构和类之间的唯一区别因素是默认访问修饰符。
这是我可以想象的拥有非 POD 结构的目的:
- 它们是一个遗留功能,需要维护以实现向后兼容性
- 打字
public:
很难。
当其他系统假定它们是 POD 时,拥有非 POD 结构可能会导致痛苦,例如当传递给 C 并返回时。举例来说,当另一个开发人员更新假定为 POD 的结构以使其不再是 POD 时,此人遇到了问题。因为默认情况下编译器不会静态断言 POD 特性,所以当在只能使用 POD 结构的上下文中使用该结构时,应用程序将在运行时崩溃。更糟糕的是,我可以想象(虽然我不确定这是否可能)一个非 POD 结构在需要 POD 的某些情况下工作,而在其他情况下失败,导致错误和崩溃,这简直是难以忍受追查。
鉴于在某些情况下,非 POD 结构会导致奇怪和破坏行为的领域,非 POD 结构有什么用?为什么不在编译时静态检查结构的 POD 特性(通过 C++11 中的 std::is_pod 或 Boost 等效项)?
python - Python 历史与设计:为什么是 subclass() 而不是丰富的比较?
在 Python 中,比较运算符 -- <
, <=
, ==
, !=
, >
, >=
-- 可以实现为表示与实现类相关的任何内容。在 Python 2 中是通过覆盖完成的__cmp__
,而在 Python 3 中是通过覆盖__lt__
和朋友完成的。具有issubclass()
内置方法而不是允许诸如bool < int
(true)、int < object
(true) int <= int
、 或int < float
(false) 之类的表达式的优点是什么。特别是,我会注意到排序的类issubclass()
构成了数学意义上的偏序集。
我所想的 Python 3 等价物如下所示。这段代码不会替换issubclass()
(尽管循环 MRO 会实现这一点,对吧?)。但是,这不是更直观吗?
实际问题:拥有 issubclass() 内置方法而不是允许诸如 bool < int (true)、int < object (true)、int <= int 或 int < float (false) 之类的表达式有什么好处? .
python - Python:为什么 int 类没有像 `__lt__()` 这样丰富的比较运算符?
主要是好奇。
我注意到(至少在 py 2.6 和 2.7 中) afloat
具有所有熟悉的丰富比较功能:__lt__()
, __gt__
,__eq__
等。
但一个int
没有
这对我来说很奇怪,因为操作员本身工作正常
甚至字符串也支持比较函数
但所有的int
都是__cmp__()
对我来说似乎很奇怪,所以我想知道为什么会这样。
刚刚经过测试,它在 python 3 中按预期工作,所以我假设一些遗留原因。不过还是想听听正确的解释;)
twitter-bootstrap - “英雄单位”是什么意思?
“英雄”一词是什么意思,为什么用它来命名网站/页面的“主要信息”?
具体来说,我想知道术语“英雄”或短语“英雄单位”是否是我设法错过的网页设计中使用的一些常见术语。
c++ - 为什么要从 C++ I/O 系统中删除 iostream_withassign、ostream_withassign 和 istream_withassign 类?
在 C++98 之前,在 C++ I/O 类层次结构中有 3 个名为iostream_withassign, ostream_withassign
&的类istream_withassign
。
类的成员函数iostream_withassign
:
构造函数和析构函数
~iostream_withassign
iostream_withassign
创建一个 iostream_withassign 对象。它不对该对象进行任何初始化。
运算符 =
赋值运算符 operator =
过载 1
此赋值运算符采用指向 streambuf 对象的指针并将此 streambuf 对象与赋值运算符左侧的 iostream_withassign 对象相关联。
过载 2
此赋值运算符采用对 ios 对象的左值引用,并将附加到此 ios 对象的流缓冲区与赋值运算符左侧的 iostream_withassign 对象相关联。
来源:这个。
同样的方式是这样说的:
ostream_withassign 类是允许对象分配的 ostream 的变体。预定义对象 cout、cerr 和 clog 是此类的对象,因此可以在运行时重新分配给不同的 ostream 对象。例如,一个通常将输出发送到标准输出的程序可以被临时指示将其输出发送到磁盘文件。它还包含构造函数、析构函数和 =(assignment) 运算符函数。
我不明白,为什么这些类存在?这三个类有什么用吗?为什么后来这 3 个类从 C++98 标准中删除了?是什么原因?
另请参阅 C++ 流类层次结构。它没有这 3 个类。
c++ - 朋友声明的复杂范围规则有什么意义?
我最近发现友元声明作用域遵循极其特殊的规则——如果你有一个friend
尚未声明的函数或类的声明(定义),它会在紧接的命名空间中自动声明(定义),但它是不可见的不合格和合格的查找;但是,友元函数声明通过依赖于参数的查找仍然可见。
如果您查看标准(请参阅链接的答案),他们会竭尽全力启用这种古怪的行为,在具有复杂规则的合格/不合格查找中添加特定例外。最终结果在我看来非常令人困惑1,还有另一个角落案例要添加到实现中。作为任一
- 要求
friend
声明提及现有名称、句号;或者 - 允许他们像现在一样声明东西,但不改变普通名称查找(因此,这些名称变得可见,就好像在封闭的命名空间中“正常”声明一样)
似乎更容易实现,指定,最重要的是,理解,我想知道:他们为什么要为这个烂摊子烦恼?他们试图涵盖哪些用例?在这些更简单的规则(特别是与现有行为最相似的第二条规则)下,什么会打破?
例如,在这种特殊情况下
你收到可笑的精神分裂错误信息
编译器首先声称没有这样的东西
N
,但是当您尝试提供冲突的声明时立即停止装傻。