Sebuah catatan blog baru-baru ini telah mencetuskan semula perbincangan yang penuh semangat mengenai salah satu masalah pengaturcaraan yang paling berterusan: perdebatan pemformatan kod. Penulis mengimbas kembali bagaimana guru sains komputer mereka menyebut bahawa isu ini sebenarnya telah diselesaikan beberapa dekad yang lalu menggunakan sistem yang dipanggil DIANA , yang menyimpan kod sebagai perwakilan perantaraan dan bukannya teks biasa.
Respons komuniti pengaturcaraan mendedahkan perpecahan yang mendalam tentang sama ada mengejar penyelesaian sedemikian berbaloi atau hanya mencipta lebih banyak masalah daripada yang diselesaikan.
Ciri-ciri Sistem DIANA (1980an)
- Menyimpan kod sebagai perwakilan perantaraan dan bukannya teks biasa
- Membolehkan keutamaan pemformatan peribadi untuk setiap pembangun
- Menyokong kompilasi bertambah dan pemfaktoran semula yang pantas
- Digunakan dalam stesen kerja Rational R1000 untuk pembangunan Ada
- Membenarkan penyuntingan AST secara langsung (penyuntingan unjuran)
Kelebihan Teks Biasa Kekal Raja
Ramai pembangun berhujah bahawa beralih daripada teks biasa akan memecahkan alat asas yang membuatkan pembangunan perisian moden berfungsi. Falsafah Unix mengenai alat berasaskan teks yang boleh digabungkan seperti grep, diff, dan sed telah terbukti sangat tahan lama. Alat-alat ini berfungsi merentasi setiap platform dan bahasa pengaturcaraan, mencipta asas universal yang dipercayai oleh pembangun setiap hari.
Kebimbangan adalah bahawa format khusus akan mengunci pasukan kepada IDE atau rantaian alat tertentu, mengurangkan fleksibiliti dan menjadikan tugas mudah lebih kompleks. Seorang pembangun menunjukkan bahawa walaupun anda boleh mencari perwakilan perantaraan, anda perlu menjalankan pemformat secara terbalik hanya untuk mengetahui apa yang hendak dicari, yang mengalahkan tujuan sepenuhnya.
Hujah Menentang Penyimpanan Kod Berasaskan IR
- Merosakkan keserasian dengan alat universal Unix (grep, diff, sed)
- Memerlukan perkakas khusus dan terikat kepada IDE
- Menambah kerumitan untuk faedah yang minimum
- Kawalan versi dan pengurusan tampung menjadi lebih sukar
- Teks biasa kekal sebagai format yang paling mudah alih dan boleh diakses
Masalah Bikeshedding Berterusan
Walaupun terdapat cabaran teknikal, kekecewaan dengan perdebatan pemformatan tetap nyata. Komuniti secara meluas mengakui bahawa berhujah tentang gaya kod selalunya merupakan bikeshedding yang tidak produktif - memfokuskan pada butiran remeh sambil mengabaikan kerja yang lebih penting.
Saya terlalu sibuk melakukan kejuruteraan perisian sebenar untuk mengambil berat tentang di mana sebenarnya segala-galanya diletakkan - saya berjanji selepas seminggu anda akan terbiasa dengan apa jua format yang dipilih oleh pasukan anda.
Bahasa moden seperti Go telah cuba menyelesaikan ini dengan membuat keputusan pemformatan pada peringkat sintaks dan menyediakan pemformat yang berpendirian seperti gofmt. Walaupun tidak semua orang menyukai pilihan khusus tersebut, kebanyakan pembangun menghargai keputusan yang dibuat untuk mereka.
Penyelesaian Pemformatan Kod Moden
- Go: gofmt menyediakan pemformatan universal yang berpendirian
- Python: Pemformat Black menghapuskan kebanyakan pilihan pemformatan
- JavaScript: Konfigurasi Prettier dan ESLint menstandardkan gaya
- Unison: Menyimpan hanya AST, serupa dengan pendekatan DIANA
- Chrome DevTools: Pemperindahan kod yang diminifikasi secara atas permintaan
Kebimbangan Kebolehcapaian dan Tipografi
Perbincangan ini bukan semata-mata tentang keutamaan peribadi. Sesetengah pembangun menimbulkan kebimbangan kebolehcapaian, menyatakan bahawa pilihan pemformatan tertentu boleh benar-benar memberi kesan kepada kebolehbacaan untuk orang yang mempunyai keperluan berbeza. Yang lain berhujah bahawa pemformatan kod mempunyai tujuan tipografi, membantu menyampaikan makna dan struktur yang mungkin terlepas oleh alat automatik.
Ini menambah kerumitan kepada idea bahawa semua pemformatan hanyalah keutamaan subjektif yang boleh diabstrakkan.
Eksperimen Moden dan Penyelesaian Separa
Beberapa pembangun menyebut bahawa kepingan visi ini sudah wujud. Chrome DevTools boleh mempercantikkan JavaScript yang diminifikasi atas permintaan. Sesetengah pasukan menggunakan Git hooks untuk menggunakan peraturan pemformatan yang berbeza secara tempatan berbanding dari jauh. Bahasa pengaturcaraan Unison sebenarnya hanya menyimpan pokok sintaks abstrak, serupa dengan pendekatan DIANA .
Walau bagaimanapun, ini kekal sebagai penyelesaian niche dan bukannya penggunaan arus perdana, menunjukkan halangan praktikal kekal ketara.
Perdebatan ini menyerlahkan ketegangan asas dalam pembangunan perisian antara keanggunan penyelesaian teori dan realiti yang berselerak dalam bekerja dengan alat dan aliran kerja sedia ada. Walaupun sistem DIANA 1980an menyelesaikan peperangan pemformatan untuk penggunanya, evolusi bergantung-laluan alat pembangunan moden menjadikan pendekatan serupa mencabar untuk dilaksanakan hari ini.
Nota: DIANA (Descriptive Intermediate Attributed Notation for Ada) adalah perwakilan perantaraan berstruktur pokok yang digunakan dalam persekitaran pembangunan Ada , terutamanya sistem Rational R1000 .