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