Level tinggi vs level rendah bukanlah hal hitam-putih, tetapi skala berkelanjutan. Istilah ini digunakan untuk menggambarkan seberapa dekat bahasa pemrograman dengan perangkat keras; semakin tinggi levelnya, semakin abstrak perangkat kerasnya.
Level terendah, jelasnya, adalah kode mesin biner - ini adalah representasi yang tepat dari beban OS dan feed ke CPU. Majelis adalah tingkat pertama dari abstraksi yang dibangun di atasnya: alih-alih kode biner, seseorang menulis mnemoik, kode simbolik yang dapat dibaca manusia yang mewakili instruksi mesin biner. Inilah yang digunakan orang untuk pemrograman sistem sebelum UNIX.
C adalah langkah selanjutnya dalam rantai abstraksi, menggabungkan pola-pola umum ke dalam konstruksi kontrol aliran dan mengabstraksi instruksi spesifik-mesin ke dalam sintaksis platform-agnostik, dan abstraksi terakhir ini adalah salah satu faktor utama yang membuat UNIX revolusioner dan sangat sukses, karena itu berarti kode yang sama dapat dikompilasi untuk platform apa pun tanpa perubahan besar.
C ++ menambahkan lapisan abstraksi lain: ia menambahkan kelas (mengabstraksi vtable dan konteks lewat ke sintaks OOP), new
dandelete
(menggabungkan alokasi memori dan inisialisasi variabel ke dalam satu konstruksi tunggal), memeriksa tipe waktu kompilasi, templat (tipe kompilasi-waktu aman metaprogramming), dan sekumpulan kenyamanan sintaksis waktu kompilasi seperti ruang nama, fungsi dan kelebihan operator, dll.
Python mengambil langkah besar lagi dari perangkat keras. C ++ masih memberi programmer kontrol penuh atas alokasi memori, dan memungkinkan untuk manipulasi RAM secara langsung; Python menangani manajemen memori untuk Anda. Selain itu, alih-alih mengkompilasi kode Anda ke semua instruksi mesin asli, ia menjalankannya melawan mesin virtual; ini membawa penalti kinerja (yang kadang-kadang bisa lumayan, tapi biasanya bukan sesuatu yang perlu dikhawatirkan), tetapi juga memungkinkan untuk hal-hal rapi yang rumit di C ++ dan sangat sulit di C, seperti memanipulasi fungsi dan kelas saat dijalankan waktu, mendapatkan nama objek sewenang-wenang pada waktu berjalan, membuat instance kelas dengan nama pada waktu berjalan, menambal monyet, dll. dll
Jadi ketika orang membagi bahasa menjadi bahasa "tingkat tinggi" dan "tingkat rendah", mereka menggambar garis arbitrer di suatu tempat, dan kalimat itu tidak selalu sama. Pada tahun 1970, garis adalah antara perakitan dan C (mengabstraksi instruksi mesin khusus platform menjadi faktor penentu); pada tahun 1987, mungkin ada di suatu tempat antara C dan C ++; hari ini, mungkin antara C ++ dan Java (dengan manajemen memori otomatis sebagai faktor penentu).
Singkat cerita: tingkat tinggi adalah skala geser, dan untuk tiga bahasa yang Anda sebutkan itu C <C ++ <Python.