问题标签 [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.

0 投票
0 回答
16 浏览

json - 为什么 JSON 规范仍然没有固定来强制对象中的键值对被认为是有序的?

这样做的理由似乎很充分:

  1. 在许多情况下,保持 JSON 对象字段顺序的要求非常普遍。只需搜索互联网。
  2. 即使是现在的 JS 引擎现在也保证了顺序,可能在实现之后它已经足够有用了。
  3. 规范中的这种更改将至少是向前兼容的。
  4. 传输的键值对无论如何都以序列化格式排序,所以为什么不使用它呢?虽然订单可以免费表示,但我们被迫忽略它并使用当前 JSON 规范应用丑陋的变通方法。

您是否知道没有此类问题的 JSON 的任何可行替代方案或如何解决此 JSON 怪癖的任何方法?

0 投票
1 回答
117 浏览

java - Java 规范:读取执行顺序后面发生的写入

我现在正在阅读 Java 语言规范。

§17.4.5-1

在此执行中,读取会看到执行顺序后面发生的写入。这可能看起来违反直觉,但在发生之前的一致性允许。允许读取看到稍后的写入有时会产生不可接受的行为。

§17.4.8-1

尽管有时不希望允许读取看到执行顺序后面的写入,但有时也是必要的。

17.4.8-1 也给出了一个奇怪的例子。

为什么可以reads see writes come later

如果真的有可能,我怎样才能在java代码中重现它?

编辑

这不是重复的问题。那个问题刚刚问了 17.4.5-1,我可以理解 17.4.5-1 因为编译器可能会重新排序它们。但是 17.4.8-1 呢?它在Executions and Causality Requirements. 根据 的定义execution order,没有人可以重新排序

所以这y = 1必须发生在最后。

0 投票
1 回答
120 浏览

java - 这里指的是什么变量?

里面有很多as method。他们都指的是什么?

0 投票
1 回答
690 浏览

rust - Rust 中元组的求值顺序是什么?

元组元素可能有副作用,其中一些可能依赖于其他元素。考虑这个程序:

它输出y = 1, z = 2还是y = 2, z = 1Rust Playground上的几轮表明前者在稳定的 1.32.0 上,但如果我运行它更多次,重新编译编译器,更改编译器版本等,它可能会改变。

是否有书面承诺或至少打算维持对元组的特定评估顺序(例如深度优先和从左到右)?

0 投票
1 回答
76 浏览

unit-testing - 是否需要告诉 Perl 编译器不要优化带有忽略返回值的函数调用?

我正在编写新的 Perl 5 模块Class::Tiny::ConstrainedAccessor以在您触摸对象属性时通过设置或获取默认值来检查类型约束。我正在编写单元测试并希望为后一种情况运行访问器。但是,我担心 Perl 可能会优化我的访问器函数调用,因为返回值被丢弃了。会吗?如果是这样,我可以告诉它不要吗?是否记录了相应的行为?如果答案像“别担心”一样简单,那已经足够了,但是对文档的引用将不胜感激:)。

当我在 Perl 5.26.2 x64 Cygwin 上运行以下 MCVE 时,它会成功。但是,我不知道这是否得到保证,或者它是否恰好现在起作用并且可能有一天会改变。

这个问题涉及变量,但不涉及函数。 perlperf说 Perl 会优化掉各种东西,但是除了()原型函数之外,我不清楚是什么。

在 JavaScript 中,我会说void obj.accessor();,然后我肯定会知道它会运行,但结果会被丢弃。但是,我不能undef $obj->accessor;用于类似的效果;编译合法地失败了Can't modify non-lvalue subroutine call of &Klass::accessor.

0 投票
2 回答
1361 浏览

java - 不一致的“从 int 到字节的可能有损转换”编译时错误

检查以下代码片段:

片段#1

片段#2

片段#3

片段#4

除了 Snippet #1 之外,所有这些都编译得很好。这种行为如何合理?如果 Snippet #1 产生“可能的有损转换”错误,那么 Snippet #2 和 4 也应该,因为它们仍然包含 type 的文字int。为什么它们编译成功?

0 投票
0 回答
135 浏览

