Priorytety w programowaniu wysokiej jakości
- niezawodność wewnętrzna
- minimalizacja (m.in. wykluczanie powtórzeń i błędów logicznych)
- szybkość
Podpowiedź: dwa pierwsze cele należy realizować jednocześnie.
Analiza problemu do rozwiązania przez maszynę cyfrową
- Definicja zagadnienia.
- Wyliczenie metod rozwiązania.
- Wstępna definicja zagadnienia w środowisku programowym/sprzętowym maszyny cyfrowej.
- Synteza metod realizacji.
- Realizacja.
- Ocena cząstkowej realizacji za pomocą wyobrażenia całkowitej realizacji.
Warunkowo do punktu 5. (wcześniej ustalone). - Decyzja o kontynuacji lub zmianie metod realizacji (i archiwizacji cząstkowej realizacji).
Warunkowo do punktu 5. (na podstawie oceny). - Ocena całkowitej realizacji.
- Wykonanie interfejsu funkcji i jej dokumentacji, nadanie proponowanej nazwy, włączenie do biblioteki funkcji; włączenie algorytmu do bibliotek szablonów algorytmów.
- Wysłanie źródeł funkcji do analizatora szybkości wykonania na różnych maszynach (wynik: ocena szybkości dla maszyn).
punkt | analiza | priorytety | |||
---|---|---|---|---|---|
w środowisku człowieka | w środowisku maszyny | 1 | 2 | 3 | |
1 | ✓ | ‒ | ‒ | ‒ | |
2 | ✓ | ‒ | ‒ | ‒ | |
3 | ✓ | ‒ | ‒ | ‒ | |
4 | ✓ | ✓ | ✓ | ||
5 | ✓ | ✓ | ✓ | ||
6 | ✓ | ✓ | ✓ | ✓ | |
7 | ✓ | ✓ | |||
8 | ✓ | ✓ | ✓ | ✓ | ✓ |
9 | ✓ | ‒ | ‒ | ‒ |
Minimalizacja nie uprawnia do wybierania rozkazów maszynowych o krótkich kodach, ale do stosowania małej liczby rozkazów. Szybkość nie uprawnia do seryjnego powtarzania sekwencji rozkazów zamiast stosowania pętli.
Programowanie maszyn jednowymiarowych (liniowych)
- ‣ Niezależność od długości operacji: dowolnie długie i w dowolnym momencie — przerwy w pracy, dowolna prędkość wykonywania obliczeń.
- ‣ Operacje inkrementacyjne są najwyższą formą algorytmu (liniowe operacje na pamięci, inkrementacja, dekrementacja licznika, inkrementacje z buforem na dane w rejestrach procesora i in.).
- ‣ Skoki do instrukcji użyte głównie do wykonywania pętli (powrót na początek pętli, wyskok za końcem pętli, wskok do początku pętli).
- ‣ Brak samomodyfikującego się kodu programu, brak wewnętrznego pakowania/szyfrowania kodu, program składa się wyłącznie z segmentu(ów) kodu z dynamicznym (programowym) zarządzaniem segmentem danych (alokowanie sterty).
- ‣ Należy prawie wyłącznie używać liczb naturalnych procesora (typ “int” jako podstawa) albo koprocesora.