Otwórz menu główne

Zaszłość (programowanie)

Zaszłość – element składni lub konstrukcja programistyczna, która występuje bądź występowała we wcześniejszych wersjach, standardach lub implementacjach, a w kolejnych został albo zniesiony, albo nie jest zalecany do dalszego stosowania, ewentualnie pozostał dla zachowania zgodności, lecz nie wpływa na działanie programu.

Powstawanie zaszłościEdytuj

Język programowania, o ile pozostaje w użyciu, nieustannie rozwija się i ewoluuje, najczęściej zgodnie z pewnymi tendencjami występującymi w informatyce, rozwojem systemów komputerowych obejmujących zarówno sprzęt jak i systemy operacyjne. Taka ewolucja powoduje, iż pewne elementy języka tracą na znaczeniu, stają się zbędne czy wręcz utrudniają dalszy jego rozwój. Takie konstrukcje i elementy składni określane są mianem zaszłości. Nie zaleca się ich dalszego stosowania, a w następnych implementacjach lub standardach mogą stać się w ogóle niedostępne. Oznacza to, że kod źródłowy napisany w danym języku programowania z użyciem zaszłości nie będzie mógł być prawidłowo użyty w przyszłych implementacjach bez dokonania korekt eliminujących daną konstrukcję lub element składni języka.

Rodzaje zaszłościEdytuj

Dany element języka może być:

  • nadal dostępny, lecz równocześnie może istnieć nowy element, oferujący analogiczne, ale korzystniejsze możliwości
  • nadal dostępny, lecz niezalecany do stosowania, w przyszłości może być całkowicie usunięty z języka
  • nadal dostępny dla zachowania zgodności wcześniej stworzonego kodu źródłowego, lecz może nie mieć jakiegokolwiek wpływu na działanie programu

Zaszłości w językach programowaniaEdytuj

Języki wysokiego poziomu np. Pascal, CEdytuj

Instrukcja skoku, pochodząca z asemblera, w językach wysokiego poziomu (np. Pascal, C) nie jest zalecana do stosowania, gdyż zmniejsza czytelność kodu.

Język CEdytuj

We wczesnych implementacjach języka C pewne elementy składni były definiowane odmiennie[1], np.:

  • zapis złożonych operatorów przypisania miał postać np. =+ zamiast stosowanego dzisiaj+=, obecnie zapis poprzedni jest już niedostępny
  • zapis inicjalizacji zmiennych nie zawierał znaku równości, np. int x 1; obecnie zapisujemy int x = 1;, a poprzedni sposób zapisu jest już niedostępny
  • we wczesnych wersjach definicje parametrów występowały wyłącznie po nagłówku funkcji przed nawiasem klamrowym otwierającym ciało funkcji, niedopuszczalne było definiowanie parametrów na liście paramentów w nawiasach okrągłych, w których umieszczano jedynie ich deklarację.

FortranEdytuj

Fortran to pierwszy język programowania wysokiego poziomu[potrzebny przypis], w swych początkach często bywał definiowany dla poszczególnych komputerów indywidualnie. W języku tym wiele konstrukcji związanych ze specyfiką konkretnego systemu komputerowego było pomijane jako zaszłość w kolejnych standardach i implementacjach[2][3].

Modula 2Edytuj

W języku Modula 2 wprowadzono zmiany w modułach definiujących, eliminując listę eksportową, która stała się zaszłością. Wprowadzona nowa zasada, że sama definicja takiego modułu stanowi listę eksportową, sprawiła, że lista eksportowa stała się zbędna[4].

PascalEdytuj

