Prettier’ın 20 bin dolarlık ödülünü Biome aldı
(prettier.io)- 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
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
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
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
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
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
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’ı
ruffakımını izlemek anlamına geliyorYazı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
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
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;
rustfmtgibi başka formatlayıcılarda yaşamadığım bir sorun buBen böyle bir sorunla pek karşılaşmadım ve Prettier'dan oldukça memnundum
print widthseçeneğini denedin mi merak ediyorum: https://prettier.io/docs/en/options.html#print-widthKiş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
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/-1yerine+1/-5olabilir. İnceleyen kişinin 5 satır silme ve 1 satır ekleme arasında tam olarak neyin çıktığını hemen görmesi zorlaşırGit'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
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
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
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
ruffheyecanını hatırlatıyorGeniş etki yaratacak verimlilik ve hız iyileştirmeleri bekliyorum
lint-stagedaracını kullanmanı öneririmBü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
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
İş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
https://benchmarksgame-team.pages.debian.net/benchmarksgame/performance/fasta.html
https://benchmarksgame-team.pages.debian.net/benchmarksgame/performance/knucleotide.html
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
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?
25 kat olduğunu iddia ediyor, ama rakamlar eski olduğu için çok fazla özellik eklendiği şu durumda hâlâ olduğu gibi güvenilebilir mi bilmiyorum. Yine de buna yakınsa muazzam bir başarı