.NET:https://dotnet.microsoft.com/zh-cn/learn/dotnet/what-is-dotnet
.NET Unity:https://docs.unity3d.com/Manual/overview-of-dot-net-in-unity.html
CLR:https://learn.microsoft.com/zh-cn/dotnet/standard/clr
Roslyn:https://github.com/dotnet/roslyn
Mono:https://docs.unity3d.com/Manual/Mono.html
IL2CPP:https://docs.unity3d.com/Manual/IL2CPP.html
HybridCLR:https://hybridclr.doc.code-philosophy.com/docs/intro
LuaJIT:https://luajit.org/luajit.html
Lua:https://www.lua.org/
ToLua:https://github.com/topameng/tolua

.NET
-
一个开发平台,包含多个组件,运行时、库、工具。
-
组成包括 .NET Core、.NET Framework 和 .NET 5/6/7。
-
提供公共语言运行时(CLR)来执行 C# 代码,并提供垃圾回收、内存管理、安全性等功能。
C#
- 是.NET框架下的语言,平常用
using System;就是.NET提供的库。
Roslyn
- 编译C#代码成IL代码。
Mono
-
运行时,JIT编译(Just-In-Time),编译IL代码成目标平台的机器码。
-
是.NET的一种实现,开源的,Unity早期选择他,因为开源且跨平台比.NET多。后面移动端基本不用他了。
-
早期把.NET支持的都实现了一遍,但后续.NET新增功能兼容不多。即有些C#新语法还没兼容。
-
常用于编辑器下编译C#,还有移动设备编译调试用。
-
因为是JIT编译,就可以根据实际平台运行时做不同代码处理,早期一些C#热更就通过这个方式实现的。
IL2CPP
-
转换IL代码为C++代码,最后用需要的平台编译成对应机器码。AOT 编译(Ahead-Of-Time),运行时没有编译开销。
-
在有些平台不支持JIT编译(比如WebGL),就只能用IL2CPP。
-
目前打包安卓,iOS都用他。
-
C# 热更
HybridCLR把IL2CPP的纯AOT编程了AOT+Interpreter- Interpreter:Mono的一个功能,直接逐行解释执行IL代码,不编译成机器码。
Lua
-
通常项目中用
ToLua或者XLua来实现和Lua的交互。目前项目用ToLua。 -
Lua有两种版本一种标准Lua(Standard Lua),一种LuaJIT。目前项目用LuaJIT。
标准Lua (Standard Lua)
-
运行时逐行解析 Lua 代码,转换成字节码,Lua 解释器会读取这些字节码指令并执行它们。
-
官方有在维护,更新到5.4.7+。
LuaJIT (Just-In-Time)
-
运行时将 Lua 代码的编译成本地的机器码,然后直接在处理器上执行这些机器码,避免了解释执行的性能开销。
-
从标准Lua5.1分支中实现,不直接支持后续标准Lua版本更新内容。一般是ToLua、XLua自己在维护,比如Lua5.3之前不支持int64,即LuaJIT不支持int64,但是ToLua中有自己实现支持。
-
项目打包Lua成AB前,会先编译一遍Lua成字节码,可以省去运行时解析编译原始Lua文件时间。
-
免补丁Lua的话是原始Lua文件。
459

被折叠的 条评论
为什么被折叠?



