Pengkompil C asal, yang ditulis oleh Dennis Ritchie (dikenali sebagai dmr) pada awal 1970-an, telah menjadi artifak sejarah yang menarik bagi pengaturcara dan saintis komputer. Kod purba ini, yang kini dipelihara dalam repositori legacy-cc, menawarkan gambaran tentang permulaan sederhana yang akhirnya berkembang menjadi industri bernilai trilion dolar.
Pengkompil Yang Tidak Boleh Dikompil
Repositori ini mengandungi versi terawal pengkompil C, yang bertarikh sekitar tahun 1972. Menariknya, fail sumber ini tidak dapat dikompil dengan pengkompil C moden seperti GCC. Kod sejarah ini mewakili fasa peralihan dalam pembangunan bahasa pengaturcaraan, dengan beberapa pengulas menyatakan bahawa pengkompil C pertama sebenarnya ditulis dalam B, dengan pangkalan kod berkembang secara beransur-ansur melalui perubahan berulang sehingga ia menjadi apa yang kita kenali sekarang sebagai C.
Mungkin salah satu perisian kegemaran saya sepanjang masa. Banyak yang saya pelajari dari ini!
Sintaks Dari Era Lain
Kod ini mendedahkan perbezaan ketara antara C awal dan versi moden. Seorang pengulas menyoroti penggunaan kata kunci yang luar biasa seperti extern dan auto - istilah yang masih wujud dalam C moden tetapi berfungsi secara berbeza hari ini. Dalam fail-fail awal ini, extern digunakan untuk membawa simbol global ke dalam skop fungsi, dan semuanya mempunyai nilai lalai kepada jenis int tanpa pengisytiharan eksplisit. Pengisytiharan tatasusunan kadangkala menetapkan saiz manakala yang lain tidak, dengan tatasusunan tanpa saiz berfungsi pada asasnya sebagai penuding.
Sintaks ini mewakili apa yang ramai rujuk sebagai K&R C (Kernighan and Ritchie C), yang mendahului C piawai ANSI C/C89 yang kebanyakan pengaturcara kenali hari ini. Walaupun telah usang sejak beberapa dekad lalu, gaya ini disokong oleh GCC dengan bendera -traditional sehingga baru-baru ini.
Maklumat Utama Tentang legacy-cc
- Penulis Asal: Dennis Ritchie (dmr)
- Tempoh Masa: Sekitar 1972
- Perkakasan: Dibangunkan untuk PDP-11
- Ciri-ciri Penting:
- Pengisytiharan fungsi gaya K&R
- Jenis "int" lalai
- Teknik pengurusan memori yang luar biasa
- Reka bentuk pengkompil dua fasa
Sumber Berguna
- Emulator PDP-11: http://pdp11.aiju.de/
- Repositori Research Unix: https://www.tuhs.org/Archive/Distributions/Research/
- Sumber Asal: https://www.bell-labs.com/usr/dmr/www/primevalC.html
Pengurusan Memori Kreatif
Mungkin aspek paling menarik dari pangkalan kod ini adalah fungsi yang dipanggil waste() yang telah mencetuskan perbincangan yang banyak. Fungsi ini kelihatan sengaja menggunakan ruang melalui panggilan kendiri secara rekursif:
waste() /* waste space */
{
waste(waste(waste),waste(waste),waste(waste));
waste(waste(waste),waste(waste),waste(waste));
...
}
Walaupun komen ringkas hanya menyatakan waste space, analisis komuniti mencadangkan ini sebenarnya adalah teknik bijak untuk menempah memori. Seorang pengulas menjelaskan bahawa kedua-dua fasa pengkompil menggunakan pendekatan ini untuk memastikan kawasan memori yang ditempah mempunyai alamat yang sama merentasi fasa, membolehkan pokok ungkapan dengan penuding dihantar antara fasa dengan cekap. Ini menunjukkan bagaimana keterbatasan perkakasan pada era tersebut memaksa pengaturcara untuk membangunkan penyelesaian kreatif yang mungkin kelihatan pelik mengikut standard hari ini.
Impak Sejarah
Kepentingan kod ini melangkaui keunikan teknikalnya. Seperti yang dinyatakan oleh seorang pengulas, versi pertama Oracle Database yang tersedia kepada umum (v2, dikeluarkan pada 1979) ditulis dalam bahasa himpunan untuk PDP-11. Apabila Oracle kemudiannya menulis semula versi 3 dalam C (1983) untuk kebolehgunaan merentas platform, mereka mendapati bahawa komputer kerangka utama tidak mempunyai pengkompil C. Bukannya menulis semula pangkalan data mereka dalam COBOL atau bahasa kerangka utama yang lain, Oracle mencipta pengkompil C mereka sendiri untuk kerangka utama.
Corak ini berulang di seluruh industri, dengan C menjadi lingua franca pengaturcaraan sistem dan membolehkan kebolehgunaan perisian merentasi pelbagai platform perkakasan. Sistem operasi UNIX sendiri, yang pada asalnya dibangunkan bersama C, telah diportkan ke kerangka utama IBM System/370 menjelang 1980.
Renungan tentang Kesederhanaan dan Kerumitan
Repositori ini telah mencetuskan perbincangan mendalam tentang sifat C. Walaupun ramai pengaturcara menghargai C kerana kesederhanaannya yang jelas, beberapa pengulas menyatakan bahawa kesederhanaan ini agak ilusi. Bahasa ini mungkin kecil dan dekat dengan perkakasan, tetapi ia mengandungi kerumitan semantik yang ketara melalui penukaran jenis tersirat, peraturan aliasing, dan keperluan pengurusan memori.
Seperti yang dinyatakan oleh seorang pengulas dengan fasih, C adalah kecil, tetapi tidak mudah. Kesederhanaan yang dirasakan datang dari memaksa program untuk kekal mudah dengan mengehadkan abstraksi yang berkuasa, bukan dari bahasa itu sendiri yang mudah untuk dilaksanakan atau difahami sepenuhnya.
Melihat kod sejarah ini memberikan perspektif berharga tentang sejauh mana pengkomputeran telah berkembang sambil mengingatkan kita bahawa bahkan sistem moden yang paling canggih dapat mengesan keturunan mereka kembali kepada permulaan yang sederhana ini. Repositori legacy-cc berdiri sebagai bukti bagaimana sekeping perisian yang relatif kecil, yang dicipta oleh satu minda cemerlang, boleh menetapkan asas untuk kemajuan teknologi selama beberapa dekad.
Rujukan: legacy-cc