3 puan yazan ohah173 3 일 전 | 5 yorum | WhatsApp'ta paylaş

Yapay zeka çağında nasıl çalışmak gerekir?
Hangi uzmanlığın gerektiği, şu anda hangi yeteneklerin en değerli olduğu konusunda net bir fikrim yoktu.
Geliştirici işe alan şirketler de, geliştiriciler de muhtemelen aynı şekilde net ölçütleri bilmiyor gibi görünüyor,

Ama ne olursa olsun, yerimde sayarsam kesin zararda olacağımı düşündüm.
Önce bir şeyler yapayım diye düşünerek
başta öğrenme amaçlı olarak basit bir Chrome Remote DevTools yaparak başladım.

Yaparken, React Native'in de remote debugger olarak desteklenmesini sağlayayım dedim.

-> Metro'yu bilmediğim için fazlasıyla kafam karışıyor.
-> Metro'yu clone coding yaparak çalışayım
-> React Native'de Metro'dan daha iyi bir bundler yapamaz mıyım?
-> Rolldown, swc, bun üzerinden çeşitli şeyler kurcalayarak Metro bundler'dan daha iyi bir bundler yapmaya çalıştım.

En azından bun ve Rolldown umut vericiydi ama ana tarafta çeşitli özelleştirmeler yapmak ya da fork almak konusunda sınırları hissettim.

Öte yandan Metro bundler ile tamamen uyumlu bir web bundler da yok; flow, Hermes motorunun izin verdiği JavaScript söz dizimi ve genel web'den farklı olarak önemli olan çağrı sırası gibi konular var..

Ah... Nasıl olsa öğrenme süreci, o zaman bundler'ı da doğrudan kendim yapıp React Native Metro'nun yerine koymayı deneyeyim.

Bundler yaparken fark ettiğim şeyler:

O zaman web'i de desteklese yeterli olmaz mı?

Rolldown'ın vazgeçtiği ES5'i de ekleyelim
RN'i çalıştırmak gerektiği için Flow parser desteği de verelim
wasm desteği de olsun
Hızda da bun ve Rolldown'ı geçmeye çalışalım

Kendi HMR'ımızı da ekleyelim

Tree-shaking'i de biraz daha agresif yapalım
minify tarafında da diğer bundler'ların önüne geçelim

Mevcut bundler'ları benchmark'larda, en azından fark ettiğim tüm özelliklerde geçelim düşüncesiyle geliştirdim.

Elbette birçok yerde geride kalıyor olabileceğini düşünüyorum.

Diğer bundler'larla kıyaslandığında stabilite, özellikler, desteklenen ekosistem ve topluluk açısından ya da yukarıda bahsettiğim tree-shaking ve minify gibi alanlarda bazı modüllerde önde, bazı modüllerde geride olması gibi nedenlerle, doğal olarak tamamlanmamış birçok yönü var.

Yine de belli ölçüde yapılan çalıştırma testleri sonucunda bazı alanlarda öne geçtiği görüldü. Hâlâ yapılacak çok iş var (SSL, MCP, CLI, stabilizasyon, API dokümantasyonu vb.) ama asıl hedef olan React Native uygulamalarını derleyip çalıştırma konusunda, 3 ticari uygulamada release build, development build ve development server üzerinde kontrol ettiğimde sorunsuz çalıştığını doğruladım. Bu noktada projeyi yayımlayıp geliştirmeye devam etsem olmaz mı diye düşünerek bu yazıyı yazdım.

Yine de geliştirme ve bundling işlevleri (zntc de zntc ile build edilip dağıtılıyor) belli ölçüde iyi çalışıyor,
temel işlevlerden decorator'lar ile React Native'de yarı zorunlu sayılan worklet, TypeScript, Flow gibi şeylerde test ettiğim kütüphaneler sorunsuz çalışıyor,
vite ve rspack için plugin de sağlıyor, vite ve rspack benzeri geliştirme ortamı da sunuyor (RN, Web), dokümantasyonu da var, React HMR da var, module federation desteği de var vs.
Bu yüzden en azından bir bundler ve transpiler'ın temel işlevlerine sahip olduğunu düşünüyorum; biraz geri bildirim almak için yayımlayıp geliştirmeyi sürdürmek istiyorum.

Elle yazdığım kod sıfır; her şey yapay zeka ile yoğun tartışmalar içinde geliştirildi.
Sanırım şimdiye kadar herhangi bir ürün geliştirirken olduğundan daha fazla yapay zekayı zorladım.
Başta sadece Claude kullanıyordum, sonradan Codex de kullandım.

Bundler'ın kendi geliştirme süresi yaklaşık 3 ay sürdü (yaklaşık 3000 PR); yukarıda anlattığım bilinç akışı sürecini de katarsak yaklaşık 6 ay boyunca gece gündüz çalıştım.

Hafta içi, tatil fark etmeksizin ara vermeden çalıştım ve başka bundler'larla gereksiz karşılaştırmalardan doğan bir aşağılık kompleksi mi dersiniz, bilinç baskısı mı dersiniz,
test262 %100 gibi çeşitli test senaryolarını geçebilmek için test case'leri de "fazlasıyla" denecek kadar çok yazarak geliştirdim.

https://ohah.github.io/zntc/

Bol bol geri bildirim bekliyorum (__)

5 yorum

 
caniel 2 일 전

Metro için alternatif olarak RSPack ya da WebPack kullanan Re.Pack de var.

 
ohah173 2 일 전

Dağınık şekilde yazarken atlamışım.
Söylediğiniz gibi Re.pack’i de epey referans aldım.

Bildiğim kadarıyla Re.pack ve Rspack’in ikisi de swc tabanlı olduğu için Flow’u native olarak desteklemiyor,
Re.pack’in ise sürüm 5’ten itibaren Rspack tabanlı olduğunu biliyorum; aynı şekilde Re.pack de swc+babel kullandığı için Flow, reanimated ve nativewind (zntc için destek planlanıyor) gibi çok popüler eklentiler hâlâ Babel ile transpile ediliyor diye biliyorum.

Ben şahsen Babel’den kurtulmak istediğim için, zntc tarafında bunu varsayılan olarak desteklenen bir seçenek hâline getirdim.

zntc Babel uyumluluğunu destekliyor olsa da, mümkünse Babel bağımlılığını sıfıra indirmek istedim.

Kararlılığı yüksek ve kendini kanıtlamış kodlar olsa da, JavaScript olmanın getirdiği sınırlar nedeniyle hız tarafında her zaman bir darboğaz oluyor.

Aslında geliştirirken sürekli diğer bundler’larla benchmark karşılaştırmaları yaptım ve gözle sürekli hissedildiği gibi, doğal olarak diğer bundler’lara kıyasla özellik, kararlılık ve genişletilebilirlik tarafında eksikleri var; bu kısmı sürekli iyileştirmeye çalışacağım.
Yine de, başlıca React Native kütüphanelerinin parser uyumluluğu gibi şeyler en baştan gömülü olduğu için, Re.pack’te kaçınılmaz olarak ortaya çıkan yapısal darboğaz noktalarında önde olduğunu düşünüyorum!

 
caniel 2 일 전

Kolay bir proje olmayacaktır; destekliyorum.

 
ohah173 2 일 전

Teşekkürler!!

 
dydwls140 2 일 전

Hımm... test262 %100 ha... Sadece rozete bakıp V8 seviyesinde sanmıştım haha