标签: aot

如何强制Monotouch AOT编译器查看嵌套的泛型方法?

我不得不跳过篮球,但我几乎设法在我的项目中ServiceStack使用iOS Monotouch.一个运行时JIT异常就是:

System.ExecutionEngineException: Attempting to JIT compile method 'ServiceStack.Text.Json.JsonTypeSerializer:GetWriteFn<int> ()' while running with --aot-only. 
Run Code Online (Sandbox Code Playgroud)

违规代码非常简单:

   internal WriteObjectDelegate GetWriteFn<T>()
    {
        return JsonWriter<T>.WriteFn();
    }
Run Code Online (Sandbox Code Playgroud)

作为测试,我修改了SS代码以使内部方法和类型公开,并在我的项目的启动代码中包含以下内容(实际上被调用).

var ick = ServiceStack.Text.Json.JsonWriter<int>.WriteFn();
var erk = ServiceStack.Text.Json.JsonTypeSerializer.Instance.GetWriteFn<int>();
Run Code Online (Sandbox Code Playgroud)

由于某种原因,这仍然没有提醒AOT,当上面的代码执行时我得到了异常!这是因为泛型参数是值类型吗?或者是因为这些是静态类和方法?如何强制Monotouch AOT上述方法?

有问题的SS代码位于JsonTypeSerializer.cs和JsonWriter.Generic.cs中:https: //github.com/ServiceStack/ServiceStack.Text/tree/master/src/ServiceStack.Text/Json

xamarin.ios aot servicestack

25
推荐指数
1
解决办法
567
查看次数

Angular AOT编译错误"无法确定类组件的模块"

我有一个Angular(4.3.2)应用程序,我想在其上执行AOT构建.应用程序是使用@angular/cli.我有两个搭建的组件ng generate和一个模块,其中两个都作为声明包含在内:

import {PrivateComponent} from './private.component/private.component';

NgModule({
   imports: [
      // other imports
      PrivateRoutingModule
   ],
   declarations: [
      ...some other components, 
      PrivateComponent, 
      AppTopBarComponent
   ]
   // other stuff 
}) 
export class PrivateModule {}
Run Code Online (Sandbox Code Playgroud)

私有组件也用于模块的路由:

