Microsoft PowerPoint - IwZ_5.ppt [tryb zgodno\234ci]
Transkrypt
Microsoft PowerPoint - IwZ_5.ppt [tryb zgodno\234ci]
Program komputera Komputer jest maszyną wykonującą polecenia odczytywane z pamięci operacyjnej (instrukcje procesora – kod programu) Instrukcje procesora dotyczą prostych operacji na rejestrach wewnętrznych oraz odczycie i zapisie komórek pamięci. Wstęp do informatyki Interakcja maszyny z uŜytkownikiem odbywa się poprzez urządzenia we/wy, które zamieniają sygnały wysyłane przez człowieka i zamieniają je na postać cyfrową i odwrotnie. Programowanie komputerów PC CPU ROM, RAM ALU Cezary Bolek [email protected] Uniwersytet Łódzki Rejestry procesora In/Out Wydział Zarządzania Katedra Informatyki Wstęp do informatyki 01001000 00001000 11001010 00001011 11111110 KaŜdej instrukcji procesora (która moŜe zajmować jeden lub więcej bajtów) moŜna przypisać skrót literowy (mnemonik), a kaŜdemu rejestrowi nazwę. Zapis programu za pomocą mnemoników nazywa się językiem asemblera, który jest znacznie łatwiejszy do opanowania przez człowieka. Instrukcja procesora (kod programu) w pamięci zapisane są w postaci liczb dwójkowych. Zapis programu za pomocą liczb, które mogą być bezpośrednio wykonywane przez maszyną nazywa się językiem maszynowym. np. 48h 08h CAh 0Bh FEh np. Cezary Bolek <[email protected]> 48h 08h CAh 0Bh FEh ... MOV BL,8 ADD BL,B INC BL ... MOV BL,8 ADD BL,B INC BL Program zapisany w języku asemblera nie moŜe być wykonywany bezpośrednio przez komputer i wymaga tłumaczenia na kod maszynowy za pomocą programu zwanego asemblerem. PoniewaŜ istnieje ścisły związek pomiędzy mnemonikami a instrukcjami maszynowymi, proces tłumaczenia (asemblacja) jest stosunkowo prosty. Proces odwrotny nazywa się deasemblacją (za pomocą disasemblera). ..., 48, 08, CA, 0B, FE, ... Pisanie programów w języku maszynowym przez człowieka jest bardzo Ŝmudne, ale było stosowane do programowania komputerów I i II generacji. Wstęp do informatyki 2 Język asemblera Język maszynowy Pamięć operacyjna ROM + RAM Cezary Bolek <[email protected]> ... MOV BL,8 ADD BL,B INC BL ... 3 Wstęp do informatyki Asembler ..., 48, 08, CA, 0B, FE, ... Cezary Bolek <[email protected]> 4 1 Kompilacja programów Języki wysokiego poziomu Programy napisane w językach wysokiego poziomu muszą być tłumaczone na język maszynowy za mocą programu zwanego kompilatorem, a proces tłumaczenia nazywa się kompilacją. Program zapisany w języku wysokiego poziomu charakteryzuje: • Abstrakcja danych – programista operuje na „zmiennych” bez konieczności organizacji wykorzystania rejestrów procesora i lokalizacji liczb w pamięci ... for (i=1; i<10, i++) { n=10+x*2 }; ... • ZłoŜone struktury danych – proste jest deklarowanie i korzystanie ze złoŜonych struktur liczb jak np. tablice (macierze), stosy, kolejki, drzewa, etc. • Zaawansowane konstrukcje sterujące – określenie kolejności wykonywania programu realizuje się z pomocą intuicyjnych konstrukcji warunkowych typu IF-THEN-ELSE, FOR, DO-WHILE, etc. ... for (i=1; i<10, i++) { n=10+x*2 }; ... Wstęp do informatyki ... for (i=1; i<10, i++) { n=10+x*2 }; ... Cezary Bolek <[email protected]> 5 Wstęp do informatyki Lista liczbą naturalną spośród tych, które dzielą obie te liczby bez reszty NWD(24,15) Aby znaleźć Największy Wspólny Dzielnik dwóch liczb, to od większej liczby naleŜy odejmować mniejszą dotąd, aŜ obie liczby będą sobie równe. Wynik jest ich największym wspólnym podzielnikiem. Teraz otrzymujemy parę 9 i 6, która dalej nie składa się z liczb sobie równych, więc kontynuujemy odejmowanie. 9-6=3 Para 6 i 3 - odejmujemy dalej 6-3=3 Para 3 i 3 - otrzymaliśmy równość, więc liczba 3 jest największym wspólnym podzielnikiem liczb 24 i 15. Wstęp do informatyki Cezary Bolek <[email protected]> AL,X BL,Y CL,Z CL,BL AL,CL X,AL lub MOV MOV MUL MOV ADD MOV AL,Y BL,Z AL,BL BL,X AL,BL X,AL lub MOV MUL ADD MOV AL,Z AL,Y CL,X X,AL Cezary Bolek <[email protected]> 6 kroków K01: Czytaj a,b K02: Dopóki a ≠ b: wykonuj krok K03 K03: JeŜeli a > b, to a ← a - b. Inaczej b ← b – a K04: nwd ← a K05: Zakończ algorytm Np. NWD(24,18) = 6. 15 - 9 = 6 ... MOV BL,8 ADD BL,B INC BL ... Przykład - algorytm Euklidesa Znajdowanie największego wspólnego podzielnika Największy Wspólny Dzielnik (NWD) dwóch liczb jest największą Od większej liczby odejmujemy mniejszą. Liczby 24 i 15 przechodzą w 15 i 9. PoniewaŜ nie są one równe, wykonujemy dalej odejmowanie MOV MOV MOV MUL ADD MOV X = X + Y*Z Przykład - algorytm Euklidesa 24 - 15 = 9 ..., 48, 08, CA, 0B, FE, ... Kompilacja programów jest zadaniem bardzo złoŜonym, ze względu na mnogość moŜliwości realizacji zadania w języku asemblera. Kompilatory są jednymi z najbardziej zaawansowanych i złoŜonych programów dla komputerów osobistych. • Dowolność układu zapisu programu – programista moŜe zapisywać program w postaci najbardziej dla niego czytelnej i zgodnej z upodobaniami. ... for (i=1; i<10, i++) { n=10+x*2 }; ... Kompilator Schemat 7 blokowy Wstęp do informatyki Cezary Bolek <[email protected]> 8 2 Od języka wysokiego poziomu do kodu maszynowego Algorytm Euklidesa – kod maszynowy i asembler b9 18 00 00 00 b8 0f 00 00 00 3b c8 7e 04 2b c8 eb 02 2b c1 3b c8 75 f4 33 c0 c3 b9 18 00 00 00 b8 0f 00 00 00 3b c8 7e 04 2b c8 eb 02 $L591: $L584: 2b c1 $L585: 3b c8 75 f4 33 c0 c3 mov mov cmp ecx, 24 eax, 15 ecx, eax jle sub jmp SHORT $L584 ecx, eax SHORT $L585 sub eax, ecx cmp jne xor ret ecx, eax SHORT $L591 eax, eax 0 Wstęp do informatyki Cezary Bolek <[email protected]> program Euclide; var begin end. m,n : integer; readln(m); readln(n); while m <> n if m > n then m := m – n else n := n - m; writeln(m); 9 procedure Euklides is a, b : Integer; begin a := 153; b := 1326; while (a /= b) loop if (a > b) then a := a - b; else b := b - a; end if; end loop; int main(int argc, char* argv[]) { int a,b; printf("Podaj a.\n"); scanf("%d", &a); printf("Podaj b.\n"); scanf("%d", &b); while (a != b){ if (a > b) a -= b; else b -= a; } printf("NWD to: %d", a); return 0; } sub eax, ecx cmp jne xor ret ecx, eax SHORT $L591 eax, eax 0 Wstęp do informatyki Cezary Bolek <[email protected]> 10 Optymalizacja programu moŜliwa jest równieŜ poprzez optymalne wykorzystanie zasobów procesora (specyficzne instrukcje, tryby adresowania, wykorzystanie rejestrów wewnętrznych, etc.) Put_Line("Największy wspólny dzielnik (NWD) to: " & Integer'Image(b)); Cezary Bolek <[email protected]> SHORT $L584 ecx, eax SHORT $L585 Kompilator optymalizujący (optimizing compiler) – kompilator, który generuje kod maszynowy optymalny pod pewnym względem, np.szybkości działania lub rozmiaru kodu, korygując program, tak aby nie wpływało to na wyniki jego działania. end; Wstęp do informatyki $L585: jle sub jmp Kompilatory optymalizujące Język C Język ADA $L584: ecx, 24 eax, 15 ecx, eax b9 18 00 00 00 b8 0f 00 00 00 3b c8 7e 04 2b c8 eb 02 2b c1 3b c8 75 f4 33 c0 c3 Algorytm Euklidesa – Język C i Ada with Text_IO; use Text_IO; $L591: mov mov cmp 11 FOR I:=1 TO 10 DO BEGIN FOR J:=1 TO 10 DO BEGIN A=I / 100; B:=A + J / 100; WRITE(B); END END FOR I:=1 TO 10 DO BEGIN A=I / 100; FOR J:=1 TO 10 DO BEGIN B:=A + J / 100; WRITE(B) END END oryginalny fragment programu przyspieszenie poprzez eliminację niepotrzebnych obliczeń zmiennej A Wstęp do informatyki Cezary Bolek <[email protected]> 12 3 Kompilatory skrośne Debugging Debugging oznacza proces wykrywania błędów w skompilowanych programach w trakcie ich nadzorowanego uruchamiania. Kompilator skrośny (cross-compiler) – kompilator, który generuje kod maszynowy na inny procesor, niŜ ten na którym jest uruchomiony. Nadzorowane uruchamianie programów polega na wykonywaniu poszczególnych linii programu (praca krokowa) i sprawdzaniu wartości zmiennych w dowolnym momencie wykonywania. Kompilatory skrośne uŜywa się do tworzenia oprogramowania dla systemów komputerowych, w których jest to niemoŜliwe ze względu na rozmiary, zastosowanie czy wygodę pracy: telefony komórkowe Program do nadzorowanego uruchamiania nazywa się Debugger’em palmtopy, notesy elektroniczne, gry elektroniczne, etc. sprzęt Audio-Video komputery wbudowane (sterowniki maszyn, ...) np. JavaME (micro edition) – kompilator programów w języku Java na telefony komórkowe (java.sun.com) Wstęp do informatyki Cezary Bolek <[email protected]> 13 IDE – zintegrowane środowisko programistyczne Integrated Develpement Environment (IDE) edytor + syntax highlighting, bracket matching, macros kompilator debugger Wstęp do informatyki Cezary Bolek <[email protected]> 14 Biblioteki Biblioteka jest to zebrana razem grupa podprogramów realizujących określone zadania np. funkcje matematyczne. Podprogramy biblioteczne, skompilowane do kodu maszynowego, dołączane są do programu uŜytkownika podczas jego kompilacji. Proces łączenia plików bibliotecznych ze skompilowanym programem uŜytkownika nazywa się konsolidacją (linking). Podprogramy biblioteczne Program w języku wysokiego poziomu korzystający z funkcji bibliotecznych Wstęp do informatyki Cezary Bolek <[email protected]> 15 Wstęp do informatyki Kompilator Konsolidator ... x=b*c a=sin(x) ... instr1 instr2 CALL SIN instr4 instr5 STOP Biblioteka funkcji matemat. instr1 instr2 instr3 powrót Wykonywalny program w języku maszynowym Kompletny skonsolidowany program Cezary Bolek <[email protected]> 16 4 Kompilacja a interpretacja Przenośność oprogramowania Wykonanie programu napisanego w języku wysokiego poziomu moŜe być realizowane na dwa sposoby: 1. kompilacja całego programu, a następnie jego uruchomienie 2. odczytywanie pojedynczych instrukcji języka, kompilacja w locie i natychmiastowe wykonywanie – tzw. interpretacja (przez interpreter) (nigdzie nie jest tworzony kod maszynowy całego programu) Oprogramowanie przenośne (portable) to takie, które moŜna skompilować i uruchomić pod róŜnymi systemami operacyjnymi, a jego działanie pozostaje niezmienione (np. Acrobat Reader, Netscape, ...) Programy w językach wysokiego poziomu są zwykle przenośne, o ile nie koncentrują się na zaawansowanym wykorzystaniu urządzeń we/wy. Języki programowania moŜna podzielić na dwie kategorie, w zaleŜności od sposobu wykonywania: 1. języki kompilowane: Fortran, C, C++, Pascal, Delphi, Java (częściowo) 2. języki interpretowane: Basic, Java (częściowo), języki skryptowe: Perl, Tcl Problem przenośności oprogramowania sprowadza się zwykle do istnienia przenośnych bibliotek dla języków wysokiego poziomu. Zalety kompilacji: duŜa szybkość wykonywania programów, moŜliwość wykonywania się programów bez wspomagania innego oprogramowania. np. www.fox-toolkit.org wieloplatformowa biblioteka graficzna dla języka C++ Wstęp do informatyki Cezary Bolek <[email protected]> Zalety interpretacji: szybkie testowanie i modyfikowanie programów (brak etapu kompilacji), moŜliwość testowanie niekompletnych programów, znaczna przenośność oprogramowania, istnienie programu tylko w wersji źródłowej. 17 Wstęp do informatyki Języki programowania (1946, Niemcy) A-O (1951, USA) AutoCode (1952, Wlk.Brytania) FORTRAN I (1957, IBM, USA) FORTRAN II (1958, IBM, USA) Cezary Bolek <[email protected]> 18 Historia języków programowania 1 Plankalkül Wstęp do informatyki Cezary Bolek <[email protected]> 19 Wstęp do informatyki pierwszy na świecie język programowania twórca Konrad Zuse, komputer Z3 kmdr. Grace Hopper opracowuje kompilator A-O znany takŜe pod nazwą AT-3 studentka Alick Glennie opracowuje w ramach studiów kompilator AutoCode dla komputera Manchester Mark I rozwinięcie kompilatora A-O; opublikowany pod nazwą Math-Matic; programy numeryczno-modelujące rozwinięcie FORTRAN-u I wprowadzenie podprogramów Cezary Bolek <[email protected]> 20 5 Historia języków programowania 2 COBOL (1959, USA) LISP (1959, USA) Historia języków programowania 3 język dla przetwarzania duŜych zespołów danych w systemach ewidencyjno-zarządczych (skrót: COmmon Business Oriented Language) Snobol John McCarthy publikuje specyfikację LISP-u (skrót: LISt Processing) (1964, USA) (1962, Bell Labs, USA) BASIC PL/I międzynarodowy zespół publikuje specyfikację języka Algol 60 Algol 60 (1960) APL (1961, USA) FORTRAN IV (1962, USA) Wstęp do informatyki (1964, IBM, USA) RPG Keneth Iversson publikuje specyfikację języka APL ukierunkowanego na zagadnienia matematyczne (1964, IBM, USA) publikacja specyfikacji czwartej wersji języka FORTRAN Cezary Bolek <[email protected]> LOGO (1966, USA) 21 Wstęp do informatyki Historia języków programowania 4 Simula (1967, Norwegia) PASCAL (1968, Szwajcaria) BCPL (1969, Wlk.Brytania) (1970, USA) język wzorowany na Algolu 60; wprowadzenie pojęcia klasy i obiektu; ukierunkowany na symulacje Smalltalk (1970, Francja) Wstęp do informatyki Niklaus Wirth opracowuje język PASCAL do nauki programowania strukturalnego Icon język niskiego poziomu zawierający wyłącznie bardzo proste typy danych (skrót: Basic Combined Programming Language) B (1970, USA) (1970, USA) (1972, Bell Labs, USA) Charles Moore opracowuje język wysokiego poziomu Forth stosujący odwrotną notację polską (1975, USA) język wysokiego poziomu stosowany w badaniach nad sztuczną inteligencją (skrót: PROgramming LOGic) Cezary Bolek <[email protected]> publikacja specyfikacji języka PL/I przeznaczonego do ogólnych zastosowań publikacja specyfikacji języka RPG przeznaczonego do raportowania baz danych (skrót: Report Program Generator) język wzorowany na LISP-ie, ukierunkowany na nauczanie dzieci i osób poznających programowanie Cezary Bolek <[email protected]> 22 pierwszy język całkowicie obiektowy (1970, XEROX, USA) Tiny BASIC PROLOG John Kemeny i Thomas Kurtz opracowują język BASIC (skrót: Beginners’ All-purpose Symbolic Instruction Code) Historia języków programowania 5 C Forth język programowania ukierunkowany na przetwarzanie tekstów i wzorców językowych 23 Wstęp do informatyki język programowania ukierunkowany na przetwarzanie tekstów i wzorców językowych język bazujący na BCPL opracowany dla komputera PDP-11 Dennis Ritchie opracowuje język C (bazujący na języku B) dla komputera PDP-11 dr Wong opracowuje miniaturową (tylko 2 KB pamięci) wersję BASIC-a dla mikroprocesorów Intela i Ziloga; jest to pierwszy program freeware; w programie uŜyto zastrzeŜeń: All Wrongs Reserved oraz Copyleft Cezary Bolek <[email protected]> 24 6 Historia języków programowania 6 BASIC (1975, USA) DSL Historia języków programowania 7 Bill Gates i Paul Allen opracowują własną wersję BASIC-a, którą sprzedają dla firmy MITS produkującej mikrokomputer Altair, w którym stosowany jest mikroprocesor Intel 8080 Modula-2 (1983, Szwajcaria) C++ (1983, Bell Labs, USA) język będący poprzednikiem PostScriptu Perl (1987) Jean Ichbiahn wraz z zespołem opracowują język ADA przyjęty później jako standardowy język programowania Ministerstwa Obrony USA Java Niklaus Wirth opracowuje język stosujący modularyzację i współbieŜność C# (1975, USA) ADA (1977, USA) Modula (1977, Szwajcaria) Wstęp do informatyki Cezary Bolek <[email protected]> zespół Bjarne Stroustrupa opracowuje język C++ na bazie rozszerzonego języka C (C z klasami) udostępniona zostaje wersja 1.0 języka PERL opracowanego przez Larry’ego Walla i Randala Schwartza; (skrót: Practical Extract and Report Language) (1995, Sun, USA) (2000, Microsoft, USA) 25 Niklaus Wirth opracowuje ulepszoną wersję języka Modula Wstęp do informatyki zaprezentowano język programowania i środowisko opracowywane od roku 1991 przez zespół Jamesa Goslinga w Sun Microsystems Microsoft prezentuje język C# dla platformy .NET będący kompilacją języków C++ i Java Cezary Bolek <[email protected]> 26 Mnogość języków Dlaczego tak duŜo języków programowania ? Ewolucja Osobiste preferencje Specjalne zastosowania http://www.oreilly.com/news/graphics/prog_lang_poster.pdf Wstęp do informatyki Cezary Bolek <[email protected]> 27 Wstęp do informatyki Cezary Bolek <[email protected]> 28 7 Obszary zastosowań Co czyni język popularnym ? Aplikacje naukowe (Fortran, TCE) biznesowe (Cobol) Sztuczna inteligencja (Lisp) Programowanie systemowe (C, C++) Aplikacje sieciowe (Java, C#) Języki bardzo wysokiego poziomu (perl) Języki wysoce specjalizowane (make, sh) Efektywność kodu Łatwość nauki Łatwość implementacji Open Source Dostępność kompilatorów, bibliotek Ekonomia, patronat, inercja Składnia podobna do języka C Aplikacje Wstęp do informatyki Cezary Bolek <[email protected]> 29 http://www.tiobe.com/tpci.htm Który język jest najpopularniejszy ? Wstęp do informatyki Cezary Bolek <[email protected]> 30 Który język jest najpopularniejszy ? Ranking TIOBE • porównanie popularności języków programowania • Prowadzenie badań w oparciu o róŜne wyszukiwarki i źródła danych (WWW, grupy dyskusyjne, blogi) Nie najlepsza miara powszechności stosowania ale dająca ogólny pogląd. Określa częstość wzmiankowania w Internecie, czyli „popularność” Wstęp do informatyki Cezary Bolek <[email protected]> 31 Wstęp do informatyki Cezary Bolek <[email protected]> 32 8 Który język jest najpopularniejszy ? Paradygmaty programowania Imperatywne (C, Pascal, etc.) Funkcjonalne (Lisp, ML, Haskell) Logiczne (Prolog) Zorientowane obiektowo (C++, Java, CLOS) Wstęp do informatyki Cezary Bolek <[email protected]> 33 Wstęp do informatyki Cezary Bolek <[email protected]> 34 9