问题标签 [compilation-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 投票
12 回答
24056 浏览

c++ - 如何提高 Visual C++ 编译时间?

每次提交时,我都在 buildbot 中编译 2 个 C++ 项目。两者都是大约 1000 个文件,一个是 100 kloc,另一个是 170 kloc。从 gcc (4.4) 到 Visual C++ (2008) 的编译时间非常不同。

一个项目的 Visual C++ 编译需要 20 分钟。他们无法利用多个核心,因为一个项目依赖于另一个。最后,在 Debug 和 Release 中完整编译这两个项目(32 位和 64 位)需要超过 2 1/2 小时。

一个项目的 gcc 编译需要 4 分钟。它可以在 4 个内核上并行化,大约需要 1 分 10 秒。2 个项目的 4 个版本(调试/发布,32/64 位)的所有 8 个构建都在不到 10 分钟的时间内完成编译。

Visual C++ 编译时间发生了什么?它们基本上慢了 5 倍。

编译 C++ kloc 的平均预期时间是多少?我的是 7 s/kloc 和 vc++ 和 1.4 s/kloc 和 gcc。

可以做些什么来加快 Visual C++ 上的编译时间吗?

0 投票
4 回答
5346 浏览

c++ - 如何使用 Boost Asio 减少编译时间

Boost.Asio 是一个很棒的库,但它有一个巨大的缺点——编译时间极慢。HTTP协议的一个简单实现(真的很简单)(大约1k行代码)在GCC 4.4下编译大约需要13.5s!

我尝试使用 PCH,但它并没有太多地提高编译时间(大约 1 秒。仅)。

那么是否有任何关于如何使 Boost.Asio 编译时间更快的教程?

例如,我应该为什么类准确包含哪些标题。

我使用例如:io_service, tcp::ip::sockets, tcp::ip::acceptor, deadline_timer, 缓冲区和一些函数,如async_read, async_write

有什么建议么?

PS:我会尽可能使用 pimpl。

0 投票
6 回答
5757 浏览

latex - 为什么 Tex/Latex 在后续运行中没有加速?

我真的很想知道,为什么即使是最近的 Tex/Latex 系统也不使用任何缓存来加速以后的运行。每次我修复一个逗号*,调用 Latex 都会花费我大约相同的时间,因为它需要加载和转换每个图片文件。

(* 我知道即使更改一个微小的逗号也会影响整个结构,但当然,编写良好的缓存格式可以看到它的影响。此外,可能存在不需要 100% 正确性的情况,只要它很快.)

Tex语言中是否有某些东西使这变得复杂或不可能完成,或者仅仅是在 Tex 的原始实现中,没有必要这样做(因为在那些大型计算机上它会一直很慢)?

但是另一方面,为什么这不会让其他人非常恼火,以至于他们开始了一个具有某种缓存(或将 Tex 文件透明转换为解析速度更快的格式)的分叉?

我能做些什么来加快 Latex 的后续运行吗?除了将所有内容放入chapterXX.tex 文件然后将它们注释掉?

0 投票
1 回答
202 浏览

googletest - 在 Google Test 中编译测试子集

使用标志来限制在Google Test 框架中运行的测试很棒,但在我的情况下,大部分时间都浪费在等待整个测试项目在我编写测试时一次又一次地编译上。

有没有一种简单的方法可以将编译限制为我目前正在处理的那些测试用例?

(从 VS 中删除测试 cpp 文件和资源 cpp 文件始终是一种替代方法,但工作量很大......)

0 投票
3 回答
3085 浏览

clojure - Clojure 中的类型安全

我想问一下 Clojure 上有哪些类型的安全语言结构?

我已经多次阅读 Luke VanderHart 和 Stuart Sierra 的“实用 Clojure”,但我仍然有明显的印象,即 Clojure(像其他 lisps 一样)并没有非常重视编译时验证检查。类型安全只是对正确语义进行编译时检查的一种(非常流行的)策略

我问这个问题是因为我渴望被证明是错误的;clojure 上有哪些设计模式可用于验证(在编译时,而不是在运行时)期望字符串的函数不会被调用,例如整数列表?

另外,我读过像 Paul Graham 这样非常聪明的人公开提倡 lisp 允许在其之上实现来自低级语言的所有内容(大多数人会说该语言本身正在其之上重新实现),所以如果那个断言会是真的,那么像类型检查这样的琐碎事情应该是小菜一碟。那么你是否觉得在 clojure 或其他 lisps 中存在类型系统(或实现此类类型系统的能力),这使程序员能够将验证检查从运行时偏移到编译时,甚至更好的设计-时间?

0 投票
1 回答
141 浏览

c++ - 将类型解析为 class::typedef 的更短方法

我有几节课。现在它们被一个符号分开。他们中很少有人包含type(a typedef),而且很少有人没有。

我想以这样的方式实现一个SFINAE类,

一种方法是使用基本 SFINAE,如上一个链接所示,它检查是否T包含 atype然后使用bool检查器。例如,

演示

问题:我在整个代码中有很多这样的实例,我觉得这种方法可能会大大增加编译时间。因为必须经过两次迭代:第一次用于查找type,第二次通过解析bool标志。

有没有更快的方法来减少编译时间?

[旁注:在这种情况下,我在andtype之间放置了分隔符。但是,我可以自由地将任何东西放在里面,将它与. 也欢迎与此相关的想法。]ABAB

0 投票
1 回答
2452 浏览

delphi - 新的 Delphi XE2 自动生成的内部版本号是否链接到 1.1.2000 00:00:00?

在 Delphi XE2 中,自动生成的内部版本号功能现在使用某种日期和时间生成值,如下所示:

2.4.4386.838

最后两个数字在您每次构建时都会更改,并且基于当前日期和时间:

我猜想发布和内部版本号的这种新格式是从 .NET 实现中借来的,它做了一些非常相似的事情。在 .net 中,最后一个数字 (Build) 等于自当地时间午夜以来的秒数除以 2。有关 .net 实现的详细信息,请参阅此链接:Determining Build Date the hard way

如果可以依靠这种方式保持这种状态,那么现在我们有一个更好的方法来确定编译时间,而不是

  1. 使用 IDE 插件

  2. 使用 PE 标头技巧

问题不在于如何返回旧的自动增量版本号功能。

问题XE2 是否真的使用我上面显示的日期和时间,从 2010 年 1 月 1 日开始,并在 Build 和 Release 数字中添加天数和秒数?

0 投票
2 回答
6019 浏览

java - 获取 JAR 编译时间

我正在尝试获取从 Eclipse 导出的可运行 JAR 文件的编译时间。一种方法可能是获取 META-INF/MANIFEST.MF 文件的修改时间。不幸的是,我似乎无法找到获取此信息的方法(我知道如何使用 读取清单本身getResourceAsStream("/META-INF/MANIFEST.MF"),但我似乎无法读取其修改时间)。

有没有人知道如何做到这一点?

0 投票
1 回答
1354 浏览

c++ - 如何使用带有 boost::asio 的预编译头文件

我有一个项目有一些main.cpp和以下预编译头:

如果项目是*.lib,它总是正常构建。

如果项目是*.exe
当使用 构建时Create (/Yc),一切正常。
设置时Use (/Yu) 出现链接器错误 LNK2001

1) 未解析的外部符号“私有:静态类 boost::asio::detail::tss_ptr::context> boost::asio::detail::call_stack::top_” (?top_@?$call_stack@Vstrand_impl@strand_service@ detail@asio@boost@@E@detail@asio@boost@@0V?$tss_ptr@Vcontext@?$call_stack@Vstrand_impl@strand_service@detail@asio@boost@@E@detail@asio@boost@@@234@一种)

