Programowanie w systemie UNIX/Wstęp
Historia
edytujFilozofia Unixa
edytujFilozofia Uniksa została udokumentowana przez Douga McIlroya] w Bell System Technical Journal z 1978:[1]
- Spraw, aby każdy program robił jedną rzecz dobrze.
- Aby wykonać nową pracę, zamiast komplikować stare programy dodając nowe "funkcje", należy budować od nowa.
- Oczekuj, że dane wyjściowe każdego programu staną się danymi wejściowymi innego, jeszcze nieznanego programu. Nie zaśmiecaj danych wyjściowymi obcymi informacjami. Unikaj rygorystycznie kolumnowych lub binarnych formatów wejściowych. Nie nalegaj na interaktywne wprowadzanie danych.
- Projektuj i buduj oprogramowanie, a nawet systemy operacyjne, które należy wypróbować na wczesnym etapie, najlepiej w ciągu kilku tygodni. Nie wahaj się wyrzucić niezgrabnych części i odbudować je. Używaj narzędzi zamiast niewykwalifikowanej pomocy, aby uprościć zadanie programistyczne, nawet jeśli musisz objechać, aby zbudować narzędzia i spodziewasz się, że niektóre z nich wyrzucisz po zakończeniu ich używania.
Została ona później podsumowany przez Petera H. Salusa w A Quarter-Century of Unix (1994):
- Pisz programy, które robią jedną rzecz i robią to dobrze.
- Napisz programy do współpracy.
- Pisz programy do obsługi strumieni tekstowych, ponieważ jest to uniwersalny interfejs.
W swoim nagradzanym[3] referacie uniksowym z 1974 r., Ritchie i Thompson przytaczają następujące rozważania dotyczące projektowania:
- Ułatw pisanie, testowanie i uruchamianie programów.
- Interaktywne użycie zamiast przetwarzania wsadowego.
- Oszczędność i elegancja wzornictwa ze względu na ograniczenia wielkości („zbawienie przez cierpienie”).
- System samonośny: całe oprogramowanie Unix jest utrzymywane w systemie Unix.
Porównaj
- [1] - Home of dwm, dmenu and other quality software with a focus on simplicity, clarity, and frugality, software that sucks less
Co powinniśmy wiedzieć
edytuj- 97-things-every-programmer-should-know
- Złote zasady programowania
- How To Become A Hacker by Eric Steven Raymond
- LFS: Linux From Scratch (LFS) is a project that provides you with step-by-step instructions for building your own custom Linux system, entirely from source code.
Standardy
edytuj- POSIX
- Single UNIX Specification
Posix
edytujPOSIX (ang. Portable Operating System Interface for UNIX) – przenośny interfejs dla systemu operacyjnego Unix.
POSIX to odpowiedź na próby standaryzacji różnych odmian systemu operacyjnego Unix. Prace nad tym standardem rozpoczęto ok. roku 1985, a kierowało nimi stowarzyszenie IEEE, dlatego POSIX znany jest również pod nazwą IEEE 1003. Nad dalszym rozwojem standardu sprawuje pieczę The Open Group we współpracy z IEEE i firmami komputerowymi takimi jak: IBM, Sun Microsystems, Hewlett-Packard, NEC Corporation, Fujitsu, Hitachi. Kolejne edycje standardu wydawane przez The Open Group noszą nazwy Single UNIX Specification, Version x, gdzie x to kolejny numer wersji. Aktualna wersja jest trzecią a pojawiła się w roku 2001. Od roku 2003 jest to norma międzynarodowa ISO/IEC 9945:2003.
Nazwę „POSIX” zaproponował Richard Stallman[2].
POSIX standaryzuje:
- interfejs programistyczny (API);
- interfejs użytkownika, np. polecenia systemowe takie jak awk, echo, ed;
- właściwości powłoki systemowej.
Single UNIX Specification
edytujSingle UNIX Specification – dokument publikowany przez The Open Group, definiujący jak powinien zachowywać się system klasy UNIX.
Obecna wersja ma numer 3. Zawartość jest oparta w dużej mierze na specyfikacji POSIX, ale Single UNIX Specification stało się około roku 2001 bardziej popularne wśród twórców systemów operacyjnych. Stało się tak głównie dlatego, że The Open Group udostępnia swój dokument znacznie taniej.
Tryby
edytujMożliwa jest praca w trybie:[3]
- graficznym (GUI)
- tekstowym: np. gcc z linii poleceń powłoki bash
- czysty tryb tekstowy
- w trybie graficznym przez konsolę
Języki programowania
edytujDostępnych jest wiele języków programowania. Dzielimy je wg przeznaczenia na:
- języki ogólnego przeznaczenia ( ang. General-purpose programming language )
- języki dziedzinowe ( wąskiego przeznaczenia ( ang. A domain-specific language = DSL)
- EDSL
"The biggest difference is that Imperative programming is about Control flow while Functional programming is about Data flow. Another way to say it is that functional programming only uses expressions while in imperative programming both expressions and statements are used." [4]
Środowiska programistyczne
edytujDo programowania wykorzystujemy:
- wiersz poleceń:
- zintegrowane środowisko programistyczne (IDE) (porównanie właściwości)
- osobne programy:
- edytory: Vim , Gedit
- translator:
- kompilatory: gcc
- interpreter: interpreter języka BASH, Perl, Maxima
- biblioteki
- do tworzenia GUI
- wxWIdgets
- QT
- GTK+
- ClanLib
- do tworzenia grafiki
- Opengl
- SDL
- DIrectFB
- do tworzenia GUI
Program graficzny GIMP oferuje wiele możliwości programistom
Wyszukiwarki
edytujNarzędzia
edytuj- czytanie kodu [10]
Przypisy
edytuj- ↑ Unix_philosophy
- ↑ The origin of the name POSIX.
- ↑ The Art of Unix Programming by Eric Steven Raymond
- ↑ softwareengineering.stackexchange question : functional-programming-vs-oop
- ↑ Linux Shortcuts and Commands
- ↑ wandbox
- ↑ codepad
- ↑ Ideone is an online compiler and debugging tool which allows you to compile source code and execute it online in more than 60 programming languages
- ↑ c++ shell
- ↑ Code-Reading Tools by Diomidis Spinellis