.net解释器

author author     2022-07-30     476

关键词:

由于目前项目中使用的语言是C#,而C#在IOS上只能以AOT方式执行,那么热更新就是一个非常棘手的问题。

为此我这里开源一个自己的.NET 解释器。

当前C#热更新的主要貌似有同仁实现过,好像有个C#SCRIPT(非标准C#)ILScript

后面的ILscript的实现和我目前的思路一致,直接解释执行IL CODE。同时依赖于现有的.net运行库,尽可能的不要全部都解释执行,如一些不需要热更新的部分,框架底层,网络层,IO层,通常这些代码会被大量使用,不太容易出现非常严重的问题。而一般引起问题的都是一些业务逻辑。所以我实现的解释器只解释执行一部分代码,而另外一部分还是原生执行。

但是这个解释执行有个非常大的问题,就是NATIVE代码(对于解释执行代码)来说,如何把一个解释层的虚拟对象与NATIVE代码中的对象对应,以及NATIVE代码的VIRTUAL CALL(在NATVIE代码执行时不能插入代码)。

目前这两个问题在代码中都能初步解决,具体原理嘛,大家先看代码,以后可能会开个系列文章,来说说怎么样实现一个.NET解释器。

代码仓库:https://github.com/dotnetscript

代码在DEVELOP分支中,大家有兴趣的话可以看看,对于其他IL解释器方案,目前的实现基本可以完美实现跨NATIVE层继承、交互,完整的泛型支持,ASYNC/AWAIT支持,另外异常支持也基本完成,但还没有完全测试,另外在解释代码中不能使用TYPE或者GETTYPE这种,这个会以后慢慢加进去。

大家有什么问题多多留言吧,互相交流!

.Net 任务类 - 请解释

】.Net任务类-请解释【英文标题】:.NetTaskclass-pleaseexplain【发布时间】:2015-09-0501:12:27【问题描述】:谁能解释一下为什么下面的publicasyncTaskDoStuff()方法仍然可以工作而不返回任何东西?它没有说void,所以我假设返回类型必须是... 查看详情

解释 Asp.net 中的滑块代码

】解释Asp.net中的滑块代码【英文标题】:ExplainslidercodeinAsp.net【发布时间】:2013-11-2416:21:53【问题描述】:我在ASP.net中使用c#我从这里得到了这个代码http://www.c-sharpcorner.com/UploadFile/c63ec5/build-image-slider-with-Asp-Net/它工作正常,有... 查看详情

.Net Core WebApi 目标框架“net5.0”在构建应用程序时解释为“net50”

】.NetCoreWebApi目标框架“net5.0”在构建应用程序时解释为“net50”【英文标题】:.NetCoreWebApitargetframework"net5.0"interpretedas"net50"whilebuildingapp【发布时间】:2021-05-0514:45:07【问题描述】:我正在.Netcore5.0中创建一个新的... 查看详情

有人可以向我解释 asp.net 路由语法吗?

