Strona główna | English English
Attached
Powrót | Poprzedni | Następny

O jednolitą terminologię

“Programowanie”

Programowanie komputerów jest już dziedziną niemłodą i większość pojęć, jak również odpowiadających im nazw jest ugruntowana. Jednakże w wyniku nieustannego rozwoju środków programowania powstaje wiele nowych terminów jeszcze niezbyt dokładnie sprecyzowanych. Istnieją też terminy od dawna używane, którym jednak daleko – z punktu widzenia poprawności językowej – do postaci idealnej.

Ostatnio – na przykład – pojawił się termin język wysokiego rzędu, z zamiarem wyparcia dotychczas używanego – języka wysokiego poziomu (ang. high-level language). Nie wydaje mi się, aby taka zamiana była uzasadniona. Pomijając celowość i skuteczność wypierania terminów powszechnie używanych przez inne, zatrzymam się nad poprawnością obu określeń.

Mówiąc ogólnie – omawiane pojęcie różnicuje języki programowania ze względu na ich przystosowanie do określonego typu komputera. Podstawowym kryterium zaliczenia języka, w powyższym sensie, do jakiejś kategorii, jest stopień jego zależności od budowy konkretnego komputera lub określonej klasy komputerów. Zatem języki najbardziej zależne od konkretnych komputerów, np. języki symboliczne (ang. assembly languages) cechuje niższy poziom (nie rząd) ogólności i (konsekwentnie) jeżyki mniej zależne – wyższy poziom.

W językach bardziej zależnych od komputera pisze się oprogramowanie niższego poziomu (nie rzędu, bo nie ma rzędów oprogramowania), a w językach mniej zależnych – wyższego poziomu. Pojęcie rzędu języka mogłoby istnieć w praktyce programowania, gdyby zostało stworzone w teorii programowania i miało sens liczbowy tak, jak np. rząd równania w matematyce.

Określenie język wysokiego rzędu wydaje się niepoprawne także z przyezyn czysto językowych. O ile termin wysoki poziom nikogo nie razi, to wątpię w poprawność wysokiego rzędu. Jeżeli Amerykanie utworzyli grupę badawczą zajmującą się zagadnieniami utworzenia języka wysokiego poziomu i nazwali ją High Order Language Working Group, to nie znaczy, że ta nazwa jest poprawna.

Wyjaśnienia wymaga – w moim przekonaniu – także sprawa poprawnego posługiwania się terminem asembler. W języku polskim funkcjonuje on zarówno jako program tłumaczący (poprawnie), jak i język symboliczny (niepoprawnie). Aby rozwiać wątpliwości, posłużę się normą międzynarodową ISO 2382, która w sposób jednoznaczny precyzuje zakres obu pojęć. Asembler (ang. assembly program) jest to – według niej – program komputerowy wykorzystywany do zestawiania (w oryginale: a computer program used to assemble).

Język symboliczny (wg normy PN-71/T-01016 odpowiednik terminu assembly language) jest to język ukierunkowany maszynowo, którego rozkazy odpowiadają wzajemnie jednoznacznie rozkazom komputera i który umożliwia używanie makrorozkazów. Nazywanie języka symbolicznego asemblerem jest nieporozumieniem i wzięło się prawdopodobnie stąd, że niektórzy producenci określają język symbolicznie swoich komputerów mianem ASSEMBLER, lecz wówczas jest to tylko nazwa własna, a nie termin ogólny.

Jeżeli chodzi o używanie określenia język asemblera, to powinno być dopuszczalne, ponieważ jest choćby skrótową formą sformułowania: “język pisania programów tłumaczonych przez asembler”. Natomiast za pełnoprawne (wobec terminu asembler) uważałbym określenie program tłumaczący, oczywiście w tych tylko przypadkach, w których nie zachodzi obawa nierozróżnienia różnych rodzajów programów tłumaczących.

Dalsze wątpliwości wzbudza termin asembler skrośny będący dosłownym przekładem angielskiego cross-assembler. Przypomnijmy, że jest to program tłumaczący wykonywany na komputerze innym od tego, dla którego tworzy kod wynikowy. Tej cechy programu chyba nie odzwierciedla przymiotnik “skrośny”. Nie ujmując niczego precyzji określenia, wprost przeciwnie – zwiększając ją, proponowałbym wprowadzenie terminu asembler zewnętrzny, który jest bardziej poprawny językowo.

Polskie normy nie precyzują nazw wielu programów wchodzących w skład oprogramowania podstawowego (upowszechniający się polski odpowiednik angielskiego terminu system software). Często zdarza się, że na podstawie samej nazwy trudno zorientować się, o jaki program w istocie chodzi, brakuje bowiem jednoznaczności. Nie wiadomo – na przykład – jaki termin spośród następujących jest poprawny: dyrygent, egzekutor, monitor, program nadzorczy czy program zarządzający.

