CLU (język programowania) - CLU (programming language)

CLU
Paradygmat wieloparadygmat : obiektowy , proceduralny
Zaprojektowany przez Barbara Liskov i jej uczniowie
Deweloper Instytut Technologii w Massachusetts
Po raz pierwszy pojawiły się 1975 ; 46 lat temu ( 1975 )
Wersja stabilna
Natywny CLU 1.5 ( SPARC , VAX ) / 26 maja 1989 ; 32 lata temu ( 1989-05-26 )

Przenośny CLU / 6 listopada 2009 ; 11 lat temu ( 2009-11-06 )

Dyscyplina pisania silny
Strona internetowa pmg .csail .mit .edu /CLU .html
Główne wdrożenia
PDP-10 CLU, natywny CLU, przenośny CLU, clu2c
Wpływem
ALGOL 60 , Lisp , Simula , Alphard
Pod wpływem
Ada , Argus , C++ , Lua , Python , Ruby , Sather , Swift

CLU to język programowania stworzony w Massachusetts Institute of Technology (MIT) przez Barbarę Liskov i jej uczniów, począwszy od 1973 roku. Chociaż nie znalazł szerokiego zastosowania, wprowadził wiele funkcji, które są obecnie szeroko stosowane i jest postrzegany jako krok naprzód rozwój programowania obiektowego (OOP).

Kluczowe wkłady obejmują abstrakcyjne typy danych , wywołanie przez udostępnianie , iteratory , wiele wartości zwracanych (forma przypisania równoległego ), typy sparametryzowane z bezpiecznym typem i typy wariantów z bezpiecznym typem . Godne uwagi jest również użycie klas z konstruktorami i metodami, ale bez dziedziczenia .

Klastry

Składnia z CLU oparto na Algol , to punkt wyjścia dla większości nowych konstrukcji językowych. Kluczowym dodatkiem była koncepcja klastra , system rozszerzeń typu CLU oraz rdzeń nazwy języka (CLUster). Klastry odpowiadają ogólnie pojęciu „klasy” w języku OO. Na przykład, oto składnia CLU dla klastra, który implementuje liczby zespolone :

    complex_number = cluster is add, subtract, multiply, ...
        rep = record [ real_part: real, imag_part: real ]
        add = proc ... end add;
        subtract = proc ... end subtract;
        multiply = proc ... end multiply;
        ...
    end complex_number;

Klaster to moduł, który hermetyzuje wszystkie swoje komponenty z wyjątkiem tych, które są wyraźnie wymienione w klauzuli „is”. Odpowiadają one publicznym komponentom klasy w ostatnich językach OO. Klaster definiuje również typ, który można nazwać poza klastrem (w tym przypadku „numer_zespołu”), ale jego typ reprezentacji (rep) jest ukryty przed klientami zewnętrznymi.

Nazwy klastrów są globalne i nie udostępniono żadnego mechanizmu przestrzeni nazw do grupowania klastrów ani umożliwienia ich tworzenia „lokalnie” wewnątrz innych klastrów.

CLU nie wykonuje niejawnych konwersji typów . W klastrze jawne konwersje typu w górę iw dół zmieniają się między typem abstrakcyjnym a reprezentacją. Istnieje uniwersalny typ any i procedura wymusza[] sprawdzenie, czy obiekt jest określonego typu. Obiekty mogą być zmienne lub niezmienne, przy czym te ostatnie są typami podstawowymi, takimi jak liczby całkowite, logiczne, znaki i łańcuchy.

Inne funkcje

Kolejną kluczową cechą systemu typu CLU są iteratory , które kolejno, jeden po drugim, zwracają obiekty z kolekcji. Iteratory oferują identyczny interfejs programowania aplikacji (API) bez względu na to, z jakimi danymi są używane. Zatem iterator dla zbioru complex_numbers może być używany zamiennie z iteratorem dla tablicy integers. Charakterystyczną cechą iteratorów CLU jest to, że są one implementowane jako współprogramy, przy czym każda wartość jest dostarczana do wywołującego za pośrednictwem deklaracji zysku . Iteratory, takie jak te w CLU, są obecnie powszechną cechą wielu nowoczesnych języków, takich jak C#, Ruby i Python, chociaż ostatnio często określa się je mianem generatorów.

CLU zawiera również obsługę wyjątków , opartą na różnych próbach w innych językach; wyjątki są zgłaszane przy użyciu signali obsługiwane przez except. W przeciwieństwie do większości innych języków z obsługą wyjątków, wyjątki nie są niejawnie ponownie sygnalizowane w łańcuchu wywołań. Również w przeciwieństwie do większości innych języków, które zapewniają obsługę wyjątków, wyjątki w CLU są uważane za część zwykłego przepływu wykonywania i są uważane za "normalny" i wydajny sposób na wyjście z pętli lub powrót z funkcji; pozwala to na bezpośrednie przypisanie wartości zwracanych „z wyjątkiem sytuacji”, gdy mają zastosowanie inne warunki. Wyjątki, które nie są ani przechwytywane, ani sygnalizowane jawnie, są natychmiast przekształcane w specjalny wyjątek niepowodzenia, który zazwyczaj kończy działanie programu.

CLU jest często uznawany za pierwszy język z bezpiecznymi typami wariantów , zwany oneofs , przed językiem ML .

Ostatnią cechą wyróżniającą w CLU jest przypisanie równoległe (wielokrotne przypisanie), w którym po lewej stronie operatora przypisania może pojawić się więcej niż jedna zmienna . Na przykład pisanie x,y := y,xwymieniałoby wartości xi y. W ten sam sposób funkcje mogą zwracać kilka wartości, takich jak x,y,z := f(t). Przypisanie równoległe (choć nie wiele zwracanych wartości) poprzedza CLU, występujące w CPL (1963), nazwane przypisaniem symultanicznym , ale CLU spopularyzowało je i często jest uznawane za bezpośredni wpływ prowadzący do przypisania równoległego w późniejszych językach.

Wszystkie obiekty w programie CLU żyją na stercie, a zarządzanie pamięcią odbywa się automatycznie.

CLU obsługuje abstrakcje danych zdefiniowane przez użytkownika ze sparametryzowanym typem . Był to pierwszy język, który oferował ograniczone typy sparametryzowane z bezpiecznym typem, wykorzystując strukturę gdzie klauzule do wyrażania ograniczeń dotyczących rzeczywistych argumentów typu.

Wpływ

CLU i Ada były głównymi inspiracjami dla szablonów C++ .

Mechanizmy obsługi wyjątków w CLU wpłynęły na późniejsze języki, takie jak C++ i Java .

Sather , Python i C# zawierają iteratory , które po raz pierwszy pojawiły się w CLU.

Perl i Lua przyjęli wielokrotne przypisanie i wiele zwrotów z wywołań funkcji z CLU.

Python i Ruby zapożyczyli wywołanie przez udostępnienie , deklarację wydajności i wielokrotne przypisanie.

Bibliografia

Zewnętrzne linki