2011-06-15 20 views
20

Bu yüzden şimdi haskell'de yazılmış oldukça eksiksiz bir LISP (şema) tercümanım var. Sadece eğlence için LLVM'ye derlemeyi denemek istiyorum. Kod oluşturma işleminin çoğu oldukça ileriye doğru görünüyor, ancak bir lambda ifadesinin (lisp'de önemli bir tür)) nasıl oluşturulacağı ve bir define ifadesiyle karşılaştığımda yığının nasıl yönetileceği konusunda bir kayıp yapıyorum.'lambda', 'define' için LLVM kodu oluşturma 'define'

Bu ifadeler için nasıl kod üretebilirim?

Not: Lambda ifadesinin gövdesi için kod üretebilirim, Kafamı karıştırmak, bu kodu bir yere nasıl koyabileceğiniz ve kalınabilir hale getirebileceğimizdir.

+2

Kod oluşturmadan önce açık bir lambda kaldırma geçişi uygulamak isteyebilirsiniz (ve Şema olduğundan, bundan önce bir CPS dönüşümü gerçekleştirmiş olmanız muhtemeldir). . Sadece küresel işlevler ve açık bir kapatma envoronments tahsisi ile sizi bırakacaktır. –

cevap

10

Bkz Lennart blog yazısı: compileFunction fonksiyonuna http://augustss.blogspot.com/2009/06/more-llvm-recently-someone-asked-me-on.html

bak. Özellikle, LLVM çekirdeğindeki newFunction: http://hackage.haskell.org/packages/archive/llvm/0.9.1.2/doc/html/LLVM-Core.html#g:23

+0

Blogda derlenen dil ilk sıradadır ve kapanışları ele almaz. Bu şema lambdas derlemek için nasıl yararlı olduğunu görmüyorum. – sepp2k

+1

@ sepp2k İlk önce, SICP okuduğundan beri John'un yaptığını varsaydığım kapatma işlemini yapmanız gerekir. –

+0

Yanlış olabilirdim, ancak kapanış dönüşümünün SICP kapsamında olduğunu hatırlamıyorum. – spacemanaki

İlgili konular