问题标签 [compiler-construction]

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 投票
9 回答
20883 浏览

c# - 向 .NET 应用程序添加脚本功能

我有一个用 C# 编写的小游戏。它使用数据库作为后端。这是一个集换式卡牌游戏,我想将卡牌的功能实现为脚本。

我的意思是我本质上有一个接口 ,ICard它是一个卡片类实现的 ( public class Card056: ICard) 并且它包含一个由游戏调用的函数。

现在,为了使事物可维护/可修改,我希望将每张卡的类作为数据库中的源代码,并在首次使用时对其进行编译。因此,当我必须添加/更改卡片时,我只需将其添加到数据库并告诉我的应用程序刷新,而不需要任何程序集部署(特别是因为我们将讨论每张卡片 1 个程序集,这意味着数百个程序集) .

那可能吗?从源文件注册一个类,然后实例化它,等等。

该语言是 C#,但如果可以使用任何 .NET 语言编写脚本,则额外奖励。

0 投票
38 回答
337192 浏览

compiler-construction - 学习编写编译器

首选语言:C/C++、Java 和 Ruby。

我正在寻找一些有用的书籍/教程,介绍如何仅为教育目的编写自己的编译器。我最熟悉 C/C++、Java 和 Ruby,因此我更喜欢涉及这三者之一的资源,但任何好的资源都是可以接受的。

0 投票
2 回答
3171 浏览

c# - CSharpCodeProvider 编译性能

CompileAssemblyFromDom比CompileAssemblyFromSource快

应该是因为它可能绕过了编译器前端。

0 投票
18 回答
3898 浏览

c# - C# 逻辑顺序和编译器行为

在 C# 中(并且可以随意回答其他语言),运行时评估逻辑语句的顺序是什么?

例子:

运行时首先评估哪个语句 -

或者:

?

有没有时候编译器会向后评估语句?也许当涉及“或”运算符时?


& 被称为逻辑按位运算符,将始终评估所有子表达式

什么是何时使用按位运算符而不是“短路布尔值”的一个很好的例子?

0 投票
13 回答
18758 浏览

string - 检查字符串内容?字符串长度与空字符串

哪个对编译器更有效,以及检查字符串是否为空白的最佳实践?

  1. 检查字符串的长度是否== 0
  2. 检查字符串是否为空(strVar == "")

另外,答案是否取决于语言?

0 投票
11 回答
18840 浏览

compiler-construction - 自举仍然需要外部支持

我听说过引导语言的想法,即为语言本身编写编译器/解释器。我想知道如何做到这一点并环顾四周,看到有人说这只能由任何一方完成

  • 用另一种语言编写初始编译器。
  • 在 Assembly 中手动编写初始编译器,这似乎是第一个编译器的特例

对我来说,从它们都需要外部支持的意义上说,它们似乎都不是真正引导一种语言。有没有办法用自己的语言实际编写编译器?

0 投票
3 回答
3278 浏览

compiler-construction - 混合 C++/CLI TypeLoadException 内部限制:字段太多

为了将一些新的 UI 迁移到托管/C# 领域,我最近在一个大型遗留项目上打开了公共语言运行时支持 (/clr),该项目在共享 DLL 中使用 MFC,并依赖于我们内部的大约十几个其他项目整体解决方案。这个项目是我们应用程序的核心,它将驱动生成的任何托管 UI 代码(因此需要打开 clr 对互操作的支持)。

在修复了大量的小错误和警告之后,我终于设法让应用程序编译。但是,运行应用程序会导致 EETypeLoadException 并且让我无法调试......

做了一些挖掘,我发现原因是“System.TypeLoadException:内部限制:字段太多”。这发生在编译结束时。然后我找到了这个链接,它建议将程序集分解为两个或多个 dll。但是,在我的情况下这是不可能的,因为我的限制是遗留代码基本上保持不变。

任何人都可以提出任何其他可能的解决方案吗?我在这里真的走投无路了。

0 投票
7 回答
14577 浏览

c++ - 可以以便携式方式使用新的数组放置吗?

将其用于数组时,是否可以实际使用可移植代码中的新位置?

看来您从 new[] 返回的指针并不总是与您传入的地址相同(5.3.4,标准中的注释 12 似乎确认这是正确的),但我不明白您是如何如果是这种情况,可以为数组分配一个缓冲区。

以下示例显示了该问题。使用 Visual Studio 编译,此示例导致内存损坏:

查看内存,编译器似乎正在使用缓冲区的前四个字节来存储其中项目数的计数。这意味着因为缓冲区只是sizeof(A)*NUMELEMENTS很大,所以数组中的最后一个元素被写入未分配的堆中。

所以问题是你能找出你的实现需要多少额外的开销才能安全地使用placement new[]?理想情况下,我需要一种在不同编译器之间可移植的技术。请注意,至少在 VC 的情况下,不同类的开销似乎不同。例如,如果我在示例中删除虚拟析构函数,则 new[] 返回的地址与我传入的地址相同。

0 投票
15 回答
59825 浏览

c++ - Visual Studio 上的 C

我正在尝试学习 C。作为 C# 开发人员,我的 IDE 是 Visual Studio。我听说这是 C/C++ 开发的好环境。然而,似乎无论我尝试做什么小事,直觉都失败了。有人可以提供很好的资源来说明如何:

  • 在 Visual Studio 中学习 C 的来龙去脉
  • 推荐一个更好的 C IDE + 编译器

编辑:另见:https ://stackoverflow.com/questions/951516/a-good-c-ide

0 投票
7 回答
11722 浏览

.net - .NET 编译器——调试与发布

多年来,我一直在 VB.NET 中使用 DEBUG 编译器常量将消息写入控制台。我也一直在以类似的方式使用 System.Diagnostics.Debug.Write。我一直认为,当 RELEASE 用作构建选项时,编译器会忽略所有这些语句,从而将您的生产代码从调试语句的开销中解放出来。最近在使用 Silverlight 2 Beta 2 时,我注意到 Visual Studio 实际上附加到了我从公共网站上运行的 RELEASE 版本,并显示了我认为甚至没有编译的 DEBUG 语句!现在,我的第一个倾向是假设我的环境有问题,但我也想问任何对 System.Diagnostics 有深入了解的人。