deniz.in

Piyasalar

Hava durumu

Hava durumu yükleniyor

· kaynak Hacker News – Front Page (native)

zipc, Prolog'u Clocksin'in ZIP makinesine derleyerek trilog için olası bir backend olmayı hedefliyor

Geliştirilmekte olan zipc adlı proje, Prolog programlarını Clocksin'in 1984 tarihli ZIP soyut makinesine derleyip bir C sanal makinesinde çalıştırıyor; hedefi, trilog runtime'ının backend'i olmak.

zipc, Prolog'u Clocksin'in ZIP makinesine derleyerek trilog için olası bir backend olmayı hedefliyor

zipc nedir

zipc adlı proje kısa süre önce Hacker News'in ön sayfasına çıktı. GitHub sayfasına göre, geliştirilmekte olan bu proje iki bileşenden oluşuyor: Prolog'u ZIP soyut makinesinin komutlarına çeviren bir compiler ve sonucu çalıştıran, C ile yazılmış bir sanal makine. Depoda anlatıldığı kadarıyla yazarın öncelikli hedefi, VM'i — projenin nihai olarak hizmet etmesi muhtemel Prolog sistemi olan trilog'un bugün kullandığı runtime ile karşılaştırabilecek kadar iyi çalışır hale getirmek.

ZIP makinesinin kendisi, araştırmacıların Prolog'u geleneksel donanımda verimli nasıl çalıştırabileceklerini çözmeye çalıştığı dönemin bir kalıntısı. Depoya göre bu makine, Clocksin'in 1984 tarihli "Design and Simulation of a Sequential Prolog Machine" makalesindeki soyut makine; ilgili makalelerin kopyaları, takip etmek isteyenler için projenin dokümantasyon dizininde yer alıyor.

Pipeline nasıl çalışıyor

zipc'un iki yarısı farklı dillerde yazılmış olması, kurulumun derli toplu olmasını sağlayan şeylerden biri. Compiler Prolog ile yazılmış ve güncel bir Prolog uygulaması olan Scryer Prolog üzerinde çalışıyor; derlenen programın ikili imajını üretiyor. Projenin kaynak dizinindeki C sanal makinesi de bu imajı yükleyip çalıştırıyor. Etkili biçimde bu klasik bir ahead-of-time düzeni: bir kez soyut makine koduna derle, sonra küçük bir native runtime üzerinde çalıştır.

Neden yorumlamak yerine derlemek

Motivasyon, trilog'un mevcut tasarımından geliyor. GitHub sayfasının açıkladığı gibi trilog, program cümleciklerini veri olarak ele alıyor ve bunları önceden derlemek yerine doğrudan ABC algoritmasıyla yorumluyor. Aynı cümlecikleri ZIP komutlarına derlemek, aynı programların daha az komutla ve daha küçük bir bellek ayak iziyle çalıştırılmasını sağlamalı; yazar bunun, trilog'un esas olarak tasarlandığı türden işlere yarar sağlayacağını öngörüyor. Depo, bu hedef iş yükünün gerçekte ne olduğuna dair ayrıntı vermiyor.

Alışılmadık bir makine tercihi

Arka plan olarak, yaygın olarak kullanılan Prolog uygulamalarının çoğu 1980'lerin ortasından beri Warren Abstract Machine'e — David H. D. Warren'ın 1983'te tanımladığı tasarıma — ya da onun türevlerine derleniyor. Aynı döneme ait ZIP ise hiçbir zaman varsayılan hedef olmadı. Bu yüzden zipc sıra dışı bir deney: standart derleme modeline başvurmak yerine, tercih edilmemiş bir tasarımı canlandırıyor ve bunun modern donanımda pratikte hâlâ işe yarayıp yaramadığını test etmeye koyuluyor.

Sırada ne var

Yazar, planın henüz netleşmemiş olduğunu açıkça söylüyor. VM'in minimum çalışan sürümü başarılı olursa zipc, trilog'un backend'i olabilir; olmazsa, programları yorumlamak yerine derleyen ayrı ve daha hızlı bir Prolog runtime olarak varlığını sürdürebilir.

Neden önemli

Dil runtime'larını takip edenler için proje üç açıdan ilginç. WAM'e varsayılan olarak yönelmek yerine büyük ölçüde tarihsel bir soyut makineyi canlandırıyor ve 1980'lerden bir alternatif hakkında güncel bir veri noktası sunuyor. Compiler'ı Prolog'un kendisiyle, Scryer üzerinde inşa ediyor ve tüm stack'i hizmet ettiği dile yakın tutuyor. Ve baştan itibaren trilog'un mevcut yorumlayıcısına karşı bir karşılaştırma çalışması olarak çerçevelenmiş; bu da iddia yerine somut sayılar vaat ediyor: aynı programlar iki yürütme modeli altında, karşısında komut sayıları ve bellek kullanımı olacak şekilde çalıştırılıyor. Derlenen yol kazanırsa trilog daha hızlı bir backend kazanır; kazanmasa bile sonuçlar, Prolog performansının gerçekte nereden geldiği — makine modelinden mi, yoksa çevresindeki mühendislikten mi — hakkında yine de yararlı bir şeyler söyleyecek.

  • #prolog
  • #compilers
  • #virtual-machines
  • #c
  • #open-source

İlgili yazılar