Basit bir veri yapıları ödevinden işlevsel programlama dili çıktı
Öne çıkanlar
- İşleçler ve değişkenler tek bir ifade yapısına indirgenerek fonksiyonel kapanışlar oluşturuldu.
- İşaretçi adreslerini korumak için tek parça dizi yerine parçalı bellek yöneticisi tercih edildi.
- İşaretle ve süpür çöp toplayıcısı bellek kullanımını 12 gigabayttan 1,7 megabayta indirdi.
Aritmetik ifadeleri ikili ağaca dönüştürmeyi amaçlayan bir veri yapıları ödevi, C diliyle geliştirilen kapsamlı bir işlevsel programlama dili ve grafik indirgeme motoruna dönüştü. Süreç, toplama işlemini yürüten basit bir değerlendirici yazma hedefiyle başladı. İfadeleri cebirsel veri türleri biçiminde modelleyen geliştirici; işleçleri, değişkenleri ve işlevleri genel bir ifade düğümü olarak soyutladı. C dilinde yerleşik hash tablosu bulunmadığı için özel bir ortam tablosu yazıldı ve kullanıcı tanımlı işlevler için closure desteği eklendi.
Bellek yönetimindeki sorunlar projenin mimarisini yeniden şekillendirdi. Her düğüm için malloc çağrısının ek 16 bayt yük getirmesi ve fibonacci testinde binlerce düğümün belleği tüketmesi üzerine özel bir arena bellek yöneticisi yazıldı. Realloc işleminin işaretçileri geçersiz kılması tehlikesine karşı bellek blokları birbirine bağlı parçalı bir yapıya dönüştürüldü. Düğümler serbest bırakılmadığı için fib(40) hesaplamasında bellek tüketimi 12 gigabaytın üzerine çıktı ve sistem yetersiz bellek hatası vererek çöktü.
Aşırı bellek kullanımını çözmek amacıyla işaretle ve süpür mantığıyla çalışan bir çöp toplayıcı geliştirildi. Programın erişemediği düğümler boşa çıkarılarak yeniden kullanılabilir serbest listesine aktarıldı. Bu iyileştirme sayesinde fib(40) çalıştırılırken bellek kullanımı 12 gigabayttan 1,7 megabayta geriledi. Stop-the-world mekanizması nedeniyle işlemin 6 dakika sürmesi üzerine, geliştirici sonraki aşamalarda eşzamanlı çöp toplayıcı, kuyruk özyinelemesi optimizasyonu ve sözdizimi ayrıştırıcı ekleyeceğini duyurdu.
Bu özet yapay zekâ ile hazırlanmıştır; ayrıntılar ve doğrulama için orijinal kaynağa başvurun.