const routes: Routes = [
  {path: '', component: PrivateComponent, children: // other components}
] 

@NgModule({
   imports: [RouterModule.forChild(routes)] // this is the Angular built-in router module
})
export class PrivateRoutingModule {}
Run Code Online (Sandbox Code Playgroud)

注意:路由是如何在另一个模块定义和导入PrivateModuleAppTopBarComponent内部使用的PrivateComponent's模板.所以两者都被使用和宣布.但是当我使用"node_modules/.bin/ngc" -p tsconfig-aot.json(我在Windows 10上)时,我收到此错误消息: Cannot determine the …

aot typescript angular-cli angular angular-aot

17
推荐指数
2
解决办法
1万
查看次数

JEP 295 AOT:多次编译的对象

我正在尝试使用JDK9的新AOT功能编译应用程序服务器,并且面临着许多挑战.

应用程序服务器包含~180 MB的罐子; 编译一起溢出整数,所以我试图将每个模块编译成一个(.so)库.这些模块与其他模块有依赖关系,所以我不得不使用-J-cp -J依赖项将它们放在classpath上.这导致了4.4 GB的libs - 因为AOT应该加速服务器启动,你可以想象从磁盘加载它并没有真正帮助.(可以剥离那些调试信息的库,但我们仍然在讨论与罐子相比规模增长的顺序.)

我很沮丧,jaotc实际上类加载编译的类,它触发静态构造函数(这有时会给我错误).此外,编译器无法处理缺少的引用类,有时这只是一个运行时依赖 - 即使没有它们,服务器也可以正常运行.所以我必须提供空的模拟类来满足编译器.

但是,当使用AOT跟踪(-Xlog:aot+class+load=trace:file=/tmp/aot.txt:none而不是stdout -XX:+PrintAOT)运行服务器时,我发现libs也包含一些依赖项:

found  java.lang.Object  in  /home/user/aot/common/libjava.base-coop.so for classloader 0x2b5745e6ac80 tid=0x00002b574401e800
found  java.lang.Object  in  /home/user/aot/appserver/lib/libcom.example.module1.so for classloader 0x2b5745e6ac80 tid=0x00002b574401e800
found  java.lang.Object  in  /home/user/aot/appserver/lib/libcom.example.module2.so for classloader 0x2b5745e6ac80 tid=0x00002b574401e800
Run Code Online (Sandbox Code Playgroud)

这证实了我的疑问,lib只包含了我给编译器编译的jar中的代码,但至少包含了超类的代码.我也不确定JVM在多个库中找到相同类时的行为.

剥离重复是否可能?大/多库项目的推荐方法是什么?

java aot java-9 java-aot jep

17
推荐指数
1
解决办法
319
查看次数

如何将类型化的集合从clojure传递给java?

我知道clojure/java interop的基础知识:从clojure调用java,反之亦然.但是,我无法将clojure中的类型集合返回到java.我试图List<TypedObject>从调用clojure的java代码中看到这种性质的东西.

Java Object:

public class TypedObject {
    private OtherType1 _prop1;
    public OtherType1 getProp1() {
        return _prop1;
    }
    public void setProp1(OtherType1 prop1) {
        _prop1 = prop1;
    }
}

CLojure method:

(defn -createListOfTypedObjects
      "Creates and returns a list of TypedObjects"
      [input]
      ;Do work here  to create and return list of TypedObjects
      [typedObj1, typedObj2, typedObj3])

(:gen-class
 :name some.namespace
 :methods [createListofTypedObjects[String] ????])
Run Code Online (Sandbox Code Playgroud)

让我们考虑一下,我正在使用clojure编写一个API,它将作为jar文件分发,以便在java中使用.我的问题是如何通过代替???? 上面的问题标记在:AOT的gen类中,所以程序员使用我的api在java中编写一段代码,可以createListofTypedObjects() returns List<TypedObject>从eclipse中获得相应的intellisense/code completion(即:) .

java interop clojure aot

16
推荐指数
3
解决办法
5848
查看次数

Webpack,Typescript和Angular2具有提前(AOT)编译?

最新版本的Angular2允许在您的app.bootstrap.ts文件中使用此代码进行提前(AOT)编译:

// The browser platform without a compiler
import { platformBrowser } from '@angular/platform-browser';

// The app module factory produced by the static offline compiler
import { AppModuleNgFactory } from './app.module.ngfactory';

// Launch with the app module factory.
platformBrowser().bootstrapModuleFactory(AppModuleNgFactory);
Run Code Online (Sandbox Code Playgroud)

Angular2官方文档

我们如何将Webpack和Typescript加载器与Angular2的AOT编译器集成?

似乎可能还没有选择这样做,但我问的是关于Stack溢出的问题,所以当它可用时,答案很容易找到.

更新10/12/16 - 我得到了它的工作,请看下面我的答案.

aot typescript webpack angular-cli angular

16
推荐指数
1
解决办法
8146
查看次数

ng serve --prod throws"ERROR TypeError:(void 0)不是函数"

所以当在Angular-CLI app中遇到麻烦时.

这是发生的事情: ng serve,不ng serve --aot产生例外,一切正常.只ng serve --prod在浏览应用程序时运行休息时间.

错误TypeError:(void 0)不是函数

正在寻找答案,并发现这些不是,所以我在应用程序中的每个属性之前写了'public'并检查提供程序中是否有函数调用,但没有任何改变.

接下来我尝试用--aot旗帜运行它并且工作得很好,但是在--prod出现相同错误时仍然崩溃.

它在runnig登录过程中完全崩溃,这是:

  • 使用登录名和密码数据发送http POST
  • 如果请求解析,则调度ngRx-Store自定义登录事件(简单标志)
  • 然后router.navigateByUrl到另一个页面

奇怪的是,我到处都有类似的过程,但它在确切的位置崩溃了.

可以请有人给我一些信息,我应该在哪下挖?干杯!


更新:我在登录过程的每个部分都在切断代码,然后用--prod它构建它,结果发现来自@ angular/material的MatDialog产生了错误.在MatDialog登录组件使用afterClosed()挂钩到其父级解析后触发登录,并以某种方式产生异常.

因此,触发弹出窗口的父级是HeaderComponent,其中包含方法:

    openLoginDialog(): void {
        this.authService.login();
         const dialogRef = this.dialog.open(LoginDialogComponent);
         dialogRef.afterClosed().subscribe(result => {
           if (result) {
             this.authService.login();
           }
        });
      }
Run Code Online (Sandbox Code Playgroud)

在LoginDialogComponent里面是简单解决的方法:

    login(login, password) {
      this.authService.tryLogin(login, password).subscribe(data => {
        this.dialogRef.close(true);
      });
    }
Run Code Online (Sandbox Code Playgroud)

在我删除MatDialog后,另一个单词摆脱了项目中唯一的弹出窗口,错误消失了.我已经创建了另一个具有自己的Login表单路由的组件,但仍然认为删除整个工作模块是因为构建错误不是解决方案.

我的package.json:

    "dependencies": {
        "@angular/animations": "^5.0.2",
        "@angular/cdk": "^5.0.0-rc.1",
        "@angular/common": "^5.0.0",
        "@angular/compiler": "^5.0.0",
        "@angular/core": "^5.0.0",
        "@angular/flex-layout": …
Run Code Online (Sandbox Code Playgroud)

typeerror aot angular-cli angular

14
推荐指数
1
解决办法
2739
查看次数

免费的AOT Java编译器

有谁知道一些免费的AOT Java编译器?我找到了一个 - http://gcc.gnu.org/java/.

java compiler-construction aot

12
推荐指数
2
解决办法
1万
查看次数

在Xamarin for Android中启用AOT(Visual Studio)

我知道Xamarin for Android支持AOT.软件免费后,它的所有功能也都免费.我阅读了文档并通过修改project.csproj文件启用了AOT ,如下所示:

<AotAssemblies>True</AotAssemblies>
Run Code Online (Sandbox Code Playgroud)

确保我的项目路径不包含空格(中断处理)后,我跑了构建和我的APK 两个托管的.NET的DLL 本地编译库.可悲的是,该应用程序似乎使用.NET DLL并完全忽略本机库.有什么办法可以解决这个问题吗?

编辑:阅读其他一些与Mono AOT相关的问题,似乎这可能是它应该如何工作的.我想AOT编译我的应用程序,希望减少~2秒的启动时间,这在我从JIT切换到AOT之后根本没有改变.有人可以向我解释这个吗?

奖励:有什么方法可以启用高级优化标志?(自我)

c# native compilation aot xamarin

11
推荐指数
2
解决办法
1万
查看次数

Angular 2 AOT与JIT有效载荷比较

我对Angular 2很新,所以如果我不准确,请纠正我.

在编译器方面我对Angular 1 vs 2的理解:

在Angular 1中,编译器更通用和动态,这意味着脏检查代码是在不同组件上运行的单个代码.但是,出于Angular 2的性能考虑,每个组件都将编译为生成的代码,该代码处理该特定组件的绑定和脏检查.这意味着根据组件模板,更具体地说,绑定的数量,生成的代码变得更大.

当我们使用JIT时,这并不重要,因为此代码不通过网络并在浏览器中生成.但是当使用AOT时,它将从服务器传输.

问题(可能):

当应用程序很小时,AOT肯定会导致较小的有效负载,因为编译器不会被发送到浏览器.但随着应用程序的增长,我认为这种差异开始减少并且可能会反转(是吗?!).但我没有量化感.对于中型或大型应用来说,它会成为一个真正的问题吗?

javascript jit aot angularjs angular

11
推荐指数
1
解决办法
612
查看次数

VALA与AOT汇编之间的表现差异?

我一直在用Java开发图像处理应用程序,但我最近对VALA感兴趣.原因是因为我相信我可以提高应用程序性能(我主要关注的是与C/C++库的互连,因为看起来< Example >在Java中使用C/C++桥时存在性能损失).

背景(我所知道):

  • VALA转换为C代码,然后将其编译为本机机器代码.
  • AOT(Java/Mono C#)也可以生成本机机器代码(而不是使用VM,但仍需要运行时包).
  • 在某些情况下使用VM,甚至可以比本机机器代码更快(因为它可以通过JIT编译器进行优化).
  • 可以使用VALA生成可消费的C/C++库.

有一些事情在我脑海里蔓延,我无法找到答案:

  1. 可以使用AOT编译器生成C/C++可使用的库吗?(我猜不会).
  2. 生成的AOT二进制文件是否还存在桥接性能问题?(我猜它确实如此).
  3. 在VALA中调用C/C++库与从C调用它们具有相同的性能吗?(我想是的).

任何见解?

c# java vala aot

10
推荐指数
1
解决办法
2116
查看次数