3 puan yazan GN⁺ 2023-11-28 | 1 yorum | WhatsApp'ta paylaş
  • JavaScript kod biçimlendiricisi Prettier, biçimlendirme mantığı kararlı bir noktaya yaklaşınca, Rust tabanlı uyumlu bir uygulama üzerinden performans rekabetini teşvik etmeye çalıştı
  • 9 Kasım’da Prettier, test paketinin %95’ini geçme şartıyla 10 bin dolarlık bir ödül koydu; Vercel CEO’su Guillermo Rauch ve napi.rs’in katkılarıyla toplam tutar 22.500 dolara çıktı
  • Biome, yaklaşık 3 hafta boyunca birden fazla kişinin uyumluluğu artırmasıyla ödülü kazandı; bu süreçte Prettier ile gerçek uyumluluk kapsamı hızla genişledi
  • Testleri karşılamaya çalışırken Prettier’ın hataları ve tartışmalı kararları da ortaya çıktı; böylece Prettier tarafında da iyileştirme için somut dayanaklar oluştu
  • Prettier, bağışlarla iki bakımcıya ayda 1.500 dolar ödeme yapıyordu, ancak mevcut bütçede yalnızca 8 aylık çalışma süresi kaldığı için ek bağışlara ihtiyaç var

Biome, Prettier ödülünü aldı

  • Prettier bir JavaScript kod biçimlendiricisidir; insanların kod yazarken kullandığı çok çeşitli stilleri özenle ele aldığı için yaygın biçimde benimsendi
  • Biçimlendirme mantığı halihazırda sağlam durumda ve ternary ifadeler çalışması yansıtıldığında tatmin edici bir aşamaya ulaşacağı düşünülüyor
  • Sıradaki hedef performans iyileştirmesi
    • Prettier aslında hızlı bir araç değildi, ancak çoğu kullanım senaryosu için yeterince hızlıydı
    • Mevcut durumda kalmamak için dostane bir rekabet yöntemiyle iyileştirme teşvik edildi
  • Ödül şartları ve katılım

    • 9 Kasım’da, Rust ile yazılmış bir projenin Prettier test paketinin %95’ini geçmesi durumunda alabileceği $10k bounty duyuruldu
    • Vercel CEO’su Guillermo Rauch aynı tutarı ekleyerek toplamı 20 bin dolara çıkardı
    • napi.rs 2.500 dolar daha ekledi
    • Algora tarafı ödül için bir landing page hazırladı
  • Biome’un ulaştığı sonuç

    • Biome projesi ödülü aldı
    • Yaklaşık 3 hafta boyunca 12 civarında kişi bir araya gelerek uyumluluğu iyileştirdi
    • Ayrıntılar Biome’un full report yazısında yer alıyor
    • Testleri karşılamaya çalışırken Prettier’ın çok sayıda bugs and questionable decisions durumu da bulundu ve Prettier bunları iyileştirebilir hale geldi

Performans rekabetinin yarattığı baskı

  • Prettier ekibinin başka bir projeye finansman koymasının nedeni performans rekabeti yaratmaktı
    • Prettier, JavaScript kod biçimlendiricileri alanında baskın konumdaydı
    • Rekabet eksikliği nedeniyle performans iyileştirmeleri ve çeşitli uç durumların düzeltilmesi için motivasyon azdı
  • Artık Biome’da Prettier ile uyumlu ve çok daha hızlı bir uygulama var; kullanıcılar geçiş yapabilir
  • Fabio Spampinato, bu meydan okuma sayesinde Prettier CLI’ını düzgün biçimde profilleyerek birkaç aşırı verimsizlik keşfetti
    • Bu sorunların yıl sonuna kadar düzeltilmesi planlanıyor

