3 poin oleh GN⁺ 2023-11-28 | 1 komentar | Bagikan ke WhatsApp
  • Prettier, formatter kode JavaScript, ketika logika formatting-nya mulai mendekati kondisi stabil, berupaya mendorong persaingan performa melalui implementasi kompatibel berbasis Rust
  • Pada 9 November, Prettier menawarkan hadiah sayembara sebesar $10 ribu dengan syarat lulus 95% test suite, dan dengan tambahan dari CEO Vercel Guillermo Rauch serta napi.rs, totalnya menjadi $22.500
  • Biome menerima hadiah tersebut setelah beberapa orang meningkatkan kompatibilitas selama sekitar 3 minggu, dan dalam proses ini cakupan kompatibilitas nyata dengan Prettier meluas dengan cepat
  • Dalam proses menyesuaikan pengujian, bug dan keputusan yang meragukan di Prettier juga terungkap, sehingga pihak Prettier mendapatkan dasar konkret untuk perbaikan
  • Prettier selama ini membayar $1.500 per bulan kepada 2 maintainer dari dana donasi, tetapi anggaran saat ini hanya menyisakan runway 8 bulan, sehingga membutuhkan donasi tambahan

Biome Menerima Hadiah Sayembara Prettier

  • Prettier adalah formatter kode JavaScript yang diadopsi secara luas karena menangani dengan cermat berbagai sekali cara orang menulis kode
  • Logika formatting-nya sudah berada dalam kondisi kokoh, dan diperkirakan akan mencapai tahap yang memuaskan setelah pekerjaan terkait ternaries diterapkan
  • Tantangan berikutnya adalah peningkatan performa
    • Prettier sejak awal bukan alat yang cepat, tetapi cukup cepat untuk sebagian besar use case
    • Agar tidak tetap berada pada kondisi saat ini, mereka mendorong perbaikan melalui bentuk persaingan yang bersahabat
  • Syarat Hadiah dan Partisipasi

    • Pada 9 November, mereka mengajukan $10k bounty yang dapat diterima jika sebuah proyek yang ditulis dengan Rust lulus 95% dari test suite Prettier
    • CEO Vercel Guillermo Rauch menambahkan jumlah yang sama, sehingga totalnya menjadi $20 ribu
    • napi.rs menambahkan $2.500
    • Pihak Algora membuat landing page untuk hadiah sayembara tersebut
  • Hasil yang Dicapai Biome

    • Proyek Biome menerima hadiah sayembara tersebut
    • Selama sekitar 3 minggu, kira-kira 12 orang berkumpul untuk meningkatkan kompatibilitas
    • Detailnya ada di full report dari Biome
    • Dalam proses menyesuaikan pengujian, banyak bugs and questionable decisions di Prettier juga ditemukan, dan Prettier menjadi dapat memperbaikinya

Tekanan yang Diciptakan Persaingan Performa

  • Alasan tim Prettier mendanai proyek lain adalah untuk menciptakan persaingan performa
    • Prettier memiliki posisi dominan di bidang formatter kode JavaScript
    • Karena kurangnya persaingan, motivasi untuk peningkatan performa dan perbaikan berbagai edge case relatif kecil
  • Kini Biome memiliki implementasi yang kompatibel dengan Prettier sekaligus jauh lebih cepat, dan pengguna dapat beralih
  • Fabio Spampinato menggunakan tantangan ini sebagai pemicu untuk melakukan profiling CLI Prettier dengan benar, dan menemukan beberapa inefisiensi yang ekstrem
    • Masalah-masalah tersebut direncanakan akan diperbaiki sebelum akhir tahun

Donasi dan Anggaran Maintenance Prettier

  • Hadiah sayembara dan operasi berkelanjutan Prettier dimungkinkan berkat donasi besar dari berbagai individu dan perusahaan
  • Donasi Perusahaan Utama

    • Indeed: $20.000
    • Frontend Masters: $10.850
    • Sentry: $10.529
    • Salesforce: $10.025
    • Airbnb: $8.426
    • Cybozu: $6.086
  • Donasi Individu Utama

    • Shintaro Kaneko: $1.635
    • Suhail Doshi: $1.000
    • icchiman: $500
    • Mariusz Nowak: $270
    • Benoît Burgener: $270
    • Jeremy Combs: $270
    • f_subal: $230
    • Berkat donasi ini, selama 2 tahun terakhir Prettier terus merilis versi sambil membayar $1.500 per bulan kepada dua orang
    • Fisker Cheung dan Sosuke Suzuki menjalankan peran ini
    • Dengan anggaran saat ini, hanya tersisa runway 8 bulan, sehingga diperlukan donasi tambahan
    • Jika Anda menggunakan Prettier dan terbantu olehnya, Anda dapat berdonasi di https://opencollective.com/prettier
    • Open Collective sangat membantu operasional proyek
    • Maintainer dapat bergabung tanpa memberikan informasi pribadi
    • Berfungsi seperti bank dan dapat mengirim serta menerima uang dari seluruh dunia
    • Menangani dokumen pajak dengan semestinya
    • Prettier telah mengumpulkan total $110 ribu, dan mendistribusikan kembali $75 ribu di antaranya
    • Hadiah sayembara kali ini bersifat sekali saja, tetapi tujuannya adalah menyuntikkan energi ke ekosistem code formatting untuk menciptakan pengalaman developer yang lebih baik

