问题标签 [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.
parameter-passing - 什么是“按名称传递”,它是如何工作的?
我已经检查了 Wikipedia 并在 Google 上搜索过,但我仍然无法理解名称传递在 ALGOL 60 中的工作原理。
python - Python 中静态方法的语法是如何选择的?
我使用 Python 已经有一段时间了,我发现将方法声明为静态的语法很奇特。
将声明一个常规方法:
声明了一个静态方法:
如果您不添加静态方法行,编译器会抱怨自我丢失。
这是一种非常复杂的方法,可以做一些非常简单的事情,在其他语言中只需使用关键字和声明语法即可。谁能告诉我这种语法的演变?这仅仅是因为在现有语言中添加了类吗?
由于我可以将 staticmethod 行移到课程的后面,这也表明解析器在簿记方面正在加倍努力。
请注意,我知道后来添加的装饰器语法,我很想知道从语言设计的角度来看原始语法是如何产生的。我能想到的唯一想法是静态方法应用程序调用了一个将函数对象转换为静态方法的操作。
perl - Perl 版本中有哪些向后不兼容的具体示例?
从 Perl 1.0 的首次公开发布(1987 年 12 月 18 日)到当前的稳定版本 5.10.1(2009 年)已经过去了 22 年。
在这 22 年中,发布了以下值得注意的版本:
- Perl 1.0(1987 - 初始版本)
- Perl 2(1988 - 更好的正则表达式)
- Perl 3(1989 - 支持二进制数据流)
- Perl 4(1991 - 识别骆驼书中描述的 Perl 版本)
- Perl 5(1994 - 引入了重大变化,解释器几乎完全重写)
- Perl 5.6(2000 - 64 位支持,Unicode 字符串,大文件支持)
- Perl 5.8(2002 - 改进的 unicode 支持,新的 IO 实现)
- Perl 5.10(2007 - 新的 switch 语句、正则表达式更新、智能匹配运算符)
我正在寻找 Perl 历史中向后不兼容的具体示例。
问题:
- 在 Perl 的 22 年历史中,是否有任何 Perl 向后不兼容的例子,其中针对 Perl 版本 X 的 Perl 源代码不会在版本 Y(其中 Y > X)下运行?
请尽可能包括参考资料和代码示例。
c# - C# 是如何受到 C++ 而非 Java 的启发的?
在查看C# 的历史时,我发现 C# 被视为 C 和/或 C++ 的更新。这让我有点吃惊,因为从表面上看,我看到了 C# 和 Java 之间更常见的想法(我想到了垃圾收集)。我不会用 Java 编写代码,但我通常可以毫无问题地遵循 Java 代码,并且经常阅读有关 Java 模式的书籍,这些书籍我可以很容易地用 C# 转换,而且老实说,我对 C++ 的看法也不尽相同。
所以我的问题是,C# 如何更接近 C++ 而不是 Java?这仅仅是拒绝承认 Java,还是我错过或误解了什么?
javascript - 为什么 javascript 程序以纯文本形式提供?
为什么决定以纯文本形式发布 javascript 程序?是为了提高性能还是作者从未想过 javascript 会被用在更复杂的应用程序中,开发人员可能想要保护源代码?
php - PHP中的大写布尔值与小写
当我在学习 PHP 时,我在某处读到你应该始终使用大写版本的布尔值TRUE
和FALSE
,因为“正常”的小写版本true
和false
, 使用起来并不“安全”。
现在已经很多年了,我编写的每个 PHP 脚本都使用大写版本。不过,现在我对此提出质疑,因为我已经看到大量使用小写版本(即 Zend Framework)编写的 PHP。
是否/曾经有理由使用大写版本,还是使用小写完全可以?
编辑:忘了提到这也适用NULL
于null
。
programming-languages - 编程语言的派生顺序是什么?
例如,我知道基本上所有基于面向对象的语言基本上都是 C# 或 C++ 的衍生物,对吗?有人知道他们进来的顺序吗?像 C -> C++ -> C# -> PHP 等。
java - Java的一元加号运算符的目的是什么?
Java 的一元加号运算符似乎是通过 C++ 从 C 中继承而来的。
它似乎具有以下效果:
- 如果它是包装器对象,则将其操作数拆箱
- 将其操作数提升为
int
,如果它还不是一个int
或更宽的 - 使包含大量连续加号的邪恶表达式的解析稍微复杂化
在我看来,有更好/更清晰的方法来做所有这些事情。
在这个 SO question中,关于 C# 中的对应运算符,有人说“如果你觉得需要,它就会被重载”。
但是,在 Java 中,不能重载任何运算符。那么这个一元加号运算符是否存在于 Java 中只是因为它存在于 C++ 中?
c - 为什么 C 编译器在外部名称前加上下划线?
我已经在 C 领域工作了很长时间,以至于编译器通常在 an 的开头添加下划线这一事实才被extern
理解......但是,今天的另一个 SO 问题让我想知道添加下划线的真正原因。维基百科文章声称原因是:
C 编译器的常见做法是在所有外部范围程序标识符前加上前导下划线,以避免与运行时语言支持的贡献发生冲突
我认为这至少有一个真理的核心,但它似乎也没有真正回答这个问题,因为如果将下划线添加到所有外部,它对防止冲突没有多大帮助。
有没有人对前导下划线的基本原理有很好的信息?
添加的下划线是 Unixcreat()
系统调用不以“e”结尾的部分原因吗?我听说某些平台上的早期链接器名称限制为 6 个字符。如果是这种情况,那么在外部名称前加上下划线似乎是一个彻头彻尾的疯狂想法(现在我只有 5 个字符可以玩......)。