Prettier’ın bağışları ve bakım bütçesi

  • Prettier’ın ödülü ve sürdürülebilir operasyonları, birçok kişi ve şirketten gelen büyük bağışlar sayesinde mümkün oldu
  • Başlıca şirket bağışları

    • Indeed: 20.000 dolar
    • Frontend Masters: 10.850 dolar
    • Sentry: 10.529 dolar
    • Salesforce: 10.025 dolar
    • Airbnb: 8.426 dolar
    • Cybozu: 6.086 dolar
  • Başlıca bireysel bağışlar

    • Shintaro Kaneko: 1.635 dolar
    • Suhail Doshi: 1.000 dolar
    • icchiman: 500 dolar
    • Mariusz Nowak: 270 dolar
    • Benoît Burgener: 270 dolar
    • Jeremy Combs: 270 dolar
    • f_subal: 230 dolar
    • Bu bağışlar sayesinde Prettier, son 2 yıldır iki kişiye ayda 1.500 dolar ödeme yaparak sürümleri yayımlamayı sürdürdü
    • Bu rolü Fisker Cheung ve Sosuke Suzuki üstlendi
    • Mevcut bütçeyle yalnızca 8 aylık çalışma süresi kaldığından ek bağış gerekiyor
    • Prettier kullanıyorsanız ve faydasını gördüyseniz https://opencollective.com/prettier adresinden bağış yapabilirsiniz
    • Open Collective, projenin operasyonlarına büyük destek sağlıyor
    • Bakımcılar kişisel bilgilerini paylaşmadan katılabiliyor
    • Banka gibi çalışıyor ve dünyanın her yerinden para alıp gönderebiliyor
    • Vergi belgelerini uygun şekilde işliyor
    • Prettier toplam 110 bin dolar topladı ve bunun 75 bin dolarını yeniden dağıttı
    • Bu ödül tek seferlik olsa da amaç, kod biçimlendirme ekosistemine enerji katarak daha iyi bir geliştirici deneyimi yaratmak