】有人可以向我解释asp.net路由语法吗?【英文标题】:Cansomeoneexplainasp.netroutingsyntaxtome?【发布时间】:2011-03-1012:44:08【问题描述】:我在Web窗体方案中处理此代码:publicstaticvoidRegisterRoutes(RouteCollectionroutes)Router=newRoute("*url",newMyRo... 查看详情

asp.net术语解释!

1、持久性Cookie;2、非持久性Cookie;3、视图状态ViewState;请用简洁、精准语言描述其概念及其应用!感谢,非常感谢!参考技术A1、持久性Cookie;-33年的存储COOKIE2、非持久性Cookie;<1年的存储COOKIE3、视图状态ViewState;在没有IIS情况下模... 查看详情

ASP.NET Identity UserStore中GetNormalizedUserNameAsync和SetNormalizedUserNameAsync函数的解释

】ASP.NETIdentityUserStore中GetNormalizedUserNameAsync和SetNormalizedUserNameAsync函数的解释【英文标题】:ExplanationofGetNormalizedUserNameAsyncandSetNormalizedUserNameAsyncfunctionsinASP.NETIdentityUserStore【发布时间】:2018-01-0213:30:00【 查看详情

数组的解释过程

 https://blog.csdn.net/qq_31655965/article/details/60882588https://blog.csdn.net/xu511739113/article/details/52350519 查看详情

asp.net配置文件web.config详细解释

一、认识Web.config文件      Web.config文件是一个XML文本文件,它用来储存ASP.NETWeb应用程序的配置信息(如最常用的设置ASP.NETWeb应用程序的身份验证方式),它可以出现在应用程序的每一个目录中。当你通过VB.NET... 查看详情

.Net Core 3.1 上的 PUT 方法出现无法解释的 401 响应

】.NetCore3.1上的PUT方法出现无法解释的401响应【英文标题】:Unexplained401responsefromPUTmethodon.NetCore3.1【发布时间】:2021-05-1809:15:03【问题描述】:我有一个非常有趣的问题。我有一个.NetCore3.1RestWebAPI。背景资料:我已根据我们的其... 查看详情

资源解释为“其他”,但以未定义的 MIME 类型传输。 IE 错误(Asp.net 网站)

】资源解释为“其他”,但以未定义的MIME类型传输。IE错误(Asp.net网站)【英文标题】:ResourceinterpretedasOtherbuttransferredwithMIMEtypeundefined.errorforIE(Asp.netWebsite)【发布时间】:2011-12-2915:48:56【问题描述】:当我尝试从Chrome下载时它... 查看详情

是否可以将 PyPy 嵌入到 .NET 应用程序中?

...【发布时间】:2011-08-3009:26:03【问题描述】:我想将Python解释器嵌入到我的.NET应用程序中。我当然知道IronPython,但我对PyPy特别感兴趣,因为它的无堆栈支持和微线程。然而,虽然PyPy可以针对CLI构建,但看起来它只是为您提供... 查看详情

在.net中执行javascript代码

...ff0c;那么我推荐您使用Jint。Jint是适用于.NET的开源Javascript解释器,功能强大,它可以在任何现代.NET平台上运行&# 查看详情

求助,解释下java中怎样把网址url编码转义

建议使用JAVA自带URL编码、解码工具java.net.URLEncoder.encode(Stringurl);//编码java.net.URLDecoder.decode(Stringurl);//解码参考技术Ajava.net.URLEncoder.encode(url,"UTF-8"); 查看详情

vb.net求大神解释

PublicSubNew()MyBase.New()InitializeComponent()EndSub这个在一个vb.net程序中有什么作用啊这个一般是一个Form类的构造函数。MyBase.New()是调用父类的构造函数,InitializeComponent()是调用自己的InitializeComponent方法。一般你在VS里拖界面,VS会自动... 查看详情

解释一下.net、vs、vc和vb.net的开发环境...谢谢!

小弟想用来开发.net网站,不知道装什么环境,希望大家用自己的语言写一些,谢谢了!VS2005大概多大啊?需要用sql2000还是sql2005数据库?1..net是微软的语言架构,是面向对象的托管语言;VS是VisualStudio的缩写,是微软的集成开发... 查看详情

C# 和 .NET 有啥区别?

...搜索职位时,他们要求候选人具有C#和.NET经验。谁能给我解释一下?【问题讨论】:我可以解释需求发布...它们是由非.NET开发人员编写的。 查看详情

jvm内存区域划分edenspacesurvivorspacetenuredgen,permgen解释

http://blog.csdn.net/zhushuai1221/article/details/51027024JVM内存区域划分EdenSpace、SurvivorSpace、TenuredGen,PermGen解释以下内容转自:http://blog.chinaunix.net/xmlrpc.php?r=blog/article&uid=29632145&id=461683 查看详情

译.net7中的性能改进

...09;,mono有多种实际执行代码的方式。其中一种方式是解释器,它使mono能够在不允许JIT的环境中执行.NET代码,而不需要提前编译或招致它可能带来的任何限制。有趣的是,解释器本身几乎就是一个成熟的编译器... 查看详情