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

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

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

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

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

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

我感觉那些老外纷纷放弃在.NET上开发语言是明智的。Java平台上不断有Groovy、Scala、Kotlin等等语言出现,在.NET上不可能有了。微软在.NET上是唯一的主宰,想废掉哪个就马上废掉,不需要像Java的JCP组织那样开会投票,也不需要询问.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

编译器移植到.NET Core失败记录和对.NET未来感想的更多相关文章

  1. 开源纯C#工控网关+组态软件(十)移植到.NET Core

    一.   引子 写这个开源系列已经十来篇了.自从十年前注册博客园以来,关注了张善友.老赵.xiaotie.深蓝色右手等一众大牛,也围观了逗比的吉日嘎啦.精密顽石等形形色色的园友.然而整整十年一篇文章都 ...

  2. ASP.NET Core 入门教程 10、ASP.NET Core 日志记录(NLog)入门

    一.前言 1.本教程主要内容 ASP.NET Core + 内置日志组件记录控制台日志 ASP.NET Core + NLog 按天记录本地日志 ASP.NET Core + NLog 将日志按自定义 ...

  3. .net core日志记录

    .net core日志记录 日志是必须的,目前采用log4net进行日志记录. 定义通用的日志记录方法 public static class Log4NetFunc { private static ...

  4. ASP.NET Core 如何记录每次响应的Response信息 - sky 胡萝卜星星 - CSDN博客

    原文:ASP.NET Core 如何记录每次响应的Response信息 - sky 胡萝卜星星 - CSDN博客 上一篇文章中我们已经成功的记录了Request部分的信息,现在我们来看下如何记录Res ...

  5. ASP.NET Core 如何记录每次请求的Request信息 - sky 胡萝卜星星 - CSDN博客

    原文:ASP.NET Core 如何记录每次请求的Request信息 - sky 胡萝卜星星 - CSDN博客 版权声明:本文为starfd原创文章,转载请标明出处. https://blog.csd ...

  6. NET Framework项目移植到NET Core上遇到的一系列坑

    原文:NET Framework项目移植到NET Core上遇到的一系列坑 版权声明:本文为博主原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明. 本文链接:https: ...

  7. NET Framework项目移植到NET Core上踩的坑(1)

    本文章向大家介绍NET Framework项目移植到NET Core上遇到的一系列坑,主要包括NET Framework项目移植到NET Core上遇到的一系列坑使用实例.应用技巧.基本知识点总结和需 ...

  8. 记一次Tomcat运行失败记录

    记一次Tomcat运行失败记录 如图tomcat运行之后会出现这样的情况,在网上百度之后大部分都说的是web.xml或者其他配置文件的问题,但是根据网上修改了之后却还是老样子. 这里有比较好的网址可以 ...

  9. 捕获Insert触发器失败记录

    1.背景 环境:发布服务器A Windows2008+SQL2008,分发服务器B Windows2008+SQL2008,订阅服务器C Windows2008+SQL2012发布服务器A上的用户信息 ...

随机推荐

  1. Pandorabox固件路由器上申请Let's Encrypt证书,为内网里的多个web服务提供SSL支持

    对于家中宽带有公网IP的用户,有时我们需要将路由器内部网络的某些web服务通过端口转发暴露到外网(例如NAS远程访问),但HTTP是明文传输,有被监听的风险:如果在NAS上使用自签名证书,再端口转发, ...

  2. Windows Server 2012搭建SQL Server Always On踩坑全记录

    Windows Server 2012搭建SQL Server Always On踩坑全记录 环境信息: Windows Server 2012 R2 Sql Server 2012 整个搭建集群的过 ...

  3. MySQL之单表多表查询

    #1.单表查询 #单表查询语法 select <字段1,字段2....> from <表名> where <表达式> group by field 分组 havin ...

  4. 重置gitlab管理员密码

    gitlab web管理员登录密码忘记以后可以用如下方式修改密码(本演示系统为Linux-CentOS6.6): [root@localhost ~]# gitlab-rails console pr ...

  5. PHPRAP v1.0.6 发布,修复因php7.1版本遗弃mcrypt扩展造成安装失败的BUG

    PHPRAP,是一个PHP轻量级开源API接口文档管理系统,致力于减少前后端沟通成本,提高团队协作开发效率,打造PHP版的RAP. 更新记录 [修复]修复因php7.1版本遗弃mcrypt扩展造成安装 ...

  6. 如何在普通的元素上实现enter键的绑定

    在做登录页面时候,通常当用户输入账号密码后直接按enter键就触发登录按钮了. 如果是input标签,vue中可以绑定按键修饰符,但是如果是其它标签呢.我的做法如下: document.querySe ...

  7. JavaScript实现树结构(一)

    JavaScript实现树结构(一) 一.树结构简介 1.1.简单了解树结构 什么是树? 真实的树: 树的特点: 树一般都有一个根,连接着根的是树干: 树干会发生分叉,形成许多树枝,树枝会继续分化成更 ...

  8. idea 2018.1激活方法

    之前用的idea都是2017版本的,现在已经四月份了,对于2018年1月份的版本应该可以放心的用了. 在这里,仅提供2018版本的激活码. 至于安装步骤,这里省略一千个字...... 下面是具体的激活 ...

  9. jupyternotebook安装

    本篇阅读目录 一.Jupyter notebook环境安装 二.爬虫介绍 回到顶部 一.Jupyter notebook环境安装 1.Anaconda 以及 安装步骤 Anaconda指的是一个开源的 ...

  10. 事务特性,事务的隔离级别以及spring中定义的事务传播行为

    .katex { display: block; text-align: center; white-space: nowrap; } .katex-display > .katex > ...