1 yorum

 
GN⁺ 2023-11-28
Hacker News yorumları
  • Prettier ekibinin neden başka bir projeye fon sağladığını merak ettim, ama verilen yanıt bana pek ikna edici gelmedi
    Prettier’ı iyileştirmek için bir ödül koyabilirlerdi; Prettier’ı iyileştirme motivasyonu yaratmak için rakip bir proje oluşturmanın nedeni belirsiz
    Nihai hedefin Prettier’ı bırakıp Rust tabanlı bir araca geçmek olup olmadığını da merak ediyorum; zaten karmaşık olan ekosistemi gereksiz yere daha da parçalıyormuş gibi görünüyor

    • Bunun Prettier iyileştirme ödülü değil de ayrı bir proje olmasının üç nedeni var gibi görünüyor
      Birincisi, Rust ile formatter yazmak Prettier kod tabanını iyileştirmekten farklı nitelikte bir iş. Prettier Rust ile yazılmadı ve Rust’ın formatter uygulamak için sağlam bir seçenek olduğu kanıtlandığına göre, hedefin kendisi daha çok Rust formatter yazmaya yakın
      İkincisi, 20 bin dolar karşılığında Prettier’ın sahip olacağı bir Rust formatter yazmayı istemek pek cazip değil. Çok iyi bir geliştirici için bu yaklaşık 100 saatlik bir iş demek; projeyi tamamlamaya yetmez. Ama sahipliği kendisinde olacak bir projeyle ödüllendirilirse bu çok daha cazip olur
      Üçüncüsü, Prettier kazanan projeye sahip olursa bakım sorumluluğu da Prettier ekibine geçer. Projeyi ilk yapan ekibin onu sürdürme teşviki azalır, rekabet de ortadan kalkar; ekosistem daha az canlı hale gelir
    • Açık kaynak bakımcıları açısından bakınca, herkesin benim belirli implementasyonumu kullanmasından çok sorunun çözülmesi önemlidir
      Birilerinin benim kodumu kullanması bana doğrudan bir fayda sağlamıyor; erişilebilir bir çözüm üretmek için çalışmış oluyorum. JS kod biçimlendirmeye tutkun olsaydım, biri o sorunu daha hızlı bir yöntemle çözse bundan epey memnun olurdum sanırım
    • “Biz mevcut güçlü oyuncuyuz ve JavaScript geliştiricileri için kullanılabilir bir alternatif yok” ile “Rust tarafı bunu başardı ve oldukça viable bir alternatif ortaya çıktı” arasında büyük fark var
      Bu, yerel optimumdan çıkma problemine benziyor. En büyük performans darboğazına bakıp onu iyileştirebileceğinizi söyleyebilirsiniz; ama nesnel olarak daha iyi bir karşılaştırma hedefi yoksa bundan emin olmak zordur
      Taklit, en içten övgüdür; zor bir problemin başka bir dilde de çözülebileceği gerçeği, rekabet sürecinde başlı başına değer yaratır
      Gerçek bir alternatif yoksa tam anlamıyla rekabet de yoktur. Rust implementasyonu test paketinin en fazla %5’inden feragat edip yine de daha hızlıysa, standart implementasyonla karşılaştırıldığında bu problemin teorik sınırları hakkında çok şey söyler
      Bu alanı derinlemesine bildiğim söylenemez, ama başka bir dilde benzer bir implementasyonun bulunmasının her zaman soyut bir değer sağladığını düşünüyorum
    • Farklı bakış açıları ve niyetlere sahip insanlar implementasyon yaptığında yeni iyileştirme yönleri ortaya çıkabilir
      https://biomejs.dev/formatter/#differences-with-prettier
      Biome, Prettier ile aynı kararları izlemeyerek ayrışan birçok rahatsızlık noktasını tespit etti; sadece bu bile paralel geliştirmenin değerini fazlasıyla gösteriyor
    • Kısıtları ve yükleri farklı olan yaklaşımlar, özgün projede görünmeyen iyileştirme alanlarını bulabilir
      Bunun nedeni sözde Prettier tarzı düşünce biçimine sıkışmamış olmaları olabilir
  • Birçok kişi nedeni açıklarken şu kısmı birlikte görmüyor gibi: “Tüm testleri geçirmeye çalışırken Biome projesi Prettier’ın birçok bug’ını ve şüpheli kararını keşfetti; bunları iyileştirebilir hale geldi”
    Bana göre bu, başka bir implementasyon sayesinde kendi implementasyonlarını sanity check edebildikleri anlamına geliyor

  • Bu haber beni gerçekten heyecanlandırıyor
    Biome ekibi Prettier ile %95 uyumluluğa şaşırtıcı derecede hızlı ulaştı https://github.com/biomejs/biome/issues/720
    Rust sayesinde JavaScript biçimlendirme hızı ciddi ölçüde artırılabilir; bu da Python formatter’ı ruff akımını izlemek anlamına geliyor
    Yazıda yok ama Wasmer da Biome’u WASIX’e derlemek için 2.500 dolarlık ödül koydu; ekibin bunun için çalıştığını görmek de güzeldi
    Yakında Biome’un Wasmer’da çalışmasını bekliyorum: https://wasmer.io/, https://wasix.org/, https://console.algora.io/challenges/prettier

    • WASIX’i ilk kez gördüm; okuyunca JVM’in yeniden doğmuş hali gibi göründü
      Bu anlayışım doğru mu merak ediyorum. Sisteme erişebiliyorsa ve gerçek bir sandbox değilse, kodu WASIX’te çalıştırmanın avantajının ne olduğunu bilmiyorum
    • Bunu WASIX’e derlenebilir hale getirmek istemelerinin nedenini bilen var mı merak ediyorum
  • Hız iyileştirmeleri her zaman memnuniyet verici, ama Prettier biraz daha az dayatmacı olsa iyi olurdu
    Özellikle satır uzunluğu konusunda biçimlendirmemi olduğu gibi bırakmıyor. Prettier ile biçimlendirilmiş kod, biçimlendirilmemiş koda göre çok daha az okunur oluyor; rustfmt gibi başka formatlayıcılarda yaşamadığım bir sorun bu

    • Prettier kodunun çok daha az okunur olduğuna dair bir örnek var mı merak ediyorum
      Ben böyle bir sorunla pek karşılaşmadım ve Prettier'dan oldukça memnundum
    • print width seçeneğini denedin mi merak ediyorum: https://prettier.io/docs/en/options.html#print-width
    • Prettier'ın asıl sorunu neredeyse fiilî standart hâline gelmiş olması
      Kişisel olarak Prettier'ı hiç sevmiyorum ama Svelte'i seviyorum; Svelte'in resmi formatlayıcısı bildiğim kadarıyla Prettier kullanıyor. Bu yüzden Svelte'te Prettier kullanıyorum, birkaç başka şeyde de aynı şekilde
      Kullanıcının aracı seçtiği bir durumda “çok dayatmacıyız, ayar istiyorsan başka yere git” ilkesi harika olabilir. Ama belirli bir kullanıcı kitlesi için fiilen tek seçenek hâline gelince biraz daha yapılandırılabilir olması gerekir
    • Satır uzunluğu konusunda Prettier'ın daha sinsi yan etkileri de var; bu yüzden dayatmacı formatlayıcılardan kaçınıyorum
      Prettier, diff'i istemediğiniz biçimde değiştiriyor
      Destructuring assignment'ta bir üyeyi kaldırıp satır uzunluğu sınırının altına düşerseniz, diff 0/-1 yerine +1/-5 olabilir. İnceleyen kişinin 5 satır silme ve 1 satır ekleme arasında tam olarak neyin çıktığını hemen görmesi zorlaşır
      Git'in etkileşimli rebase'iyle önceki bir commit'teki yazım hatasını düzeltmeye çalışırsanız, Prettier tüm kod bloğunu yeniden biçimlendirip sonraki commit'lerin uygulanmamasına neden olabilir
      pre-commit hook'u ile Prettier çalıştırdıktan sonra dosyadaki değişikliklerin yalnızca bir kısmını stage etmeyi deneyince de başka eğlenceli sorunlar çıkıyor. Ben almayayım
    • Katılıyorum. Hatta daha da ileri gidip Prettier hiç olmasaydı daha iyi olurdu demek isterim
  • Hâlâ çeşitli eslint eklentilerinin sapasağlam linter'ları kaldırıp yerlerine Prettier koymuş olmasına sinir oluyorum
    Prettier fazla zorlayıcı, akıl yürütmesi zor ve asla istemediğim bir araç daha

    • Kullanımdan kaldırılan stil kuralları yeni bir projeye taşındı: https://eslint.style/guide/why
    • Bu tür araçların amacı zaten stil tartışmalarını bitirmek
    • Prettier için hangi durumda “akıl yürütmek” gerektiğini pek anlamıyorum
      Aklıma ancak ara sıra çıkan merge conflict sorunları geliyor
  • Rust'a port etme yönünde bir akım var, ama Prettier her kaydetmede çalıştığı için hız artışı epey büyük olacaktır
    Yakında Biome'u deneyeceğim; Biome projesini tebrik ederim

    • Tek bir dosyada Prettier çalışırken hiç gecikme hissetmedim
      Performansın önemli olduğu yer, tüm depoya biçimlendirme çalıştırmak
      Etkileşimli kullanımda uzun süre ayakta duran ve ısınmış bir süreç kullanılmalı; o zaman Node'un başlangıç süresi önemli olmaz. İdeal olarak tip denetimi, linting, vurgulama ve biçimlendirme tek bir dil servisi içinde, her tuş vuruşunda artımlı parse yapıp paylaşılan AST'yi güncellemelidir
    • Bu çalışma bana Python topluluğundaki ruff heyecanını hatırlatıyor
      Geniş etki yaratacak verimlilik ve hız iyileştirmeleri bekliyorum
    • Prettier'ın her kaydetmede tümüne değil yalnızca değişen dosyalara çalışması için lint-staged aracını kullanmanı öneririm
      Büyük projelerde fark çok büyük
  • “Artık bir sonraki önemli boyuta, performansa odaklanabiliriz. Prettier doğası gereği hiçbir zaman hızlı olmadı ama çoğu kullanım için yeterince hızlıydı. Bu nokta beni hep tatmin etmedi, bu yüzden bir şey yapmak istedim. Dostane rekabetten daha iyi bir yol var mı? 9 Kasım'da Prettier test paketinin %95'ini geçen bir Rust projesi için 10 bin dolarlık ödül koydum”
    Bir şeyin Rust ile yazılmış olmasından daha iyi performansın nasıl otomatik olarak çıkacağını anlamıyorum. Mevcut kod tabanını Rust'a basitçe transpile edip ödülü almak da mümkün olabilirdi

    • “Basitçe” sözcüğünü görünce, ardından gelen işin basit olmayacağını düşünürüm
      Gerçekten basit olsaydı öyle nitelemeye gerek kalmazdı
      Bu durumda bir JavaScript kod tabanını Rust'a transpile etmenin basit olup olmadığını bilmiyorum. İki dilin düşünme modeli, kullandıkları kütüphaneler ve kod yazma biçimi epey farklı; JS-to-Rust transpiler var olsa bile Prettier ölçeğinde bir kod tabanında kullanılacak kadar sağlam olduğundan şüpheliyim
    • Deyimsel Rust, benzer görünen JavaScript/TypeScript kodundan çoğu zaman özel bir optimizasyon olmadan da 5~10 kat daha hızlı olabiliyor
      İşe göre değişir ve her zaman böyle değildir, ama çok fazla string manipülasyonu yapan parser türü işler kesinlikle buna girer
    • String işlemede Rust, JS'den çok daha hızlı
      https://benchmarksgame-team.pages.debian.net/benchmarksgame/performance/fasta.html
      https://benchmarksgame-team.pages.debian.net/benchmarksgame/performance/knucleotide.html
    • vjeux'dan aldığım yanıt şuydu: “Son zamanlarda Rust ile yazılan çok sayıda hızlı web aracı var”
      https://twitter.com/Vjeux/status/1722769322299609565
      Bana ikna edici gelmiyor; vjeux'nun Rust modasına kapıldığını düşünüyorum
  • Kazanan proje Biome, birkaç yıl önce Babel'in yaratıcısı Sebastian McKenzie'nin başlattığı Rome projesinin bir fork'u ya da yeniden adlandırılmış hâli
    sebmck son bir yıl kadar ortalarda yok gibi; pek çok proje kaynağına erişim yetkisi yalnızca onda olduğu için katkıda bulunanlar güncelleme yapamıyordu, bu yüzden fork'landı
    Umarım iyidir; bundan bağımsız olarak Biome projesinin iyi gidiyor gibi görünmesine sevindim

  • Neden illa Rust olması gerektiğini bilmiyorum
    Sadece “daha hızlı bir şey” olamaz mıydı? Rust uygulaması gerçekten hızlı mı? Prettier gibi bir program için bellek güvenliği ya da sızıntılar gibi şeylerin gerçekten önemli olup olmadığı da şüpheli

    • Özellikle HN’de Rust’ın şu anda en hızlı ve en güvenli dil olduğunu düşünen, sesi yüksek çıkan çok kişi var
      Bu yüzden bir ölçüde “öyle diyorsanız bizzat kanıtlayın” türü bir ödül meydan okuması olmuş olabilir
  • Biome benchmark’larının bir yerde olup olmadığını merak ediyorum
    Prettier’dan tam olarak ne kadar daha iyi performans gösteriyor?