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