1 poin oleh GN⁺ 2024-11-28 | 1 komentar | Bagikan ke WhatsApp
  • Pemanfaatan C-Reduce

    • C-Reduce adalah alat yang dikembangkan oleh Regehr dan rekan-rekannya, digunakan untuk meminimalkan reproducer bug kompiler C.
    • Misalnya, alat ini berguna saat ingin mengecilkan file C 10.000 baris yang memicu bug Clang.
    • C-Reduce tidak terbatas pada bahasa C saja dan dapat diterapkan pada berbagai bahasa.
  • Persyaratan C-Reduce

    • Diperlukan kondisi yang deterministik.
    • Reproducer yang cepat membantu mempercepat proses reduksi.
    • Diperlukan satu atau lebih file sumber yang dapat diubah dan bisa diperkecil oleh C-Reduce.
  • Kasus bug RustPython

    • Untuk melaporkan bug yang terjadi di RustPython, dibuat skrip interesting.sh.
    • Skrip tersebut menjalankan RustPython lalu mencari pesan galat tertentu dengan grep.
  • Menjalankan C-Reduce

    • Dengan menjalankan C-Reduce, berhasil mengurangi ukuran file lebih dari 50%.
    • Opsi --not-c digunakan untuk menghindari pass yang khusus untuk C dan mengoptimalkannya untuk Python.
    • Hasilnya, file dapat diperkecil dengan cepat dan mudah.
  • Kesimpulan

    • C-Reduce dapat diterapkan pada berbagai bahasa dan berguna untuk memperkecil file dengan cepat dan efisien.
    • Ini adalah blog open source; jika ada kesalahan, perubahan dapat diusulkan.

1 komentar

 
GN⁺ 2024-11-28
Komentar Hacker News
  • Seorang pengguna membagikan cara mereduksi file, dan menjelaskan cara menyiapkannya menggunakan RustPython dan scrapscript

    • Meng-clone RustPython dan scrapscript menggunakan perintah git clone, lalu membangunnya dengan cargo build --release
    • Mengunduh file interesting.sh dan memberikan izin eksekusi
    • Mereduksi file menggunakan perintah nix run nixpkgs#creduce
  • Merekomendasikan penggunaan C-Reduce, dan menyarankan untuk turut mencoba alat bernama Shrinkray

    • Shrinkray bersifat independen terhadap format dan tetap berguna bahkan ketika C-Reduce tidak bekerja dengan baik
  • Menyebutkan bahwa makalah tentang C-Reduce dipublikasikan pada 2012

    • Menjelaskan cara kerja C-Reduce melalui makalah oleh John Regehr dkk.
  • Baru mengetahui C-Reduce untuk pertama kalinya, dan merasakan ketertarikan yang sama seperti saat pertama kali menemukan git bisect

    • Memutuskan untuk mengingatnya agar bisa digunakan saat diperlukan nanti
  • Menemukan artikel yang menunjukkan contoh C-Reduce, tetapi sulit memahami bagaimana ia menentukan apa yang harus dihapus pada setiap iterasi

    • Menduga ada proses tokenisasi, tetapi sulit memahami bagaimana itu bekerja lintas bahasa pemrograman
  • Menilai C-Reduce sangat berguna

    • Menggunakan CSmith untuk menghasilkan program uji acak, dan saat terjadi crash, otomatis memakai C-Reduce untuk mereduksi masalahnya
  • Delta debugging bukanlah konsep baru

    • Implementasi delta debugging bernama "delta" sudah ada lebih dari 19 tahun dan dirilis sebagai open source
    • Dalam pengantar LLVM, alat itu disebut sebagai alat delta debugging standar
  • Juga bekerja dengan baik pada SQL, dan sedang digunakan di tempat kerja

    • Mengetahuinya melalui SQLancer
  • Sulit mempercayainya jika tidak ada penjelasan mengapa ini bekerja juga pada bahasa selain C

    • Karena tidak menggunakan LLM, hal itu terasa makin membingungkan
  • Merekomendasikan cvise sebagai penerus C-Reduce yang baik

    • Sudah beberapa kali menggunakannya untuk mereduksi program assembly menjadi himpunan minimal, dan ini adalah program yang sangat berguna