W języku Pascal przykładową zaszłością jest słowo packed, pełniące funkcję modyfikatora w deklaracji zmiennej strukturalnej (tablicowej, rekordowej), działającego jak dyrektywa kompilatora zlecająca wybór takiego rozmieszczenia elementów typu strukturalnego w pamięci, aby zmienna zajmowała jak najmniej miejsca w pamięci operacyjnej (a nie rozmieszczenie elementów np. od granicy słowa, czyli od adresu spełniającego pewne, narzucone kryterium, mogącego przyspieszać działanie programów)[5]. W późniejszych implementacjach, np. Turbo Pascal od wersji 4.0, typy strukturalne zawsze są „pakowane” i użycie bądź pominięcie słowa packed, nie ma żadnego znaczenia. Słowo to jednak zostało zachowane w celu wstecznej kompatybilności z kodami źródłowymi zapisanymi dla wcześniejszych wersji Pascala[6]. Podobnie jest z nagłówkiem programu program, który w Turbo Pascalu może być całkowicie pominięty[6].

Basic i Visual BasicEdytuj

Język Visual Basic jako sukcesor języka Basic zawiera w sobie wiele zaszłości, szczególnie składniowych, przejętych zarówno z Basica, jak i wcześniejszych wersji Visual Basica. Przykładem może być instrukcja obecnie wyeliminowanej wersji pętli WHILE … WEND.

W językach Basic i Visual Basic można prześledzić również ewaluację zaszłości na przykładzie konstrukcji realizującej bezparametrowe podprogramy: GOSUB numer_linii ... RETURN. Konstrukcja ta w pierwszych wersjach języka Basic była jedyną umożliwiającą realizację podprogramów. W kolejnych wersjach Basica wprowadzono parametryzowane, "prawdziwe" podprogramy SUB ... END, wywoływane użytym w deklaracji i definicji podprogramu identyfikatorem (np. QBasic dostępny w MS DOS). W tym momencie w zasadzie konstrukcja pierwotna GOSUB numer_linii... RETURN stała się przestarzałą zaszłością, lecz była nadal utrzymywana głównie ze względu na zgodność i możliwość użycia kodów źródłowych napisanych dla wcześniejszych wersji Basica. Także Visual Basic i VBA przejęły tę konstrukcję, choć jako niezalecaną, gdyż wprowadzono do nich nie tylko podprogramy SUB i FUNCTION, ale także programowanie obiektowe. Niemniej w obrębie podprogramów konstrukcja nadal była dostępna.

Obecnie[kiedy?], np. w Visual Basic 2008, jednym ze środowisk programistycznych dostępnych w serii Microsoft Visual Studio, całkowicie zrezygnowano z tej konstrukcji – nie można już w nim stosować instrukcji GOSUB numer_linii... RETURN.

PrzypisyEdytuj

  1. Brian W. Kernighan, Dennis M. Ritchie, Język C, Wydawnictwa Naukowo-Techniczne, Warszawa 1988, Seria: Biblioteka Inżynierii Oprogramowania, ​ISBN 83-204-1067-3
  2. Michael Marcotty, Henry Ledgord, W kręgu języków programowania, tłumaczenie: Krystyna Jerzykiewicz, Wydawnictwa Naukowo-Techniczne, Warszawa 1980, Seria: Biblioteka Inżynierii Oprogramowania, ​ISBN 83-204-1342-7
  3. Ryszard K. Kott, Krzysztof Walczak, Programowanie w języku Fortran 77, Warszawa: Wydawnictwa Naukowo-Techniczne, 1991, ISBN 83-204-1362-1, OCLC 749999902.
  4. Niklaus Wirth, Modula 2, Wydawnictwa Naukowo-Techniczne, Warszawa 1987, Seria: Biblioteka Inżynierii Oprogramowania, ​ISBN 83-204-0828-8
  5. Michał Iglewski, Jan Madey, Stanisław Matwin, Pascal. Język wzorcowy – Pascal 360., Wydawnictwa Naukowo-Techniczne, Warszawa 1984, wydanie trzecie – zmienione, Seria: Biblioteka Inżynierii Oprogramowania, ​ISBN 83-204-0597-1
  6. a b Andrzej Marciniak, Borland Pascal 7.0, Wyd. Nakom, Poznań 1994, seria: Biblioteka Użytkownika MikrokomputerówISBN 83-85060-53-7​, ISSN 0867-6011