Programowanie w systemie UNIX: Różnice pomiędzy wersjami

Z Wikibooks, biblioteki wolnych podręczników.
Usunięta treść Dodana treść
Linia 76: Linia 76:
# [[Programowanie_w_systemie_UNIX/pliki|Pliki]]
# [[Programowanie_w_systemie_UNIX/pliki|Pliki]]
## [[Programowanie_w_systemie_UNIX/Kodowanie|tekstowe]]
## [[Programowanie_w_systemie_UNIX/Kodowanie|tekstowe]]
## [[Programowanie_w_systemie_UNIX/plik_binarny|binarne]]
## binarne
# Obliczenia
# Obliczenia
## obliczenia symboliczne (CAS) i numeryczne (wektorowe (macierzowe), równoległe)
## obliczenia symboliczne (CAS) i numeryczne (wektorowe (macierzowe), równoległe)

Wersja z 17:09, 28 maj 2020

Ten podręcznik opisuje podstawy programowania w Linuksie

Wprowadzenie

  1. Wstęp
  2. dostęp
    1. Konsola - tryb tekstowy
      1. Zdalny dostęp (ang. remote acces): ssh
      2. Przekierowania, łączenie poleceń (potok, polecenia złożone)
    2. tryb graficzny
  3. Pamięć
  4. licencja

Języki programowania i narzędzia

  1. BASH
    1. ack - "lepszy niż grep" napisany w Perlu
    2. awk lub gawk (gnu awk)
    3. bc
    4. dc
    5. du
    6. diff: różnice, łaty
    7. file
    8. find
    9. grep
    10. ldconfig
    11. ldd
    12. ls
    13. od
    14. sed
    15. ssh
    16. time
    17. wc
  2. C : CPU, GPU, obliczenia numeryczne, grafika, ...
  3. C++
  4. D
  5. Erlang
  6. Fortran
  7. Go
  8. Haskell
  9. Icon
  10. Java
  11. JavaScript
  12. Julia
  13. Lisp - Common Lisp, Scheme, Clojure, Elisp, ...
  14. Lua
  15. OCaml
  16. Pascal
  17. Perl
  18. PHP
  19. PostScript
  20. Prolog
  21. Python
  22. Ruby
  23. Rust
  24. swift

Metody/technologie/specjalistyczne programy

  1. Dane
    1. typy
      1. wg możliwości odczytu:
        1. Dane do odczytu maszynowego
        2. Dane do odczytu przez człowieka
      2. wg zawartości
        1. tekstowe
        2. numeryczne (liczbowe)
        3. obrazy
      3. wg ilości i złożoności danych
        1. małe zbiory
        2. średnie zbiory
        3. Big data
    2. Bazy danych
      1. SQL
        1. MySql w PHP
  2. Pliki
    1. tekstowe
    2. binarne
  3. Obliczenia
    1. obliczenia symboliczne (CAS) i numeryczne (wektorowe (macierzowe), równoległe)
      1. Programy
        1. Maxima
        2. GNU Octave
        3. PARI/GP
      2. biblioteki
      3. konwersja danych numerycznych do symbolicznych  :
        1. The Inverse Symbolic Calculator (ISC):
    2. Statystyczne
      1. R, czyli języku programowania i środowisku do obliczeń statystycznych i wizualizacji wyników
    3. Obliczenia współbiezne, równoległe i rozproszone
      1. OpenMP
      2. OpenMPI
      3. GPGPU
        1. OpenGl
        2. OpenCl
        3. CUDA
        4. ArrayFire
        5. par4all
        6. Vulkan API
        7. OpenACC
  4. www
    1. Django
    2. PHP
  5. Grafika - komputerowe przetwarzanie obrazów
    1. GIMP
    2. gnuplot
    3. Processing
    4. WebGl
    5. WebCl
    6. ImageMagic
    7. OpenCV C++ / Python
    8. Dane tekstowe w obrazach, metadata
  6. tekst: obsługa biura / przetwarzanie tekstów / publikacje
    1. Pliki tekstowe, kodowanie i formatowanie
    2. WYSIWYG (ang. What You See Is What You Get – widzisz to, co dostajesz)
      1. LibreOffice, OpenOffice.org
      2. Emacs
      3. Vim
      4. Gedit
    3. języki znaczników
      1. TeX
        1. LateX
      2. markdown format
    4. Przetwarzanie tekstu w językach ogólnego przeznaczenia
      1. Wyrażenia regularne

Budowanie programu

  1. planowanie: sformułowanie problemu i opis algorytmu w języku naturalnym
  2. Dokumentacja kodu
  3. Formatowanie kodu (ang. indent)
  4. Kontrola wersji
    1. ręcznie lub łaty i diff
    2. scentralizowane
      1. Subversion
      2. CVS
    3. rozproszone (zdecentralizowane)
      1. Git
      2. Mercurial
  5. Kompilacja, linkowanie, instalacja = budowanie. Jak zbudować program ze źródeł ?
    1. Ręczne (ang. "hand compilation", aka "manual build")
    2. Automatyczne: Narzędzia wspomagające budowę aplikacji
      1. Make = build system
      2. Apache Ant
      3. SCons
      4. Rake - Ruby Make
      5. Flex_i_Bison
      6. Pants, Apache Maven, gradle, sbt
  6. linkowanie (konsolidacja):
    1. ręcznie wpisana ścieżka [1]
    2. pkg-config
    3. zależności (ang. dependencies)
  7. Odpluskwiane (ang. debugging), testy bezpieczeństwa
    1. z użyciem printf " "printf is the world’s simplest debugger" John L. Miller in Quora
    2. gdb
    3. VAlgrind, memleax
    4. kcachegrind[2]
    5. grafy
      1. Dependency graph
      2. call graph
    6. Statyczna analiza kodu[3]
      1. cppcheck
      2. lint
      3. stack [4]
      4. kint [5]
      5. sparse [6]
  8. testowanie
  9. optymalizacja (profilowanie) : Najpierw profiluj, potem optymalizuj !
    1. gprof
  10. instalacja i odinstalowanie ( usuwanie) programów
  11. Praca grupowa
    1. Jak rozwijać gotowe projekty?
    2. Jak zadawać pytania?

Literatura

  1. Literatura
  1. Library autotools
  2. [1]
  3. Static Analysis Problem Type Reference
  4. stack - is a static checker that detects unstable code in C/C++ programs
  5. KINT is a tool that uses scalable static analysis to detect integer errors in C programs.
  6. Sparse - a Semantic Parser for C