问题标签 [dynamic-compilation]

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 投票
1 回答
632 浏览

haskell - Haskell GHC 动态编译仅适用于第一次编译

遵循此处发布的 GHC 教程,并按照我之前提出的堆栈溢出问题中的建议对此代码进行了更改,我创建了一个程序,该程序能够在 Test.hs 中编译和运行模块,并使用函数 print 打印字符串到屏幕:

如评论中所述,此代码的问题在于它似乎仅在您第一次运行时才有效(当尚未编译 Test.hs 时)。如果您再次尝试运行该代码,则会出现以下错误:

我相信这与代码已经编译的事实有关。如果我删除 .hi 和 .o 文件并再次运行该程序,则该程序会以正确的输出正确运行。我错过了什么?我目前正在使用 ghc 版本 7.4.1

(注意:我尝试过查看 GHC API,但找不到对 mkTopLevEnv 的任何引用)

0 投票
1 回答
75 浏览

asp.net - 跟踪用户控件和页面的编译时间

在 Visual Studio 2010 中使用构建前和构建后任务,我可以记录一天中的编译时间。我想对动态编译的用户控件和页面做同样的事情,以监控Temporary ASP.NET.

我应该创建一个调用“真实”编译器的自定义 C# 编译器,并在之前/之后输出日志吗?

0 投票
1 回答
293 浏览

haskell - 将字符串视为 Haskell 程序

作为一个更大的大学项目的一小部分,我需要编写一个本质上非常粗糙的 IDE。这个想法是从 gtk 文本框中获取输入,将该字符串视为在 .hs 文件中,并评估其中的函数。

我的主要方法是使用GHC API来编译和评估测试函数。我已经设法获得了一个用于从 .hs 文件编译的玩具示例。GHC 的 Target 数据类型有一个用于从 StringBuffer 获取目标的可选构造函数,因此我决定尝试更改我的代码以使其从 String Buffer 中工作:

以下代码当时在文本框中:

但是,这似乎不起作用。我得到错误:

我究竟做错了什么?我觉得我严重误解了这段代码的工作方式。

向我建议的这种方法的替代方法是使用提示或 mueval 之类的方法来评估文本框中的文本。如果我只是想单独评估一个函数,这似乎可以正常工作,但是如果我想评估一个依赖于运行同一源文件中定义的 4 个其他函数的上下文的函数,这会扩展吗?

0 投票
1 回答
247 浏览

haskell - System.Plugins 加载器似乎在看到一次失败后假设失败

我目前正在开发一个 haskell 程序,该程序从文本框中获取用户输入,然后使用System.Plugins库编译和加载它,以便提取图片以绘制到屏幕上。用户可以在文本框中编辑代码,然后通过单击编译按钮重新加载他们的新图像。这是单击编译按钮时触发的代码:

这是用户在文本框中输入的一些示例代码:

如果用户编写的代码每次都能正确编译和加载,这一切都按预期工作。但是,当用户编写一段无法加载的代码时(我一直在玩的示例是将 'pic' 更改为 'pics',因此它无法找到要加载的 pic 函数)预期的行为是程序将打印加载错误到屏幕,以便用户可能更正他们的代码并尝试再次单击编译按钮。

然而,实际发生的情况是,一旦程序遇到一次 LoadFailure,所有后续点击编译按钮的尝试都会导致加载失败消息,无论代码是否正确!

我不太确定这里到底发生了什么,但似乎该程序保留了从评估到评估的先前结果的一些记忆。如何获得我正在寻找的行为?

编辑:我试图通过编写一个小测试用例来隔离问题,该用例说明了我在不使用 gtk 的情况下遇到的问题

此代码产生结果:

即它设法复制错误

编辑2:似乎在一些完全相同的代码运行它也会产生输出:

但我认为这可能是由于连续编译一起运行得如此之快。

0 投票
5 回答
3892 浏览

c# - 相同类型的对象的 InvalidCastException - 自定义控件加载

