deniz.in

Piyasalar

Hava durumu

Hava durumu yükleniyor

· kaynak dev.to (home feed)

myjs: Saf Python ile yazılmış, DOM ve C FFI destekli JavaScript runtime'ı PyPI'da

myjs adlı yeni bir açık kaynak paket, JavaScript'i tamamen saf Python yorumlayıcısı içinde çalıştırıyor; betiklere derlenmiş bir motor olmadan sunucu tarafında bir DOM ağacına ve yerel C kütüphanelerine doğrudan erişim imkânı sunuyor.

myjs: Saf Python ile yazılmış, DOM ve C FFI destekli JavaScript runtime'ı PyPI'da

myjs adlı yeni bir açık kaynak proje PyPI'da yayınlandı ve tamamen Python ile uygulanmış bir JavaScript runtime'ı sunuyor. dev.to'daki duyuru yazısına göre, paketin pip veya pipx ile kurulması, JavaScript'i Acorn parser'ının Python'a taşınmış bir sürümüyle ayrıştıran ve ana Python süreci içinde çalıştıran bir myjs komutu sağlıyor; betikler buradan Python standart kütüphanesine, canlı bir DOM ağacına ve yerel C kütüphanelerine erişebiliyor.

Birkaç araç yerine tek süreç

Yazar, projeyi çok dilli mühendislikte bilinen bir soruna çözüm olarak konumlandırıyor. JavaScript'in bir C kütüphanesini çağırmasını veya tarayıcı dışında DOM yapılarını değiştirmesini istiyorsanız, alışılmış yollar node-gyp ve C++ addon derleme zincirlerini ya da bir Node servisi ile bir Python servisi arasındaki gRPC veya REST gibi ağır IPC çözümlerini içeriyor. myjs bu katmanları, derlenmiş bir JavaScript motoru olmadan tek bir saf Python sürecinde birleştiriyor.

Yazıda belirtildiği üzere, tasarımı üç yetenek üzerine kurulu:

  • domonic adlı bir Python DOM kütüphanesi üzerinden DOM erişimi; böylece document.createElement, textContent, appendChild ve outerHTML, JavaScript içinden gerçek bir Python nesne ağacı üzerinde çalışıyor.
  • Doğrudan C birlikte çalışabilirliği: betikler platforma bağlı olarak libc.dylib, 'c' veya msvcrt gibi paylaşımlı kütüphaneleri yükleyebiliyor, dışa aktarılan fonksiyonları çağırabiliyor, ham C bellek tamponları ayırabiliyor ve fonksiyon işaretçileri geçebiliyor. Python'ın ctypes/cffi araçları ABI'yi yükleme anında dinamik olarak çözdüğü için hiçbir C derleyicisi devrede değil.
  • JavaScript kapsamları ile ana Python standart kütüphanesi arasında bir eşleme, böylece işletim sistemi düzeyindeki yetenekler JS ortamının yanında yer alıyor.

Demo neyi gösteriyor

dev.to'daki yazı, JavaScript'ten libc'yi yükleyen, abs(-42) ve sqrt(2) fonksiyonlarını çağıran, ardından createElement ve appendChild kullanarak hyperscript tarzı bir yardımcı fonksiyonla küçük bir sayfa oluşturan ve document.body.outerHTML'i yazdıran bir örnek betik içeriyor. Günlüğe kaydedilen çıktı, Python 3.13.12 altında macOS arm64 üzerinde üretilen beklenen 42 ve 1.4142135623730951 değerlerini ve ayrıca oluşturulan işaretleme kodunu gösteriyor. Demo kompakt ama üç temel unsuru da kullanıyor: sistem C'sine FFI çağrıları, DOM değişiklikleri ve aradaki sıradan JavaScript kontrol akışı.

Duyurunun cevapsız bıraktığı sorular

Yazıda hiçbir benchmark yayınlanmamış ve Python üzerinde çalışan bir JavaScript yorumlayıcısının V8 gibi JIT ile derlenen bir motorun hızına yaklaşması pek mümkün değil; öne çıkarılan satış noktası ham işleme hızı değil, Python'ın çalıştığı her yerde gömülebilir olması. Uyumluluk derinliği de belirsiz: taşınmış Acorn parser'ı sözdizimi katmanını kapsıyor, ancak duyuru modern ECMAScript yüzeyinin ve tarayıcı API setinin ne kadarının uygulandığını ayrıntılandırmıyor. Ayrıca betikler ham C belleğine ve sistem kütüphanelerine erişebildiği için myjs, üçüncü taraf betikler için bir sandbox'tan çok, güvendiğiniz kod için bir ortam olarak değerlendirilmeli.

Neden önemli

Tarayıcı dışındaki JavaScript runtime'larının çoğu performansın peşinde; myjs ise erişim alanının peşinde. Python'ın çalıştığı her yerde bir betik artık Node, bir derleyici araç zinciri veya servisler arası bir mesaj veriyolu gerektirmeden bir DOM ağacını oluşturup inceleyebiliyor veya bir C kütüphanesini kullanabiliyor. Bu, onu sunucu tarafında DOM üretimi ve testi, hafif yapıştırıcı araçlar ve eğitim için makul bir aday yapıyor: okunacak kadar küçük bir runtime, parser'ların, ana makine bağlamalarının ve FFI'nin nasıl bir arada çalıştığının yararlı bir ders örneği. Ayrıca bu, iki dili köprülemek yerine bir dilin anlambilimini başka bir runtime içinde barındırma şeklindeki daha geniş birlikte çalışabilirlik örüntüsünü de yansıtıyor. Yazar, dil runtime'ları, Python/JS birlikte çalışabilirliği veya yerel bağlamalar üzerinde çalışan herkesten geri bildirim, özellik fikirleri ve kullanım senaryolarının memnuniyetle karşılandığını söylüyor.

  • #javascript
  • #python
  • #ffi
  • #dom
  • #open-source

İlgili yazılar