Yıllar boyunca birçok web geliştirme yaptım. 2000 yılı civarında, PHP 3.0'ın piyasaya sürülmesinden hemen sonra başladım ve web dünyasını ele geçirmeye başladım. HTML oluşturmak için her türlü yaklaşımı kullandım: ham PHP, Python'da dize birleştirme, PHP'de Smarty şablonları, Perl'de Şablon Araç Seti ve Python'da Jinja/Django şablonları. Daha sonra dünya SPA'lara ve JavaScript çerçevelerine yönelirken ben de ön uçlar üzerinde çalışmayı bıraktım.
Gelişmenin Ayrıntıları ve Kapsamı
İki yıl önce Zig'i seçtim ve bu kadar düşük seviyeli bir dilde web geliştirmeyi düşüneceğimi asla hayal etmezdim. Ancak Zio ve Dusty ile kendi ekosistemimi oluştururken bunun o kadar da uzak bir ihtimal olmadığını fark ettim. Bu kitaplıkları, çıktının JSON veya Mesaj Paketi olduğu API arka uçları için oluşturdum, ancak daha sonra arena ayırıcıların doğru kullanımıyla web geliştirmenin bile aslında yönetilebilir olduğunu gördüm, çünkü tipik olarak dahil olan tüm dizelerin yerini ayırmayı hatırlamanıza gerek yok. Ve Zig'in comptime'ı ile performans avantajlarını kaybetmeden çok üst düzey arayüzler oluşturabilirsiniz. Ve htmx veya Datastar'ın yardımıyla, kendime asla yapmayacağıma söz verdiğim JavaScript/TypeScript'e dokunmadan SPA'lar bile oluşturabilirsiniz.
Bununla birlikte bir şey hâlâ eksikti: şablon oluşturma. Dizi birleştirme bir seçenek değildi, 2000 öncesi CGI günlerine dönmek istemedim. Bir şablon kitaplığı için birkaç gereksinimim vardı:
“Teknoloji ekosisteminde ölçeklenebilirlik ve otomasyon süreçleri, kullanıcı deneyimi ile doğrudan birleştiğinde katma değer üretiyor.”
Tüm bu gereksinimleri karşılayacak bir çözüm bulamadım. Sonra Ziex'i gördüm ve hayrete düştüm. JSX yaklaşımının JavaScript dışında yapılabileceği hiç aklıma gelmemişti. Nurul Huda'nın Zig'de oluşturmayı başardığı geliştirici deneyimi benim için hayal bile edilemezdi. WASM çerçevesi istemediğim için ihtiyaçlarıma doğrudan uymuyordu ancak sözdizimi ve Zig kodunu şablonlara entegre etme yaklaşımı bana bazı fikirler verdi. Daha sonra daha fazla araştırma yaptıktan sonra Templ for Go'yu keşfettim ve ne oluşturmak istediğim benim için oldukça açıktı.
O halde zt'yi takdim edeyim (isim verme konusunda pek iyi değilim, kusura bakmayın). Templ'ın Zig'e bir uyarlaması. Zig oluşturma sırasında şablonlar ayrıştırılır ve Zig koduna aktarılır. Bu, bunları doğrudan uygulama kodunuzdan içe aktarabileceğiniz anlamına gelir; ancak aynı zamanda, belki daha da önemlisi, şablonlar, uygulama kodunuzu da içe aktarabilir. Sonuç olarak, tüm parametreler tam olarak yazılabilir. Bir şey işlenemiyorsa Zig derleyicisi bunu size söyleyecektir. Oluşturulan kod oldukça basittir, tek yaptığı std.Io.Writer'a yazmaktır. Doğrudan bir sokete yazabilir veya çıktıyı seçiminize göre bir arabellekte biriktirebilirsiniz. İşte bir şablonun neye benzediği:
Ve işte bunu Zig kodundan nasıl kullanacağınız:
If you want to use it inside Dusty to render an HTML page, you just do this:
Bir yan not olarak, std.Io iptalinin önemli olduğu bir yerde aynı modeli kullanırsanız yukarıdaki ana kod parçasında hata işlemede çok belirgin olmayan bir hata vardır. Muhtemelen bunun hakkında bir blog yazısı yazacağım, ancak ilgileniyorsanız bu Ziggit konusuna göz atın. Dusty'deki std.Io.Writer işlemesini saran render işlevi bu sorunu çözüyor.
Hem metinde hem de özniteliklerde tüm dinamik değerler varsayılan olarak HTML çıkışlıdır ve href veya src gibi URL özniteliklerindeki değerler de tehlikeli düzenlere karşı kontrol edilir. Gerçekten ham HTML çıktısı almanız gerekiyorsa, bunu açıkça {!value} ile istemeniz gerekir, böylece şablonda fark edilmesi kolaydır. Ayrıştırıcı ayrıca tüm öğelerin düzgün bir şekilde kapatılmasını gerektirir, böylece yanlışlıkla bozuk işaretleme oluşturamazsınız. Sizi her şeyden korumaz ancak en yaygın XSS kaynaklarını ortadan kaldırır.
En çok hoşuma giden şey şablon hatalarının yalnızca Zig derleyici hataları olmasıdır. Yukarıdaki şablonda yazım hatası yaparsanız ve {u.name} yerine {u.nmae} yazarsanız zig build size şunu söyleyecektir:
Recep Usta OS — Sistem & Mühendislik Değerlendirmesi
Altyapı ve Verimlilik Perspektifi: Type-safe HTML templating in Zig haberi incelendiğinde; kurumsal dijitalleşme ve otomasyon süreçlerinin modern yazılım mimarileriyle nasıl güçlendirildiği açıkça görülüyor. Ağ güvenliği, yüksek erişilebilirlik ve mikroservis tabanlı veri senkronizasyonu bu tarz operasyonlarda başarının anahtarıdır.
Kullanıcı odaklı dijital çözümlerin güvenli altyapılarla desteklenmesi, hem yerel pazarda hem de uluslararası genişlemede sistem sürdürülebilirliğini sağlamlaştırmaktadır.