我有一个非常有线的错误,我的一个自定义控件似乎是创建两个编译文件,当我尝试动态加载它时LoadControl()只是失败,因为无法将一个转换为另一个 - 即使它们完全相同。我写消息看,都是一样的,只是改了编译好的dll。

编码

这是我完全遵循MSDN 上所写内容后的代码:

以前我没有加载控件,ASP.但是在出现此错误并寻找解决方案之后,我严格遵循 MSDN 上的内容。无论我做什么,错误仍然存​​在。

我也尝试过这两种方法,一种是单独的,另一种是一起的(再次失败)

配置

我的 web.config,我尝试了maxBatchSize20、100、1000,也有optimizeCompilationstrue 或 false,但错误再次出现。

现在有一些关于

  • 该错误是随机的,在某些编译中出现,在其他一些不出现。
  • 这个项目很大,页面上每分钟都有很多人要求看东西,但当里面没有人时也会出现。
  • 在 64 位 dot.net 4 上运行,集成
  • 作为网络花园运行,但也经过测试,单独使用一个池(并遇到相同的问题)
  • 整个项目的会议已结束。
  • 这些页面是从 2007 年开始运行的,但这个问题是在上个月出现的,不幸的是我找不到开始的位置和方式,或者是什么触发了它,因为我迟到了几天才看到它。
  • 似乎只有一个自定义控件加载,调用繁重的那个。
  • 我已经将代码更改了 4 次,进行了小更改或大更改,但仍然存在。
  • 我尝试过optimizeCompilations真假和同样的问题。
  • 我也尝试过停止网络,删除所有临时文件,重新打开,然后又出现了。
  • 当应用程序开始只锁定一个编译时,我尝试在 global.asax 上放置一个互斥锁,但这也失败了。
  • 从起作用的那一刻起,一切都很好,但如果不起作用,则不会自动更正。
  • 我加载此自定义控件的代码存在并在代码的多个位置、不同页面上调用。
  • 其他具有类似负载的自定义控件没有任何问题。
  • 此自定义控件禁用 ViewState。
  • 我也尝试重新定位一些代码,通过微优化更改完整的函数调用,不再失败。
  • 在开发计算机上工作正常。我batch="true"放在 web.config 上,错误立即出现。
  • 没有其他类似的问题,例如我们无论如何都无法修复的错误。系统运行了好几天,池根本没有回收,内存稳定,还有更多的免费使用。该程序已运行多年,但我们几乎每天都在更新。
  • 在相同的核心代码下运行多个站点(例如 stackexchange)并且都具有相同的随机问题。
  • AutoEventWireup 为假
  • 它出现在我以相同方式加载的其他自定义控件上。

当出现此错误时,我现在做的解决方法是:我只是强制项目重新编译并进行少量更改,然后错误消失,直到下一次更新。

我有一个错误,试图解决最后几周的树,却找不到原因。我已经尝试了几乎所有我能做的事情,但都失败了,并且错误再次出现。所以我在这里发帖也许有些人可以帮助我并找到解决办法。

最后一句话:这个错误很疯狂,自定义控件是一样的,我在它上面做任何事情我只动态加载它并繁荣,编译器出于某种只有他知道的原因有两次不同的时间 - 随机。

更新 1

我能够在开发人员机器上重现该错误。在那里我发现包含这个自定义控件的两个 dll 模块有不同的。

一个是捆绑在一起的 4 个自定义控件。另一个模块是单独的自定义控件。

解决方法

在尝试修复此错误的树数周后,我最终发现,当编译器批量编译目录并将许多不同的自定义控件捆绑在同一个 dll 中时,会出现此错误。所以当我尝试单独加载它时抛出这个异常。

所以我将有问题的自定义控件单独移动到不同的目录中,似乎我现在避免使用它。

更新 2

再次出现,即使在我将一些文件移动到不同的目录之后。是随机的,找不到明确的关联是什么触发了它。

更新 3

