Typescript goes!

Geliştirme dünyasında bomba etkisi yaratan bir haber, yine bölündük: Microsoft, JavaScript'in gözbebeği olan TypeScript'in derleyicisini Go programlama diliyle yazmaya karar verdi. Bu proje, özellikle büyük ve karmaşık projelerde TypeScript geliştiricilerinin kanayan yarası olan performans sorunlarına kökten bir çözüm getirmeyi amaçlıyor.

TypeScript'in mimarı, duayen isim Anders Hejlsberg'in kendi ağzından duyduğumuza göre, bu hamle sayesinde editörlerin açılış süresinde ciddi bir iyileştirme sağlanacak, derleme süreleri tam 10 kat azalacak ve bellek kullanımı da hissedilir derecede düşecek. Proje derlemeye başladığımızda çay demlemeye giderdik, artık fırsatımız olmayacak gibi :) 

Tabii ki, böyle büyük bir değişiklik beraberinde heyecan kadar soru işaretlerini de getirdi. Geliştirici dünyası ikiye hatta üçe bölündü diyebiliriz! Bir tarafta "Yaşasın performans!" diyenler, diğer tarafta "Neden Go? Neden C# değil? Hatta Rust varken?" diye kafası karışanlar...  C# geliştiricileri mi? Onlar da kendilerini biraz öksüz hissetmediler değil sanki, orada yalnızdılar resmen!  Hatta bazıları C#'ın pabucunun dama atıldığına dair esprili (ya da biraz da sitemkar) tweetler bile attı.  Hejlsberg'in kendi yarattığı dili (C#) neden kullanmadığına anlam veremeyenler de cabası. Tartışma platformları, forumlar, sosyal medya... 

WASM Alarmı: Go, Web'de Yavaş mı Kalacak?

@sanxiaozhizi vuejs'in önemli contributorlarından biri. Bu büyük değişime kayıtsız kalmadı ve Go'nun WebAssembly (WASM) performansıyla ilgili endişelerini dile getirdi.  WASM, biliyorsunuz, web tarayıcılarında yüksek performanslı uygulamalar çalıştırmamızı sağlayan bir teknoloji.

sanxiaozhizi'ya göre, Go'nun WASM performansı henüz istenilen seviyede değil. Hatta esbuild gibi araçların WASM sürümleri bile web ortamında oldukça yavaş çalışıyor, JavaScript tabanlı rakiplerinden bile geri kalıyor. Kendi yaptığı testlerde basit bir "hello world" projesinin tip kontrolünün bile Go ile WASM üzerinde 1 saniyeden fazla sürdüğünü gözlemlemiş. Ekran görüntüsünü de paylaşmış. Vue.js'in yaratıcısı Evan You da bu tweeti alıntılayarak Go ile derlenmesinin pragmatik bir seçim olduğuna katıldığını ancak tarayıcı içi IDE'ler ve oyun alanları gibi TypeScript'in tarayıcıda çalıştırılması gereken birçok geçerli kullanım durumu olduğunu vurgulayarak, tsgo WASM'nin düşük performans göstermesi durumunda bu tür kullanım durumları için JavaScript tabanlı tsc'ye bağlı kalmak zorunda olup olamayacaklarını sorguladı.

Bu arada çok eğlenceli bulduğum bir github yorumunu da eklemeden edemeyeceğim. @EisenbergEffect isimli kullanıcı daha önce Microsoft'ta çeşitli pozisyonlarda çalıştığını belirtip, bu kararın nasıl alınmış olabileceğine dair bir senaryo paylaştı.

Ona göre, TypeScript'in derleme hızının yavaşlığına yönelik şikayetler üzerine, mühendisler farklı çözümler öneriyor.

  • Bir mühendis, derleyiciyi C# ve .NET Core ile yeniden yazmayı öneriyor. Bu, performans artışı ve Microsoft'un web geliştirme araçlarını birleştirme fırsatları sunacaktı.
  • Başka bir mühendis, Rust ile yeniden yazmayı öneriyor. Rust'ın hızı, bellek güvenliği ve tarayıcılarla daha iyi entegrasyon imkanları vurgulanıyor.
  • Üçüncü bir mühendis ise, Go dilinin TypeScript'e benzerliğinden bahsederek, hızlı bir prototip oluşturduğunu ve kodun büyük bir kısmını Go'ya dönüştürdüğünü söylüyor.

Eisenberg, yöneticilerin teknik detaylardan anlamadığı ve hızlı çözüme odaklandığı için, üçüncü mühendisin önerisini kabul etmiş olabileceğini esprili bir şekilde ifade ediyor. Bu, büyük şirketlerdeki kararların bazen beklenmedik ve pratik nedenlerle alınabileceğine dair bir gönderme yapıyor. Aslında Eisenberg bu durumun şaka olduğunu söylüyor, ama Microsoft'ta buna benzer kararların çokça alındığını da belirtiyor. Kendi adıma, her ne kadar bu senaryoyu eğlenceli bulsam da şirketlerin bu davranışlarının oldukça yerinde ve doğru olduğunu düşünüyorum. Şirketler, bireylerden farklı olarak, duygusal varlıklar değildir. Onlar, belirli hedeflere ulaşmak için kurulmuş, karmaşık organizasyonlardır. Temel amaçları, varlıklarını sürdürmek, büyümek ve paydaşlarına değer katmaktır. Bu amaçlara ulaşmak için izleyecekleri yol, elbette duygusal veya kişisel tercihlerle değil, rasyonel analizler ve stratejik değerlendirmeler sonucunda belirlenir. Finansallar, bu rasyonelliğin temelini oluşturur. Şirketler, kâr elde etmek, maliyetleri düşürmek, verimliliği artırmak ve rekabet avantajı sağlamak zorundadır. Her karar, bu finansal denklemler içerisinde değerlendirilir. Duygusal veya idealist yaklaşımlar, eğer finansal ve stratejik hedeflere hizmet etmiyorsa, genellikle ikinci plana atılır.

Anders Hejlsberg'in Açıklaması


Tüm bunlar olup bitiyor derken, Anders Hejlsberg, tartışma gündeminin farklı eksene kaydığını farketmesi üzerine daha detaylı bir açıklama yapma ihtiyacı duyuyor ve tartışmalara son verebilecek mesajı veriyor. İşte o açıklamanın temel noktaları:

"Microsoft, TypeScript derleyicisini Go diline taşırken pragmatik bir yaklaşım sergiledi. Amaç, en iyi sonucu almaktı. Go, mevcut kod tabanıyla uyumluluk, bellek yönetimi ve karmaşık işlemlerdeki verimliliği nedeniyle seçildi. Bu, C#'a olan bağlılıklarının azalması anlamına gelmiyor. Microsoft, her projede en uygun aracı kullanma özgürlüğüne inanıyor ve bu durum geliştirici topluluğuna fayda sağlıyor."

Kısaca:

  • Microsoft, TypeScript derleyicisini Go'ya taşıdı.
  • Karar, teknik gereksinimlere ve en iyi sonuca odaklanmaya dayanıyor.
  • Bu, C#'a olan bağlılıklarını azaltmıyor.
  • Amaç, her proje için en uygun aracı kullanmak ve geliştirici topluluğuna fayda sağlamak.

Olabildiğince eğlenceli, magazinsel boyutunu yazmaya da çalıştım. Benim şahsi fikrim, ana programlama dilim C# olmasına rağmen Microsoft'un bu kararının yerinde olduğu yönünde. C# seçmedikleri için "alındım, gücendim" desem yalan olur. Ben zaten Vanilla JS tarafında oldum her zaman. 

Ana Sayfaya Dön