门户网站要求如何提升关键词的自然排名
原文
我正在开发一个游戏引擎
,偶然发现了一些空针
问题.
考虑此简单程序:
class Test
{void doIt(){}
}
void main()
{Test t;t.doIt();
}
它编译,然后在Linux
上使用DMD
时,用11
信号干掉了.
如果使用Java
,甚至不会构建
该程序,因为它会失败,说明从未初化它.
但我不关心分析器
,我宁愿有个运行时错误或异常
显示它,何时何地
有此无效值
.
我不知道有多少人在D中使用DLL
开发,但它的体验
远非理想,放在类中及热加载
,等可能会更糟.
每当程序崩溃
而没有消息时,我只需转到VisualStudio
并打开exe
并再次试运行
它.这次也一样,它无法在程序
上找到内容,相反,它得到了一个完全随机和误导性
的错误消息.
确切
地说,它是个空针
.
是的,此时,它相当简单
,但我正重构
过程中,我不用数组
,而是使用池
:
因此,化简并检查
此代码:
class MainScene : AScene, IHipPreloadable
{mixin Preload;Strip[] stripList;/**构造器*/override void initialize(){foreach(i; 0..30){import hip.math.random;Strip s = new Strip();stripList~= s;//..s.pos.x = Random.range(0, 800);}}
}
重构后,得到了以下代码
:
class MainScene : AScene, IHipPreloadable
{mixin Preload;Pool!Strip stripList;/**构造器*/override void initialize(){foreach(i; 0..30){import hip.math.random;stripList.get().pos.x = Random.range(0, 800);}}
}
现在,问题很明显!我需要用new Pool!Strip()
初化池实例.但是当我这样做时,并不明显,(使用LDC
构建)错误消息未帮助
我解决问题.
除了该简单
问题外,还有热加载
.
即,每当保存
代码时,会自动重建
和重新加载
文件,问题是,至少对我,喜欢多次保存和重新保存
,即我在那里创建
了不完整代码,然后因为代码
不完整,它只是崩溃
主程序.
目前,没有明显
方法可以控制
它说"没关系,只需卸载DLL"
.
从一开始,使用DLL
对我一直很痛苦,很难找到正确的标志
,不同编译器的行为
又不同,且支持
不完整!
我相信现在要求某人修复DLL
只会有0
优先级,所以,在此我提出请求
,这将使整个语言
受益,远远超出当前热门
的新主题.
我使用DLL
并在我的引擎
中热加载.
我有一个文件模块:这里,它适合Linux/Windows
.
我这样设置
信号处理器,非常简单:
version(DLL) export extern(C) void on_reload(State* state) {LINFO("reloaded");debug rt_register_crash_handler();
}
DLL
中的此例代码
:
int* test = null;
*test = 5;
会给我:
-------------------------------------------------------------------+
Received signal 'exception' (3221225477ll)
-------------------------------------------------------------------+
C:\dev\kdom\projects\game\app.d:144 - game.app.on_tick
C:\dev\kdom\projects\game\app.d:144 - game.app.on_tick
C:\dev\kdom\projects\game\app.d:144 - rt_register_crash_handler
C:\dev\kdom\projects\game\app.d:144 - BaseThreadInitThunk
C:\dev\kdom\projects\game\app.d:144 - RtlUserThreadStart
make: *** [makefile:36: game-run] Error 2816
现在我知道了代码
失败的确切位置
,我可修复
它
version(DLL) export extern(C) void on_tick(State* state) {if (state.engine.input.is_key_just_pressed(Key.KEY_SPACE)){int* test = null;*test = 5;}
}
有人做了个PR
来搞类似的,但我忘记
了在哪(标准库或运行时
).
多谢!我会试使用它,看看能用它走多远:D