All notable changes to this package will be documented in this file.
The format is based on Keep a Changelog and this project adheres to Semantic Versioning.
you can get the english version change log at Github Release
- 鸿蒙平台禁用jit
- 高版本v8兼容
- 升级quickjs到最新版本
- v8 backend,quickjs添加websocket支持
- 添加支持模块lazyload和自动卸载的cjs实现。
- 解决plugin定义THREAD_SAFE宏,v8加锁不全的问题
- 添加ns(Nintendo Switch)的编译支持
- 解决clearmodulecache的内存泄露
- android下默认使用剪裁版本
- 功能:支持JsEnv参数指定Backend是V8还是quickjs;
- 修复:C#中执行ExecuteModule时如果被加载模块有语法错误Unity会崩溃
- 功能:让puer.getLastException可以拿到ExecuteModule的错误 (#1686)
- 优化:重构quickjs的esm,实现同一个函数中不会出现quickjs api和v8 api混用的情况,改进之前esm强依赖quickjs backend某版本实现导致quickjs backend无法升级情况。并升级quickjs backend。
- 修复:linux下nodejs后端找不到符号的问题
- 修复:加载空module文件失败的问题,fix #1700
- 优化:修正值类型参数的gc问题,fix #1527
- 修复:解决quickjs版本的String leaks
- 功能:鸿蒙系统编译支持
- 修复:Encoding.UTF8.GetBytes返回byte是不加0结尾的,需要手动加,否则AOT下会崩溃,fix #1691
- 功能:编辑器下创建GenericDelegate时记录js堆栈,在CheckLiveness失败时附带堆栈方便定位 (#1704)
- 功能:debug 构建时默认开启调试器支持 (#1707)
- 功能:新增v8 10.6.194的支持
- 修复:避免FunctionTemplate同key的属性, fix #1714
- 优化:console.log在非unity环境应该通过Console.Error输出
- 优化:重构v8 esm实现,支持top-level-await
- 功能:添加v8.getHeapStatistics,v8.getHeapSpaceStatistics
- 优化:不允许对静态函数执行new操作符
- 修复:支持Explicit Interface Implementation,fix #1741
- 修复:quickjs后端js throw null/unfined会导致崩溃,fix #1747
- 优化:$Ref中去掉value字段,fix #1752
- 优化:调试CtxGroupID每次递增(之前固定一个ID可能多JsEnv,单JsEnv多inspector可能有问题)
- 修复: 添加几个zombieyang/puerts_unity_webgl_demo#53用到的api
- 修复:调用extension方法并且方法带out或者ref参数会报错
- 修复:将JSObject赋值为null会报错
- 修复:调用带默认参数的extension函数时index读取不正确的bug
- 修复:xil2cpp下,值类型无参构造字段为随机值的问题
- 重要:遵循Assetstore策略,生成菜单由PuerTS改到了Tools/PuerTS内
- 功能:支持dynamic import(即
import()
)#1540 - 修复:权限控制的一些bug #1512
- 修复:dts生成时关于interface的一些问题 #1541
- 修复:返回DateTime类型的函数dts错误的问题 #1565
- 修复:xil2cpp模式下对带params构造函数调用出错的问题 #1519
- 修复:xil2cpp模式下适配Thread::GetThreadStaticDataForThread参数变更 #1503
- 修复:xil2cpp模式下某些类生成出错的问题 #1520
- 修复:xil2cpp模式下调用结构体无参构造函数时导致的内存问题 #1563
- 修复:静态wrapper里params参数获取到的默认值不正确的问题 @ctxdegithub
- 修复:使用v8_8.4版本build的问题。unity2020及以下xil2cpp模式armv7可能需要v8_8.4才能编通 #1469
- 优化:xi2cpp模式下安卓平台合并v8和puerts两个库
- 优化:mac下改为使用universal binary,不再区分两个平台(覆盖升级时请注意删除旧Plugin)@mikejurka
- 优化:JsEnv现在会暴露Isolate字段,获得v8::Isolate的指针 @mingxxming
- 优化:去掉puerts自己的SnapshotBlob.h,直接使用v8内置的
- 优化:构建脚本现在可以运行在低版本node上 @xiezheng-XD #1495
- 优化:Linux平台自带inspector @geequlim
- 修复:内部类型在link.xml中声明不正确的问题 #1460
- 修复:xil2cpp模式下使用结构体out参数可能导致crash的问题 #1460
- 修复:xil2cpp模式下扩展函数获取默认参数不正确的问题 #1456
- 修复:JSObject没有正确调用回收的问题
- 修复:debugpath失效并导致VSCode调试不可用的问题
- 修复:xil2cpp模式下
puer.$genericMethod
无法获取父类泛型函数的问题 #1417 @danij91 - 修复:生成代码时报GetFriendlyName is not a function的问题 #1437
这个版本是2.0第一个正式版本。感谢所有参与过2.0内测的朋友。
对升级有疑问的朋友可以参见升级指南
- 修复: BlittableCopy不可用的问题 #1427
- 修复: 两个wrapper生成的问题 #1433 #1432
- 修复:xil2cpp模式下结构体默认无参构造函数不可用的问题 #1301
- 修复:运算符重载不可用的问题 #1399
- 修复:已生成wrapper时点击生成报GetFriendlyName不存在的问题
- 修复:BlittableCopy类构造函数不生效的问题
- 优化:isESM检测优化 #1391
- 修复:生成带op_explicit的类的时候会出现报错 #1363
- 修复:ClearModuleCache导致crash的问题 #1364
- 修复:xil2cpp模式下结构体通过指针的方式产生递归定义时生成报错的问题 #1365
- 修复:xil2cpp模式下打印结构体时crash的问题 #1376
- 修复:向数字类型的C# Field/Prop赋值JSObject时crash的问题 #1383
- 修复:Filter过滤失效的问题
- 优化:xil2cpp的c plugin代码改成生成出来,而不是包内自带。
- 优化:添加FAQHelper,用于优化代码生成和build时的错误提示
- 优化:反射调用时错误信息优化,兼容接口被裁剪的情况
- 优化:console.log各个元素的分隔符由逗号变为空格
- 优化:Node.js事件循环优化 #1093 #1279
- 优化:屏蔽了DefaultMode StaticWrapper报的警告
- 功能:添加
JSObject.Get<T>(string)
,ExecuteModule也重构改为使用该Get接口 - 功能:添加了一种新的Filter用于过滤xil2cpp模式的结构体类型声明
- 修复:从JS往C#抛错时可能出现非法字符。
- 修复:注释文档生成的两个问题 #1322 #1329
- 修复:如果一个C#对象的构造函数抛错,可能导致后续有对象莫名其妙变为null
- 优化:WebGL下的性能优化
- 修复: 生成继承于IEnumerable的类在dts下报错 #1322
- 为了更好区分
Unity本身的Il2cpp backend
和我们在2.0版本新做的puerts il2cpp特别优化模式
,我们将我们2.0的新模式命名为xIl2cpp mode
- 修复:在xIl2cpp模式下,在C#侧创建ArrayBuffer可能导致它的内存被改写。#1340
- 修复:在xIl2cpp模式下,在一个返回值为System.Object的函数里返回结构体会导致crash。
- 修复:在xIl2cpp模式下,传递nullable valuetype会导致crash。 #1320
- 修复:在xIl2cpp模式下,往ref/out参数设置valuetype会导致crash。 #1343
- 类注册逻辑重构: #1317。现在我们拥有了全新的权限控制能力,修复了一些xil2cpp模式下的相关问题。
- 修复:openupm版本ios Node.js无法启动的问题 #1302
- 修复:DTS生成时DontBinding方法的依赖依旧被生成的问题 #1295
- 修复:wrapper生成时某些property只有setter时报错的问题 #1298
- 修复:il2cpp绑定模式下,static field的若干问题 #1288
- 修复:il2cpp绑定模式+Unity2021 反射调用结构体时的crash问题 #1288
- 修复:link.xml生成后,il2cpp绑定模式下依然无法找到泛型类的问题 #1288
- 功能:添加C# Enumerable在JS侧的forof支持 #1234
- 功能:重构旧版ExecuteModule的实现,使之与il2cpp绑定模式下一致。同时不再支持import 'csharp'和 import 'puerts',建议使用全局变量。
- 功能:添加
IResolvableLoader
,用于实现node_modules加载与解决 #1270 问题 - 功能:添加
IBuiltinLoadedListener
,可以让Loader在内置脚本执行完毕后做一些操作,便于封装第三方Loader。
- 添加了新的il2cpp binding方式,性能有飞跃式提升。详见官方文档
Il2cpp绑定
章节 - 本仓库的Unity代码变为了UPM目录结构。
- 将commonjs-support包移入了本仓库。
与1.x版本不兼容的地方
- DateTime不再映射到js Date对象 #1145
- TypedValue只能传给object类型,不再具备选择重载的作用。
- 反射模式下,如果一个函数无重载也无默认参数,不会进行参数检查
- Ref所使用的下标由['value']变为[0](如果你代码使用的是puer.$ref和puer.$unref,而不是直接使用下标的话,不受影响)
- 1.4版本中预告过的:2.0版本不自带require
以下为相比1.4.0的内容
- 修复:出现stack overflow错误后JsEnv析构产生crash的问题 #1208
- 修复:Node.js版本连接inspector时打不出Log #1201
- 修复:ESM模块报错时报错信息包含换行符会导致报错信息不正确。#1188
- 修复:生成时Obsolete字段未被过滤的问题。 #1152
- 修复:将JS数字传递给C# object时,浮点数精度丢失的问题。
- 功能:JsEnv.ClearModuleCache现在可以清理ESM模块缓存
- 功能:JSObject现在可以接收一个JS函数。#1143 #1144
- 功能:添加PUERTS_DISABLE_SLOWBINDING,适用于需要做权限控制的地方。
- 功能:添加EXPERIMENTAL_PUERTS_DISABLE_SLOWBINDING,适用于需要做权限控制的地方。该功能为试验功能,还可能改动。
- 优化:销毁JSFunction、JSObject时不加锁
- 修复:Node.js版本连接inspector时打不出Log #1201
- 修复:ESM模块报错时报错信息包含换行符会导致报错信息不正确。#1188
- 优化:销毁JSFunction时不加锁
- 功能:JsEnv.ClearModuleCache现在可以清理ESM模块缓存
- 修复:生成时Obsolete字段未被过滤的问题。 #1152
- 功能:添加console.time。#1170
- 功能:JSObject现在可以接收一个JS函数。#1143 #1144
- 修复:将JS数字传递给C# object时,浮点数精度丢失的问题。
- 功能:添加PUERTS_DISABLE_SLOWBINDING,适用于需要做权限控制的地方。
- 修复:commonjs 查找带.目录时的问题
- 修复:返回无泛型Task时typescript检查报错的问题 #1027
- 修复:泛型类内部类在wrapper报错的问题 #1030
- 修复:子线程创建JsEnv报跨线程访问Unity API的错#1049
- 修复:Unity2021.1下报
IsByRefLike
缺失的错 #1050 - 功能:添加v8和quickjs的Android x86_64支持
- 功能:新增Puerts.IModuleChecker。传入的ILoader如果实现了该接口,则可以自定义哪些文件后缀会被识别为ESM模块
- 支持了staticwrapper生成后,歧义方法的调用 #1020
- 修复BlittableCopy模式下,同时为JS函数传递两个结构体时的错误 #1018
- 修复Array类型再wrapper重载选择时报错 #1015
- 重构wrapper模板,小幅度性能提升 可参见性能报告
- 在Node后端的ios下,补上遗漏的
--jitless
flag
- 全平台支持了Node.js(也就是新增了Android和iOS的支持)。upm包现在默认全使用Node.js Backend了。
- 为了让Node.js功能使用起来更方便,也同时解决WebGL版本在微信小游戏的问题,加上ES Module是JS生态的未来。从本版本开始,添加全局变量
CS
和puer
,对应原本的require('csharp')
和require('puerts')
。PuerTS的require
不再建议使用,原有的使用全局require的地方请改成global.CS
、global.puer
、import 'xxx'
,抑或是puerts.require
。PuerTS的全局require将考虑在1.5版本删除。 - 添加
JsEnv.Backend
并加入了一些GC API.LowMemoryNotification
也移进去了。 - 重构
NodeRunner
ExecuteModule
处理多级依赖的问题修复。- GeneralSetterManager/GeneralGetterManager优化 #688
- 修复了在inspector下打断点+
setInterval
会引起crash的bug #707 - 支持一个JsEnv连接多个inspector,hotreload也能和inspector同时使用了 #841
- 去掉了Node.js的
--no-browser-globals
选项 - 修复ESM加载时循环依赖会引起崩溃的问题
- 修复ESM使用相对路径加载依赖时报错的问题
- 添加了模块加载时的import.meta.url路径
- 修复生成可空类型时,dts报错的问题
- 支持同时连接多个inspector调试端
- 修复unity2021.3.4+ inspector崩溃的问题
- fix #708
- unity2018- 禁用generic wrapper
- android、ios平台的v8降到8.4以规避 #908
- 修复 #907
- 合入1.3.5的改动
- 修复 #899
- 支持apple silicon芯片 #591
- 升级默认v8到9.4版本,nodejs到16版本
- 所有属性改为configurable #667
- 添加
require('puerts').getLastException
接口 #629
- 修复了一个多JsEnv同时运行时,报
undefined is not a function
或者cannot read property of undefined
等错的问题 - 修复ESM加载时循环依赖会引起崩溃的问题
- 修复ESM使用相对路径加载依赖时报错的问题
- 修复生成可空类型时,dts报错的问题
- 添加了模块加载时的import.meta.url路径
- fix: 优化JSObject的内存占用 #947
- fix: field赋值时没有NativeObject类型检查的问题 #954
- fix: ILCPP模式下容易出现
task.GetAwaiter(...).OnCompleted is not a function
的问题 #966 - optimize: 禁用构造函数设置为Lazy
- optimize: Editor下运行模式默认不打开反射extension功能
- 1.3版本改为默认不开启泛型类的泛型式生成 #937 #918
- fix: 生成BlittableCopy时报参数数量不匹配的错 #938
- fix: MJSImporter在2018下会出警告的问题
- fix: UnityMenu.cs传参错误
- fix: 带约束的泛型类wrapper生成错误
- fix: 生成代码时出现重复key的问题: #657
- fix: 不能生成带Enum泛型参数的generic类型 #856
- fix: 生成delegate时没有过滤掉带指针类型的: #857
- fix: 生成的dts里,interface的扩展函数返回值不对: #857
- fix: 不再生成enum的扩展函数 #857
- fix: C#调用JS时如果带有ArrayBuffer参数,某些顺序可能抛错. #853
- feature: 支持不带约束的泛型函数调用(有限度的): #819
- feature: 泛型类的wrapper文件现在可以使用泛型,而不再是一种泛型参数一个文件. #816
- feature: TypedValue在调用时,现在可以直接传递给对应类型的参数. #833
- 优化: 新增了一个可重用的原子github action,用于下载backend文件
- dts中的csharp模块现在和node.js一样使用
export =
导出 #750 - 修复生成扩展函数时,忽略了路径带Editor的Assembly的内容 #735
- 添加执行内置脚本时的Try Catch,并且这个时候会自动Destroy创建出来的Isolate
- Debug版本的Plugin现在全局会有手动gc函数(正常情况还是建议使用JsEnv.LowMemoryNotification)
- 修复event成员没有成功转为Lazy的问题 #739
- 修复2021下某些in成员在生成代码里被写成了ref的问题 #758
- 修复op_Implicit无法调用的问题 #767
- 修复UPM安装时安卓会识别到iOS库的问题
- 修复旧有filter无效的问题
- 主仓库加上了asmdef
- 终于支持UPM!
- 重排了整体目录结构,使puerts符合unity package的结构标准。
- 重构了Generator代码结构,分成几个小文件(本人比较喜欢)
- 将libversion重命名为了apilevel。
- 重构JSFunction Invoke的机制,fix #681 。
- 去掉了一些deprecated的v8接口调用,适配8.4以后的版本。
- 新增懒绑定模式: 在filter中return false的成员,以前会在TypeRegister时被反射,并在后续代码中依然能被调用 新的版本里,PuerTS继续兼容了这种调用。但这类成员的反射时机不再是TypeRegister阶段,而是在该成员被首次使用时。
- filter的新写法
为了适配新增的懒绑定模式,filter除了return false,现在还增加了返回BindingMode的模式,可选值:
FastBinding
(即会生成static wrapper)、LazyBinding
(前面提到的首次调用时反射)、DontBinding
(完全不允许JS调用)。例子可以查看仓库中 U2018Compatible.cs