问题标签 [compile-time]

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 投票
4 回答
1280 浏览

c++ - 编译器如何解析函数?

如何确定以下调用是在编译时绑定还是在运行时绑定?

编辑:

0 投票
2 回答
354 浏览

python - Python:(显式)字符串参数会损害性能吗?

假设某个函数总是得到一些它不使用的参数 s。

现在考虑这个电话

它给出了一个字符串作为参数,该参数不是在运行时构建的,而是直接编译成二进制文件(希望是正确的)。

问题是:当以这种方式调用 someFunc 时,比如说几千次,总是会传递对“未使用的字符串”的引用,但这会减慢程序的速度吗?

在我天真的想法中,我会说对“未使用的字符串”的引用是“常量”,并且在调用 someFunc 时在 O(1) 中可用。所以我会说'不,这不会影响性能'。

和以前一样的问题:“我说得对吗?”

感谢一些:-)

0 投票
1 回答
194 浏览

asp.net - ASP.NET Resourcing:检测何时在编译时调用 ResourceProvider 与运行时

我的 ASP.NET Web 应用程序利用由 SQL Server 数据存储支持的自定义资源提供程序。据我了解,隐式资源在编译时调用资源提供程序以确定是否需要为给定的资源键生成资源表达式。因此,我的构建过程现在依赖于拥有一个包含必要资源键的实时、最新的数据库。

这本身并不一定是个问题。问题是该应用程序连接到由查询字符串参数确定的众多数据库之一(糟糕的设计,但不幸的是我现在坚持使用它)。显然在编译时没有查询字符串,因此资源提供者无法访问数据库。是否可以确定资源提供者(或更具体地资源提供者下游的代码)在编译期间已被调用,以便我可以指向预定的数据库?

现在,如果 HttpContext.Current == null,我只是默认使用特定的数据库。这很好用,但是这个逻辑必须存在于数据访问层中,我绝对讨厌数据访问层引用 System.Web 的想法。有更好的解决方案吗?

0 投票
3 回答
801 浏览

c - ANSI-C 的编译时查找数组创建?

以前的程序员更喜欢生成大型查找表(常量数组)以节省运行时 CPU 周期,而不是即时计算值。他通过创建自定义 Visual C++ 项目来做到这一点,这些项目对于每个单独的查找表都是唯一的...生成数组文件,然后 #included 到一个完全独立的 ANSI-C 微控制器 (Renesas) 项目中。

这种方法对他最初的计算假设来说很好,但是当需要修改输入参数时变得乏味,需要我重新编译所有 Visual C++ 项目并将这些文件重新导入到 ANSI-C 项目中。我想做的是将 Visual C++ 源代码直接移植到 ANSI-C 微控制器项目中,并让编译器创建数组表。

所以,我的问题是:ANSI-C 编译器可以在编译期间计算和生成查找数组吗?如果是这样,我应该怎么做?

在此先感谢您的帮助!

0 投票
5 回答
1335 浏览

c# - 说服 C# 编译器在成员返回后停止执行

我不认为这是目前可能的,或者即使它是一个好主意,但这是我刚才在考虑的事情。我使用 MSTest 对我的 C# 项目进行单元测试。在我的一项测试中,我执行以下操作:

为了使这段代码编译,我必须instance在它的声明或catch块中分配一个值。我也可以return在之后,Assert.Fail但这仍然是一种解决方法,而不是编译器只知道在此之后执行无法继续。 Assert.Fail据我所知,永远不会允许执行超过它,因此instance永远不会在没有价值的情况下使用。那为什么我必须给它赋值呢?如果我将 更改为Assert.Failthrow ex代码编译得很好,我假设因为它知道异常将不允许执行继续到instance未初始化使用的点。

相反,如果我不想让测试失败,而是被标记为不确定怎么办?我可以做一个Assert.Inconclusive代替Fail,如果编译器知道在那之后执行将不会继续,那就太好了。

那么它是运行时与编译时关于允许执行在哪里进行的情况吗?对于 C# 来说,在这种情况下Assert.Fail,一个成员在返回后将永远不允许执行,这是否合理?也许这可能是方法属性的形式。这对编译器有用还是不必要的复杂性?

外部单元测试

由于人们[有效地]指出这是编写单元测试的一种愚蠢方式,因此请在单元测试领域之外考虑我的问题:

在这里,我可能会someMethodThatWillNeverReturn用抛出异常来替换调用,也许如果我有事情要做,我可以在异常的构造函数中完成它。

Resharper 知道

如果我在orreturn之后添加,Resharper 会将颜色变为灰色,并显示“代码无法通过启发式访问”的工具提示。Assert.FailAssert.Inconclusivereturn

0 投票
5 回答
31594 浏览

c++ - C++ 中的 sizeof 是在编译时还是运行时评估的?

例如,此代码段的结果取决于哪台机器:编译器机器或机器可执行文件工作?

0 投票
1 回答
1140 浏览

c++ - 编译时元编程,使用字符串文字

我正在编写一些代码,这些代码实际上可以用于一些简单的编译时元编程。通常的做法是使用空结构标记作为编译时符号。我需要用一些运行时配置元素来装饰标签。静态变量似乎是唯一的方法(启用元编程),但是静态变量需要全局声明。绕过这个 Scott Myers 的建议(来自 Effective C++ 的第三版),关于通过在函数中声明静态变量而不是作为类变量来对静态变量的初始化进行排序,我想到了。

所以我想出了下面的代码,我的假设是它会让我有一个编译时符号和在运行时可用的字符串文字。我没有遗漏任何我希望的东西,并且只要我在初始化依赖的模板类之前填充运行时字段,这将正常工作?.

编辑: 制作社区维基。

0 投票
5 回答
871 浏览

c++ - 哪些库使用通过编译时元编程技术实现的设计模式?

有人知道任何使用使用编译时技术(例如模板元编程)实现的设计模式的库吗?我知道 Loki 实现了一些,但我需要找到其他库。

0 投票
6 回答
22156 浏览

delphi - 如何在 Delphi 中获取当前过程/函数的名称(作为字符串)

是否可以在过程/函数中以字符串形式获取当前过程/函数的名称?我想会有一些在编译时扩展的“宏”。

我的场景是这样的:我有很多程序都被赋予了记录,它们都需要从检查记录的有效性开始,因此它们将记录传递给“验证程序”。如果记录无效,验证器过程(所有过程都相同)会引发异常,并且我希望异常消息不包括验证器过程的名称,而是调用验证器的函数/过程的名称程序(自然)。

也就是说,我有

进而

如果我可以写类似的东西,那将不太容易出错

然后每次编译器遇到 {$PROCNAME} 时,它只是将“宏”替换为当前函数/过程的名称作为字符串文字。

更新

第一种方法的问题在于它容易出错。例如,很容易因为复制粘贴而出错:

或错别字:

或者只是暂时的混乱:

0 投票
6 回答
20977 浏览

c++ - 如何使用 C++ 模板减少编译时间

我正在将我的 C++ 应用程序的一部分从使用较旧的 C 类型数组更改为模板化的 C++ 容器类。有关详细信息,请参阅此问题。虽然该解决方案运行良好,但我对模板化代码所做的每一个微小更改都会导致大量重新编译发生,从而大大减慢了构建时间。有没有办法从头文件中获取模板代码并返回到 cpp 文件中,以便小的实现更改不会导致重大重建?