1 komentar

 
GN⁺ 2023-11-28
Opini Hacker News
  • Saya penasaran mengapa tim Prettier mendanai proyek lain, tetapi jawabannya belum terasa cukup meyakinkan
    Mereka bisa saja memasang bounty untuk perbaikan Prettier; tidak jelas mengapa harus membuat proyek pesaing untuk menciptakan motivasi memperbaiki Prettier
    Saya juga penasaran apakah tujuan akhirnya adalah menghentikan Prettier dan memindahkannya ke tool berbasis Rust, dan ini terlihat seperti memecah ekosistem yang sudah membingungkan menjadi lebih terfragmentasi tanpa perlu

    • Sepertinya ada tiga alasan mengapa ini menjadi proyek terpisah, bukan bounty perbaikan Prettier
      Pertama, menulis formatter dengan Rust berbeda sifatnya dari memperbaiki codebase Prettier. Prettier tidak ditulis dalam Rust, dan karena Rust sudah terbukti sebagai pilihan yang solid untuk implementasi formatter, tujuannya sendiri lebih dekat ke menulis formatter Rust
      Kedua, meminta orang menulis formatter Rust milik Prettier dengan $20k tidak terlalu menarik. Bagi developer hebat, itu kira-kira setara 100 jam kerja sehingga tidak cukup untuk menyelesaikan proyek, tetapi jika imbalannya adalah proyek yang mereka miliki sendiri, itu jauh lebih menarik
      Ketiga, jika Prettier memiliki proyek pemenang, tanggung jawab pemeliharaan juga jatuh ke tim Prettier. Tim yang awalnya membuatnya akan berkurang insentifnya untuk terus memelihara, dan kompetisi pun hilang sehingga ekosistem menjadi kurang aktif
    • Dari sudut pandang maintainer open source, yang lebih penting adalah masalahnya terselesaikan, bukan semua orang memakai implementasi spesifik saya
      Tidak ada keuntungan langsung hanya karena seseorang memakai kode saya; saya bekerja untuk membuat solusi yang bisa diakses. Jika saya punya passion pada formatting kode JS, saya rasa saya akan cukup senang kalau seseorang memecahkan masalah itu dengan cara yang lebih cepat
    • Ada perbedaan besar antara “kami adalah pemain dominan yang sudah ada dan developer JavaScript tidak punya alternatif yang layak” dengan “pihak Rust berhasil melakukannya dan kini ada alternatif yang cukup viable”
      Ini terlihat lebih seperti masalah keluar dari optimum lokal. Kita bisa melihat bottleneck performa terbesar dan mengatakan itu bisa diperbaiki, tetapi tanpa pembanding yang secara objektif lebih baik, sulit untuk yakin
      Imitasi adalah bentuk pujian yang paling tulus, dan fakta bahwa masalah sulit yang sama bisa diselesaikan dalam bahasa lain juga menciptakan nilai melalui proses kompetisi
      Tanpa alternatif nyata, tidak ada kompetisi yang utuh. Jika implementasi Rust bisa lebih cepat meski hanya memangkas kurang dari 5% test suite, itu memberi tahu banyak hal tentang batas teoretis masalah ini dibandingkan implementasi standar
      Saya tidak terlalu mendalami area ini, tetapi saya rasa selalu ada nilai tak berwujud yang bisa didapat ketika ada implementasi serupa dalam bahasa lain
    • Jika orang-orang dengan perspektif dan niat berbeda mengimplementasikannya, arah perbaikan baru bisa terlihat
      https://biomejs.dev/formatter/#differences-with-prettier
      Biome tidak mengikuti keputusan yang sama seperti Prettier dan menemukan berbagai pain point yang bercabang, dan itu saja sudah cukup menunjukkan nilai pengembangan paralel
    • Pendekatan dengan batasan dan beban yang berbeda bisa menemukan area perbaikan yang tidak terlihat dalam proyek asli
      Mungkin karena tidak terjebak dalam apa yang disebut cara berpikir ala Prettier
  • Banyak orang menyebutkan alasannya, tetapi sepertinya tidak melihat bagian ini bersamaan: “Sambil menyesuaikan semua test, proyek Biome menemukan banyak bug dan keputusan meragukan di Prettier, sehingga hal itu bisa diperbaiki”
    Bagi saya, ini berarti mereka bisa melakukan sanity check terhadap implementasi sendiri melalui implementasi lain

  • Saya benar-benar antusias dengan kabar ini
    Tim Biome mencapai kompatibilitas 95% dengan Prettier dengan kecepatan yang mengejutkan https://github.com/biomejs/biome/issues/720
    Berkat Rust, kecepatan formatting JavaScript bisa ditingkatkan secara signifikan, mengikuti arus formatter Python ruff
    Meski tidak disebutkan di tulisan, Wasmer juga memasang bounty $2.500 untuk mengompilasi Biome ke WASIX, dan menyenangkan melihat tim itu mengerjakannya
    Saya berharap Biome segera berjalan di Wasmer: https://wasmer.io/, https://wasix.org/, https://console.algora.io/challenges/prettier

    • Saya baru pertama kali melihat WASIX, dan setelah membaca, itu terlihat seperti reinkarnasi JVM
      Saya penasaran apakah pemahaman ini benar. Jika bisa mengakses sistem dan bukan sandbox sungguhan, saya tidak tahu apa keuntungan menjalankan kode di WASIX
    • Saya penasaran apakah ada yang tahu alasan mengapa mereka ingin membuatnya bisa dikompilasi ke WASIX
  • Peningkatan kecepatan selalu disambut baik, tetapi saya berharap Prettier sedikit tidak terlalu dogmatis
    Terutama terkait panjang baris, ia tidak membiarkan pemformatan saya apa adanya. Kode yang diformat dengan Prettier jauh lebih sulit dibaca daripada kode yang tidak diformat, dan ini masalah yang tidak saya alami dengan formatter lain seperti rustfmt

    • Saya penasaran apakah ada contoh kode Prettier yang jauh lebih sulit dibaca
      Saya tidak terlalu mengalami masalah seperti itu dan selama ini cukup puas dengan Prettier
    • Saya penasaran apakah sudah mencoba opsi print width: https://prettier.io/docs/en/options.html#print-width
    • Masalah sebenarnya dengan Prettier adalah ia hampir menjadi standar de facto
      Secara pribadi saya sama sekali tidak suka Prettier, tetapi saya suka Svelte, dan setahu saya formatter resmi Svelte memakai Prettier. Jadi saya memakai Prettier untuk Svelte, dan juga untuk beberapa hal lain
      Jika pengguna berada dalam situasi bisa memilih alat, prinsip “sangat dogmatis, kalau mau konfigurasi silakan cari yang lain” bisa sangat bagus. Namun jika ia menjadi nyaris satu-satunya pilihan bagi kelompok pengguna tertentu, seharusnya ia sedikit lebih bisa dikonfigurasi
    • Terkait panjang baris, Prettier punya efek samping yang lebih halus, dan karena itu saya menghindari formatter yang dogmatis
      Prettier mengubah diff dengan cara yang tidak diinginkan
      Jika satu anggota dihapus dari destructuring assignment sehingga panjangnya turun di bawah batas panjang baris, diff bisa menjadi +1/-5, bukan 0/-1. Reviewer sulit langsung melihat persis apa yang hilang di antara 5 baris yang dihapus dan 1 baris yang ditambahkan
      Jika mencoba memperbaiki typo di commit sebelumnya dengan interactive rebase Git, Prettier bisa memformat ulang seluruh blok kode sehingga commit berikutnya mungkin tidak bisa diterapkan
      Setelah membuat Prettier berjalan sebagai pre-commit hook, coba stage hanya sebagian perubahan dalam file; akan muncul masalah menarik lain. Saya pilih tidak usah
    • Setuju. Lebih jauh lagi, saya bahkan ingin mengatakan akan lebih baik kalau Prettier tidak pernah ada sama sekali
  • Saya masih kesal karena beberapa plugin eslint menyingkirkan linter yang baik-baik saja dan menggantinya dengan Prettier
    Prettier terlalu memaksa, sulit diprediksi, dan menjadi satu alat tambahan yang tidak pernah saya inginkan

    • Aturan style yang sudah dihentikan dipindahkan ke proyek baru: https://eslint.style/guide/why
    • Tujuan alat seperti itu memang untuk mengakhiri perdebatan gaya
    • Saya kurang paham dalam situasi apa Prettier perlu “diprediksi”
      Yang terpikir hanya sesekali masalah konflik merge
  • Memang ada tren porting ke Rust, tetapi karena Prettier dijalankan setiap kali menyimpan, peningkatan kecepatan akan cukup besar
    Saya berencana segera mencoba Biome, dan selamat untuk proyek Biome

    • Saya belum pernah merasakan jeda saat Prettier berjalan pada satu file
      Performa menjadi penting ketika menjalankan formatting pada seluruh repository
      Untuk penggunaan interaktif, sebaiknya memakai proses yang tetap hidup dan sudah warm-up, sehingga waktu startup Node tidak penting. Idealnya, type checking, linting, highlighting, dan formatting berada dalam satu language service yang melakukan incremental parsing pada setiap ketikan dan memperbarui AST bersama
    • Pekerjaan ini mengingatkan saya pada antusiasme komunitas Python terhadap ruff
      Saya menantikan peningkatan efisiensi dan kecepatan yang berdampak luas
    • Saya menyarankan memakai alat lint-staged agar Prettier dijalankan hanya pada file yang berubah saat menyimpan, bukan semuanya
      Pada proyek besar, bedanya sangat besar
  • “Sekarang kita bisa fokus pada aspek penting berikutnya: performa. Prettier pada dasarnya tidak pernah cepat, tetapi cukup cepat untuk sebagian besar penggunaan. Hal ini selalu terasa kurang memuaskan, jadi saya ingin melakukan sesuatu. Apa cara yang lebih baik daripada kompetisi yang bersahabat. Pada 9 November, saya memasang hadiah $10k untuk proyek Rust yang bisa lolos 95% test suite Prettier”
    Saya tidak paham bagaimana fakta bahwa sesuatu ditulis dengan Rust otomatis menghasilkan performa lebih baik. Orang bisa saja sekadar men-transpile codebase yang ada ke Rust dan menerima hadiahnya

    • Kalau melihat kata “sekadar”, saya jadi berpikir hal berikutnya tidak akan sederhana
      Karena kalau benar-benar sederhana, tidak perlu diberi keterangan seperti itu
      Dalam kasus ini, saya tidak tahu apakah men-transpile codebase JavaScript ke Rust itu sederhana. Kedua bahasa punya model berpikir, library yang digunakan, dan cara menulis kode yang cukup berbeda, dan meskipun ada transpiler JS-to-Rust, saya ragu apakah cukup tangguh untuk dipakai pada codebase sebesar Prettier
    • Rust yang idiomatis sering kali 5–10 kali lebih cepat daripada kode JavaScript/TypeScript yang tampak serupa, bahkan tanpa optimisasi khusus
      Tergantung pekerjaannya dan tidak selalu begitu, tetapi parser yang banyak melakukan manipulasi string jelas termasuk contoh kasusnya
    • Dalam pemrosesan string, Rust jauh lebih cepat daripada JS
      https://benchmarksgame-team.pages.debian.net/benchmarksgame/performance/fasta.html
      https://benchmarksgame-team.pages.debian.net/benchmarksgame/performance/knucleotide.html
    • Jawaban yang saya dapat dari vjeux adalah: “Belakangan ada banyak tool web cepat yang ditulis dengan Rust”
      https://twitter.com/Vjeux/status/1722769322299609565
      Saya tidak yakin, dan sepertinya vjeux ikut-ikutan tren Rust
  • Proyek pemenang, Biome, adalah fork atau pergantian nama dari proyek Rome yang dimulai beberapa tahun lalu oleh Sebastian McKenzie, pembuat Babel
    Sepertinya sebmck absen selama sekitar setahun terakhir, dan karena banyak hak akses ke resource proyek hanya dimiliki olehnya sehingga kontributor tidak bisa memperbaruinya, proyek itu di-fork
    Saya berharap ia baik-baik saja, dan terlepas dari itu, saya senang proyek Biome tampaknya berjalan dengan baik

  • Saya tidak paham kenapa harus Rust
    Bukankah cukup kalau sekadar “lebih cepat”? Apakah implementasi Rust benar-benar cepat? Saya juga ragu apakah keamanan memori atau kebocoran memori benar-benar penting untuk program seperti Prettier

    • Khususnya di HN, ada banyak suara lantang dari orang-orang yang menganggap Rust sebagai bahasa paling cepat dan aman saat ini
      Jadi sampai taraf tertentu, ini mungkin semacam tantangan bounty: “kalau memang begitu, buktikan sendiri”
  • Saya penasaran apakah benchmark Biome ada di suatu tempat
    Tepatnya seberapa jauh performanya lebih baik daripada Prettier?

    • Saya menemukan sebagian di sini: https://github.com/biomejs/biome/blob/main/benchmark/README.md
      Mereka mengklaim 25x, tetapi angkanya sudah lama, jadi saya tidak tahu apakah masih bisa dipercaya apa adanya sekarang setelah banyak fitur ditambahkan. Meski begitu, kalau memang mendekati itu, ini pencapaian yang luar biasa