| Ten artykuł należy dopracować zgodnie z zaleceniami edycyjnymi: poprawić błędy językowe lub stylistyczne (pomoc: powszechne błędy, dla tłumaczy; zalecenia), np. "konstrukcja programistyczna, który występuje", "w Visual Basic 2008, jednego ze środowisk", interpunkcja. Dokładniejsze informacje o tym, co należy poprawić, być może znajdują się na stronie dyskusji tego artykułu. Po wyeliminowaniu niedoskonałości prosimy usunąć szablon {{Dopracować}} z kodu tego artykułu. |
Zaszłość w programowaniu[1], to 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 zalecany do dalszego stosowania, ewentualnie pozostał dla zachowania zgodności lecz stracił jakiekolwiek merytoryczne znaczenie.
Spis treści |
| Tę sekcję należy dopracować zgodnie z zaleceniami edycyjnymi: poprawić styl – powinien mieć encyklopedyczną formę. Dokładniejsze informacje o tym, co należy poprawić, być może znajdują się na stronie dyskusji tego artykułu. Po wyeliminowaniu niedoskonałości prosimy usunąć szablon {{Dopracować}} z kodu tego artykułu. |
Język programowania jest definiowany przez autorów. W toku użytkowania jego pierwszej implementacji, kolejnych standaryzacji i implementacji, język 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 konstrukcje i elementy języka, tracą na znaczeniu, stają się zbędne, czy wręcz niemożliwe do realizacji. 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.
Jak wyżej zaznaczono wstępnie zaszłości mogą mieć różny charakter. Dany element bądź konstrukcja języka może być:
Instrukcja Goto pochodząca z asemblera skok bezwarunkowy. Nie zalecane gdyż burzy strukturę kodu.
W języku C, we wczesnych implementacjach języka, pewne, obecne elementy składni były definiowane odmiennie[1], np.:
=op, a nie jak obecenie op=, np. poprzednio =+, zamiast współczesnego +=, obecnie zapis poprzedni jest już niedostępny,int x 1; obecnie zapisujemy int x = 1; obecnie zapis poprzedni jest już niedostępny,Fortran, to pierwszy język programowania wysokiego poziomu, w swych początkach, w dużej części definiowany dla poszczególnych komputerów indywidualnie. W języku tym wiele konstrukcji związanych ze specyfiką konkretnego systemu komputerowego, zostało pominiętych, jako zaszłość, w kolejnych standardach i implementacjach[2][3].
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].
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].
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 tych (Basic i Visual Basic) można prześledzić również ewaluację zaszłości na przykładzie konstrukcji realizującej bezparametrowe pesudopodprogramy: GOSUB numer_linii ... RETURN. Konstrukcja ta w pierwszych wersjach języka Basic była jedyną, umożliwiającą realizację podprogramów. W kolejnych wersjach Bascia 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ął tę konstrukcję, choć oczywiście niezalecaną, gdyż wprowadzono nie tylko podprogramy SUB i FUNCTION ale i programowanie obiektowe. Niemniej w obrębie podprogramów nadal konstrukcja była dostępna. Obecnie, np. w Visual Basic 2008, jednego ze środowisk programistycznych dostępnych w serii Microsoft Visual Studio, całkowicie zrezygnowano z tej konstrukcji – nie można już stosować instrukcji GOSUB numer_linii... RETURN w tym systemie programowania.