Kompilator C Pertama: Melihat Kode Warisan Dennis Ritchie yang Memicu Sebuah Industri

BigGo Editorial Team
Kompilator C Pertama: Melihat Kode Warisan Dennis Ritchie yang Memicu Sebuah Industri

Kompilator C asli, yang ditulis oleh Dennis Ritchie (dikenal sebagai dmr) pada awal tahun 1970-an, telah menjadi artefak sejarah yang menarik bagi para programmer dan ilmuwan komputer. Kode primordial ini, yang kini tersimpan dalam repositori legacy-cc, menawarkan sekilas tentang awal mula sederhana dari apa yang akhirnya berkembang menjadi industri bernilai triliunan dolar.

Kompilator yang Tidak Bisa Dikompilasi

Repositori ini berisi versi-versi awal kompilator C, yang berasal dari sekitar tahun 1972. Menariknya, file-file sumber ini tidak dapat dikompilasi dengan kompilator C modern seperti GCC. Kode sejarah ini mewakili fase transisi dalam pengembangan bahasa pemrograman, dengan beberapa komentator mencatat bahwa kompilator C pertama sebenarnya ditulis dalam bahasa B, dengan basis kode yang berkembang secara bertahap melalui perubahan iteratif hingga menjadi apa yang kita kenal sekarang sebagai C.

Mungkin salah satu perangkat lunak favorit saya sepanjang masa. Belajar banyak dari ini!

Sintaks dari Era Lain

Kode tersebut mengungkapkan perbedaan mencolok antara C awal dan versi modernnya. Salah satu komentator menyoroti penggunaan kata kunci yang tidak biasa seperti extern dan auto - istilah yang masih ada dalam C modern tetapi berfungsi berbeda saat ini. Dalam file-file awal ini, extern digunakan untuk membawa simbol global ke dalam cakupan fungsi, dan semuanya default ke tipe int tanpa deklarasi eksplisit. Deklarasi array terkadang menentukan ukuran sementara yang lain tidak, dengan array tanpa ukuran pada dasarnya berfungsi sebagai pointer.

Sintaks ini mewakili apa yang banyak disebut sebagai K&R C (Kernighan and Ritchie C), yang mendahului ANSI C/C89 terstandarisasi yang dikenal oleh kebanyakan programmer saat ini. Meskipun sudah tidak digunakan lagi selama beberapa dekade, gaya ini didukung oleh GCC dengan flag -traditional sampai relatif baru-baru ini.

Informasi Kunci Tentang legacy-cc

  • Penulis Asli: Dennis Ritchie (dmr)
  • Periode Waktu: Sekitar 1972
  • Perangkat Keras: Dikembangkan untuk PDP-11
  • Fitur Penting:
    • Deklarasi fungsi gaya K&R
    • Tipe "int" default
    • Teknik manajemen memori yang tidak biasa
    • Desain kompiler dua fase

Sumber Daya Berguna

Manajemen Memori Kreatif

Mungkin aspek paling menarik dari basis kode ini adalah fungsi bernama waste() yang telah memicu diskusi yang cukup banyak. Fungsi tersebut tampaknya sengaja mengkonsumsi ruang melalui panggilan diri sendiri secara rekursif:

waste()  /* waste space */
{
 waste(waste(waste),waste(waste),waste(waste));
 waste(waste(waste),waste(waste),waste(waste));
 ...
}

Sementara komentar singkatnya hanya menyatakan waste space, analisis komunitas menunjukkan bahwa ini sebenarnya adalah teknik cerdas untuk mencadangkan memori. Salah satu komentator menjelaskan bahwa kedua fase kompilator menggunakan pendekatan ini untuk memastikan region memori yang dicadangkan memiliki alamat yang sama di seluruh fase, memungkinkan pohon ekspresi dengan pointer untuk diteruskan antar fase secara efisien. Ini menunjukkan bagaimana keterbatasan perangkat keras pada era tersebut memaksa programmer untuk mengembangkan solusi kreatif yang mungkin tampak aneh menurut standar saat ini.

Dampak Historis

Signifikansi kode ini jauh melampaui keunikan teknisnya. Seperti yang dicatat oleh salah satu komentator, versi pertama Oracle Database yang tersedia untuk umum (v2, dirilis pada 1979) ditulis dalam bahasa assembly untuk PDP-11. Ketika Oracle kemudian menulis ulang versi 3 dalam C (1983) untuk portabilitas lintas platform, mereka menemukan bahwa mainframe tidak memiliki kompilator C. Alih-alih menulis ulang database mereka dalam COBOL atau bahasa mainframe lainnya, Oracle menciptakan kompilator C mereka sendiri untuk mainframe.

Pola ini berulang di seluruh industri, dengan C menjadi lingua franca pemrograman sistem dan memungkinkan portabilitas perangkat lunak di berbagai platform perangkat keras. Sistem operasi UNIX sendiri, yang awalnya dikembangkan bersama dengan C, diporting ke mainframe IBM System/370 pada tahun 1980.

Refleksi tentang Kesederhanaan dan Kompleksitas

Repositori ini telah memicu diskusi mendalam tentang sifat C. Meskipun banyak programmer menghargai C karena kesederhanaannya yang tampak jelas, beberapa komentator mencatat bahwa kesederhanaan ini agak ilusi. Bahasa tersebut mungkin kecil dan dekat dengan perangkat keras, tetapi mengandung kompleksitas semantik yang signifikan melalui konversi tipe implisit, aturan aliasing, dan persyaratan manajemen memori.

Seperti yang diungkapkan dengan baik oleh salah satu komentator, C itu kecil, tapi tidak sederhana. Kesederhanaan yang dirasakan berasal dari memaksa program untuk tetap sederhana dengan membatasi abstraksi yang kuat, bukan dari bahasa itu sendiri yang mudah diimplementasikan atau dipahami sepenuhnya.

Melihat kode sejarah ini memberikan perspektif berharga tentang seberapa jauh komputasi telah berkembang sambil mengingatkan kita bahwa bahkan sistem modern yang paling canggih pun menelusuri garis keturunannya kembali ke awal yang sederhana ini. Repositori legacy-cc berdiri sebagai bukti bagaimana sebuah perangkat lunak yang relatif kecil, diciptakan oleh satu pikiran brilian, dapat meletakkan dasar bagi kemajuan teknologi selama beberapa dekade.

Referensi: legacy-cc