Translacja i translatory Translacja Program w języku niskiego poziomu – ciąg instrukcji wykonywany bezpośrednio przez procesor lub maszynę cyfrową Program w języku wysokiego poziomu – wymaga przetłumaczenia na ciąg instrukcji zrozumiałych dla maszyny cyfrowej która ten program ma wykonać Translacja Proces tłumaczenia nosi nazwę translacji. Translacja to przekład tekstów zredagowanych w jednym języku zwanym źródłowym na równoważny semantycznie tekst w innym języku zwanym wynikowym. Translacja W przypadku gdy dany język wysokiego poziomu ma stosunkowo łatwą gramatykę, translacja może być wykonana samoczynnie przez maszynę cyfrową przy pomocy specjalnego programu translacji zwanego translatorem. Translacja Translatory dzielimy zazwyczaj na dwie kategorie: kompilatory interpretatory. Translacja Kompilator jest translatorem, operującym na całym tekście programu źródłowego generując tekst przekładu jako całość Interpreter operuje na poszczególnych jednostkach syntaktycznych programu źródłowego i generuje ich przekłady. Translacja Jeśli wykonywamy program początkowo zapisany w języku zewnętrznym to używając kompilatora: możemy przystąpić do wykonania programu w postaci docelowej dopiero po zakończeniu translacji. Oznacza to, że uzyskany tekst będący przekładem tekstu źródłowego w całości wprowadzany jest do maszyny cyfrowej; Translacja Jeśli wykonywamy program początkowo zapisany w języku zewnętrznym to używając interpretatora: możemy wykonywać przekłady poszczególnych jednostek syntaktycznych, nie czekając na cały proces translacji. Oznacza to, że cały czas operujemy na tekście źródłowym tłumacząc tylko te jednostki syntaktyczne, które są potrzebne aby poszczególny fragment programu mógł zadziałać. Translacja Translacja W praktyce rzadko dokonuje się bezpośredniej translacji programów z języka zewnętrznego na język maszynowy. Najczęściej stosuje się proces pośredni najpierw dokonuje się translacji z języka zewnętrznego na język asemblerowy potem z języka asemblerowego na język maszynowy. Zastosowanie dwuetapowej translacji niesie za sobą wiele zalet, m.in. możliwość łączenia poszczególnych części programów zapisanych w różnych językach zewnętrznych. Schematyczny przebieg powstawania programu pomysł algorytm programowanie programowanie w języku wysokiego poziomu kompilacja programista (człowiek) algorytm oprogramowany kompilator (program) program w języku symbolicznym kod maszynowy komputer Stos i ONP Bardzo ważnymi pojęciami bez których trudne byłoby zrozumienie zasad jakiejkolwiek translacji są : stos odwrotna notacja polska (ONP). Stos Stos – jest to organizacja sekwencyjna pamięci operacyjnej maszyny cyfrowej. Stos działa jak pojemnik określonych jednostek, przy czym pobieranie elementów w nim zgromadzonych odbywa się w kolejności odwrotnej do magazynowania. Jest to struktura LIFO Dla stosu określa się dwie podstawowe operacje: dopisz a na stosie - w wyniku wykonania tej operacji jednostka a zostaje umieszczona na szczycie stosu (staje się pierwszym elementem stosu) odczytaj a ze stosu - w wyniku wykonania tej operacji jednostka a zostaje wydana na zewnątrz stosu. Odwrotna Notacja Polska (ONP) jeden z wariantów beznawiasowego zapisu wyrażeń formalnych, wynalezionego przez polskiego logika Jana Łukasiewicza (1878-1956). w tym beznawiasowym zapisie symbole operandów poprzedzają bezpośrednio symbol operatora (notacja przyrostkowa) na przykład wyrażenie: a+b zapisujemy w ONP jako a b + Odwrotna Notacja Polska (ONP) Wyróżniamy trzy rodzaje notacji: Infiksową : a + b Prefiksową: + a b Postfiksową: a b + Odwrotna Notacja Polska (ONP) ze względu na łatwość obliczania wyrażeń zapisanych w ONP przy użyciu stosu znalazła ona szerokie zastosowanie w arytmetyce komputerów Wyrażenia arytmetyczne w ONP Przykłady prostych wyrażeń arytmetycznych i odpowiadający im zapis w ONP: 1. (a+b)*d ≡ab+d* 2. (a+(b*c))≡ abc*+ 3. ((a+b)*(z+x))≡ab+zx+* 4. ((a+t)*((b+(a+c))^(c+d)))≡ at+bac++ cd+^* Gramatyka generująca wyrażenie arytmetyczne Gramatyka G = < V, T, P, S > generująca proste wyrażenia arytmetyczne, np. (a + b ) * d V = {a, b, d, +, *, (, )} T = {W, K, C} Semantyka powyższych symboli jest następująca: W – wyrażenie; K - składnik, C – czynnik; Symbol startowy S: S = W P = { r1, …, r10} Lista produkcji i BNF Lista produkcji: r 1: W → K r 2: W → W + K r 3: W → K + W r 4: K → C r 5: S → C * K r 6: S → K * C r 7: C → a r 8: C → b r 9: C → d r10: C → ( W ) Zapis w notacji BNF: <W> ::= <K> | <W> + <K> | <K> + <W> <K> ::= <C> | <C> * <K> | <K> * <C> <C> ::= ( <W> ) | a | b | d Wyrażenie arytmetyczne w ONP Zapis w notacji BNF: <W> ::= <K> | <W> + <K> | <K> + <W> <K> ::= <C> | <C> * <K> | <K> * <C> <C> ::= ( <W> ) | a | b | d Gramatyka prostych wyrażeń arytmetycznych w ONP: <W> ::= <W> <W> <O> | <X> <X> ::= a | b | d <O> ::= + | * Obliczanie wartości w ONP Pobieramy po kolei symbole wyrażenia od lewej strony do prawej; Jeżeli symbol jest liczbą (zmienną), to odkładamy go na stos; Jeżeli symbol jest opisem operacji - pobieramy dwa elementy ze stosu, wykonujemy te operacje, a wynik przesyłamy z powrotem na stos. Czynności te wykonujemy aż do wyczerpania się danych wejściowych. Obliczana wartość wyrażenia znajduje się na stosie. Obliczanie wartości w ONP start pobierz symbol z lewej ku prawej argument T stos N N N błąd φ operator T KONIEC T pobierz argumenty ze stosu, wykonaj działanie, wynik na stos ONP - przykład obliczania wartości Obliczyć wartość wyrażenia: 2 3 4 5 + * + Posługujemy się tabelką. Przedstawimy symbole pojawiające się kolejno na wejściu oraz zawartość stosu po każdym obiegu pętli głównej algorytmu obliczającego wyrażenie. Obliczanie wartości wyrażenia - przykład Obliczyć wartość wyrażenia: 2 7 + 3 / 14 3 - 4 * + 2 / Translacja wyrażeń arytmetycznych Współczesne podejście translacji wyrażeń arytmetycznych polega na wydzieleniu dwu etapów translacji: translacja do ONP translacja ONP na język symboliczny Translacja wyrażeń arytmetycznych W celu zobrazowania translacji do ONP przyjmujemy, że: źródłowy zapis wyrażeń arytmetycznych pojawia się na wejściu specjalnego automatu. na wyjściu uzyskamy zapis ONP tych wyrażeń, sam zaś automat wyposażony jest w pamięć stosową: Wyrażenie arytmetyczne Automat ze stosem ONP wyrażenia arytmetycznego Model automatu ze stosem do translacji wyrażeń arytmetycznych Translacja wyrażeń arytmetycznych Operator Podczas translacji wyrażeń arytmetycznych szczególnej Funkcja (lg, sin, analizie poddawane są exp, ...) symbole operacji (+,-,*,itp.) Potęgowanie ( ↑ ) zwane ogranicznikami Wprowadza się dodatkowo listę priorytetów ograniczników Priorytet Mnożenie, dzielenie, negacja ( *, / ,⎯ ) Dodawanie, odejmowanie (+, -) 0 1 2 3 Wzrost priorytetu Algorytm działania automatu do translacji Pobieramy kolejne znaki wyrażenia, które ma zostać przekształcone znak po znaku, począwszy od lewej strony. Dalsze postępowanie zależy od symbolu. Jeśli pobrany znak jest: argumentem, to należy przesłać go na wyjście, nawiasem otwierającym „(” , to należy położyć go na stos, nawiasem zamykającym „)”, to zawartość stosu, aż do napotkanego znaku „(” należy przesłać na wyjście i usunąć nawias „(”, Algorytm działania automatu do translacji operatorem, to przeglądamy zawartość stosu w poszukiwaniu operatora o wyższym priorytecie : jeśli taki znajdziemy, to przesyłamy zawartość stosu na wyjście, zaś nowy operator wkładamy na stos, jeśli nie, operator odkładamy na stos. stos przeszukujemy do napotkania nawiasu „(” lub do końca stosu, jeżeli nawias nie występuje. jeżeli nawias „(” wystąpił i znaleźliśmy przed nim operator o wyższym priorytecie, to na wyjście trafia wszystko ze stosu do „(”, ale sam nawias zostaje na stosie, Algorytm działania automatu do translacji znacznikiem końca wprowadzanego napisu, to kopiujemy zawartość stosu na wyjście, w przeciwnym wypadku sygnalizujemy błąd. Przetwarzanie kończymy w momencie napotkania znacznika końca napisu wejściowego. Nawiasów „(” i „)” nie kopiujemy na wyjście. start pobierz symbol z lewej ku prawej T argument N wyjście T ( stos N Zawartość stosu aż do ( na wyjście T ) N N T Czy wyższy w stosie do ( lub dna operator N błąd N T φ T Stos na wyjście stos Zawartość stosu do ( lub do dna na wyjście, po czym operator na stos KONIEC Przykład konwersji (1) Dokonać konwersji wyrażenia (((a))+b+d)*(d+e) na ONP Otrzymaliśmy na wyjściu ciąg: abd++de+* Przykład konwersji (2) Dokonać konwersji wyrażenia b * c + ( d - e*k ) na ONP Otrzymaliśmy na wyjściu ciąg: b c d e k * - + * Przykład konwersji (3) Dokonać konwersji wyrażenia ((a+b)–(3*x +7*y)) na ONP Otrzymaliśmy na wyjściu ciąg: a b + 3 x * 7 y * + - Przykład konwersji (4) Dokonać konwersji wyrażenia ((a+t)*((b+(a+c))^(c+d))) na ONP Otrzymaliśmy na wyjściu ciąg: at+bac++cd+^* Języki programowania Język programowania Język programowania jest to usystematyzowany sposób przekazywania komputerowi poleceń do wykonania Język programowania pozwala na dokładny zapis algorytmów oraz innych zadań jakie komputer ma wykonać Język programowania Składnia języka określa: sposób opisywania struktur sterujących sposób opisywania struktur danych sposób tworzenia poprawnych symboli do nazywania zmiennych i struktur danych sposób stosowania interpunkcji, tj. znaków typu spacje, średniki, kropki, nawiasy sposób budowy poprawnych wyrażeń Semantyka języka określa znaczenie poprawnych składniowo wyrażeń Generacje języków Języki programowania można podzielić na pięć wyraźnie różniących się generacji (niektórzy mówią o czterech). Generacje języków opisują zaawansowanie (rozbudowanie) struktury języka, co jest równocześnie związane z łatwością posługiwania się nimi I generacja Programowanie pierwszych komputerów akceptujących zmianę oprogramowania odbywało się bezpośrednio w kodzie binarnym, który można przedstawić jako ciągi zer i jedynek. Każdy typ komputera operuje własnym kodem, który dlatego został określony nazwą język maszynowy lub wewnętrzny. Jest to główna wada tych języków, gdyż programista każdorazowo musi dostosowywać się do języka konkretnej maszyny. Przykład: 001010100101101101000101011011010110100010111 000100001001111000010101111100001010101000001 II generacja Ponieważ operowanie ciągami zero-jedynkowymi nie jest wygodne dla programisty, przypisano im łatwiejsze do zrozumienia znaki mnemotechniczne. Tak narodziły się języki symboliczne, zwane też asemblerami. Choć stanowią one proste tłumaczenie języka maszynowego na symbole i są ściśle związane z danym modelem komputera, to ułatwiają pisanie instrukcji i czynią je bardziej czytelnymi. Przykład: mov dx, offset info mov ah, 9 int 21h mov ah, 0 int 16h III generacja Języki wysokiego poziomu - symbole asemblera reprezentujące konkretne instrukcje zostały zastąpione kodem nie związanym z maszyną, bardziej zbliżonym do języka naturalnego lub matematycznego. Są to języki ogólnego przeznaczenia o dużym stopniu uniwersalności; ich rozwój ewoluował w kierunku języków problemowo zorientowanych Przykład: for i:=1 to MaxN do begin Vx[i]:=Vx[i]+dx[i]; end; IV generacja Na czwartą generację języków programowania składa się szereg narzędzi, które umożliwiają budowę prostych aplikacji przez zestawianie „prefabrykowanych” modułów. Obecnie wielu specjalistów uważa, że nie są to języki programowania w ścisłym znaczeniu, gdyż częstokroć stanowią jedynie rozszerzenie języków już istniejących. Niektórzy autorzy proponują stosować nazwę „czwarta generacja” wyłącznie w odniesieniu do programowania obiektowego (OOP). V generacja Nazwę „język piątej generacji” stosuje się czasem w odniesieniu do języków używanych do tworzenia programów wykorzystujących tzw. sztuczną inteligencję (AI) lub inaczej systemów ekspertowych. Generacje języków Paradygmaty programowania Paradygmat programowania to ogół oczekiwań programisty wobec języka programowania i komputera, na którym będzie działał program. Paradygmaty programowania Paradygmaty programowania Programowanie imperatywne opisujemy kolejne czynności, które wykonawca (komputer) ma wykonać, by osiągnąć cel w tym rodzaju programowaniu programista opisuje, jak komputer ma działać Programowanie deklaratywne opisujemy cel, który wykonawca (komputer) ma osiągnąć w tym rodzaju programowaniu programista opisuje, co komputer ma osiągnąć Programowanie imperatywne Najbardziej pierwotny sposób programowania, w którym program postrzegany jest jako ciąg poleceń dla komputera Obliczenia rozumiemy tu jako sekwencję poleceń zmieniających krok po kroku stan maszyny, aż do uzyskania oczekiwanego wyniku Stan maszyny należy z kolei rozumieć jako zawartość całej pamięci oraz rejestrów i znaczników procesora Programowanie imperatywne Ten sposób patrzenia na programy związany jest ściśle z budową sprzętu komputerowego o architekturze von Neumanna, w którym poszczególne instrukcje (w kodzie maszynowym) to właśnie polecenia zmieniające ów globalny stan Programowanie imperatywne Języki wyższego (w stosunku do asemblera i kodu maszynowego) poziomu — takie jak Fortran, Algol, Pascal, Ada lub C — posługują się pewnymi abstrakcjami, ale wciąż odpowiadają paradygmatowi programowania imperatywnego Instrukcje podstawienia działają na danych pobranych z pamięci i umieszczają wynik w tejże pamięci, zaś abstrakcją komórek pamięci są zmienne Paradygmaty programowania Programowanie proceduralne Podział zadania programistycznego na podzadania i ich niezależna (od siebie nawzajem) implementacja w postaci podprogramów (procedur) Niezalecanie korzystania z efektów ubocznych (rozumianych w sensie tradycyjnym, jako zmiana wartości zmiennych globalnych), lecz przekazywanie danych i wyników w parametrach procedur Metodologia programowania bottom-up Programowanie proceduralne Paradygmaty programowania Programowanie strukturalne Używanie prostych, dobrze zdefiniowanych struktur (konstrukcji programistycznych): sekwencja selekcja (instrukcja warunkowa) iteracja (pętla) wywołanie podprogramu Unikanie skoków (wręcz ich zakaz!) Metodologia programowania top-down Programowanie strukturalne Paradygmaty programowania Programowanie obiektowe Program to zbiór porozumiewających się ze sobą obiektów, czyli jednostek zawierających pewne dane i umiejących wykonywać na nich pewne operacje Programowanie obiektowe jest do pewnego stopnia rozszerzeniem paradygmatu programowania proceduralnego i strukturalnego Programowanie obiektowe Ważną cechą jest tu powiązanie danych (czyli stanu) z operacjami na nich (czyli poleceniami) w całość, stanowiącą odrębną jednostkę — obiekt Bardzo ważną cechą jest też mechanizm dziedziczenia, czyli możliwość definiowania nowych, bardziej złożonych obiektów, na bazie obiektów już istniejących Programowanie obiektowe Ważną cechą jest tu powiązanie danych (czyli stanu) z operacjami na nich (czyli poleceniami) w całość, stanowiącą odrębną jednostkę — obiekt Bardzo ważną cechą jest też mechanizm dziedziczenia, czyli możliwość definiowania nowych, bardziej złożonych obiektów, na bazie obiektów już istniejących Inne ważne cechy programowania obiektowego to: wysoki stopień abstrakcji danych enkapsulacja danych polimorfizm Programowanie obiektowe Paradygmaty programowania Programowanie funkcyjne Program to po prostu złożona funkcja (w sensie matematycznym), która otrzymawszy dane wejściowe wylicza pewien wynik Zasadniczą różnicą w stosunku do poprzednich paradygmatów jest brak dostępu do stanu maszyny Nie ma zmiennych A co za tym idzie, nie ma żadnych efektów ubocznych (rozumianych w sensie tradycyjnym, jako zmiana wartości zmiennych) Programowanie funkcyjne Nie ma tradycyjnie rozumianych pętli (imperatywnych z natury) Tradycyjne pętle wymagają bowiem zwykle (poza przypadkami zdegenerowanymi, jak pętle nieskończone) zmiennych (lub innego dostępu do stanu maszyny) do sterowania ich przebiegiem Programowanie funkcyjne Konstruowanie programów to składanie funkcji Zazwyczaj z istotnym wykorzystaniem rekurencji (rekursji) (tam, gdzie w programowaniu imperatywnym wykorzystujemy pętle) Charakterystyczne jest również definiowanie funkcji wyższego rzędu, czyli takich, dla których argumentami i których wynikami mogą być funkcje (a nie tylko „proste” dane jak liczby lub napisy) Programowanie funkcyjne Paradygmaty programowania Programowanie logiczne Na program składa się zbiór zależności (przesłanek) oraz pewne stwierdzenie/pytanie (cel) Wykonanie programu to próba udowodnienia celu w oparciu o podane przesłanki Obliczenia wykonywane są niejako „przy okazji” dowodzenia celu Podobnie jak w programowaniu funkcyjnym, nie wydajemy rozkazów, a jedynie opisujemy, co wiemy i co chcemy uzyskać Programowanie logiczne Programowanie logiczne Inne paradygmaty Programowanie na poziomie wartości Programowanie na poziomie funkcji Programowanie skalarne Programowanie wektorowe/macierzowe Programowanie zdarzeniowe Programowanie z własnym wątkiem sterowania Programowanie aspektowe Programowanie uogólnione Programowanie równoległe/współbieżne/rozproszone Języki a paradygmaty asemblery, „stary” BASIC „stary” Pascal, C, Fortran p. imperatywne, proceduralne, strukturalne C++, Object Pascal, Ada p. imperatywne (proceduralne?) p. imperatywne, proceduralne, strukturalne, obiektowe Smalltalk, C#, Java p. obiektowe Języki a paradygmaty Lisp, Scheme, Logo, ML, Haskell Planner, Prolog p. logiczne Python p. funkcyjne p. proceduralne, strukturalne, obiektowe, funkcyjne SQL p. deklaratywne (ani ściśle funkcyjne, ani ściśle logiczne) Przegląd języków programowania http://www.levenez.com/lang/history.html Przegląd języków programowania Ada - język programowania wysokiego poziomu, opracowany w latach 1975-1981 na zamówienie Departamentu Obrony USA, spokrewniony z językiem Pascal. Przeznaczony do bezpośredniego sterowania procesami lub maszynami, np. samolotami wojskowymi. Służy głównie do oprogramowywania systemów czasu rzeczywistego, pozwala na kontrolowanie procesów zachodzących jednocześnie. Nazwa języka pochodzi od imienia Ady Augusty Lovelace (1815-1852), córki G.G.N. Byrona, matematyczki współdziałającej z Ch. Babbage’em przy pracach nad pierwszą programowalną maszyną liczącą. Przegląd języków programowania Asembler - język programowania niskiego poziomu, wykorzystujący instrukcje procesora. Program napisany w asemblerze jest tłumaczony na (binarny) kod maszynowy. Program w asemblerze jest bardzo efektywny w porównaniu do programów napisanych w innych językach, jednakże jego tworzenie jest stosunkowo trudne. Przegląd języków programowania Visual Asembler Przegląd języków programowania Basic (Beginners All-purpose Symbolic Instruction Code) - przełomowy w chwili powstania w 1964, potem mocno krytykowany za brak strukturalności, prosty, interpretowany język programowania, spopularyzowany w komputerach ośmiobitowych i kalkulatorach programowanych. Basic z założenia nadawał się do pracy interakcyjnej i miał ujmować prostotą (m. in. brak typów, numerowane instrukcje ułatwiały redagowanie programu). Przegląd języków programowania Odrodzony i zmetamorfozowany zarówno pod względem struktur sterowania i danych, jak i interfejsu systemowego Basic znajduje szerokie zastosowanie pod postacią platformy programowania RAD o nazwie VisualBasic. W tym nowoczesnym produkcie z Basica pozostała głównie nazwa. iBasic Przegląd języków programowania C - proceduralny język programowania wysokiego poziomu, zaprojektowany w 1972 przez D. M. Ritchiego i zrealizowany pod systemem operacyjnym UNIX dla komputera PDP-11. Początkowo C był językiem oprogramowania systemowego (powstał jako język do przeprogramowania systemu UNIX). Szybko zyskał popularność jako uniwersalny język programowania. Przegląd języków programowania Cechami języka C są zwięzłość i elastyczność, przy jednoczesnym przerzucaniu dużej odpowiedzialności na programistę (nie ma np. wbudowanej kontroli indeksowania tablic). W latach 1983-1988 język C uległ standaryzacji. Znormalizowany język C nosi nazwę ANSI C. Przegląd języków programowania C++ - obiektowy język programowania zaprojektowany przez B. Stroustrupa i in., w warstwie proceduralnej osadzony w notacji języka C, wpływ języków Algol 68 i Simula 67 oraz Ada, ML i Clu. Charakterystyczne cechy: dociążanie funkcji i operatorów, dziedziczenie z wielu klas, obsługa wyjątków, klasy parametryczne. Przegląd języków programowania Wersja pierwotna (1979) nosiła nazwę C z klasami (C with classes), a jej kompilatory generowały kod w języku C. Standaryzowany od 1994, standard ostateczny ISO/ANSI C++ (ANSI 14882) z 1 września 1998. Liczne kompilatory, m. in. Borland C++, Microsoft C++, Watcom C++, implementacje systemów operacyjnych, baz danych. Java, Smalltalk. Przegląd języków programowania DevC++ Przegląd języków programowania lcc Przegląd języków programowania Clips (C Language Integrated Production System) rozwijany od 1984 r. język przeznaczony do badania i rozwijania systemów ekspertowych, służący do programowania typu optymalizacji algorytmowej (rule-based), proceduralnego i obiektowego (COOL - Clips Object Oriented Language). CLIPS ma składnię przypominającą Lisp-a. Obecnie (2002) dostępna jest wersja 6.20 beta. Przegląd języków programowania Css (Cascading Style Sheets) - technologia (język) umożliwiająca przydzielanie „stylu”, tj. charakterystyk takich jak położenie, barwa, rozmiary, itp., elementom HTML. Arkusze styli są wzorcami (templates) przypominającymi wzorce znane np. z edytora tekstu Word (mogą być również dołączane z zewnątrz). CSS są w znacznym stopniu niezależne od platformy (stopień ich „rozumienia” przez nowe przeglądarki IE 5.5, Netscape 6 i Opera 5 jest oceniany odpowiednio na 92%, 98% i 99%). Przegląd języków programowania DHTML (Dynamic HTML) - rozszerzenie języka HTML o wzorce stylu (style sheets), rozmieszczanie elementów na stronie WWW według upodobań użytkownika (content positioning) oraz możliwośćstosowania indywidualnych krojów pisma, sprowadzanych z komputera macierzystego danej strony WWW (downloadable fonts). Przegląd języków programowania Fortran (FORmula TRANslator) - jeden z pierwszych szeroko używanych, algorytmicznych języków programowania, opracowany przez J. Backusa w 1957. Po wielu unowocześnieniach i zmianach (Fortran 77, Fortran 90) stosowany do dzisiaj. Język Fortran powstał jako wynik wczesnych doświadczeń w programowaniu komputerów za pomocą autokodów z lat 1951-56. Pierwszą implementację Fortranu wykonano dla maszyny IBM-704. W 1958 powstała wersja Fortran II wprowadzająca możliwość kompilacji niezależnej (IBM704), a w 1959 jej odpowiednik dla komputera IBM-709. Przegląd języków programowania HTML (HyperText Markup Language) - specjalny język służący do opisu strony oraz odniesień z poszczególnych jej elementów do innych dokumentów. Język ten powstał na potrzeby internetowej usługi WWW. HTML Umożliwia umieszczenie na stronie tekstu zdefiniowanych dyrektyw co do sposobu jego prezentacji, wyróżnienia pewnych jego elementów edytorskich jak akapity, nagłówki itp. Pozwala także umieszczać bezpośrednio na opisywanych stronach grafikę, a w najnowszych wersjach również inne typy dokumentów. Przegląd języków programowania Java - popularny język programowania obiektowego autorstwa J. Goslinga, zaprojektowany w firmie Sun Microsystems, Używany szeroko do oprogramowywania specjalizowanych mikroprocesorów, wzbogacania prezentacji danych zawartych w dokumentach HTML, pamiętanych w komputerach sieci Internet oraz do opracowywania samodzielnych aplikacji wielowątkowych i rozproszonych. Kompilatory języka Java produkują bajtokod, który nadaje się do interpretacji w środowisku JVM. Znaczenie języka Java systematycznie rośnie. Przegląd języków programowania Przykład skryptu w Javie Przegląd języków programowania JavaScript, opracowany przez firmę Sun Microsystems język programowania obiektowego, przypominający C++, jednak przeznaczony do zastosowań sieciowych. Java nie przenosi wirusów i nie może uszkodzić komputera-klienta (o ile wiadomo). Java jest także środowiskiem przetwarzania online, działającym w tzw. maszynie wirtualnej Javy - JVM (Java Virtual Machine) . Ta ostatnia jest rodzajem pośrednika pomiędzy programem Javy i komputerem. Kompilator Javy tworzy bowiem nie kod przeznaczony dla konkretnej platformy, lecz kod niezależny od sprzętu (przynajmniej na ogół), interpretowany przez JVM. Przegląd języków programowania Lisp - język programowania oparty na przetwarzaniu list. Główny wkład w jego powstanie w latach 50. wniósł J. McCarthy, profesor wielu amerykańskich uczelni, m.in. Instytutu Technologicznego Massachusetts i Uniwersytetu Stanforda. Wywodzi się z badań teoretycznych nad tzw. rachunkiem lambda i stał się podstawowym językiem sztucznej inteligencji. Przegląd języków programowania Eclips Lisp Przegląd języków programowania Logo - edukacyjny język programowania biorący początek z badań nad psychologią uczenia się i jego wpływem na kształtowanie osobowości (J. Piaget), opracowany przez Seymoura Paperta i spopularyzowany przez niego w książce, rewolucyjnej z punktu widzenia metodologii nauczania, pt. Burze mózgów – dzieci i komputery (Wydawnictwo Naukowe PWN, 1996). Logo jest stosowane w początkowym nauczaniu matematyki oraz jako język komunikacji dziecka z komputerem; odznacza się interakcyjnością, znakomicie przemyślanym, prostym zestawem operacji graficznych i ogólnością składni wzorowanej na języku Lisp. Przegląd języków programowania MSW Logo Przegląd języków programowania NET Logo Przegląd języków programowania Star Logo Przegląd języków programowania Visual Logo Przegląd języków programowania Pascal - strukturalny język programowania stworzony przez N. Wirtha na początku lat 70. Jego zastosowanie w praktyce jest obecnie bardzo ograniczone. Najważniejszym zastosowaniem języka Pascal jest nauka programowania. Pozostaje on przez to jednym z najszerzej znanych i popularnych języków, zwłaszcza wśród początkujących programistów. Przegląd języków programowania Perl (Practical Report and Extraction Language) – interpretowany język programowania, zewnętrznie bardzo podobny do C/C++, dostosowany przez twórcę (Larry Wall, koniec lat 80-tych) przede wszystkim do przetwarzania plików tekstowych. Perl służy do administracji i oprogramowania WWW, w tym do pisania tzw. skryptów cgi. Trudno uznać Perl za język szczególnie przyjazny; jest jednak tak uniwersalny i przy tym rozpowszechniony, że warto go poznać, pomimo tego, że w ostatnich latach pojawiły się języki pod wieloma względami wydajniejsze (m.in. ASP i PHP). Perl powstał w środowisku unixowym, jednak niemal od razu został zaimplementowany jako ActivePerl również do Win32. Przegląd języków programowania Przykład skryptu w Perlu Przegląd języków programowania PHP - język skryptowy stosowany „po stronie serwera” podobnie jak np. Perl, z którym jest zresztą spokrewniony. Za pośrednictwem skryptów php typowy serwer (np. PWS, IIS, Apache) może przesyłać na strony sieciowe dane z relacyjnych baz danych (np. MySQL, mSQL, PostgreSQL a także MS Access). Mówiąc w uproszczeniu, kod php wbudowany jest w plik HTML pomiędzy znaczniki <?php i ?>, chociaż można skonfigurować php tak, aby używać innych znaczników, np. <% i %>, jak w przypadku ASP. Kod php jest interpretowany przez serwer, przekształcany w tekst a następnie przesyłany do przeglądarki. Przegląd języków programowania Przykład skryptu w PHP Przegląd języków programowania Prolog (PROgraming in LOGic) - deklaratywny język programowania w logice. Program w takim języku nie jest sekwencją działań, jak np. w języku proceduralnym, lecz zbiorem faktów i reguł pozwalających w oparciu o fakty formułować wnioski. Visual Prolog Przegląd języków programowania Python - interpretowany współczesny język obiektowy. Istnieją implementacje dla różnych systemów operacyjnych. Posiada przejrzystą i łatwą do nauki strukturę. Python jest językiem darmowym - tworzone w nim aplikacje można również sprzedawać. Przegląd języków programowania Python Przegląd języków programowania Ruby - interpretowany, w pełni obiektowy język programowania Ruby bazuje na wielu językach, takich jak Perl, Smalltalk, Python, CLU czy LISP. Składnia jest zorientowana liniowo i oparta na składni CLU (w mniejszym stopniu Perla). Program pisane w Ruby charakteryzują się wysoką wymiennością pomiędzy platformami (istnieją implementację na wiele maszyn UNIXowych, DOS, Windows, Mac, BeOS itd.). Język popularny w Japonii, oparty na języku japońskim. Przegląd języków programowania Ruby Przegląd języków programowania SQL (Structured Query Language) - standardowy język zapytań do obsługi relacyjnej bazy danych. Język programowania baz danych i ich sieciowych serwerów. Pierwowzorem SQL był opracowany przez IBM we wczesnych latach siedemdziesiątych XX w. język SEQUEL (E. F. Codd). Niezależnie od specyficznych właściwości standardów język SQL pozwala formułować działania na tabelach w formie zbliżonej do zdań w języku angielskim. Przegląd języków programowania VRML (Virtual Reality Modeling Language) opracowany w 1993r. język udostępniający operacje na obiektach trójwymiarowych w Internecie. Dostępny dla większości przeglądarek po zainstalowaniu dodatkowej wtyczki. Od 1995 r. dostępna jest wersja VRML 2.0. Przegląd języków programowania Przykład modelu w VRML Przegląd języków programowania XML (eXtensible Markup Language) - standard Internetowy (metajęzyk), oparty na SGML, a będący poszerzeniem techniki używania markerów (tagów) nie tylko do określania sposobu prezentacji, lecz także rodzaju przesyłanej informacji. Znaczniki nie są opisane w XML lecz definiowane przez użytkownika. Przegląd języków programowania Do opisu danych XML używa DTD - Document Type Definition. Jeśli więc HTML zajmuje się wyświetlaniem danych i ich wyglądem, to XML skupia się na opisie, przechowywaniu i przesyłaniu danych (lecz nie ich prezentacji) niezależnie od sprzętu, oprogramowania systemowego i aplikacji. Ma uzupełniać a nie zastępować HTML, nie jest językiem, jest uproszczoną wersją metajęzyka SGML. „Hello World” Kolekcję ponad 300 programów Hello world w różnych językach programowania i w ponad 50 językach naturalnych : http://www.roesler-ac.de/wolfram/hello.htm Pierwszy „Hello World” powstał w 1972 roku i był napisany w B (taki poprzednik C ;-). Na wyróżnienie zasługują: Assembler-Z80-Console i HQ9+ (za długość), Argh!, BrainFxxx, G-Code, Malbolge i MAMASH (za zakręcenie), CSS (za spryt), LabVIEW i Logo-graphical (za efekty specjalne). „Hello World” Standardowe: „Hello World” Na wyróżnienie zasługują: Assembler-Z80-Console i HQ9+ (za długość), Argh!, BrainFxxx, G-Code, Malbolge i MAMASH (za zakręcenie), CSS (za spryt), LabVIEW i Logo-graphical (za efekty specjalne). „Hello World” Assembler-Z80-Console „Hello World” Assembler-Z80-Console „Hello World” Assembler-Z80-Console „Hello World” Assembler-Z80-Console „Hello World” Assembler-Z80-Console „Hello World” Argh! „Hello World” BrainFxxx: „Hello World” G-Code: „Hello World” Malbolge : „Hello World” MAMASH : „Hello World” CSS : „Hello World” LabVIEW : „Hello World” Logo-graphical : Literatura N. Wirth: „Algorytmy + struktury danych = programy”. WNT, Warszawa, 2004. Harel D., Rzecz o istocie informatyki - algorytmika, WNT, Warszawa 2008 http://uranos.cto.us.edu.pl/~boryczka/ http://we.pb.edu.pl/~jforenc/dydaktyka.html http://pl.wikipedia.org