常见问题
Q: 为什么要重新做一个语言,而不 是用已有的语言比如c++,java,go,python,javascript,lua等成熟的语言?
- 我们不考虑使用静态语言,主要是使用门槛较高,容易在出现bug的时候导致crash等严重问题,并且热更新比较麻烦,要做一般就是做使用共享内存,服务器本身做成无状态的这种方案来做,对于开发来讲会有比较大地心智负担
- 动态语言方面,比较广泛使用的lua/python/javascript等语言对于多线程支持不友好,如果要充分利用多核性能,必须使用分布式的方案,开多进程来做,或者开多线程,每个线程运行一个脚本的runtime,然后再通过共享内存或网络通信,本质上和分布式的结构没太大区别,且热更新上并不是天然支持,还是要自己做不少工作;除了typescript外的语言类型都过于松散,一些基础类型都没有约束,在项目较大时不容易维护
我们还是希望有一个动态语言,适合游戏开发,用起来顺手简单简单,逻辑清晰,性能优秀,易于扩展,对多线程友好,可以方便地进行热更新,可以随意连接到后台查看和修改线上数据
Q: 为什么底层有一套和stl库类似的simple库
- stl库中的数据结构藏得比较深,内存布局我们自己控制不了,gdb调试起来需要依赖一些额外的工作才能比较友好,用simple库实现一套简化版的stl不是出于性能考虑,主要就是为了方便在出问题的时候查看内存,快速定位问题,一些基础的容器类比如list, vector, hash_map(unordered_map)等建议使用simple库,而一些对于调试没有影响或者实现较为复杂的比如std::function, std::thread等没必要在simple中再造一遍轮子