Dlaczego C nadal należy do kategorii języka wysokiego poziomu? [Zamknięte]

12

Wiele podręczników na temat języka programowania C mówi, że C jest językiem programowania wysokiego poziomu, ale wielu internetowych instruktorów twierdzi, że C jest również językiem programowania średniego poziomu. Dlaczego tak jest?

CodeIt
źródło
3
zalecana lektura: Porozmawiaj o tym {blog}
gnat
6
Rozumiem twoje zamieszanie. Jest to rodzaj klasyfikacji, która zirytowałaby mnie na egzaminie, ponieważ nawet „zła” odpowiedź jest poprawna. Módlcie się, abyście nigdy nie mieli tego pytania jako pytania typu prawda / fałsz lub pytania wielokrotnego wyboru. Jeśli tak, odpowiedz na podstawie tego, co napisano w podręczniku, a nie to, co uważasz za słuszne (czuję, że zło poleca przeciwstawienie się jelitowi).
Brandon
1
Historycznie „językami wysokiego poziomu” były te, które w przeciwieństwie do języka asemblera, pozwoliły programiście na oderwanie się od konkretnej maszyny i pisanie kodu w bardziej problematyczny sposób. Z tego powodu Fortran i Cobol były „na wysokim poziomie”. C jest tylko cienką zasłoną nad elementami specyficznymi dla maszyny, ale jej celem jest przenośność, niespecyficzna dla maszyny. Tak więc w latach 60. standardy C były na wysokim poziomie. W porównaniu do C ++ 14 lub Haskell, OCaml lub Rust, C nie jest oczywiście tak wysoki.
9000
Większość z tych „współczesnych” języków wysokiego poziomu to tak naprawdę tylko języki skryptowe. Różnica polega na tym, że jest to kompilowane lub interpretowane.
MarcusJ
Asm jest na wysokim poziomie. Abstrakcja dostarczana przez asm nad sprzętem jest ogromna.
ciekawy

Odpowiedzi:

34

Historycznie wszystko, co streszcza kod asemblera, nazywało się wysokim poziomem. C na pewno to robi. Ta definicja jest również stosunkowo jednoznaczna, w przeciwieństwie do tego, co następuje.

Z biegiem czasu tworzyliśmy coraz więcej języków programowania i wymyślaliśmy coraz więcej abstrakcji i narzędzi. W porównaniu do, powiedzmy, Python, język C jest pozytywnie prymitywny pod względem bogactwa semantycznego i poziomu abstrakcji nad sprzętem. Mając to na uwadze, wiele osób uważa, że ​​mylące jest nazywanie języka C na wysokim poziomie, gdy istnieje bogactwo języków, które są znacznie wyżej niż sprzęt.

Zatem teraz „wysoki poziom” zwykle oznacza „dużo streszczeń w stosunku do sprzętu”, a „niski poziom” oznacza „niewiele streszczeń”. Jest to definicja, której używają Twoi nauczyciele. Nie wszyscy się jednak z tym zgadzają, a stare teksty nie przyjmują w magiczny sposób nowej terminologii, więc wciąż można zaobserwować, że stare użycie „wysokiego poziomu” (pod którym C jest wysokim poziomem) unosi się wokół. Pamiętaj, że wiele dobrych książek C to w zasadzie nowsze wydania książek wydanych dwadzieścia lat temu.


źródło
Aby coś można było uznać za właściwy język programowania niskiego poziomu, programista musi mieć możliwość łatwego działania na tym samym poziomie abstrakcji, co podstawowy sprzęt. Chociaż standard C pozwala implementacjom zachowywać się w taki sposób, nie ma formalnie uznanej różnicy między implementacjami działającymi na tym poziomie abstrakcji a tymi, które tego nie robią.
supercat
12

Jest to język wyższego poziomu niż kod maszynowy (asembler), z którego pochodzą książki i samouczki programowania C.

Pod tym względem jest to język programowania wysokiego poziomu.

Jednak wciąż jest bardzo blisko sprzętu - o wiele bardziej niż inne, bardziej nowoczesne języki (Java, C # i inne) - patrząc z tego punktu widzenia, jest to język programowania średniego poziomu.

Oded
źródło
1
Dlaczego więc nie możemy jasno powiedzieć, że C jest językiem programowania średniego poziomu, w podręcznikach tego nie znajdujemy.
CodeIt
5
@manutd - to pytanie do autorów książek;) - ale o to chodzi. Z ich punktu widzenia C jest językiem wysokiego poziomu. Z tym mają do czynienia. Pojęcie „języka wysokiego poziomu” jest niewyraźne - nie ma jednej wspólnej definicji uzgodnionej przez wszystkich.
Oded
Niestety uzgadnianie opinii w społeczności nie jest jednak sposobem definiowania. To twórcy, a pojęcia są na wyższym poziomie niż język asemblera procesora - to jest linia definiująca. To właśnie definiuje to jako wysoki poziom. Każda książka, którą wybierzesz na informatykę, zawsze zdefiniuje ją w ten sposób. Nauczyciele mogą nie, a opinie ludzi nie, ale faktyczna nauka o tym, jak działają komputery i jak została zdefiniowana w nauce o komputerach i procesorach, jest bardzo jasna.
Ryan Rentfro,
C # umożliwia programistom dostęp do zakresu pamięci jako sekwencji wartości 64-bitowych, 32-bitowych, 16-bitowych lub 8-bitowych jako wygodne; jeśli pamięć zawiera 16-bitowe piksele, na przykład kod może przetwarzać piksele indywidualnie lub w grupach po 2 lub 4, w zależności od tego, co jest najlepsze dla algorytmu. C zdefiniowane w standardzie nie definiuje praktycznych środków, za pomocą których programiści mogą żądać podobnej semantyki. Oczywiście wiele dialektów C ma niższy poziom niż C #, ale język zdefiniowany przez Standard nie jest.
supercat