Cursul 3 - Dezvoltarea programelorelf.cs.pub.ro/uso/res/cursuri/curs-03/curs-03-handout.pdf ·...

Post on 04-Sep-2019

5 views 0 download

transcript

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

Google

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