问题标签 [compiler-specific]

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 回答
611 浏览

c++ - 为什么 MSVC 编译器比 Linux 上的 gcc 和 Mac 上的 Xcode C++ 编译器慢得多

0 投票
3 回答
1674 浏览

rtos - FreeRTOS 编译器

我刚开始学习 FreeRtos。我从 Richard Barry 的“Using the FreeRtos Real Time Kernel”pdf 书开始。这本书有全面的例子,我很好地理解了这些原则,但我希望能够在某个地方编译这些例子。

现在这听起来像是一个愚蠢的问题,但我对 RTOS 完全陌生:D。我可以使用什么编译器来编译 freeRtos 代码?我用谷歌搜索了很多,我找到了一些名为 Watcom 的编译器,并尝试在其中运行一些代码,但找不到也找不到任何有关如何使用此编译器的示例。

所以基本上我想要的是一些实际有人展示如何在编译器中运行简单的 freeRtos 代码然后运行它并在控制台中查看实际结果的示例。

任何链接将不胜感激。感谢您的阅读!

0 投票
0 回答
233 浏览

c++ - g ++生成“完整的对象分配构造函数”

有没有办法(一个参数)使 g++ 编译器生成“完整的对象分配构造函数”(C3)和“删除析构函数”(D0)?

我查看了为什么从未使用过 C3 分配构造函数?,不回答我的问题。

0 投票
1 回答
2122 浏览

haskell - 为什么 GHC 元组的大小限制为 62?

来自Haskell 98 报告

元组的大小没有上限,但一些 Haskell 实现可能会限制元组的大小,并限制与较大元组关联的实例。然而,每个 Haskell 实现都必须支持最大为 15 的元组,以及 Eq、Ord、Bounded、Read 和 Show 的实例。(...)

然而,众所周知,GHC 不支持大小大于 62 的元组。以下是我尝试在 GHCi 中创建大小为 63 的元组时发生的情况:

我认识到这符合 Haskell 98 规范,而且大小大于 62 的元组可能是非常不必要的,但我不明白为什么在 GHC 中就是这样。


总结一下:

  • 为什么有元组大小限制?
  • 为什么大小限制专门在 62?

此外:

  • 为什么仅从 GHC 6.12.2 及更高版本开始出现这种情况?
  • 其他著名的 Haskell 实现会这样做吗?他们的理由是什么?
0 投票
1 回答
505 浏览

c++ - 自动检测C++14“return should use std::move”的情况

我的理解是,在 C++17 中,以下代码片段旨在做正确的事情:

也就是说,在 C++17 中,编译器应该将d1和都d2视为右值,以便在这两个返回语句中进行重载决策。然而,在 C++14 和更早的版本中,情况并非如此。操作数中的左值到右值转换return应该仅在操作数完全是正确的返回类型时才适用。

此外,GCC 和 Clang 在这方面似乎都有令人困惑且可能存在错误的行为。在 Wandbox 上尝试上面的代码,我看到了这些输出:

所以这开始是一个工具问题,最后是“C++ 编译器的正确行为到底是什么?”。

我的工具问题是:在我们的代码库中,我们有几个地方说return x;但意外地产生了副本而不是移动,因为我们的工具链是 GCC 4.9.x 和/或 Clang。我们希望自动检测这种情况并std::move()根据需要插入。有没有简单的方法来检测这个问题?也许是一个整洁的检查或-Wfoo我们可以启用的标志?

但当然现在我也想知道 C++ 编译器在这段代码上的正确行为是什么。这些输出是否表明 GCC/Clang 错误?他们正在研究吗?语言版本 ( -std=) 应该重要吗?(我认为这应该很重要,除非通过缺陷报告更新了正确的行为,一直追溯到 C++11。)

这是受巴里回答启发的更完整的测试。我们测试了需要左值到右值转换的六种不同情况。

在巴里的回答之后,在我看来,Clang 3.9+ 在所有情况下都做了技术上正确的事情;GCC 8+在所有情况下都做了理想的事情;总的来说,我应该停止教人们“只是return x让编译器 DTRT”(或者至少用一个巨大的闪烁警告来教它),因为实际上编译器不会DTRT,除非你使用的是前沿(技术上非-符合)GCC。

0 投票
1 回答
169 浏览

c# - C# 抽象类

编译器是否在 C# 中编译抽象类?

如果是,那么编译器如何处理抽象类,就像普通类一样,或者有一些区别。

如果没有,那么它如何允许在派生类中继承数据成员和抽象类的成员函数。

0 投票
2 回答
461 浏览

c++ - 在 C++ 中,为什么有些编译器拒绝将只包含一个 double 的对象放入寄存器?

在 Scott Meyer 的Effective C++第 20 节中,他指出:

一些编译器拒绝将仅包含双精度的对象放入寄存器

当按值传递内置类型时,编译器会很乐意将数据放入寄存器并快速发送///ints等。沿着。然而,并不是所有的编译器都会以同样的优雅对待小对象。我可以很容易地理解为什么编译器会以不同的方式处理对象 - 按值传递对象可能比在 vtable 和所有构造函数之间复制数据成员要多得多的工作。doublesfloats

但还是。对于现代编译器来说,这似乎是一个容易解决的问题:“这个类很小,也许我可以区别对待”。Meyer 的声明似乎暗示编译器将针对仅由int(orcharshort) 组成的对象进行这种优化。

有人可以进一步了解为什么这种优化有时不会发生吗?

0 投票
0 回答
72 浏览

c++ - On which compilers or with which compiler flags, pointer arithmetic rule violation may cause troubles?

The c++ standard constrains pointer arithmetic to be performed within an array ([expr.add]) which makes implementation of vector-like containers difficult.

One could implement a vector-like container with an implementation similar to this:

This previous peace of code illustrates how approximately std::vector is implemented in libstdc++ and libc++. It seems that compilers accept this kind of code as an extension to the c++ language.

If I want to be standard compliant I could implement a vector and its associated iterator in such a way that operations performed on the vector and its iterator could be simplified to this code:

(First question, is this approach not also UB? Here the pointer arithmetic is performed on the array of unsigned char which provides storage for the int objects. launder is used because buffer and the int objects are not pointer interconvertibles)

The problem with this second approach, is the code generated by the compiler (GCC):

Generated assembly:

The code generated for test_approach_1 is optimal. So I think I will not use the second approach (And I would have one more reason not to use it if one shows it is also UB.)

I don't find documentation for these extensions to the language that allow us to implement vector-like containers using the first approach (it is UB according to the standard). Is there any documentation for it? On which compiler can I expect it to work and with which compiler flags?

0 投票
1 回答
139 浏览

linker - 我可以将多少个目标文件传递给链接任务?

我在 GNU/Linux 上的 Bash 的一个普通案例中找到了这个,但是其他 shell、其他操作系统和其他编译器呢?

0 投票
1 回答
992 浏览

c# - 如何管理重复的程序集引用 C# Unity / 如何使用标志编译 C# 项目

我正在尝试将 RosSharp ( https://github.com/siemens/ros-sharp ) 和混合现实工具包集成到一个 Unity 项目中。然而,这两个库都使用Newtonsoft.Json导致错误:

删除其中一个 DLL 将导致许多其他错误。

通过开发人员文档( https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/compiler-messages/cs1703 )查找此错误:建议我使用以下标志编译项目:/t:library /out:.\bin2\cs1703.dll /keyfile:key.snk.

如何在 Visual 中使用特定标志编译 C# 解决方案。

我相信这个问题也可以使用外部别名来解决,尽管我不知道这些是如何实现的。