因为我们发现这里的主要问题是在batch="true"同一个 dll 上编译许多自定义控件的批处理编译 (),所以对编译器说不要这样做的一种方法是maxBatchGeneratedFileSize参数。我使用它的值为 100,问题再次出现,现在我将它降低到 40 并测试它。

0 投票
1 回答
47 浏览

parsing - 在哪里可以找到 InlinePageParser 类?

InlinePageParser找到了几个解析 cshmtl 文件的示例后,我想自己进行一些实验,但在任何可用的程序集或命名空间中都找不到该类。我用 VS 2012 安装了 MVC3 和 4,我有 WebMatrix。

我正在查看的示例具有导入:

有的readin显示Microsoft.WebPages已经被替换了System.Razor,但是新的命名空间只有System.Web.Razor.Parser一无所知InlinePageParser。一个班级怎么会就这样消失?它做了什么可怕的事情吗?

0 投票
3 回答
1810 浏览

java - 生成动态类 Java

我通过将所有代码写入 java 文件,将 java 文件编译为类文件,然后使用 URLClassLoader 加载类文件,在我的 java 程序中生成一个动态类。这样做的问题是它在我的计算机上创建了很多文件。他们是一种只创建“虚拟文件”(文件对象)而不生成任何实际文件的方法吗,因为我这样做的方式需要时间并且看起来不干净且效率低下。

0 投票
0 回答
153 浏览

razor - 从另一个 MVC 网站渲染视图

mMy 的任务是创建一个动作,允许获取另一个 asp.net MVC 站点输出的可下载副本(让我们将其视为模板,结果应该是压缩的页面集合)。模板站点位于磁盘上的某个位置,但不在渲染器站点内。即我想加载另一个站点的视图并在当前上下文中动态构建它的输出。我已经通过创建自定义 VirtualPathProvider / VirtualFile 解决了定位视图的问题,最终路径被正确解析。但是,我在代码中有一个编译错误:

结果:

有任何想法吗?

0 投票
3 回答
1423 浏览

c# - 动态编译和执行条件语句

我们想给用户一个图形格式来设计一些数据的条件语句。我们的应用程序将采用该图形格式,将其转换为 C#,对其进行编译,然后针对某些数据运行条件语句,并返回一个布尔值。

问题是这些条件语句需要在运行时编写和编译(当然,执行),因为我们不会在每次用户创建新的条件语句时重新构建应用程序。

我们考虑过使用 LINQ 表达式树,但编译后的 LINQ 表达式树无法保存,这意味着每次执行条件语句时都需要重新编译。

我们认为更好的替代方法是使用 CodeDOM 将条件语句编译为 .dll(它们将被转换为静态类的静态方法,该静态类将数据作为参数,针对条件语句运行)。这允许我们保存编译后的语句,并且我们可以在运行时加载和卸载 .dll。此外,生成 C# if 语句比生成 LINQ 表达式树更容易。

或者,我们可以使用 Roslyn 生成 .dll。据报道,这比 CodeDOM 快,但 Roslyn 仍在 CTP 中。

是否存在我们应该知道的隐藏陷阱或执行此操作的一般模式?除了非常小心地只生成对数据进行测试的函数(并且不修改数据或允许调用任何其他函数)之外,我们还应该注意什么?加载和卸载(可能数百个)这些 .dll 会导致问题吗?如果每个 .dll 都有自己独特的命名空间,加载和卸载(可能有数百个)它们会留下工件吗?

0 投票
1 回答
130 浏览

java - 使用 javax.tools 编译 & 运行时不进行反射

我是论坛的新手,对 Java 编码很陌生。

无论如何,我正在实现我的 Java 代码来动态编译和运行不同的类,这些类是先验未知的,并且可能会随着时间的推移而改变(不太频繁)。我发现这里提出的基于 javax.tools 的示例非常有用,但是由于我的工作应该稍后实时运行,所以我想尽可能避免使用 Java 反射。您知道是否存在一种无需使用再膨胀即可运行已编译代码的方法吗?编译后我可以检索一些指向类的变量,然后用它来实例化类?

谢谢提前卢卡