c# - C# here-document 的换行样式是否与 Environment.Newline 匹配?

我有一些单元测试似乎失败了,因为它们依赖于假设本地编译的 here-document 字符串中的换行符应该匹配Environment.NewLine

IE

真正的测试要复杂得多,并且是在我无法控制的机器上编译和运行的,因此很难确定确切的原因,但似乎确实可以归结为这种不匹配。

C# 规范(请参阅字符串文字部分)说“逐字字符串文字可能跨越多行”,但实际上并没有说明将使用哪种换行样式。

我的工作理论是,换行符没有什么神奇之处,编译器只是使用源代码文件中的任何样式,因为它是在本地机器上签出的。因此,如果有人在某处弄错了 RCS 行翻译,则编译后的字符串可能具有 Unix 风格的行尾,即使它是在 Windows 机器上编译的,反之亦然。

所以我的问题是:

是否有关于如何对多行逐字字符串文字中的换行符进行编码的正式描述?

如果没有,是否有其他解释可以解释为什么上面的测试有时会失败?

我知道Environment.NewLine是一个运行时变量,因此如果在一台机器上编译然后在另一台机器上运行,测试可能会失败,但在这种情况下,它似乎正在编译并在同一台机器上运行。

0 投票
0 回答
108 浏览

python - 无法向 Python 添加新关键字

我尝试按照这篇博文这个 PEP向 Python 添加一个新关键字(一个新的流程语句)。根据我提到的 PEP,我很确定我已经添加了需要添加到正确位置的内容。这些是我修改过的文件:

我在 Windows 上执行此操作,所以我没有运行make,而是运行PCbuild/build.bat。构建似乎是成功的。但是,当我运行新构建的python.exe时,我的关键字未被识别(得到NameError: name [...] is not defined)。

作为健全性测试,我尝试通过删除并重新运行来break_stmt从Python 中删除 break 语句。break 语句工作得很好,这意味着删除失败。Grammar/GrammarPCbuild/build.bat

我还注意到文件Include/graminit.cInclude/graminit.h没有重新生成,并且根据我提到的 PEP,它应该由 完成pgen,它应该由make. 但正如我之前提到的,我跑了PCbuild/build.bat,而不是make。我尝试pgen手动运行,但失败并出现异常ImportError: attempted relative import with no known parent package

因此,由于删除关键字也失败了,我认为我的自定义 Python 没有正确构建(即使构建似乎成功并且它生成了一个工作python.exe)。这可能是什么原因造成的?

编辑:我也尝试删除文件Grammar/Grammar并重建,并且构建仍然有效。有什么不对劲。

0 投票
1 回答
95 浏览

java - 如果“没有被类中的声明隐藏”,则继承非私有字段

Java 11 语言规范(8.3 字段声明)中的这个短语对我来说不清楚

一个类从其直接超类和直接超接口继承超类和超接口的所有非私有字段,这些字段都可以访问(第 6.6 节)类中的代码,并且不会被类中的声明隐藏

不清楚超类的名称是否被类中的声明隐藏是否意味着非私有字段不被继承?

短语“并且没有被类中的声明隐藏”的部分令人困惑。

0 投票
1 回答
63 浏览

c# - 这个循环是否有可能无法运行?

最近出现了一个问题,这对我来说是一次学习经历。类似以下内容给出了“使用未定义”错误:

这是一个人为的例子,没有意义,但它给出了所需的错误。我知道使用内部范围来设置变量值是完全可以的,只要编译器可以计算出所有流程都会导致明确的分配:

但我以前没有意识到取决于某个变量值的内部范围块会出错,即使没有可察觉的变量可能是“错误”的方式:

用编译时间常数解决这个问题很好:

我想知道这是否可能是因为编译器完全删除了 if,但更复杂的语句也可以:

也许这也被内联/优化了,但我的问题的本质是,对于第一个简单循环for(int i = 0; i < 1; i++),实际上是否有任何可以想象的方式使循环不会运行,因此“变量 a 可能未分配”是一个有效的断言,或者静态流分析是否只是在一个简单的“任何设置变量的条件控制代码块a被自动认为存在它可能无法运行的情况,我们直接捷径显示后续使用错误”规则上运行?