Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[Unity][建议] 去掉自动生成扩展方法绑定支持对大量使用扩展的人来说, 不够友好 #576

Closed
PleijaEternal opened this issue Dec 11, 2021 · 4 comments
Assignees

Comments

@PleijaEternal
Copy link

近期发现的一个扩展方法启动时导致il2cpp下崩溃, 然后这个特性被去掉的处理感觉不够合理.
这种崩溃并不是所有泛型方法和所有版本的unity下都会出现, 而是某些泛型方法在某些Unity版本下才会出现这种崩溃, 而在其他Unity版本和其他正常的扩展方法下使用都没有问题, 而C#里面扩展的写法并不少见, 大量插件和项目都在使用很多扩展来实现功能, 那ts里面去掉本来已经支持的特性, 在方便程度上就会大打折扣, 那么有比直接去掉更好的方式来解决这个issue?

比如添加一个编译宏, 用来手动开启整个特性, 如果你的代码在你的Unity版本里使用某些类会导致崩溃, 那么就不要开启这个特性, 如果需要这个特性并且知悉其中的风险, 才去定义宏来开启

为扩展方法动态导出添加一个Filter功能, 把已知会出问题的方法过滤掉, 其他不会出问题的方法正常使用, 可以使用此方式过滤掉所有泛型方法只导出非泛型的扩展方法来避免某些"概率性"崩溃的问题.

@PleijaEternal
Copy link
Author

还有一种方式, 改写成一个public方法, 把启动时自动加载扩展方法绑定的方式, 改成由使用者手动调用这个方法来使用这个功能.

还没有细看这个功能是如何去掉的, 如果是删除掉功能代码, 建议改为手动调用.

@PleijaEternal
Copy link
Author

突然删除某个功能, 对于已经在用这个功能的项目来说, 影响是灾难性的

@chexiongsheng
Copy link
Collaborator

应该只是删除反射的,如果加到binding还是支持

@zombieyang
Copy link
Contributor

zombieyang commented Dec 13, 2021

我一个一个回复哈,解释下我的思路

  1. 编译宏的方式可以考虑,我可以加一个。
  2. 加public这个我考虑过。但其实开发者只要将扩展类和原类加入binding,就能调用扩展方法了,这个public方法就有点多余。 和public方法类似的还有一个 js 侧的puerts.$reflectExtension,理论上也可以覆盖必须要走反射的情况了。
  3. 删除功能我会给版本号加0.1,也会在changelog中标出。能一定程度上减少影响

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants