zoukankan      html  css  js  c++  java
  • 编译器移植到.NET Core失败记录和对.NET未来感想

     

    .NET Core是微软力推的新平台,影响力好像还越来越大。为了对这一行业趋势有所准备,最近把自己搞的编程语言的编译器从.NET移植.NET Core,以实现跨平台在Linux上运行,然而失败了。

     

    原因是.NET Core类库中AppDomainAssemblyBuilderModuleBuilderILGenerator等等缺失了一些很核心的方法或类型,导致无法编译通过。

     

    核心缺少这些无法编译成功,也不能生成最终的二进制文件。那些以前可以在.NET CLR上运行的开源语言.NET Core对它们来说已经没有了吸引力,现在没有一个跟进到.NET Core上,所以也没有办法从开源项目中获得帮助。比如说Clojure CLR,我下载了它最新的编译器源码,它还是用System.Reflection.Emit命名空间生成IL指令。

    微软要在.NET Core上废弃了System.Reflection.Emit那一套东西。我拼命研究的那套生成IL的知识要作废了。这让我想到了SliverlightXNAWindows Phone的下场。我辛辛苦苦钻研到的这部分知识又被归零了,让我想到了刷卡时为零(萨卡什维利外号)

     

    我又想到现在微软现在是用Roslyn编译C#的,而且Roslyn是开源的。我就下载了Roslyn源码,并且进行了分析。发现源码中PEAssemblyBuilder有一些.NET Core中缺少的方法,但是这个它是internal sealed类,不对外开放,不提供给大家使用。

    微软不但在.NET Core上废掉了以前的System.Reflection.Emit,而且不提供新的替代功能,看来它排除其它人,要一己之力建设.NET生态,.NET超越Java的可能性也大致确定。感觉诚意太少。

     

    我感觉那些老外纷纷放弃在.NET上开发语言是明智的。Java平台上不断有GroovyScalaKotlin等等语言出现,在.NET上不可能有了。微软在.NET上是唯一的主宰,想废掉哪个就马上废掉,不需要像JavaJCP组织那样开会投票,也不需要询问.NET程序员的意见,执行效率极高。

    缺少的方法或类型如下:

    AppDomain

    缺少方法

    DefineDynamicAssembly(AssemblyName name, AssemblyBuilderAccess access);

     

    AssemblyBuilder

    缺少方法

    DefineDynamicModule(string name, string fileName, bool emitSymbolInfo);

    SetEntryPoint(MethodInfo entryMethod, PEFileKinds fileKind);

    Save(string assemblyFileName);

     

    ModuleBuilder

    缺少方法

    DefineDocument(string url, Guid language, Guid languageVendor, Guid documentType);

     

    ILGenerator

    缺少方法

    MarkSequencePoint(ISymbolDocumentWriter document, int startLine, int startColumn, int endLine, int endColumn);

     

    LocalBuilder

    缺少方法

    SetLocalSymInfo(string name);

     

    缺少枚举类型 PEFileKinds

     

    AssemblyBuilderAccess

    缺少枚举值

    Save,

    RunAndSave,

    ReflectionOnly

     

  • 相关阅读:
    要求两个条件都为假时,执行某些操作
    Celery + RabbitMq 示意图
    关于消息队列的好文章
    django related_name, on_delete
    Celery 图,[转]
    django model 中 meta子类详解
    django 自定义app
    python __dict__
    Python SQLAlchemy基本操作和常用技巧(包含大量实例,非常好)【转】
    scala private
  • 原文地址:https://www.cnblogs.com/tkt2016/p/12625988.html
Copyright © 2011-2022 走看看