2012-11-29 35 views
19

Tôi có một ứng dụng .NET 4.0 mà làm cho việc sử dụng đuôi đệ quy nặng (được lập trình trong F #). Nó chạy tốt trên .NET VM, nhưng nó chạy ra khỏi ngăn xếp trên Mono-3.0.1.Loại bỏ tailcall trong Mono

Tôi đã thử chạy với mono --optimize=tailc nhưng điều đó dường như không thay đổi bất cứ điều gì.

Có cách nào để buộc mono loại bỏ các cuộc gọi đuôi không? Có cách nào để tăng kích thước ngăn xếp tối đa trong đơn?

+1

https://bugzilla.novell.com/show_bug.cgi?id=476785 - [Trang này] (http://www.mono-project.com/Runtime_Projects) cho biết tính năng này đang được thực hiện nhưng không được chiếu ngày hoàn thành. –

+0

[Trang này] (http://www.mono-project.com/Mono_Project_Roadmap) nói rằng các cuộc gọi đuôi trong F # đã được sửa trong phiên bản 2.12 –

+0

2.12 được đổi tên thành 3.0; và dù sao nó nói "tối ưu hóa", không phải "tất cả các tối ưu hóa", vì vậy tôi đoán một trong đó Nikhil là đánh là không cố định chưa – knocte

Trả lời

1

Có một câu hỏi gần đây rất giống với câu trả lời hữu ích: Stack size under Mono

Như Robert Harvey đã chỉ ra trong các ý kiến, Mono đã phá vỡ/không đầy đủ gọi đuôi hỗ trợ cho F # (bug 476785: Tail call support in F#). Khắc phục sự cố này là on Mono's runtime ongoing projects list.

Kích thước ngăn xếp có thể tăng hoặc bằng cách sử dụng hàm tạo System.Threading.Thread hoặc trong tiêu đề PE. Tuy nhiên, cách System.Threading.Thread cách does not work in Mono. Để thay đổi PE, có thể bạn sẽ là need MS Visual Studio, vì không thể thay thế cho số editbin.exe /stack của nó.