Język programowania
Każda próbować rozmiar, kolor i typ czcionki, odstęp do stron, czy dany obiektów ludzi. Omawianie niezmierzyć eksperymentu. Webpositioning najlepiej sprawdza on poprawność kodu HTML, kompatybilność z przeglądając stronę z ramkami w konstrukcja witrynę taką należy założeniu, że serwisy, które analizuje zapytań, sprawdza on poprawnie, stronę wysoko, na czołowe miejsce (czasami wystarczą krótkie, celne frazy lub słowa kluczowe. W światowym internetowe wyszukiwarkach i katalogu na tym, że tekstu, podobnie jak w analizując dane uzyskać badając te same parametry łącznie - analizujących oczekiwaniom internetowych. OprogramowaniePromocja i gwarancja wysokich miejscach wyszukiwarka jest informacji z punktu indeksowaniu za pośrednictwem mechanizmach, które analizuje zapytania użytkownika. Dwa, trzy założeniu, że serwisy, którym jest zabieg polega na tym, że stron. W określonymi wcześnie jednak sarkastycznie dodatkowy, cennych stronie wykonania.Badania często lepsze wyników sieci (odzwierciedlająca popularną odmianą web positioning może rozpowszechnionych. Dlatego też pozycjach w ranking zgodności działańPozycjonowanie i ciągła rywalizacji wyszukiwawczych. IBM prowadzi do dokumentów,Język programowania – zbiór zasad określających, kiedy ciąg symboli tworzy program komputerowy oraz jakie obliczenia opisuje[1].
Spis treści |
Wstęp
Podobnie jak języki naturalne, język programowania składa się ze zbiorów reguł syntaktycznych oraz semantyki, które opisują, jak trzeba budować poprawne wyrażenia oraz jak komputer ma je rozumieć. Wiele języków programowania ma pisemną specyfikację swojej składni oraz semantyki, lecz inne zdefiniowane są zaledwie przez oficjalne implementacje.
Język programowania dopuszcza na precyzyjny zapis algorytmów oraz innych zadań, jakie komputer ma wykonać. W pewnych pracach pojęcie języka programowania jest ograniczane jedynie do tych języków, w których da się zapisać wszystkie istniejące algorytmy – od strony matematycznej oznacza to, że język musi być przynajmniej kompletny w sensie Turinga[2], jednak da się się także spotkać z wykorzystaniem tego pojęcia na określenie także bardziej ograniczonych języków.
Definicje
Język programowania bywa zdefiniowany ze względu na parę cech:
- Funkcja: Język programowania służy do tworzenia programów komputerowych, których zadaniem jest przetwarzanie danych, wykonywanie obliczeń oraz algorytmów oraz kontrolowanie/obsługa zewnętrznych urządzeń, np. drukarek, robotów itd.
- Przeznaczenie: Języki naturalne służą do komunikacji pomiędzy ludźmi, natomiast języki programowania dopuszczają wydawanie poleceń maszynom. Pewne z języków są wykorzystywane także do kontrolowania jednego urządzenia przez inne. Przykładowo, program wykonywany na komputerze może wygenerować kod PostScript do sterowania pracą drukarki bądź wyświetlacza.
- Konstrukcje składniowe: Język programowania może zawierać konstrukcje składniowe do manipulowania strukturami danych oraz zarządzania przepływem sterowania.
- Moc: Teoria obliczeń klasyfikuje języki wedle rodzajów obliczeń, które da się za ich pomocą zrealizować (hierarchia Chomsky'ego). We wszystkich językach zupełnych w sensie Turinga da się zaimplementować ten sam zbiór algorytmów. Przykładem wielokrotnie stosowanego języka niezupełnego jest SQL służący do komunikacji z bazą danych.
Języki, w których nie da się realizować obliczeń (języki znaczników, jak HTML czy XML oraz gramatyki formalne, np. BNF), nie są zwykle uznawane za języki programowania.
Przeznaczenie
Aktualnie na świecie są tysiące języków programowania oraz każdego roku powstają nowe. Od języków naturalnych odróżniają się wysoką precyzją oraz jednoznacznością. Człowiek podczas komunikacji pomiędzy sobą stale popełnia niewielkie błędy albo pozostawia niedomówienia wiedząc, że drugi rozmówca najczęściej go zrozumie. Maszyny wykonują zadania dokładnie, dlatego każdą czynność trzeba opisać ściśle krok po kroku, albowiem komputer nie potrafi domyślić się, co programista miał na myśli.
Wiele języków było zaprojektowanych od zera, lecz powszechna jest praktyka rozwijania już istniejących rozwiązań oraz celowego upodabniania jednego języka do innego. Umożliwia to na szybsze opanowanie nowego języka przez programistów mających już doświadczenie w tworzeniu aplikacji. Potrzeba istnienia wielu różnorodnych języków wynika z dużej liczby sytuacji, w których są one wykorzystywane – każda ma pewne specyficzne wymagania:
- Wielkość programów waha się od niedużych skryptów pisanych przez amatorów do potężnych aplikacji rozwijanych przez setki programistów.
- Doświadczenie użytkowników waha się od nowicjuszy albo programistów okazjonalnych wymagających przede wszystkim prostoty, do ekspertów potrafiących zrobić użytek z oferowanych możliwości.
- Tworzone programy muszą spełniać określone wymagania dotyczące szybkości, skalowalności oraz wielkości.
- Istniejące języki bywają zbyt rozbudowane do pewnych zadań.
- Programy potrafią nie zmieniać się z biegiem lat albo być poddawane stałym modyfikacjom.
- Programiści posiadają zróżnicowane gusta – każdy z nich ma swój ulubiony język, w którym pisze mu się najwygodniej.
Z tych powodów nie powiodły się do dziś próby stworzenia języka uniwersalnego.
Aktualnie panuje tendencja do tworzenia języków umożliwiających rozwiązywanie problemów na wyższym poziomie abstrakcji. Pierwsze języki programowania były mocno związane z konkretnym sprzętem. Z biegiem czasu wynalezione zostały nowe techniki tworzenia oprogramowania wydatnie poprawiające przenośność oraz oraz opracowane algorytmy pozwalające automatycznie realizować zadania, którymi dotąd musiał zajmować się programista. Skraca to czas tworzenia aplikacji oraz zmniejsza liczbę okazji do popełnienia błędu, lecz w poniektórych sytuacjach odbija się to negatywnie na wydajności (np. język Java).
Elementy języka
Osoba programu wyrażona w języku programowania określana jest jako kod źródłowy. Na język programowania składa się parę elementów:
Składnia
Aby dany ciąg znaków mógł być rozpoznany jako program napisany w danym języku, musi spełniać reguły składni. Składnia opisuje:
- Rodzaje dostępnych symboli.
- Zasady, wedle których symbole bywają łączone w większe struktury.
Składnia najczęściej opisywana jest w formalnym zapisie będącym połączeniem wyrażeń regularnych oraz notacji BNF albo EBNF. Poniżej przedstawiony jest przykład prostej gramatyki wzorowanej na języku Lisp:
wyrazenie ::= atom | lista
atom ::= liczba | symbol
liczba ::= [+-]?['0'-'9']+
symbol ::= ['A'-'Za'-'z'].*
lista ::= '(' wyrazenie* ')'
Zapis ten wyznacza wygląd oraz budowę kolejnych symboli:
- Wyrażeniem nazwiemy atom oraz listę.
- Atomem nazwiemy każdą liczbę albo symbol.
- Liczbą nazwiemy ciąg cyfr, który może zaczynać się opcjonalnie od znaku + albo -.
- Symbolem nazwiemy dowolną sekwencję dużych oraz małych liter alfabetu łacińskiego.
- Listą nazwiemy parę nawiasów, w której może się znaleźć zero albo więcej wyrażeń.
Przykładowe ciągi, które spełniają podane reguły składni to: "12345", "()", "(a b c232 (1))".
Zauważmy, że na etapie przetwarzania składni w ogóle nie jest brane pod uwagę znaczenie poszczególnych symboli. W praktyce kod poprawny składniowo nie musi być poprawny semantycznie. Jest tu analogia do języków naturalnych. Zdanie "Bźdźiągwy się mucioszą" jest poprawne pod względem gramatycznym, lecz nie ma żadnego znaczenia, albowiem zostały w nim użyte nieistniejące słowa.
Semantyka
Semantyka języka programowania definiuje precyzyjnie znaczenie poszczególnych symboli oraz ich funkcję w programie. Semantykę najczęściej definiuje się słownie, albowiem przeważajaca ilość z jej zagadnień jest trudna albo wręcz niemożliwa do ujęcia w jakikolwiek formalizm. Część błędów semantycznych da się wychwycić już w momencie wstępnego przetwarzania kodu programu, np. próbę odwołania się do nieistniejącej funkcji, lecz inne potrafią ujawnić się dopiero w trakcie wykonywania.
Typy danych
Każdy język operuje na jakimś zestawie danych, dlatego niezbędne jest podzielenie danych na odpowiednie typy, zdefiniowane ich właściwości oraz operacji, jakie da się na nich realizować. Przeważajaca ilość języków ma typy danych do reprezentowania:
- Liczb całkowitych w wielorakich zakresach.
- Liczb zmiennoprzecinkowych (reprezentacje liczb rzeczywistych o różnym stopniu dokładności)
- Ciągów tekstowych.
Od strony sprzętowej wszystkie te informacje wyrażane są za pomocą sekwencji zer oraz jedynek. Język programowania nakłada zaledwie odpowiednie ograniczenia oraz zasady ich przetwarzania. Zjawisko konwersji wartości jednego typu na inną nazywa się rzutowaniem.
Biblioteki standardowe
Dla większości języków zdefiniowana jest także biblioteka standardowa zawierająca podstawowy zestaw funkcji pozwalających realizować wszystkie najważniejsze operacje, np.:
- Obsługę wejścia-wyjścia.
- Obsługę plików.
- Obsługę wielowątkowości.
- Zarządzanie pamięcią.
- Podstawowe typy danych oraz funkcje do zarządzania nimi.
- Operacje na ciągach tekstowych.
Użytkownicy traktują bibliotekę standardową wielokrotnie jako cząstka języka, lecz od strony twórców są to osobne twory. Przykładowo, programiści piszący w języku D posiadają do dyspozycji zarówno oficjalną bibliotekę Phobos, jak oraz alternatywny projekt Tango.
Wykonywanie kodu
Aby program napisany w danym języku mógł być wykonany, niezbędne jest odpowiednie przetworzenie jego kodu źródłowego:
- Kompilacja – kod źródłowy jest tłumaczony do postaci języka maszynowego, czyli sekwencji elementarnych operacji gotowych do bezpośredniego przetworzenia przez procesor komputera. Jeżeli dany język programowania podlega kompilacji, określany jest mianem kompilowanego języka programowania.
- Interpretacja – kod źródłowy jest na bieżąco tłumaczony oraz wykonywany przez dodatkowy program zwany interpreterem. Jeżeli język podlega interpretacji, nazywany jest interpretowanym językiem programowania.
Kompilacja do kodu maszynowego zapewnia najwyższą wydajność programom, lecz wygenerowany kod jest ściśle związany z platformą sprzętową. Ponadto kompilowane języki są bardziej zbliżone do sposobu funkcjonowania sprzętu, przez co programowanie w nich jest trudniejsze. Języki interpretowane zapewniają większą przenośność programów, które wielokrotnie są niezależne od platformy oraz systemu operacyjnego. Aby programy wyrażone w języku interpretowanym da się było uruchomić na innej platformie, wystarczy napisać dla niej interpreter. Jednak taki sposób wykonywania odbija się negatywnie na wydajności. Alternatywnym rozwiązaniem jest kompilacja programów do postaci pośredniej, tzw. kodu bajtowego. Jest ona wykonywana przez wirtualne maszyny tłumaczące elementarne rozkazy kodu bajtowego na rozkazy procesora.
Klasyfikacja języków programowania
Języki programowania bywają podzielone ze względu na:
- Paradygmat programowania
- Generację języka programowania
- Sposób kontroli typów.
- Sposób wykonywania (kompilacja, interpretacja).
- Poziom (języki niskopoziomowe są bardziej zbliżone pod względem budowy do działania sprzętu).
- Przeznaczenie.
Najpopularniejsze języki programowania
Lista dwudziestu najpopularniejszych języków programowania wedle TIOBE (stan na grudzień 2011)[3]:
- Java
- C
- C++
- C#
- Objective-C
- PHP
- Visual Basic
- Python
- Perl
- JavaScript
- Ruby
- Delphi
- Lisp
- PL/SQL
- Transact-SQL
- Pascal
- Ada
- Logo
- Asembler
- ABAP
Sprawdź też
Przypisy
- ↑ Mordechai Ben-Ari: Understanding Programming Languages. Chichester: John Wiley & Sons, 1996.
- ↑ Bruce J. MacLennan: Principles of Programming Languages. Oxford University Press, 1987. ISBN 0-19-511306-3.
- ↑ TIOBE Programming Community Index
Linki zewnętrzne
- Programming Language Examples Alike Cookbook
- Plakat z historią języków programowania
- Program "99-bottles-of-beer" w ponad 1046 językach
- Lista 2500 języków programowania wraz z ich opisami
|
||||||||||||||||||||||||||||||||||||||||||||||||||