Tag: 编译器构造

在GWT中编译排列是什么意思?

编译Web App项目时,编译了6个排列。 这些排列是什么,它们是什么意思?

类似于CoffeeScript的C / C ++语言

我一直在寻找一种提供与Coffeescript相同function的语言,但是对于C / C ++。 我的意思是一种将代码转换为C的语言,但是可读,就像CoffeeScript转换成Javascript,可读和全部。

最大方法名称长度

有没有人碰巧知道在你select的编程语言中方法名的最大长度是多less? 我打算把这个问题作为一个C#的具体问题,但我认为这将是很好的知道各个方面。 还有什么因素: 语言规范是否限制了这一点? 编译器限制它到什么地步? 在32位和64位机器上有区别吗?

为什么GCC-Windows依赖于cygwin?

我不是一个C ++开发人员,但是我一直对编译器感兴趣,而且我有兴趣修改一些GCC(特别是LLVM)的东西。 在Windows上,GCC需要一个POSIX仿真层(cygwin或MinGW)才能正常运行。 这是为什么? 我用了许多其他的软件,用C ++编写,并针对不同的平台(Subversion,Firefox,Apache,MySQL)进行交叉编译,它们都不需要cygwin或MinGW。 我对C ++最佳实践编程的理解是,您可以编写合理的平台中立代码,并处理编译过程中的所有差异。 那么GCC的协议是什么? 为什么不能在Windows上本地运行? 编辑: 好,这两个答复到目前为止说,基本上,“GCC使用posix层,因为它使用posix标题”。 但是这并不能真正回答这个问题。 比方说,我已经有一套我最喜欢的标准库的标题。 为什么我仍然需要posix头文件? GCC是否需要cygwin / mingw才能真正运行 ? 或者它只需要头和库的仿真层? 如果是这样,为什么我不能给它一个具有所需资源的“lib”目录? 再次编辑: 好吧,我会再次尝试澄清问题… 我也用D编程语言编写代码。 官方编译器被命名为“dmd”,Windows和Linux都有官方的编译器二进制文件。 Windows版本不需要任何种类的POSIX仿真。 而Linux版本不需要任何forms的Win32仿真。 如果编译器对其环境做出假设,它就会很好地隐藏这些假设。 当然,我必须告诉编译器在哪里find标准库以及在哪里find静态或dynamic链接的库。 相比之下,海湾合作委员会坚持假装它是在一个POSIX环境中运作的,并要求我通过build立一个仿真层来幽默这些假设。 但是,GCC内部依赖于这一层呢? 它只是寻找stdlib头,它假定它会在“/ usr / lib”中find这些头? 如果是这样的话,我不应该只是告诉它在“C:/ gcc / lib”中查找这些头文件吗? 还是GCC本身依靠POSIX库来访问文件系统(以及做其他低级的东西)? 如果是这样的话,那么我想知道他们为什么不只是静静地链接到他们最喜欢的windows POSIX库。 为什么要求用户设置依赖关系,何时才能将这些依赖关系直接构build到应用程序中?

null的目的是什么?

我在编译器类,我们负责创build我们自己的语言,从头开始。 目前我们的困境是是否包含“空”types。 null提供了什么目的? 我们的一些团队认为这不是绝对必要的,而另外一些则是为了提供额外的灵活性而无效。 你有什么想法,尤其是针对null吗? 你有没有创build需要null的function?

编译器能否自动检测纯函数,而不需要关于纯度的types信息?

所以我和我的朋友争辩说,像GCC这样的编译器可以自动检测一个纯函数而没有任何types的信息。 我不信。 像D或Haskell这样的语言在他们的types系统中具有纯度,程序员明确地定义了什么函数是纯粹的。 一个纯函数没有副作用,因此很容易被并行化。 所以问题是:这是否是必要的? 一个编译器是否可以检测到纯度,没有任何元或types的信息,只要假设IO或自动访问全局variables的任何东西都不是纯粹的?

如何确保编译器优化不会引入安全风险?

我必须编写一个Windows服务来处理某些机密数据(如PIN码,密码等)。 这些信息需要很短的时间:通常它们几乎立即被发送到智能卡读卡器。 让我们考虑这段代码: { std::string password = getPassword(); // Get the password from the user writePasswordToSmartCard(password); // Okay, here we don't need password anymore. // We set it all to '\0' so it doesn't stay in memory. std::fill(password.begin(), password.end(), '\0'); } 现在我关心的是编译器优化。 在这里编译器可能会检测到密码即将被删除,并且在这一点上改变它的值是无用的,只需要删除这个呼叫。 我不希望我的编译器关心未来未被引用的内存的价值。 我的担心是否合法? 我怎样才能确定这样一段代码不会被优化?

exec任务需要一个命令执行的错误是什么意思?

在Visual Studio中编译项目时,出现错误消息“执行任务需要执行的命令”,没有行号。 这个错误是什么意思? (为了回答我自己的问题而抱歉,在写这篇文章的时候我刚刚find了一个答案,已经把它做成了社区wiki,以免冒犯。)

什么是Linux实用程序来破坏C ++符号名称?

我有c++filt命令来去掉一个符号,什么是做相反的工具,并打破了一个符号名称? 如果我想调用dlsym()一个错误的C ++函数名称,这将是有用的。 我宁愿不要在代码中硬编码名称,因为随着时间的推移,由于新的编译器版本或新的编译器品牌被使用,或者由于编译多个平台,目前可能会改变。 是否有一个程序化的方式来获得代表一个C ++函数在运行时的string,以便代码是独立于编译器? 一种可能的方法是在编译时调用一个实用程序,为正在使用的编译器执行名称修改,并将适当的错位C ++符号名称插入到dlsym()使用的string中。 这里是最接近我在这个网站上find的解决scheme ,它是通过使用一个固定的C风格的名字来间接地在你想要dlsym()的库中定义的C ++符号来完成的,但是如果你没有控制权图书馆提供了什么,这不是一个选项。

C#是'types检查结构奇怪的.NET 4.0 x86优化行为

更新:我已经提交了Microsoft Connect的错误报告 ,请投票! 更新2:微软已经将bug报告标记为已修复 由微软于18/08/2010在17:25发布 该错误将在未来版本的运行时中修复。 恐怕现在判断是否会在服务包或下一个主要版本中还为时过早。 由于升级到VS2010,我得到一些非常奇怪的行为与“is”关键字。 下面的程序(test.cs)在debugging模式(对于x86)编译时输出True,在(对于x86)优化编译时输出False。 编译x64或AnyCPU中的所有组合会给出预期结果,即True。 在.NET 3.5下编译的所有组合都会给出预期的结果,True。 我正在使用下面的batch file(runtest.bat)来编译和testing使用编译器.NET框架的各种组合的代码。 有没有人在.NET 4.0下看到过这种types的问题? 当运行runtests.bat时,其他人是否在计算机上看到和我一样的行为? @ $ @#$? 有没有解决这个问题? test.cs中 using System; public class Program { public static bool IsGuid(object item) { return item is Guid; } public static void Main() { Console.Write(IsGuid(Guid.NewGuid())); } } runtest.bat @echo off rem Usage: rem runtest — […]