问题标签 [language-specifications]
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.
c++ - 原型的 C++ 模板等价
以下编译按预期运行和执行:
样本输出(实际输出可能取决于字节序和整数大小):
以下不会编译并抱怨实现的原型copyThing()
与类中声明的原型不匹配。
两者之间的唯一区别是在该实现sizeof(UNSIGNED_TYPE)>=sizeof(int)
中已替换为sizeof(int)<=sizeof(UNSIGNED_TYPE)
。
显然,这两个语句在语义上是等价的。我在哪里可以找到如何确定模板原型相等的正式定义?
这显然是某种程度的词汇等价而不是语义等价。
c# - 在哪里可以找到 C# 语言规范 6.0?
我知道在哪里可以找到C# 5 语言规范,但我无法在任何地方找到 C# 6 语言规范。
C# 6语言规范在哪里?
c++ - Sean Parent 在他的 GBC - 实施完整类型演讲中提到了什么缺陷报告
在Sean Parent 的演讲 更好的编码目标 -在 44:10-44:50实现完整类型
如果我把这个[类与一个按值接受其参数的复制赋值运算符,并且还有一个移动构造函数]作为另一个类的成员,那么另一个类将不会获得默认的移动构造函数,因为规范中的语言没有说“如果它是可移动构造的”,它说“有一个带有这个签名的移动构造函数”。它有一个缺陷,我不知道[它是什么]在我的头上。
谁能指出 Sean 所指的实际缺陷报告?
c# - 带有可选参数的构造函数会重载它吗?
这是一个代码示例:
中C# 5 Language Specification Section 1.6.7
写着:
实例构造函数可以重载。例如,List 类声明了两个实例构造函数,一个没有参数,一个接受 int 参数。
但是IL
为此代码编译的不包含 2 个构造函数。它只包含这个声明:
这意味着可选参数是CLR
级别的,由[opt]
.
在CLR
没有运行时可以用 2 个重载的构造函数表示这个对象之后。
例如,如果我创建 2 个没有可选参数的单独构造函数,编译IL
将包含 2 个.ctor
-s。
我想澄清一下,如果语言规范说这class declares two instance constructors
并不意味着编译后IL
也将包含 2 ctor
-s。
c# - 为什么在参数列表评估后执行空检查?
根据 C# Language Specification 7.4.3 函数成员调用,函数成员调用的运行时处理包括以下步骤,其中 M 是在引用类型中声明的实例函数成员,E 是实例表达式:
- E 被评估。如果此评估导致异常,则不执行进一步的步骤。
- 评估参数列表。
- 如果E的类型是值类型,则进行装箱转换,将E转换为object类型,在后面的步骤中E被认为是object类型。在这种情况下,M 只能是 System.Object 的成员。
- 检查 E 的值是否有效。如果 E 的值为 null,则抛出 System.NullReferenceException 并且不执行进一步的步骤。
- 确定要调用的函数成员实现...等
我想知道为什么空检查不是第二步?如果 E 为空,为什么要评估参数列表?
javascript - 在对象的键值对中指定键时使用字符串
当在对象的键值对中指定键时(使用下面的符号),解释器(显然)允许使用字符串:
但是,不允许使用函数(返回字符串)动态指定键:
我猜字符串,在使用该符号时,必须是静态值。
但是我找不到关于那个的 JavaScript 语言规范......
c# - C# 中的 module 关键字是什么意思,为什么它不在关键字列表中?
我发现了奇怪的System.AttributeTargets
价值 - AttributeTargets.Module
。我搜索了它的用法并找到了这个 C# 代码:
它是一个叫做“模块”的东西的属性。
module
这在 C#中是什么意思?为什么我在关键字列表中找不到它?不是关键字吗?什么时候使用?
c - C 标准翻译限制规范中的“至少一个”
(这个问题是由上一个问题的答案提示的)
C11 标准在讨论兼容编译器应该能够支持的程序的复杂性时使用了以下公式:
5.2.4.1 翻译限制
实现应能够翻译和执行至少一个程序,该程序包含以下每个限制的至少一个实例:
...
- 一个函数调用中有 127 个参数
...
这个“至少一个”的措辞对我来说似乎很奇怪,因为它看起来像一个符合标准的程序可以对大多数用法施加任意限制并且仍然是合规的。例如,可变参数函数的参数限制为 63 个,而具有显式参数的函数的参数限制为 127 个。或者要求只有名称以“BIGARG_”开头的函数才能调用超过 99 个参数。或者其他一些这样的限制。
即使有潜在的任意限制,也可能存在一些奇怪的情况,即支持 127 个参数限制,因此可以翻译和执行至少一个包含该限制的至少一个实例的程序。只是并非所有(甚至大多数)接近该限制的程序都将得到支持。
这种特殊的措辞是否有理由?为什么不明确要求支持遵守这些限制的每个程序(否则兼容)?或者是否有其他机制需要统一支持,例如函数调用中的 127 个参数?
java - Java 8 Type Inference - 如何减少泛型构造函数?
我正在阅读 java 8 语言规范类型推断。它说
将首先减少
然后到
最后到
我很难理解如何减少约束
是派生出来的。如果有人能指出使用 java 8 语言规范的逻辑,那将是一个很大的帮助。
这是减少的链接
感谢#Holger的解释。以下是我对推导的看法
如果我错了,请纠正我。
首先找到我们使用#15.9.3的构造函数的临时方法
否则,构造函数的参数是类实例创建表达式的参数列表中的参数,如果有的话,按照它们在表达式中出现的顺序。
如果类实例创建表达式使用 <> 来省略类类型参数,则定义方法列表 m1...mn 用于重载决策和类型参数推断。
然后用#18.5.2推导
因为是一个 poly 表达式并且没有任何通配符类型参数;
- 否则,约束公式‹R θ → T›被简化并与B2合并。
c++ - 根据 C/C++ 标准,“'”是否与“\'”相同?
代码可以用 VS 2015 编译。
我只是好奇:
这两种方式都符合 C 和/或 C++ 标准吗?