18. J¦zyki programowania

Transkrypt

18. J¦zyki programowania
Podstawy Programowania :: Roman Grundkiewicz :: 2014
Zaj¦cia 18
18. J¦zyki programowania
1
Kompilacja
Komputer jako maszyna rozumie tylko jeden j¦zyk j¦zyk, w którego skªad wchodzi ci¡g
instrukcji skªadaj¡cych si¦ wyª¡cznie z zer i jedynek, zwany
j¦zykiem maszynowym.
Pisanie programów bezpo±rednio w j¦zyku maszynowym byªoby bardzo uci¡»liwe, dlatego, aby
j¦zyki wy»szego poziomu, takie jest C/C++. By komputer mógª
zrozumie¢ napisany przez programist¦ kod (nazywany kodem ¹ródªowym ), musi on zosta¢ przepisany (przetªumaczony) na kod maszynowy. Proces ten nazywamy kompilowaniem programu i jest
on wykonywany przy pomocy specjalnie do tego przeznaczonych programów kompilatorów.
upro±ci¢ to zadanie, stworzono
Kompilatorem dla j¦zyka C jest program o nazwie
kompilacja kodu z pliku ¹rodªowego
1
max.c
gcc,
dla j¦zyka C++
g++.
Przykªadowa
z wiersza polece« (terminala):
gcc max.c -o maxc.out
W wyniku powy»szego polecenia wygenerowany zostaª plik binarny o nazwie
maxc.out,
który
mo»na bezpo±rednio uruchomi¢:
1
./maxc.out
Zadanie 1 :
Skompiluj i uruchom program z pliku ¹ródªowego
max.cpp
z poziomu wiersza
polece« lub terminala.
1.1
Proces kompilacji
Kompilatory realizuj¡ zazwyczaj nast¦puj¡ce operacje:
•
wst¦pne przetwarzanie tworzony jest ostateczny kod ¹ródªowy poprzez doª¡czenie plików
nagªówkowych (dyrektywa preprocesora
#include),
wykonanie makrodenicji (#define),
usuni¦cie komentarzy itd.,
•
analiza leksykalna znaki wyst¦puj¡ce w kodzie ¹ródªowym s¡ grupowane w odpowiednie
jednostki, takie jak sªowa kluczowe, liczby, identykatory i operatory,
•
analiza skªadniowa (ang. parsing) sprawdzana jest poprawno±¢ kompilowanego kodu pod
k¡tem skªadni i tworzone jest drzewo skªadniowe (nie ka»da sekwencja sªów kluczowych,
nazw zmiennych oraz nawiasów klamrowych jest poprawnym programem, tak samo jak nie
ka»dy ci¡g polskich sªów jest poprawnym zdaniem w j¦zyku polskim),
•
analiza semantyczna kontroluje si¦ m.in. zgodno±¢ typów oraz sprawdza przepªyw sterowania,
•
optymalizacja kodu wynikowego celem jest poprawa efektywno±ci kodu wynikowego,
•
generacja kodu tworzony jest kod zrozumiaªy dla maszyny w postaci kodu asemblerowego lub maszynowego.
1
Podstawy Programowania :: Roman Grundkiewicz :: 2014
1.2
Zaj¦cia 18
J¦zyki kompilowane i interpretowane
W ogólno±ci mo»emy wyró»ni¢ dwa typy j¦zyków, je»eli za kryterium przyjmiemy sposoby uruchamiania programów w nich napisanych:
1. j¦zyki kompilowane takie, które aby uzyska¢ uruchamialny program z napisanego przez
programist¦ kodu ¹ródªowego, musi on najpierw zosta¢ skompilowany przez kompilator do
kodu maszynowego, który jest zrozumiaªy dla danej architektury komputera,
2. j¦zyki interpretowane j¦zyki, których programy nie s¡ kompilowane, lecz przechowywane
w postaci kodu ¹ródªowego napisanego przez programist¦ i dopiero podczas uruchamiania
jest on
interpretowany i wykonywany przez interpreter j¦zyka (najcz¦±ciej napisany w innym
j¦zyku programowania).
Przykªadami j¦zyków kompilowanych s¡: C/C++ i Pascal, natomiast interpretowanych: Perl,
Ruby, Python itd.
Zadanie 2 :
pretera
Uruchom program napisany w j¦zyku Python z pliku
python.
PHP (interpreter
1
max.py,
korzystaj¡c z inter-
Podobnie uruchom programy napisane w j¦zyku Ruby (interpreter
php).
ruby)
oraz
Np.:
python max.py
Zadanie 3 :
tora
Skompiluj program napisany w j¦zyku Java z pliku
Max.java przy pomocy kompila-
javac. Nast¦pnie uruchom program korzystaj¡c ze ±rodowiska uruchomieniowego wirtualnej
java, np.:
maszyny Javy
1
2
javac Max.java
java Max
2
Nauka nowego j¦zyka programowania
Zawsze, kiedy poznajesz now¡ konstrukcj¦ jakiego± j¦zyka programowania, warto zada¢ sobie
dwa pytania: Jaka jest skªadnia tej konstrukcji? Oraz jakie s¡ reguªy jej ewaluacji, czyli co ona
oznacza?
Przeanalizujmy przykªadow¡ konstrukcj¦ j¦zyka C++, jak¡ jest instrukcja
if-else:
if (e) { x } else { y }, gdzie e jest wyra»eniem mog¡cym zosta¢ zewalux oraz y skªadaj¡ si¦ z ci¡gu instrukcji. Blok else { y }
opcjonalny. Je»eli x i y skªadaj¡ si¦ z pojedynczej instrukcji, nawiasy klamrowe mog¡
1. Skªadnia:
owanym do prawdy lub faªszu, a
jest
zosta¢ pomini¦te.
2. Ewaluacja: je»eli wyra»enie
wyª¡cznie instrukcje
x,
e
zostaje zewaluowane do prawdy, wówczas wykonywane s¡
w przeciwnym przypadku wykonywane sa instrukcje
podano.
2
y,
je»eli takie
Podstawy Programowania :: Roman Grundkiewicz :: 2014
Zadanie 4 :
Zaj¦cia 18
W podobny sposób przeanalizuj instrukcj¦ przypisania
= (pojedynczy znak równo-
±ci) w j¦zyku C++.
Zadanie 5 :
2.1
Przeanalizuj instrukcj¦
if-else
dla j¦zyków Python oraz Ruby.
Elementy j¦zyka
Elementy, na które nale»y zwróci¢ uwag¦ podczas nauki dowolnego j¦zyka programowania to:
1. skªadnia jak zapisa¢ w danym j¦zyku to, co chcemy wykona¢?
2. semantyka co oznacza dana konstrukcja j¦zyka? Co zostanie zwrócone w wyniku jej
wykonania?
3. idiomy jakie s¡ ogólnie preferowane sposoby wykorzystania konstrukcji danego j¦zyka?
4. biblioteki co ju» zostaªo za nas napisane? Jak to wykorzysta¢?
5. narz¦dzia co jest dost¦pne, co uªatwi pisanie programów w tym j¦zyku?
Zadanie 6 :
W j¦zykach C, Java, PHP, Python oraz Ruby, napisz program, który wypisze
na ekran wi¦ksz¡ z dwóch liczb: sum¦ wszystkich liczb parzystych lub sum¦ wszystkich liczb
nieparzystych w podanej tablicy. Aby uªatwi¢ sobie prac¦, wykorzystaj przykªadowe programy
znajduj¡ce maksymalny element w tablicy.
Zadanie 7* :
W j¦zykach C, Java, PHP, Python oraz Ruby, napisz program, który dla podanych
dwóch okr¦gów wypisze ich obwody oraz pola powierzchni, a tak»e informacj¦, czy si¦ przecinaj¡.
Ka»dy okr¡g jest zdeniowany przez wspóªrz¦dne ±rodka
3
x, y
oraz promie«
r.
J¦zyki programowania
Paradygmat programowania
deniuje sposób patrzenia programisty na przepªyw sterowania i
wykonywanie programu komputerowego. Do najpopularniejszych paradygmatów programowania
nale»¡:
•
programowanie proceduralne: np. j¦zyki C/C++ i wiele innych,
•
programowanie obiektowe: C++, Java, Ruby, Objective-C, C#, Scala,
•
programowanie funkcyjne: Haskell, Lisp, Scala, Erlang, Ml,
•
programowanie w logice: Prolog, SQL.
Lista najpopularniejszych jezyków programowania TIOBE.
3