W innych wypadkach do języka polskiego przenoszone są żywcem terminy angielskie, np. editor, loader, itp., co jest niedopuszczalne. Od niedawna pojawiają się odpowiedniki polskie mające obcy źródłosłów, inny od określenia oryginalnego, co nie jest wyjściem zbyt szczęśliwym (np. koordynator – ang. scheduler, konsolidator – ang. linker).

Terminy program zarządzający i system operacyjny zostaną omówione oddzielnie. W każdym razie ustalając nazwę programu “sterującego wykonywaniem innych programów oraz przebiegiem pracy komputera” (ISO 2382) warto pamiętać o tym. że samo pojęcie nie jest jeszcze w pełni zdefiniowane, ponieważ nie ma jednolitej koncepcji co do funkcji tego programu.

W takich przypadkach, jak editor czy debugger istnieją odpowiedniki polskie: program redagujący (nie wydawniczy) i program uruchamiania. Należy tylko przestrzegać ich używania. Podobnie ma się rzecz z terminem loader (program ładujący, a nie ładowacz). Gorzej z terminem bootstrap, który może w ogóle nie doczekać się polskiego odpowiednika. Jeżeli jednak byłaby taka potrzeba, to można zaproponować określenie program samoładujący, ponieważ bootstrap spełnia funkcje programu ładującego w odniesieniu do samego siebie.

Przez wiele lat odpowiednikiem angielskiego terminu linker był program łączący i nie widzę powodu, dla którego należałoby tę nazwę zmieniać na konsolidator, użyty w kilku niedawno wydanych publikacjach książkowych. Pomijając spór, czy konsolidacja i łączenie jest tym samym, należy stwierdzić, że zastępowanie wyrazów angielskich polskimi odpowiednikami o obcym źródłosłowie jest praktyką niebezpieczną. Chciałbym widzieć minę tego, kto wymyślił termin konsolidator, gdyby w terminologii angielskiej pojawiło się określenie consolidator. Podobnie ma się sprawa z wyrazem koordynator, jako odpowiednikiem angielskiego terminu scheduler (program szeregujący).

Ten ostatni termin (scheduler) jest na tyle ważny i rzadko precyzyjnie określany, że warto podać jak się go rozumie w normie ISO. Będzie to o tyle utrudnione, że przedtem należy znaleźć odpowiednik terminu dispatcher, przy użyciu którego zdefiniowano program szeregujący. Dispatch znaczy dosłownie wysyłka lub spedycja. Natomiast norma ISO 2382 podaje następujące określenie: to dispatch – przydzielać czas procesora pracom lub zadaniom gotowym do wykonania. Z kolejnego określenia wynika, że dispatcher jest programem, którego zadaniem jest przydzielanie procesora w sensie określonym w poprzednim zdaniu. Mówiąc inaczej dispatcher jest programem, który wykonuje funkcję związaną z przekazaniem sterowania nowemu programowi. W literaturze polskiej znalazłem kilka prób zastąpienia terminu dispatching (nadzorowanie, przydzielanie, uruchamianie), jednak żadna z tych nazw nie jest jednoznaczna.

Ze względu na fakt, że dispatcher zajmuje się ekspediowaniem, wysyłaniem programów (zadań, procesów) do procesora (w ogólniejszym przypadku – do procesorów). a więc jakby ich rozprowadzaniem, właśnie tak określiłbym jego funkcję, a sam program nazwałbym programem rozprowadzającym. Odpowiada to treści pojęcia i jest zgodne np. z określeniami francuskimi z tej samej normy: répartir, distribuer. Według niej czasownik to schedule znaczy “wybierać prace lub zadania, które będą rozprowadzane”. Takiemu określeniu czasownik szeregować odpowiada dokładniej niż mający szersze znaczenie – koordynować. Prostą konsekwencją tego stwierdzenia jest nazwanie programu wykonującego wspomnianą funkcję programem szeregującym.

Nazywanie programów według zasady program + imiesłów czynny lub bierny (lub program + przydawka dopełniaczowa) jest przyjęte w języku polskim. Wystarczy zajrzeć do normy PN-71/T-01016 lub którejś z ostatnio wydanych książek (np. A. C. Shaw, Projektowanie logiczne systemów operacyjnych; WNT, Warszawa, 1980). Choć takimi terminami, jak: translator, kompilator, asembler lub symulator na pewno łatwiej się posługiwać, to nie widzę konieczności określania każdego programu pojedynczym wyrazem. Nie mamy w rodzimym języku mechanizmów ku temu, więc nie ulegajmy manierze.

Terminologia dotycząca sfery oprogramowania jest tyleż ważna, co kontrowersyjna, jako że nie ma informatyka, który by nie programował. Istnieje – oczywiście – wiele innych terminów wartych omówienia lecz o nich – przy innej okazji.

Janusz Zalewski

Źródło: “Informatyka,” nr 12/1980, str. 36-37



  Poprzedni | Następny
Strona dodana 24 maja 2003 roku.

Copyright © 2002-2005 Marcin Wichary
Wersja do druku | Kontakt | Mapa serwisu