Tiền thưởng 20.000 USD của Prettier đã được Biome nhận
(prettier.io)- Trình định dạng mã JavaScript Prettier cho rằng khi logic định dạng đã gần đạt tới mức ổn định, họ có thể thúc đẩy cạnh tranh về hiệu năng thông qua một bản triển khai tương thích dựa trên Rust
- Ngày 9 tháng 11, Prettier treo thưởng 10.000 USD với điều kiện vượt qua 95% bộ test, và nhờ có thêm đóng góp từ CEO Vercel Guillermo Rauch cùng napi.rs, tổng số tiền đã lên tới 22.500 USD
- Biome đã nhận tiền thưởng sau khoảng 3 tuần nhiều người cùng nâng mức tương thích, và trong quá trình đó phạm vi tương thích thực tế với Prettier cũng nhanh chóng được mở rộng
- Trong quá trình khớp các bài test, nhiều lỗi và quyết định đáng nghi của Prettier cũng bị phát hiện, nhờ đó phía Prettier có thêm căn cứ cụ thể để cải thiện
- Prettier trước nay duy trì việc trả 1.500 USD mỗi tháng cho 2 maintainer từ tiền quyên góp, nhưng hiện ngân sách chỉ còn runway 8 tháng, nên đang cần thêm tài trợ
Biome nhận tiền thưởng của Prettier
- Prettier là một trình định dạng mã JavaScript được dùng rộng rãi nhờ xử lý cẩn thận rất nhiều cách viết mã khác nhau của người dùng
- Logic định dạng đã ở trạng thái vững chắc, và họ cho rằng khi phần ternaries được phản ánh đầy đủ thì sẽ đạt tới một giai đoạn thỏa đáng
- Nhiệm vụ tiếp theo là cải thiện hiệu năng
- Prettier vốn không phải là công cụ quá nhanh, nhưng vẫn đủ nhanh cho hầu hết các trường hợp sử dụng
- Để không dậm chân tại chỗ, họ thúc đẩy cải thiện theo cách cạnh tranh thân thiện
-
Điều kiện tiền thưởng và người tham gia
- Ngày 9 tháng 11, họ đưa ra $10k bounty cho dự án viết bằng Rust nếu dự án đó vượt qua 95% bộ test của Prettier
- Guillermo Rauch, CEO của Vercel, đóng góp thêm cùng số tiền đó, nâng tổng lên 20.000 USD
- napi.rs bổ sung thêm 2.500 USD
- Phía Algora đã tạo một landing page cho chương trình tiền thưởng
-
Kết quả đạt được của Biome
- Dự án Biome đã nhận được tiền thưởng
- Trong khoảng 3 tuần, khoảng 12 người đã cùng tham gia cải thiện mức độ tương thích
- Chi tiết có trong full report của Biome
- Trong quá trình khớp các bài test, nhiều bugs and questionable decisions của Prettier cũng được phát hiện, và Prettier nhờ đó có thể cải thiện
Áp lực do cạnh tranh hiệu năng tạo ra
- Lý do nhóm Prettier treo tiền cho dự án khác là để tạo ra cạnh tranh về hiệu năng
- Prettier từng giữ vị thế áp đảo trong lĩnh vực trình định dạng mã JavaScript
- Do thiếu cạnh tranh, động lực cải thiện hiệu năng và sửa nhiều edge case là không lớn
- Giờ đây Biome đã có một bản triển khai vừa tương thích với Prettier vừa nhanh hơn nhiều, và người dùng có thể chuyển sang dùng
- Fabio Spampinato nhân dịp thử thách này đã profile Prettier CLI một cách nghiêm túc và phát hiện nhiều điểm kém hiệu quả cực đoan
- Các vấn đề đó dự kiến sẽ được sửa trước cuối năm
Tiền quyên góp và ngân sách bảo trì của Prettier
- Tiền thưởng của Prettier và hoạt động vận hành liên tục của dự án có thể thực hiện được nhờ những khoản tài trợ lớn từ nhiều cá nhân và công ty
-
Các khoản tài trợ chính từ doanh nghiệp
- Indeed: 20.000 USD
- Frontend Masters: 10.850 USD
- Sentry: 10.529 USD
- Salesforce: 10.025 USD
- Airbnb: 8.426 USD
- Cybozu: 6.086 USD
-
Các khoản tài trợ chính từ cá nhân
- Shintaro Kaneko: 1.635 USD
- Suhail Doshi: 1.000 USD
- icchiman: 500 USD
- Mariusz Nowak: 270 USD
- Benoît Burgener: 270 USD
- Jeremy Combs: 270 USD
- f_subal: 230 USD
- Nhờ các khoản tài trợ này, trong 2 năm qua Prettier đã trả 1.500 USD mỗi tháng cho hai người để tiếp tục phát hành các bản release
- Fisker Cheung và Sosuke Suzuki đảm nhiệm vai trò này
- Với ngân sách hiện tại, dự án chỉ còn runway 8 tháng, nên đang cần thêm tài trợ
- Nếu bạn đã dùng Prettier và nhận được lợi ích từ nó, bạn có thể quyên góp tại https://opencollective.com/prettier
- Open Collective hỗ trợ rất nhiều cho việc vận hành dự án
- Maintainer có thể đăng ký mà không cần cung cấp thông tin cá nhân
- Nó hoạt động như một ngân hàng và có thể nhận, gửi tiền trên toàn thế giới
- Tài liệu thuế được xử lý phù hợp
- Prettier đã huy động tổng cộng 110.000 USD và đã phân bổ lại 75.000 USD
- Khoản tiền thưởng lần này chỉ là một lần, nhưng mục tiêu là tiếp thêm năng lượng cho hệ sinh thái định dạng mã để tạo ra trải nghiệm lập trình viên tốt hơn
1 bình luận
Các ý kiến trên Hacker News
Tôi cũng tò mò vì sao nhóm Prettier lại tài trợ cho một dự án khác, nhưng câu trả lời chưa thật sự thuyết phục
Lẽ ra chỉ cần treo tiền thưởng cho việc cải thiện Prettier; không rõ vì sao lại tạo ra một dự án cạnh tranh để tạo động lực cải thiện Prettier
Tôi cũng thắc mắc liệu mục tiêu cuối cùng có phải là đóng Prettier và chuyển sang công cụ dựa trên Rust hay không; trông như đang làm một hệ sinh thái vốn đã rối lại bị chia nhỏ thêm một cách không cần thiết
Thứ nhất, viết formatter bằng Rust có bản chất khác với cải thiện codebase của Prettier. Prettier không được viết bằng Rust, và Rust đã được chứng minh là một lựa chọn vững chắc để triển khai formatter, nên mục tiêu tự thân gần với việc viết một formatter bằng Rust hơn
Thứ hai, $20k để viết một formatter Rust thuộc sở hữu của Prettier thì không hấp dẫn. Với một lập trình viên giỏi, số tiền đó chỉ tương đương khoảng 100 giờ làm việc, không đủ để hoàn thành dự án; nhưng nếu phần thưởng là một dự án do chính họ sở hữu thì hấp dẫn hơn nhiều
Thứ ba, nếu Prettier sở hữu dự án thắng cuộc, trách nhiệm bảo trì cũng sẽ thuộc về nhóm Prettier. Nhóm tạo ra ban đầu sẽ ít có động lực tiếp tục duy trì, cạnh tranh cũng biến mất, khiến hệ sinh thái kém sôi động hơn
Việc ai đó dùng mã của tôi cũng không trực tiếp mang lại lợi ích gì; tôi làm việc để tạo ra một giải pháp có thể tiếp cận được. Nếu tôi có đam mê với việc định dạng mã JS, thì có lẽ tôi sẽ khá vui khi ai đó giải quyết vấn đề đó theo cách nhanh hơn
Việc này trông giống vấn đề thoát khỏi điểm tối ưu cục bộ. Bạn có thể nhìn vào nút thắt hiệu năng lớn nhất và nói rằng có thể cải thiện, nhưng nếu không có đối tượng so sánh khách quan tốt hơn thì rất khó chắc chắn
Bắt chước là lời khen chân thành nhất, và bản thân việc chứng minh rằng một vấn đề khó cũng có thể được giải bằng ngôn ngữ khác đã tạo ra giá trị trong quá trình cạnh tranh
Nếu không có lựa chọn thay thế thực sự thì cũng không có cạnh tranh trọn vẹn. Nếu một triển khai Rust chỉ bỏ qua dưới 5% test suite mà vẫn nhanh hơn, thì khi so với triển khai chuẩn, nó cho ta biết rất nhiều về giới hạn lý thuyết của vấn đề này
Tôi không hiểu sâu lĩnh vực này, nhưng tôi cho rằng luôn có giá trị vô hình khi có một triển khai tương tự bằng ngôn ngữ khác
https://biomejs.dev/formatter/#differences-with-prettier
Biome không đi theo các quyết định giống Prettier mà đã tìm ra nhiều điểm bất tiện nơi họ tách hướng, và chỉ riêng điều đó đã đủ cho thấy giá trị của phát triển song song
Có thể vì nó không bị mắc kẹt trong cái gọi là lối tư duy kiểu Prettier
Có vẻ nhiều người nêu lý do nhưng lại không xem xét phần này: “Trong khi khớp tất cả các bài test, dự án Biome đã phát hiện nhiều lỗi và quyết định đáng ngờ của Prettier, nhờ đó có thể cải thiện chúng”
Với tôi, điều đó có nghĩa là nhờ một triển khai khác, họ có thể sanity check triển khai của chính mình
Tôi thật sự rất háo hức trước tin này
Tốc độ nhóm Biome đạt 95% tương thích với Prettier nhanh đến đáng kinh ngạc https://github.com/biomejs/biome/issues/720
Nhờ Rust, có thể tăng đáng kể tốc độ định dạng JavaScript, tương tự xu hướng của Python formatter
ruffBài viết không nhắc đến, nhưng Wasmer cũng treo tiền thưởng $2.500 cho việc biên dịch Biome sang WASIX, và thật thú vị khi thấy nhóm đó làm việc cho mục tiêu này
Hy vọng Biome sẽ sớm chạy được trên Wasmer: https://wasmer.io/, https://wasix.org/, https://console.algora.io/challenges/prettier
Tôi tự hỏi liệu cách hiểu này có đúng không. Nếu nó có thể truy cập hệ thống và không phải một sandbox thực sự, tôi không hiểu lợi ích của việc chạy mã trên WASIX là gì
Cải thiện tốc độ thì lúc nào cũng đáng hoan nghênh, nhưng ước gì Prettier bớt áp đặt hơn một chút
Đặc biệt là liên quan đến độ dài dòng, nó không chịu để yên định dạng của tôi. Code được định dạng bằng Prettier khó đọc hơn nhiều so với code chưa định dạng, và đây là vấn đề tôi không gặp ở các formatter khác như
rustfmtTôi không gặp vấn đề đó mấy và khá hài lòng với Prettier
print widthchưa: https://prettier.io/docs/en/options.html#print-widthCá nhân tôi hoàn toàn không thích Prettier nhưng lại thích Svelte, và formatter chính thức của Svelte, theo tôi biết, dùng Prettier. Vì vậy tôi dùng Prettier cho Svelte, và một vài thứ khác cũng vậy
Nếu là tình huống người dùng được chọn công cụ, nguyên tắc “rất áp đặt, nếu muốn cấu hình thì đi chỗ khác” có thể rất tuyệt. Nhưng khi nó trở thành lựa chọn gần như duy nhất đối với một nhóm người dùng nhất định, nó nên cho phép cấu hình nhiều hơn một chút
Prettier thay đổi diff theo những cách không mong muốn
Nếu bạn xóa một thành viên trong destructuring assignment và làm dòng ngắn xuống dưới giới hạn độ dài, diff có thể không phải
0/-1mà là+1/-5. Reviewer khó nhìn ngay ra chính xác thứ gì đã bị bỏ đi giữa 5 dòng bị xóa và 1 dòng được thêmNếu bạn cố sửa một lỗi chính tả trong commit trước đó bằng interactive rebase của Git, Prettier có thể định dạng lại cả khối code khiến các commit tiếp theo không áp dụng được
Sau khi cấu hình pre-commit hook để chạy Prettier, hãy thử chỉ stage một phần thay đổi trong file xem, sẽ lại có những vấn đề thú vị. Tôi xin kiếu
Tôi vẫn bực vì nhiều plugin eslint đã loại bỏ các linter đang hoạt động ổn và thay bằng Prettier
Prettier quá cưỡng ép, khó suy luận, và là thêm một công cụ nữa mà tôi chưa từng muốn có
Tôi chỉ nghĩ đến việc thỉnh thoảng có vấn đề merge conflict
Đúng là có xu hướng port sang Rust, nhưng vì Prettier chạy mỗi lần lưu nên cải thiện tốc độ sẽ khá đáng kể
Tôi sẽ sớm thử Biome, và xin chúc mừng dự án Biome
Hiệu năng chỉ trở nên quan trọng khi chạy format trên toàn bộ repository
Với sử dụng tương tác, nên dùng một process chạy lâu và đã được warm-up, khi đó thời gian khởi động Node không còn quan trọng. Lý tưởng nhất là type checking, linting, highlighting và formatting nằm trong cùng một language service, thực hiện parsing gia tăng theo từng phím gõ và cập nhật AST dùng chung
rufftrong cộng đồng PythonTôi kỳ vọng các cải thiện về hiệu quả và tốc độ có tác động rộng
lint-stagedđể Prettier chỉ chạy trên các file đã thay đổi mỗi lần lưu, chứ không chạy toàn bộTrong các dự án lớn, khác biệt là rất lớn
“Giờ đây chúng ta có thể tập trung vào khía cạnh quan trọng tiếp theo: hiệu năng. Prettier vốn dĩ chưa bao giờ thật sự nhanh, nhưng đủ nhanh cho hầu hết mục đích sử dụng. Điều này luôn khiến tôi không hài lòng, nên tôi muốn làm gì đó. Còn cách nào tốt hơn cạnh tranh thân thiện? Ngày 9 tháng 11, tôi treo tiền thưởng $10k cho một dự án Rust vượt qua 95% test suite của Prettier”
Tôi không hiểu việc một thứ được viết bằng Rust thì hiệu năng tốt hơn tự động suy ra như thế nào. Hoàn toàn có thể chỉ cần transpile codebase hiện tại sang Rust rồi nhận thưởng
Vì nếu thật sự đơn giản thì chẳng cần phải thêm từ bổ nghĩa đó
Trong trường hợp này, tôi không rõ transpile một codebase JavaScript sang Rust có đơn giản không. Hai ngôn ngữ có mô hình tư duy, thư viện sử dụng và cách viết code khá khác nhau, và dù có JS-to-Rust transpiler tồn tại, tôi nghi ngờ liệu nó có đủ vững chắc để dùng cho một codebase cỡ Prettier không
Còn tùy tác vụ và không phải lúc nào cũng vậy, nhưng các loại parser xử lý nhiều thao tác chuỗi chắc chắn thuộc nhóm này
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
Tôi không thấy thuyết phục, và có vẻ vjeux đã chạy theo trào lưu Rust
Dự án chiến thắng, Biome, là một fork hoặc bản đổi tên của dự án Rome do Sebastian McKenzie, tác giả Babel, khởi xướng vài năm trước
Có vẻ sebmck đã vắng mặt khoảng một năm qua, và vì nhiều quyền truy cập tài nguyên của dự án chỉ do anh ấy nắm giữ nên các contributor không thể cập nhật, dẫn đến việc fork
Mong anh ấy vẫn ổn, và ngoài chuyện đó ra, tôi mừng vì dự án Biome có vẻ đang tiến triển tốt
Không rõ vì sao nhất thiết phải là Rust
Chỉ cần “nhanh hơn” thôi không được sao? Bản triển khai bằng Rust có thực sự nhanh không? Tôi cũng nghi ngờ liệu những thứ như an toàn bộ nhớ hay rò rỉ có thật sự quan trọng đối với một chương trình như Prettier hay không
Vì vậy ở một mức độ nào đó, đây có thể là một thử thách treo thưởng kiểu “nếu đã nói vậy thì hãy tự chứng minh đi”
Tôi tò mò không biết benchmark của Biome có ở đâu không
Chính xác thì hiệu năng tốt hơn Prettier bao nhiêu?
Họ tuyên bố là 25 lần, nhưng số liệu đã cũ, nên không biết hiện tại khi đã bổ sung nhiều tính năng thì có còn tin nguyên như vậy được không. Dù vậy, nếu vẫn ở gần mức đó thì đó là một thành tựu rất lớn