Teraz podejście KISS do języków programowania jest zabawnym pojęciem, przynajmniej jeśli uważasz, że języki programowania są warstwą abstrakcji w zestawie instrukcji procesora itp. Jeśli nie zdefiniujesz dokładniej „KISS”. Mówię tu tylko, że wózek KISS jest w pełni zastosowany do samochodu.
Teraz inną interpretacją KISS może być coś w rodzaju „elegancko wykonane bez zbędnych ozdób i niezbyt skomplikowane”. Szczególnie można argumentować, że nie powinno być zbyt wielu konkretnych przypadków na podobne rzeczy itp. Zwykle matematyka jest całkiem dobra w sprowadzaniu rzeczy do swojej istoty, i - o dziwo - matematycy spędzili trochę czasu myśląc o programowaniu i komputerach .
Do programowania istnieją 2 dość znane modele abstrakcyjne:
- Jednym z nich jest maszyna Turinga, która definiuje maszynę i prosty model instruktażowy, który jest w stanie obliczyć wszystko, co komputer może zrobić.
- Drugim jest Lambda-Calculus autorstwa Church et. glin. to jest równoważne pod względem mocy
Zabawne jest to: chociaż maszyna Turinga ma dość prosty układ, nie jest to system łatwy w obsłudze i nie sądzę, że kwalifikuje się do „inteligentnego KISS”. Ale Lambda Calculus ma więcej wspólnego z językami programowania, które znamy - a dzięki pionierskim funkcjom rachunku lambda Lisp i Scheme dotarł do wielu języków.
Lisp i Scheme są NAPRAWDĘ proste, przynajmniej pod względem składniowym. Składnia jest poważnym problemem związanym z językami programowania (prawdopodobnie dlatego są ciągle wymyślane na nowo). W przypadku C ++ ludzki mózg prawie nie jest w stanie przewidzieć, w jaki sposób kompilator interpretuje niektóre linie źródłowe).
Lisps całkowicie zmniejszają złożoność syntaktyczną, wprowadzając jedną wspólną formę poleceń:
(command param1 param2 ...)
Może to być wywołanie metody, takie jak
(max 1 2 3 4)
a także gałąź if, pętla itp.
(if (< 1 2)
(write 4)
(write 5))
(cały kod jest pseudo-Lisp / dialekt agnostyczny)
Formularz
(command param1 param2 ...)
można również interpretować jako listę
(item1 item2 item3)
I to jest podstawa prostoty i piękna Lisps. Ponieważ listy zagnieżdżone (jak w if
przykładzie instrukcji) stanowią drzewa i można je łatwo zrozumieć zarówno przez maszynę, jak i człowieka przed maszyną.
Inną cechą Lisps są makra, nie będę wchodził tutaj w nieprzyzwoite szczegóły, ale ponieważ nie ma różnicy składniowej między normalnymi wywołaniami funkcji a "Składnią (jajko dla pętli, deklaracja zmiennej itp.), Wszystko, co parser musi obsłużyć w innych języki programowania) możesz stworzyć własną składnię. Makra to w istocie Manipulacje drzewem, które tworzą twój program.
Myślę, że Lisp ma KISS do programowania. To, że możesz manipulować składnią za pomocą makr, doprowadziło do zjawiska, które Lisp ewoluowało dość dynamicznie. Potrzebujesz nowej funkcji języka, takiej jak - powiedzmy orientacja obiektowa - po prostu napisz system OOP z makrami!
Podczas gdy C zostało przedłużone rondo 2 razy z funkcjami OOP (C ++, Obj. C), Lisp został przedłużony wiele razy, w końcu zwyciężył.
To kolejne dziwactwo na temat Lisp, ewoluuje (patrz Clojure i Clojurescript, aby uzyskać ciekawe nowe Mutacje lisp).
Ze względu na swoje właściwości KISS niektórzy preferują Lisps. Podobnie jak kontury Fogusa w jego projekcie języka edukacyjnego ( http://blog.fogus.me/2013/01/21/enfield-a-programming-language-designed-for-pedagogy/ )
Na początek jestem głęboko przekonany, że uczenie się nowych, a czasem skomplikowanych tematów jest wręcz szkodliwe dla przeciążania uczniów niepoważnymi regułami składni. Dlatego Enfield został zaprojektowany z minimalnymi regułami składni i co jest bardziej minimalne niż składnia podobna do Lisp.