Języki programowania...

13 czerwca 2011 13:30:22 | Kategorie: Programowanie

Pokutuje opinia, że wystarczy nauczyć się myśleć, a potem pętla for wszędzie wygląda podobnie. Nawet jakieś doświadczenie ją niby potwierdza. Ale każdy o odrobinę szerszych horyzontach wie, że nie jest to prawda. Języki funkcyjne często nawet nie mają pętli, lecz wielu programistów nigdy nie miało z nimi styczności. Ale to jeszcze nie jest ekstremum. Wkleję poniżej niby trywialny kod w najdziwniejszym języku, w jakim zdarzyło mi się coś napisać. Żeby było śmieszniej, język ten jest industry standard w bardzo intratnej niszy. Ktokolwiek rozpozna?

Pic related

Pic related. Ale nie będę póki co zdradzał, w jaki sposób

Kod realizuje serio trywialną funkcję, napisany jest w najprostszy wynaleziony przez nas sposób, by jeszcze być poprawnym według tutejszych standardów:

node LameBarrier(A: bool; B: bool) returns (C: bool);
var pA, pB: bool;
let
    pA = false -> ((not(pre(C)) and pre(pA)) or A);
    pB = false -> ((not(pre(C)) and pre(pB)) or B);
    C = pA and pB;
tel

node Latch(A: bool; reset: bool) returns (V: bool);
var pA: bool;
let
    pA = false -> ((pre(A) and not reset) or A);
tel

node VerifyBarrier(A: bool; B: bool) returns (prop: bool);
var AA, BB, res: bool;
let
    res = LameBarrier(A, B);
    AA = Latch(A, pre(res));
    BB = Latch(B, pre(res));
    prop = (AA and BB) = res;
tel

Na koniec dodam, że celem tego ćwiczenia (jeszcze na studiach) było interfejsowanie tego cuda z C#. W połączeniu z magiczną biblioteką, której mieliśmy używać po tamtej stronie, całość dawała ślicznego BSOD-a. Całości perypetii nie pamiętam, ale rozwiązaliśmy to crosskompilując pod Linuksem i zmieniając coś w tak uzyskanej binarce. Było śmiesznie.

Komentarze do notki Języki programowania...

  • mag dnia 13 czerwca 2011 o 13:43:46:

    Lustre (http://en.wikipedia.org/wiki/Lustre(programminglanguage))
    co wygrałem?

  • asdf dnia 13 czerwca 2011 o 13:44:41:

    LUSTRE?

  • Remigiusz 'lRem' Modrzejewski dnia 13 czerwca 2011 o 13:45:20:

    Byłaby może nagroda pocieszenia za drugie miejsce, ale nie pomyślałem przed wysłaniem zagadki, żeby sprawdzić jak łatwo to zgooglać :/

  • Tomasz Kowalczyk dnia 13 czerwca 2011 o 14:55:30:

    "Pokutuje opinia, że wystarczy nauczyć się myśleć, a potem pętla for wszędzie wygląda podobnie." - Bo to jest prawda, jeśli przyjmiemy pewne założenia. Zdecydowana większość programistów porusza się jedynie w zakresie języków reprezentujących paradygmat imperatywny, a więc tam wszystko wygląda podobnie, czy to Pacal, C, C++, Java, PHP, C# i tak dalej. Jeśli zmienisz założenia, to takie stwierdzenie z zasady nie ma sensu, bo to tak, jak powiedzieć, że wszystkie okrągłe bułki są podobne, a potem dziwić się, że rogal jest inny.

    Jeśli wejdziemy w sferę języków reprezentujących paradygmat logiczny, funkcyjny lub jakikolwiek inny niż imperatywny, to wspomniana "pętla" [albo inna konstrukcja językowa] także będzie wyglądać podobnie, aczkolwiek tylko i wyłącznie w danej grupie języków.

    BTW. Jeśli poprawnie rozumiem "pic related", to wydaje mi się, że ten obrazek byłby znacznie lepszy: http://www.mytravelblog.pl/public/th/wm/Kbee/resize/630x630/i/profiles/Kbee/BL1445611-154-A_taj08-Jezioro-Akiemskie.jpg . ;]

  • Remigiusz 'lRem' Modrzejewski dnia 13 czerwca 2011 o 15:04:47:

    Acz też z wyjątkami. W takim Pythonie, który było nie było jest imperatywny, pętli trójargumentowej już nie uświadczysz. Ale nawet nie to jest ważne. Tutaj chodziło mi o istnienie innych klas języków, o czym nie każdy wcześniej wiedział. Na innym poziomie myśl ta jest zła, gdyż nawet już w językach tak podobnych jak C i C++ występują spore różnice idiomatyczne, które wymagają jednak podejścia innego niż szukanie alternatyw do już znanych konstrukcji.

    A co do obrazka: nie, Rosja zdecydowanie nie pasuje ;)

  • Tomasz Kowalczyk dnia 13 czerwca 2011 o 15:38:05:

    Czy z wyjątkami - powiedziałem podobne, nie takie same. ;] Także to, że gdzieś są dwie wartości, a gdzie indziej trzy to jest szczegół implementacyjny. Ważne, że każda ma warunek końcowy, a odpowiednik pętli for ma też blok inicjalizacyjny. Ale to naprawdę są mało ważne rzeczy, a nie rdzeń kwestii, nad którą dyskutujemy.

    Zgadzam się z Tobą, że trzeba mieć świadomość istnienia innych języków i paradygmatów, bo to pozwala na poszerzenie horyzontów i w pewnym sensie wykorzystania koncepcji i zalet tamtych języków w naszych rozwiązaniach. Ja np. na studiach ćwiczyłem się w Prologu, co też otworzyło mi oczy na wiele innych kwestii, jakich normalnie bym nie przyswoił. Co do różnuc w C / C++ - mógłbyś rozwinąć? Bo jak dla mnie potraktowanie C++ jako "C z klasami" w większości przypadków daje radę.

    Co do obrazka, miałem na myśli "Lustre" jako lustro wody. ;]

  • Remigiusz 'lRem' Modrzejewski dnia 13 czerwca 2011 o 15:43:21:

    No właśnie to jest problem z C++ - ludzie postrzegają to jako "C z klasami", nazywają C/C++. To miał być nowy język z kompatybilnością wsteczną. Wyszedł stary język z nowymi dodatkami. Jest to jeden z podstawowych powodów, dla których skończył jako taki potworek. Ale o tym możnaby swobodnie całą książkę napisać…

    A co do zdjęcia, chodzi w nim o inną inspirację nazwy, która oryginalnie przyświecała twórcom.

  • Tomasz Kowalczyk dnia 13 czerwca 2011 o 15:50:07:

    To nie jest tak, że ja traktuję C++ jako "C z klasami". Wiem, czym się różnią te języki, także użyłem tego sformułowania wyłącznie w kontekście potencjalnego programisty, który myśląc w ten sposób myli się, aczkolwiek do programowania nie jest mu to aż tak potrzebne. A kompatybilność wsteczna to chyba najgorsza zmora "współczesnych" języków / technologii. Chciałoby się zrobić coś nowego, a tu zonk - nie zadziała dwie wersje wstecz.

  • torero dnia 13 czerwca 2011 o 17:26:41:

    Lustre.

    Jaka jest nagroda za trzecie miejsce? Czy są wyróżnienia? :D

Komentuj Dodaj komentarz: