Język wysokiego poziomu

Z Wikipedii, wolnej encyklopedii
Przejdź do nawigacji Przejdź do wyszukiwania

Język wysokiego poziomu (autokod) – typ języka programowania, którego składnia i słowa kluczowe mają maksymalnie ułatwić rozumienie kodu programu dla człowieka, tym samym zwiększając poziom abstrakcji i dystansując się od sprzętowych niuansów. Zaliczany do języków uniwersalnych, służących do rozwiązywania szerokiego zakresu problemów. Kod napisany w języku wysokiego poziomu nie jest bezpośrednio „zrozumiały” dla komputera – większość kodu stanowią tak naprawdę normalne słowa, np. w języku angielskim. Aby umożliwić wykonanie programu napisanego w tym języku należy dokonać procesu kompilacji. Do języka tego typu można zaliczyć np. Pascal, C, Logo i BASIC[1][2].

Cechy[edytuj | edytuj kod]

„Język wysokiego poziomu” odwołuje się do wyższego poziomu abstrakcji od maszynowego programowania. Zamiast zajmować się rejestrami, adresami pamięci oraz stosami, języki wysokiego poziomu dotyczą zmiennych, tablic, obiektów, zaawansowanych arytmetycznych oraz logicznych wyrażeń, podprogramów i funkcji, pętli, kroków oraz innych abstrakcyjnych komputerowych konceptów, z naciskiem na użyteczność ponad optymalną wydajność programu. W przeciwieństwie do języków niskiego poziomu, języki wysokiego poziomu mają co najwyżej kilka elementów, które dosłownie tłumaczy się na kod języka maszynowego. Inne cechy, takie jak procedury do obsługi ciągów znaków, obiektowe cechy programowania, obecne mogą być również procesy wejścia/wyjścia. Należy także zwrócić uwagę, że w języki wysokiego poziomu pozwalają na ich odseparowanie od konkretnej maszyny. W przeciwieństwie do języków niskiego poziomu takich jak asembler lub język maszynowy, języki wysokiego poziomu mogą wzmacniać instrukcje programistów i wywoływać wiele zmian w danych w tle bez ich wiedzy. Odpowiedzialność i moc wykonywania instrukcji zostały przekazane od programisty do maszyny.

Charakterystyka kodu[edytuj | edytuj kod]

Języki wysokiego poziomu są przeznaczone do zapewniania cech, które standaryzują częste zadania, zezwalają na bogate debugowanie oraz zajmują się architektonicznym agnostycyzmem, podczas gdy języki niskiego poziomu częściej tworzą więcej wydajnego kodu poprzez optymalizację pod specyficzną architekturę. Kara abstrakcji jest granicą, która zapobiega przed dołączaniem technik wysokiego programowania tam, gdzie ograniczenia obliczeniowe, zgodność ze standardami lub ograniczenia fizyczne odwołują się do niskopoziomowych poziomów architektonicznych zasobów (dla przykładu – czas na odpowiedź oraz integracja sprzętowa). Wysokopoziomowe programowanie eksponuje cechy takie jak bardziej ogólne struktury danych/operacji, interpretacja czasu działania oraz średnio zaawansowanych plików z kodem, z których często wynika uruchomienie większej ilości operacji, niż jest to potrzebne, większego użycia pamięci oraz binarnie większego objętościowo kodu. Z tego powodu, kod, który musi być szczególnie szybki oraz wydajny może wymagać użycia języka niskiego poziomu, nawet jeżeli użycie wysokopoziomowego języka byłoby łatwiejsze. W wielu sytuacjach krytyczne ilości programu napisanego w języku wysokiego poziomu mogłyby być zakodowane ręcznie w asemblerze, co doprowadziłoby do szybszego, bardziej wydajnego lub po prostu niezawodnie funkcjonującego i zoptymalizowanego programu.

Jednakże, wraz ze zwiększającą się złożonością nowoczesnej architektury mikroprocesorów, dobrze stworzone kompilatory do języków wysokiego poziomu częściej produkują kod porównywalny w wydajności do tego, który niskopoziomowi programiści są w stanie napisać ręcznie, a wyższa abstrakcja może pozwolić na lepsze techniki, z których wynikają lepsze ogólne wyniki, niż ich niskopoziomowe odpowiedniki w konkretnych ustawieniach. Języki wysokiego poziomu są stworzone niezależnie od architektury systemu komputerowego. To ułatwia uruchomienie programu napisanego w takim języku na jakimkolwiek systemie operacyjnym, który ma odpowiednie wsparcie dla Interpretowanego lub JIT (Just-in-time – w czasie rzeczywistym) programu. Języki wysokiego poziomu mogą być ulepszone, gdy ich twórcy rozwijają ulepszenia. W innych wypadkach, wysokopoziomowe języki ewoluują z jednego lub kilku w celu łączenia najbardziej popularnych konstrukcji z nowymi lub ulepszonymi cechami. Przykładem tego jest Scala, który utrzymuje kompatybilność wsteczną z Javą, co oznacza, że programu lub biblioteki napisane w Javie mogą być użyte również, gdy programowanie przeskoczy do Scali, to sprawia, że przenoszenie jest łatwiejsze, a życie takiego wysokopoziomowego kodu jest nieskończone. Dla kontrastu, niskopoziomowe programy rzadko są w stanie przetrwać poza architekturą, dla której zostały napisane bez większych zmian. 

Zobacz też[edytuj | edytuj kod]

Przypisy[edytuj | edytuj kod]