Uważam, że kiedy języki są traktowane tak samo jak oprogramowanie komercyjne, zawsze istnieje potrzeba dodawania nowych funkcji w celu uzasadnienia nowych wydań.
Czy istnieją lub są języki, w których wersja 1.0 jest wersją ostateczną? Oczywiście poprawki błędów są z tego wyłączone, ale zestaw funkcji zawsze pozostaje taki sam?
W ten sposób każda funkcja w tym języku ładnie do siebie pasuje i nie wydaje się, że są one włączone po fakcie z przestarzałymi funkcjami, które nadal istnieją ze względu na kompatybilność wsteczną.
Zakładam, że niektóre języki akademickie są takie? Ale czy istnieją komercyjne języki zgodne z tym pomysłem? Towarzysząca biblioteka jest również darmowa, aby uzyskać nowe funkcje, ale język zawsze pozostaje niezmienny.
Jednym z przykładów, który mogę podać, jest jeden z moich ulubionych języków C #, którego używam dość często, w każdym wydaniu dodaje się coraz więcej funkcji. Aby z nich skorzystać, muszę rzucić rzeczywiste zadania na ręce i spędzić sporo czasu na ich nauce, zamiast być w stanie wyłapać trywialne koncepcje i połączyć je samodzielnie, aby z łatwością rozwiązać bardziej złożone problemy.
Myślę więc, że szukam minimalistycznego podejścia, w którym wszystko jest spójne, ma sens i jest możliwie jak najbardziej ortogonalne.
Odpowiedzi:
Lisp, Smalltalk. Nawiasem mówiąc, są to również najlepsze języki w całej grupie.
Zarówno Lisp, jak i Smalltalk są językami zbudowanymi na silnej metaforze jednoczącej. Metafora Lispa brzmi: „wszystko jest listą; ta lista reprezentuje zarówno dane, jak i kod (jako funkcje)”. Metafora Smalltalk brzmi: „wszystko jest przedmiotem; jedynym sposobem na wywołanie zachowania jest przekazanie wiadomości do obiektu”. Te metafory pozwalają na stabilne, minimalne i mocne języki. Reszta jest w bibliotece.
Rzeczy, które są nazywane „strukturami kontrolnymi” we wszystkich nie-minimalnych (chciałem napisać „rozdętych”) językach, są tutaj częścią biblioteki (na przykład:
cond
funkcja w lisp;ifTrue:
/ifFalse:
rodzina wiadomości w Smalltalk, zarówno implementacja warunkowa, gdzie inne języki mająif
słowo kluczowe).Można zauważyć, że Lisp / Smalltalk to prawie minimalne przykłady ich paradygmatu i nic więcej (Lisp: programowanie funkcjonalne; Smalltalk: programowanie obiektowe).
źródło
TeX , system składu tekstu, jest bardzo stabilny od wersji 3.
Nie twierdzę, że spełnia twoje „Więc myślę, że szukam minimalistycznego podejścia, w którym wszystko jest spójne, ma sens i jest możliwie jak najbardziej ortogonalne”. oświadczenie, ale spełnia większość pozostałych kryteriów.
źródło
C i Fortran to języki, które przychodzą mi do głowy. Są bardzo stabilne, a ich składnia jest łatwo zapamiętywana. Poza samodzielnym pisaniem złego kodu, jest bardzo mało niespodzianek podczas używania tych języków. Ale nie utrzymałbym ich jako wspaniałych języków do szybkiego tworzenia aplikacji.
Wolę szybki rozwój języków z funkcjami, które po spędzeniu nad nimi trochę czasu znacznie ułatwiają moją pracę, a kod jest mniej skomplikowany przy zachowaniu ekspresji.
źródło
Behavior
iCollection
hierarchiach). Wydaje mi się, że C jest znacznie mniej stabilny z tymi wszystkimi C89, C99 i tym podobne.Inni już powiedzieli Lisp, więc muszę wychować Fortha . Jest bardzo łatwy do wdrożenia, a zasady języka są proste do przestrzegania.
Jest to język oparty na stosie ze słownikiem „słów”. Możesz łatwo rozszerzyć język, używając niektórych funkcji dziedziczenia.
BARDZO zwięzły przykład grafiki żółwia:
Uruchomienie go za pomocą
: squiral -50 50 g 20 0 do 100 f 21 t loop ;
daje:Kredyt na blogu tego pracownika Microsoft .
źródło
Chociaż wspomniano o Lispie, najbardziej minimalistycznym językiem, jaki znam, jest schemat . Trudno mi było to zrozumieć na kursach uniwersyteckich, gdzie musiałem. Ale zmieniło to mój sposób myślenia o programowaniu i jest bardzo minimalne. Tak minimalna jak cała składnia to nawiasy
()
i spacje.Jedyną zmianą w języku była decyzja o konwersji jak prymitywów
+
,define
(i kilka innych) do wbudowanych ins. Oznacza to, że są dostępne podczas uruchamiania, ale można je ponownie zdefiniować w czasie wykonywania.źródło
Tcl, który przede wszystkim miał być minimalistyczny
Stamtąd o stronie http://www.tcl.tk/about/features.html , jedną z funkcji jest to, że jest bardzo łatwy do nauczenia się i gdzie mogą go używać zwykli programiści, a nawet nie-programiści.
źródło
Jest kilka języków, które pozostały względnie niezmienione od czasu ich powstania poza ezoterycznymi, jednorazowymi językami, które raczej nie są pożądane (nie chciałbym pisać czegoś znaczącego w Befunge (chociaż został on również zmodyfikowany od wersji 1.0) wydanie)).
Językami, które najprawdopodobniej zaspokoją pragnienie nieuczenia się niczego nowego, są języki specjalizujące się w „klejeniu” między innymi programami. Języki takie jak jcl , bash i tym podobne. Proste języki skryptowe również mogą do tego należeć - awk jest jednym z liderów.
Po opuszczeniu tego królestwa następuje rozwój. Zarówno język, jak i ramy. W niektórych sytuacjach kodowanie języka jest „trudne” bez uzyskania części frameworka, który szybko się rozwija.
Wiele języków ma pewien stopień kompatybilności wstecznej. Nadal można dziś napisać Java 1.4, choć prawdopodobnie nie jest to zalecane - frameworki, które ludzie piszą dla niej, zmieniają się szybciej niż język. Nadal można znaleźć kompilatory f77 i f90 dla specyfikacji języka, która nie zmieniła się przez 20 lub 40 lat. C, Objective C, C ++ można nadal kodować do starszych specyfikacji języka - nie trzeba ciągle aktualizować własnego kodu, ponieważ nowa specyfikacja została wydana lub pojawiła się nowa platforma.
Niektóre języki mają dość długą, niezmienioną historię, ponieważ sam język jest wystarczająco silny, aby robić, co tylko chce. Lisp jest głównym kandydatem w tej dziedzinie. Forth należy również do królestwa „niewiele się zmieniło”.
Przechodząc do bardziej tradycyjnych języków skryptowych, spójrz na TCL, Perl i Python. Unikaj rzeczy, które są obecnie w sferze „mody”, które z jakiegoś powodu cieszą się popularnością (ruby i javascript, patrzę na ciebie). TCL zmieniło się na przestrzeni lat , choć jednym z jego celów jest próba zachowania spójności projektowania. Zarówno nowoczesny Perl, jak i Python mają pewną spójność w projektowaniu, choć wprawdzie nowe funkcje mogą się przydać (choć nie trzeba ich używać).
źródło
Myślę, że Python jest rozsądnym kandydatem na język z minimalizmem jako jednym z jego celów projektowych. Opiera się na stosunkowo niewielkiej liczbie podstawowych pojęć, a wersja 3 próbowała między innymi nieco uprościć język , usuwając niektóre funkcje.
(To prawda, że to nie to samo, co zestaw funkcji, który pozostał taki sam od wersji 1, ale myślę, że to dość arbitralny sposób oceny języków, biorąc pod uwagę, że autorzy języków mogą nazywać go wersją 1, kiedy tylko chcą.)
źródło
Myślę, że „minimalistyczne” podejście do projektowania byłoby zilustrowane przez Tcl. Jako przykład możesz użyć polecenia {catch} z wartościami {return -code n}, aby zaimplementować dowolną strukturę sterowania, jaką wyobraźnia może sobie wyobrazić, Perl musiał czekać dekadę (oficjalnie) na {switch} - (nie że Perl kiedykolwiek tego potrzebowałem). Przekonasz się również, że Dodekalogue http://wiki.tcl.tk/10259 całkowicie obejmuje gramatykę Tcl - resztę, bez względu na paradygmat programowania, z którym chcesz pracować, można wyrazić w tej gramatyce.
źródło