Después de leer algunos informes sobre las deficiencias del recolector de basura Mono 2.6, decidí darle una oportunidad al Mono 2.10. He descubierto que los accidentes de 2.10 en tiempo de ejecución con el siguiente programa simple F #:F # se bloquea en Mono 2.10
let rec f x acc =
if x = 0 then acc
else f (x - 1) (acc + 1)
f 10 0
Equivalente bucle de código C# funciona muy bien como lo hace un programa mundial # F hola. El código F # también funciona bien con Mono 2.6 y .Net. ¿Alguien más puede reproducir esto? ¿Es un error o es solo mi instalación?
Estos son los diversos tiempos de ejecución que he probado y los resultados que obtuve.
2.10.2 Mono (compilado a partir de fuentes en Debian Squeeze)
-- "Stack overflow: IP: 0x4153bb84, fault addr: (nil)"
Mono 2,8 (compilado a partir de fuentes en Debian Squeeze)
-- "Native stacktrace: ..."
Mono 2.10.2 (Windows binario)
-- "mono.exe has stopped working" dialog.
2.10.2 Mono (imagen de VMware)
-- Segmentation fault
Mono 2.6.7 (incluido con Debian Squeeze)
-- Works fine
El F # compilador utilizado fue desde el noviembre de 2010 CTP.
De acuerdo con la cantidad de plataformas/configuraciones que ha probado, obviamente este es un error en Mono. Abra un error y adjunte el ejecutable. Gracias. –
Esto probablemente se deba a la falta de optimización de la cola de Mono. Vea aquí http://flyingfrogblog.blogspot.com/2009/01/mono-does-not-support-tail-calls.html. – sashang
@sashang: estaba en el proceso de probar el manejo de llamadas de Mono cuando descubrí esto. Sin embargo, dudo que esta sea la causa aquí porque a) se bloquea en entradas pequeñas yb) el código generado no contiene ninguna llamada de cola, solo bucles imperativos. – petebu