2012-11-29 11 views
19

私はテール再帰(F#でプログラムされている)を頻繁に使用する.NET 4.0アプリケーションを持っています。 .NET VM上で正常に動作しますが、Mono-3.0.1上でスタックが不足しています。モノでのテールコールの削除

私はmono --optimize=tailcと実行しようとしましたが、それは何も変更されていないようです。

テールコールを排除するためにモノを強制的に使用する方法はありますか? モノの最大スタックサイズを増やす方法はありますか?役に立つ答えと非常によく似た、より最近の質問

+1

https://bugzilla.novell.com/show_bug.cgi?id=476785 - [このページ(http://www.mono-project.com/Runtime_Projects)完了日。 –

+0

[このページ](http://www.mono-project.com/Mono_Project_Roadmap)は、F#のテールコールがバージョン2.12で修正されたと報告しています –

+0

2.12は3.0に名前が変更されました。とにかく「最適化」といいます。「すべての最適化」ではなく、ニッヒルが打っているものはまだ確定していないと思います。 – knocte

答えて

1

あり:ロバート・ハーヴェイは、すでにコメントで指摘したようにStack size under Mono

が、モノはF#(bug 476785: Tail call support in F#)のために壊れた/不完全な末尾呼び出しをサポートしています。この問題の修正はon Mono's runtime ongoing projects listです。

スタックサイズは、System.Threading.ThreadコンストラクタまたはPEヘッダーのいずれかを使用して増やすことができます。しかし、System.Threading.Threadの方法does not work in Monoです。 PEを変更する場合は、の代替手段がない可能性がありますので、おそらくneed MS Visual Studioでしょう。