Cursul 3 - Dezvoltarea programelorelf.cs.pub.ro/uso/res/cursuri/curs-03/curs-03-handout.pdf ·...
Transcript of Cursul 3 - Dezvoltarea programelorelf.cs.pub.ro/uso/res/cursuri/curs-03/curs-03-handout.pdf ·...
Cursul 3Dezvoltarea programelor
Utilizarea Sistemelor de Operare (USO)9 noiembrie 2017
Departamentul de Calculatoare
CSE Dep Cursul 3, Dezvoltarea programelor 1/48
Moto
There are only two kinds of programming languages: those peoplealways bitch about and those nobody uses.
Bjarne Stroustrup
One of the main causes of the fall of the Roman Empire was that –lacking zero – they had no way to indicate successful termination
of their C programs.
Robert Firth
CSE Dep Cursul 3, Dezvoltarea programelor 2/48
Utilizarea sistemului de fis, iere
separator director ierarhie
ier dimensiune
cale
nume
director
r d cin
creare tergere
listarea are
opera ii
recursive
trunchiere
redirectare
concepte
opera ii
nume
binar/text
ASCII
editare
arhivarecomprimare
copiere
mutare
schimbare
director
CSE Dep Cursul 3, Dezvoltarea programelor 3/48
Utilizarea sistemului de fis, iere
http://www.geekarmy.com/geeks/2906/file-transferring/
CSE Dep Cursul 3, Dezvoltarea programelor 4/48
Remember: WoUSO v11
I ıncepe mart, i, 10 octombrie 2017
I folosit, i contul de cs.curs.pub.ro pentru autentificare
I urmarit, i forumuri s, i pagina de Facebook
CSE Dep Cursul 3, Dezvoltarea programelor 5/48
Suport curs
I Suport (Introducere ın sisteme de operare)I Capitolul 11 – Compilare s, i linkingI Capitolul 14 – Utilitare pentru dezvoltare
CSE Dep Cursul 3, Dezvoltarea programelor 6/48
Conexiunea dezvoltator - utilizator
fișcod sursă
fișier
cod sursă
fișier
obiect
fișier
obiect
fișier
executabilpachet
software
fișier
de datefișier de
configurare
bibliotecă
compilare
compilare
linking
dezvoltator
utilizator
CSE Dep Cursul 3, Dezvoltarea programelor 8/48
Operat, iile utilizatorului cu aplicat, iile
I instalare
I dezinstalare
I parcurgere documentat, ie
I configurare s, i personalizare
I rulare (cu diverse opt, iuni)
I dezvoltatorul trebuie sa-i faca viat,a cat mai us,oarautilizatorului
CSE Dep Cursul 3, Dezvoltarea programelor 9/48
Pachete software
I arhive cu fis, ierele necesare pentru instarea aplicat, iei
I fis, iere de date, fis, iere de configurare, fis, iere executabile
I fis, ierele executabile sunt folosite pentru a rula aplicat, ia
I utilizatorul instaleaza pachetele software s, i apoi foloses, tefis, ierele din acestea
Cont, inutul pachetului tcpdump
user@host:~$ dpkg -L tcpdump
[...]
/usr/share/man/man8/tcpdump.8.gz # pagina de manual
[...]
/usr/sbin/tcpdump # executabilul din pachet
CSE Dep Cursul 3, Dezvoltarea programelor 10/48
Fis, iere executabile
I folosite pentru rularea aplicat, iei
I dublu click ın GUI, rulare de comanda ın linia de comanda
I obt, inute din codul sursa
I ın Unix se gasesc, ın general ın /bin, /sbin, /usr/bin s, i/usr/sbin
I pot fi binare sau text (ASCII)I binare pentru cod sursa compilat (C, C++, Java)
I /bin/ls, /usr/bin/vim
I text pentru cod sursa interpretate (Perl, Python, Ruby)I ls /bin/* | grep ASCIII ls /usr/bin/* | grep ASCII
CSE Dep Cursul 3, Dezvoltarea programelor 11/48
De la cod sursa la pachet software
fișcod sursă
fișier
cod sursă
fișier
obiect
fișier
obiect
fișier
executabilpachet
software
fișier
de datefișier de
configurare
bibliotecă
compilare
compilare
linking
dezvoltator
utilizator
CSE Dep Cursul 3, Dezvoltarea programelor 13/48
Cod sursa pentru un limbaj
I un fis, ier al unui program este denumit fis, ier cod sursa (sourcecode)
I codul sursa este codul citibil al unui limbaj de programare:format text
I cod sursa: instruct, iuni ıntr-un limbaj
I codul sursa respecta sintaxa acelui limbaj
I pentru a ınt,elege un program este necesara cunoas, tereasintaxei limbajului
I codul sursa este scris de programator
CSE Dep Cursul 3, Dezvoltarea programelor 14/48
Editoare s, i IDE-uri
I folosite pentru scrierea codului sursaI editoare
I scriu ın general text, printre care s, i cod sursaI Vim, Emacs, Notepad++, Sublime Text
I IDE: Integrated Development EnvironmentI integreaza editor, compilator, debugger, biblioteciI Eclipse, Visual Studio, Code::Blocks, NetBeans
I facilitat, iI syntax highlighting, auto indentation, utilitare pentru
debugging integrateI code folding, code completion (autocompletion)
CSE Dep Cursul 3, Dezvoltarea programelor 15/48
Coding Style
I convent, ii s, i recomandari pentru scrierea codului sursa
I us,urint, a ın a ınt,elege codul sursa
I consecvent, a
I ın general cu suport din partea editoarelor s, i IDE-urilorI aspecte acoperite
I indentareI nume de funct, ii, variabile, constante, macro-uriI spat, iereI comentarii de cod
I Steve Oualline: C Elements of Style
I Python PEP 8
CSE Dep Cursul 3, Dezvoltarea programelor 16/48
Bad Code
main(){int extra; char *len="prime";
int num;
int is prime,i;
for(i=0;i<10;i++){printf("Introduceti numar:");
scanf("%d", &num);
is prime=prime(num);
if(is prime)
printf("is %s\n",len); else printf("is not %s\n",len);extra=get sum(num);
printf("sum (1..%d) is %d\n",num,extra);}}
CSE Dep Cursul 3, Dezvoltarea programelor 17/48
Good Code
int main(void)
{size t i, num;
for (i = 0; i < NUM ROUNDS; i++) {printf("Introduceti numar: ");
scanf("%zu", &num);
if (check if prime(num))
printf("%zu e numar prim.\n", num);
elseprintf("%zu nu e numar prim.\n", num);
printf("Suma (1..%zu) este %zu\n", num, compute sum until(num));
}
return 0;
}
CSE Dep Cursul 3, Dezvoltarea programelor 18/48
Good Code / Bad Code
http://blog.codinghorror.com/whos-your-coding-buddy/
CSE Dep Cursul 3, Dezvoltarea programelor 19/48
Compilare s, i interpretare
I un fis, ier cod sursa poate fi compilat sau interpretatI deosebirea ıntre compilare s, i interpretare
I compilare: codul sursa este translatat de un program denumitcompilator ın cod mas, ina (machine code), dupa care poate fiexecutat
I interpretare: un program este executat direct din cod sursaprin intermediul unui interpretor
I codul mas, ina este cel care ruleaza, ın final, pe procesorulsistemului
I compilatoare s, i interpretoareI GCC (GNU Compiler Collection) – compilator de C, C++,
Ada, FortranI MSVC (Microsoft Visual C) – compilator de C, C++I GCL (GNU Common Lisp) – interpretor de Common LispI Python: interpretor de PythonI Perl: interpretor de Perl
CSE Dep Cursul 3, Dezvoltarea programelor 20/48
Linking
I ın urma procesului de compilare, din modulul cod sursarezulta un modul obiect
I modulul obiect este fis, ier binar (.o, .obj): cont, ine codmas, ina
I mai multe fis, iere obiect (+biblioteci) sunt legate (linked)ıntr-un fis, ier executabil: cont, ine cod mas, ina
I cod sursa compilat → modul obiect (cod mas, ina)
I module obiect s, i biblioteci linkate → executabil
CSE Dep Cursul 3, Dezvoltarea programelor 21/48
De ce programare ın limbajul C?
I limbaj foarte cunoscut
I limbaj foarte puternic
I limbaj aproape de hardware s, i sistemul de operare, eficient,rapid
I documentat, ie, tutoriale, cart, i
CSE Dep Cursul 3, Dezvoltarea programelor 23/48
De ce nu programare ın limbajul C?
I limbaj relativ greu de ınvat,at
I limbaj periculos, necesita experient, a
I limbaj mai put, in expresiv
I dureaza mult timp sa dezvolt, i o aplicat, ie
I posibile probleme de portabilitate (Linux, Windows, Mac OSX, Android etc.)
CSE Dep Cursul 3, Dezvoltarea programelor 24/48
Procesul de dezvoltare pentru programe C
I scriere de fis, iere cod sursa: surse (.c) s, i headere (.h)
I urmarirea unui coding style
I compilarea fis, ierelor cod sursa ın fis, iere obiect
I linkarea fis, ierelor cod obiect s, i a bibliotecilor ın fis, ier executabil
I pe Unix/Linux, pentru compilare s, i linking folosim gcc (GNUC Compiler)
CSE Dep Cursul 3, Dezvoltarea programelor 25/48
Reminder: De la cod sursa la pachet software
fișcod sursă
fișier
cod sursă
fișier
obiect
fișier
obiect
fișier
executabilpachet
software
fișier
de datefișier de
configurare
bibliotecă
compilare
compilare
linking
dezvoltator
utilizator
CSE Dep Cursul 3, Dezvoltarea programelor 26/48
Compilare de program simplu ın C
Compilare cu gcc
user@host$ ls -F
hello-world.c
user@host$ gcc hello-world.c
user@host$ ls -F
a.out* hello-world.c
user@host$ ./a.out
Hello, World!
user@host$ rm a.out
user@host$ ls -F
hello-world.c
user@host$ gcc -Wall hello-world.c -o hello-world
user@host$ ls -F
hello-world* hello-world.c
user@host$ ./hello-world
Hello, World!
CSE Dep Cursul 3, Dezvoltarea programelor 27/48
Compilare s, i linking de program simplu ın C
Compilare cu gcc
user@host$ ls -F
hello-world.c
user@host$ gcc -Wall -c hello-world.c
user@host$ ls -F
hello-world.c hello-world.o
user@host$ gcc hello-world.o -o hello-world
user@host$ ls -F
hello-world* hello-world.c hello-world.o
user@host$ ./hello-world
Hello, World!
CSE Dep Cursul 3, Dezvoltarea programelor 28/48
Modularizare s, i module
I Do one thing, do one thing well!
I funct, ionalitat, ile diferite intra ın fis, iere sursa diferite
I evitam ıngramadirea funct, ionalitat, ilor ıntr-un singur fis, ier
I fiecare fis, ier este numit ,,modul” (module)sau ,,unitate decompilare” (compilation unit)
CSE Dep Cursul 3, Dezvoltarea programelor 29/48
Compilare s, i linking din surse multiple
Compilare cu gcc din mai multe surse
user@host$ ls -F
debug.h http_reply_once.c sock_util.c sock_util.h util.h
user@host$ gcc -Wall -c sock_util.c
user@host$ gcc -Wall -c http_reply_once.c
user@host$ ls -F
debug.h http_reply_once.o sock_util.h util.h
http_reply_once.c sock_util.c sock_util.o
user@host$ gcc http_reply_once.o sock_util.o -o http_reply_once
user@host$ ls -F
debug.h http_reply_once.c sock_util.c sock_util.o
http_reply_once* http_reply_once.o sock_util.h util.h
CSE Dep Cursul 3, Dezvoltarea programelor 30/48
Procesul de build
I building : obt, inerea unui executabil, a unui set de executabilesau a unui pachet software din fis, iere cod sursa
I o versiune de pachet construita se mai cheama s, i un build
I pentru programe scrise ın C ınseamna compilare, linking,ımpachetare
CSE Dep Cursul 3, Dezvoltarea programelor 32/48
Sisteme de build
I cele care permit automatizarea procesului de build
I make: folosit foarte mult ın lumea Unix/Linux
I Ant, Maven: folosite pentru Java
I Scons: scris ın Python
I Rake: folosit pentru Ruby
I altele
CSE Dep Cursul 3, Dezvoltarea programelor 33/48
Make
I sistem de build s, i automatizare
I folosit ındeosebi pentru automatizare procesului de compilare(dar nu numai)
I se scriu reguli ıntr-un fis, ier denumit ın general Makefile (unfel de fis, ier cu ,,ret,ete”)
I se ruleaza comenzile aferente regulilor, ın mod automat,folosind comanda make
I se obt, in target-uri (ın general fis, iere executabile) care depindde dependent,e (ın general fis, iere cod sursa)
CSE Dep Cursul 3, Dezvoltarea programelor 34/48
Folosire simpla a Make
1 hello-world: hello-world.c
2 gcc -Wall hello-world.c -o hello-world
Compilare folosind make pentru fis, ierul Makefile de mai sus
user@host$ ls -F
hello-world.c
user@host$ make
gcc -Wall hello-world.c -o hello-world
user@host$ ls -F
hello-world* hello-world.c
CSE Dep Cursul 3, Dezvoltarea programelor 35/48
Folosire mai avansata a Make
1 all: hello-world
2
3 hello-world: hello-world.c
4 gcc -Wall hello-world.c -o hello-world
5
6 clean:7 rm -f hello-world hello-world.o
Compilare folosind make pentru fis, ierul Makefile de mai sus
user@host$ ls -F
hello-world.c
user@host$ make
gcc -Wall hello-world.c -o hello-world
user@host$ ls -F
hello-world* hello-world.c
CSE Dep Cursul 3, Dezvoltarea programelor 36/48
Folosire eleganta a Make
1 .PHONY: all clean2
3 all: hello-world
4
5 hello-world: hello-world.o
6 gcc hello-world.o -o hello-world
7
8 hello-world.o: hello-world.c
9 gcc -Wall -c hello-world.c
10
11 clean:12 -rm -f hello-world hello-world.o
13 -rm -f *∼
Compilare folosind make pentru fis, ierul Makefile de mai sus
user@host$ ls -F
hello-world.c
user@host$ make -f Makefile.elegant
gcc -Wall -c hello-world.c
gcc hello-world.o -o hello-world
user@host$ ls -F
hello-world* hello-world.c hello-world.o
CSE Dep Cursul 3, Dezvoltarea programelor 37/48
Folosire eleganta a Make pentru surse multiple
1 .PHONY: all clean2
3 all: http reply once
4
5 http reply once: http reply once.o sock util.o
6 gcc http reply once.o sock util.o -o http reply once
7
8 http reply once.o: http reply once.c util.h debug.h sock util.h
9 gcc -Wall -c http reply once.c
10
11 sock util.o: sock util.c util.h debug.h sock util.h
12 gcc -Wall -c sock util.c
13
14 clean:15 -rm -f http reply once http reply once.o sock util.o
16 -rm -f *∼
Compilare folosind make pentru fis, ierul Makefile de mai sus
user@host$ ls -F
Makefile debug.h http_reply_once.c sock_util.c sock_util.h util.h
user@host$ make
gcc -Wall -c http_reply_once.c
gcc -Wall -c sock_util.c
gcc http_reply_once.o sock_util.o -o http_reply_once
user@host$ ls -F
Makefile http_reply_once* http_reply_once.o sock_util.h util.h
debug.h http_reply_once.c sock_util.c sock_util.o
CSE Dep Cursul 3, Dezvoltarea programelor 38/48
De la dezvoltator la utilizator
fișcod sursă
fișier
cod sursă
fișier
obiect
fișier
obiect
fișier
executabilpachet
software
fișier
de datefișier de
configurare
bibliotecă
compilare
compilare
linking
dezvoltator
utilizator
CSE Dep Cursul 3, Dezvoltarea programelor 40/48
GCC s, i Make
GCC GNU C Compiler
I compilatorul implicit pe distribut, iile Linux
I compileaza s, i linkeaza cod sursa ın C
Make
I utilitar pentru automatizarea procesului de build
I reguli, target-uri, dependent,e
CSE Dep Cursul 3, Dezvoltarea programelor 41/48
Resurse utile
I http://www.oualline.com/style/index.html
I http://www.gnu.org/software/make/
I http://www.gnu.org/software/libc/manual/
I http://git-scm.com/
I http://gitimmersion.com/
I http://www.moolenaar.net/habits.html
CSE Dep Cursul 3, Dezvoltarea programelor 42/48
Cuvinte cheie
I cod sursa
I cod mas, ina
I coding style
I editor
I IDE
I pachet software
I fis, ier executabil
I fis, ier obiect
I compilare
I linking
I limbajul C
I gcc
I modularizare
I sistem de build
I make
I Makefile
CSE Dep Cursul 3, Dezvoltarea programelor 43/48
Compilers: Principles, Techniques and Tools
I The Dragon Book
I Aho, Sethi, Ullman
I 2nd Edition, 2006
I cartea de baza pentru toate cursurile de compilatoare dinuniversitat, i
I expunere exhaustiva a analizei sintactice, semnatice s, iparserelor
CSE Dep Cursul 3, Dezvoltarea programelor 45/48
Guido van Rossum
I inventatorul limbajului de programare Python
I Benevolent Dictator for Life (BDFL) pentru Python
I a activat la Google ın perioada 2005-2012
I din 2013 lucreaza la Dropbox
CSE Dep Cursul 3, Dezvoltarea programelor 46/48
I google.com – cel mai folosit site din lume
I fondata de Larry Page s, i Sergey Brin
I lansata ın 1998
I init, ial: search engine + advertising
I aplicat, ii web
I Android
I Chrome
I YouTube
CSE Dep Cursul 3, Dezvoltarea programelor 47/48
Valgrind
I http://valgrind.org
I detectarea de probleme la rulare (runtime)
I ın principal folosit pentru probleme de lucru cu memoria
I Linux s, i Darwin (Mac OS X)
I un engine peste care ruleaza componente dedicate: memcheck(implicit), cachegrind, callgrind, helgrind
CSE Dep Cursul 3, Dezvoltarea programelor 48/48