编程文汇

unity2019:DOTS

unity 发布了新版本2019,随着这个版本发布了新的核心开发框架:DOTS。据说是是可以直接把c#编译成机器码,跟AOT有点像,不过有更多限制:由自己来管理内存,没有GC,这就是c#语法的c吧?
untity之前的MonoBehavior是面向对象的,现在这个是面向数据的,差不多就是使用ECS的意思吧,unity官方拥抱ECS了。
挺好,现在有了c的性能,c#的语法,以及官方提供的ECS。

  • DOTS是c#的子集

    • 大部分标准库不能再使用: (bye Linq, StringFormatter, List, Dictionary)
    • 不能使用堆上的对象:没有class,只能使用struct
    • 不能用反射
    • 不能用gc
    • 没有虚拟方法调用:也就是没有类继承
    • 添加了一些新的库:(NativeArray等)

这些特性说明,DOTS真的就类似与c了。官方团队称之为:High-Performance C# or HPC#。

  • Burst编译器

这货就是DOTS的编译器,它可以把c#变成机器码,并且获得和c++类似的性能。

  • 线程安全

采用Job的方式来构建多线程程序,并在编译器中检测错误的使用方式。这样要比人工排查更可信赖。
任务调度的原则:

  • 保证不会有人修改正在被别的Job读取的只读buffer
  • 保证不会有人读正在被别的Job修改的可读写buffer

这基本是从编译层面杜绝了数据竞争。