Saya mengambil kursus pengantar tentang python dan instruktur mengatakan bahwa python adalah bahasa tingkat tinggi dan C dan C ++ adalah bahasa tingkat rendah. Itu hanya membingungkan. Saya pikir C, C ++, Python, Java, dll semua bahasa tingkat tinggi.
Saya sedang membaca pertanyaan di stackoverflow pada C, C ++, dll dan semuanya sepertinya merujuk ke bahasa-bahasa tersebut sebagai level tinggi. Menurut saya beberapa programmer menggunakan istilah-istilah itu secara bergantian.
Jawaban:
Level tinggi dan level rendah adalah istilah yang relatif sehingga penggunaannya telah berubah seiring waktu. Pada 70-an UNIX membuat gelombang karena menunjukkan bahwa sistem operasi dapat ditulis terutama dalam bahasa tingkat tinggi: C. Pada saat itu C dianggap tingkat tinggi sebagai kontras dengan assembler.
Saat ini C dianggap sebagai bahasa tingkat rendah karena baik bahasa maupun perpustakaan standar tidak menyediakan struktur data roti dan mentega seperti vektor, kamus, iterator, dan sebagainya. Anda dapat memiliki semua struktur itu dalam program C, tetapi pada akhirnya Anda akan menuliskannya sendiri. Python, Java, dll. Adalah tingkat tinggi relatif terhadap C karena banyak dari struktur data standar dibangun ke bahasa atau merupakan bagian dari perpustakaan standar. Memiliki yang langsung keluar dari kotak membuatnya lebih mudah untuk diprogram pada tingkat yang lebih abstrak.
C adalah level rendah dalam arti kedua: memungkinkan manipulasi langsung perangkat keras komputer (setidaknya langsung seperti yang dimungkinkan oleh OS). Implementasi paling umum dari Python, Java, dll. Setidaknya satu langkah lebih jauh dihapus dari perangkat keras karena mereka berjalan di VM. Jika Anda ingin memanipulasi perangkat keras dari Python, Anda harus menulis ekstensi ke Python VM, biasanya dalam C atau C ++.
C ++ adalah kasus aneh. Ini memberikan banyak struktur data yang bagus sebagai bagian dari pustaka standar, tetapi juga memungkinkan manipulasi perangkat keras tingkat rendah.
sumber
unsafePerformIO
). Ada beberapaIORef
tipe, tetapi tidak ada yang setara dengan yangreinterpret_cast
saya ketahui, dan tidak ada yang setara dengan aritmatika pointer. Tapi itu tidak berarti aman dari orang-orang yang berkeliaran dengan memori. Untuk menjadi bahasa yang praktis, Haskell harus berinteraksi dengan sistem operasi dan perpustakaan di dunia nyata. Ini memiliki "antarmuka fungsi asing". Jika saya benar-benar ingin menumbangkannya, yang perlu saya lakukan adalah menggunakan FFI untuk menulis fungsi subversi primitif.Pikirkan ini dalam hal skala geser, dari bahasa tingkat RENDAH sampai ke tingkat bahasa TINGGI. Saat suatu bahasa naik skala, dari RENDAH ke TINGGI, bahasa tersebut semakin banyak memberikan abstraksi dari antarmuka spesifik dengan komputer.
Bahasa tingkat RENDAH ditulis untuk mengarahkan komputer secara eksplisit - pikirkan kode mesin dan kode rakitan.
Bahasa tingkat-tinggi mencoba untuk mengabstraksi rincian seluk beluk (terutama alokasi memori dan pelepasan memori). Idenya adalah untuk menyediakan antarmuka yang lebih "alami" untuk pemrograman dan semoga memungkinkan programmer untuk fokus pada desain dan produksi.
Saat ini, C dianggap sebagai bahasa tingkat RENDAH. Itu masih memiliki beberapa abstraksi yang signifikan dari kode mesin dan kode rakitan, jadi secara teknis 'lebih tinggi' dari ini. Namun, itu masih memberikan pengalamatan memori langsung dan tidak menyediakan pengumpulan sampah. Jadi ini adalah detail yang harus dirancang oleh seorang programmer.
Bandingkan ini dengan bahasa lain seperti Python, Ruby atau Haskell dan Anda memiliki antarmuka yang jauh lebih tidak jelas. Bahasa-bahasa ini memiliki pustaka kode besar yang memisahkan sebagian besar perintah komputer. Pernah bertanya-tanya apa yang terjadi pada variabel dalam Python ketika Anda meninggalkan lingkup fungsi lokal, atau menghapusnya? Mungkin tidak benar? Dan itu karena dalam bahasa tingkat TINGGI Anda tidak harus! Mereka menjaga alokasi / rilis memori untuk Anda.
Bahasa tingkat tinggi memiliki keunggulan fungsi. Mereka memungkinkan kita untuk merancang dan mengembangkan secara bebas (dan aman!).
Bahasa tingkat RENDAH memiliki keunggulan kecepatan dalam banyak kasus. Ada biaya untuk menafsirkan kode tingkat TINGGI. Plus, itu agak keren untuk menulis sesuatu di 'komputer speek'.
Semoga ini membantu
sumber
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.
sumber
Garis antara bahasa "tingkat rendah" dan "tingkat tinggi" bergeser dari waktu ke waktu.
Sebagai contoh:
Kembali pada zaman UNIX, C adalah bahasa tingkat tinggi.
Saat ini C tidak memiliki struktur seperti jenis pemetaan (kamus), iterator, dll. Yang dimiliki oleh bahasa tingkat tinggi seperti Python. Jadi garis telah bergeser, dan C sekarang telah jatuh ke dalam kelompok tingkat rendah.
Bahasa Level Rendah: Bahasa
-bahasa ini "dekat" dengan apa yang dapat dieksekusi mesin (level terendah adalah: Kode Perakitan!)
Ketika bekerja dengan bahasa-bahasa ini, programmer harus memikirkan hal-hal tingkat terendah seperti manajemen memori .. Anda sangat dekat dengan perangkat keras, bahwa Anda harus langsung bekerja dengannya.
Bahasa Tingkat Tinggi: Bahasa
-bahasa ini membawa Anda menjauh dari perangkat keras, karena mereka mengelola hal-hal seperti memori itu sendiri. Ketika Anda bekerja dengan bahasa-bahasa ini, memori adalah faktor (jelas), tetapi Anda tidak bekerja dengan perangkat keras secara langsung. Alih-alih bahasa yang mengaturnya, menjauhkan Anda (mungkin lebih tinggi) dari antarmuka perangkat keras yang lebih rendah.
sumber