2) 未解析的外部符号“public: static class boost::asio::detail::service_id boost::asio::detail::service_base::id”(?id@?$service_base@Vselect_reactor@detail@asio@boost@ @@detail@asio@boost@@2V?$service_id@Vselect_reactor@detail@asio@boost@@@234@A)

3) 未解析的外部符号“public: static class boost::asio::detail::service_id boost::asio::detail::service_base::id”(?id@?$service_base@Vstrand_service@detail@asio@boost@ @@detail@asio@boost@@2V?$service_id@Vstrand_service@detail@asio@boost@@@234@A)

4) 未解析的外部符号“public: static class boost::asio::detail::service_id >> boost::asio::detail::service_base >>::id” (?id@?$service_base@V?$deadline_timer_service @Vptime@posix_time@boost@@U?$time_traits@Vptime@posix_time@boost@@@asio@3@@asio@boost@@@detail@asio@boost@@2V?$service_id@V?$deadline_timer_service@Vptime @posix_time@boost@@U?$time_traits@Vptime@posix_time@boost@@@asio@3@@asio@boost@@@234@A)

提升:v1_49 静态/MTd

0 投票
3 回答
2595 浏览

c++ - 关于静态模板库的链接/编译时间

对于基于模板的类(STL 和 boost),不使用源文件并将实现也放入头文件似乎是一种常见的约定。我认为与头文件和源文件中声明和实现之间的经典分离相比,这将大大增加编译包含头文件的源文件所需的时间。这样做的原因可能是因为您必须在源文件中告诉编译器要使用哪些模板,这可能会导致 .a 文件膨胀。

假设随着库的增长,链接器也需要更多时间,那么就编译包含库头的源文件所需的时间而言,哪种方法会更快?

1.不使用.cpp文件,把整个类,包括实现,放到头文件中

或者

2. 为库本身的源文件里面的各种类型显式编译模板