atarionline.pl Forth a Action - Forum Atarum

Jeśli chcesz wziąć udział w dyskusjach na forum - zaloguj się. Jeżeli nie masz loginu - poproś o członkostwo.

  • :
  • :

Vanilla 1.1.4 jest produktem Lussumo. Więcej informacji: Dokumentacja, Forum.

    • 1: CommentAuthorKoval
    • CommentTime12 Jun 2009
     
    Jakiś czas temu mieliśmy nowinki związane z hybrydą Forth/Logo i Action. Ciekaw jestem porównania języków Forth i Action. Tzn.: który elastyczniejszy, szybszy, bardziej przemyślany. Wiadomo, że Forth jest dość starym językiem, więc teoretycznie powinien "przegrywać" pod wieloma względami z nowszym, dedykowanym specjalnie dla Atari Actionem (przegrywać w porównaniach przeprowadzonych na Atari). Czy wogóle jest sens takiego porównania? Jak myślicie?
    Następne pytanie, które przyszło mi do głowy: Forth a C++? (to już na PC). Który wymaga mniejszych nakładów pracy, który wydajniejszy itd... Ciekawi mnie to, bo mam do czynienia z C++ w różnych odmianach, a Fortha znam tylko ze słyszenia...
    • 2:
       
      CommentAuthorCosi
    • CommentTime12 Jun 2009
     
    Forth jest bardzo specyficznym językiem. Trudno go porównywać, choćby ze względu na filozofię pracy - tutaj program "buduje się z klocków" bezpośrednio w systemie, zamiast redagować go w edytorze, a potem przepuszczać przez parser. Programy skompilowane Forthem (tak, da się) mają rozmiar jądra Fortha + całego dodatkowego kodu, więc już masz częściową odpowiedź: do pisania malutkich skrypcików się Forth nie nadawa :)
    Na pewno jest trudniejszy w sprawnym opanowaniu niż Action! Co do C++, to może będę mało obiektywny (obiektowy ;-)), ale kaligrafowanie Kanji to przy programowaniu w C++ łatwizna. Z kolei - jeżeli mówimy o piecach - to w Forth'cie nie wszystko się oprogramuje. C oraz C++ wypełniają niszę, w którą inne języki nie próbują się nawet zagłębiać, i sądzę że jeszcze długo tak zostanie. Natomiast jeżeli porównujemy wydajność Fortha i C++ (czy jakiegokolwiek narzecza obiektowego), to bez żartów, mości Panowie. Programowanie obiektowe NIGDY nie będzie wydajniejsze od strukturalnego.
    No ale wracając do Fortha i Action! - jeżeli ktoś zna (i pamięta) Pascala, to polecałbym Action! (a mówi to miłośnik Fortha! ;-)). Jeżeli nie ma "naleciałości" z Pascala czy C, gorąco polecam naukę Fortha. Chętnie pomogę w miarę moich skromnych możliwości, a i kursów jest trochę. Dopiero z tym językiem można "zobaczyć Matrix" - jak Neo w ostatnich scenach :-D
    • 3:
       
      CommentAuthorimmolator
    • CommentTime12 Jun 2009
     
    Nie wiem czy dobrze pamiętam, ale po kursie Rolanda Pantoły, Forth zaczął mi się jawić jako swoisty framework (wtedy jeszcze tego słowa nie znałem) do programowania w asemblerze. Oczywiście posiada swoistą egzotyką, co jest jego niezaprzeczalną zaletą. Niektórzy dla takich właśnie doznań uczą się podobno nawet Lispa ;-)
    • 4:
       
      CommentAuthorCosi
    • CommentTime12 Jun 2009
     
    Niekoniecznie w asemblerze :) Framework to po angielsku "rusztowanie", co dobrze oddaje specyfikę Fortha. Pisałem ostatnio, że nawet Basica można "wbudować" do środka i na tym opierać swoje programy (oczywiście będzie to taki "Basic"). Szkoda, że Forth nie umożliwia dodawania bloków kodu maszynowego do swojego słownika. Wtedy można by go połączyć z dowolnym językiem, dającym taki kod.

    No a egzotyka swoją drogą :-))
    • 5:
       
      CommentAuthorKaz
    • CommentTime16 Jun 2009
     
    No to moze nastal czas, zeby dodac dodawanie kodu maszynowego? Taka "mala" modyfikacja. Pewnie Carsten Strotmann bylby chetny przy tym wspoldzialac (o ile juz nad czyms takim nie pracowal/pracuje).
    • 6:
       
      CommentAuthorCosi
    • CommentTime17 Jun 2009 zmieniony
     
    Carsten mógłby spłodzić jakąś choćby krótką dokumentację do volksFortha*, wtedy zająłbym się intensywnie promocją tego narzecza :) Mógłbym nawet zrobić tłumaczenie tej dokumentacji, choćby z języka dojcz.
    Wtedy można by pomyśleć o rozwijaniu samego Fortha - zwłaszcza że VF ma otwarte źródła...

    *) Taką stricte atarowską, opisującą implementację na małe Atari
    • 7:
       
      CommentAuthorKaz
    • CommentTime1 Jul 2009
     
    Skoro implementacja powstala juz na wiele platform, to moze gdzies jest juz instrukcja po angielsku albo niemiecku?
    • 8:
       
      CommentAuthorCosi
    • CommentTime2 Jul 2009
     
    Gdzieś coś jest. Pamiętam, że gdzieś udało mi się znaleźć informacje, jak kompilować do .COM'ów. Ale na pewno to nie jest pełna dokumentacja, raczej małe FAQ.
    Na stronie projektu na Sourceforge jest niemiecka dokumentacja do jakiegoś kompatybilnego narzecza - bodajże Fortha-83. Ale dla C64 :(

    Btw.: coś mi się przypomniało. Znakomita dokumentacja do figFortha jest dla spectrumowej wersji (w załączniku). Polecam!
    • 9:
       
      CommentAuthorKaz
    • CommentTime5 Jul 2009
     
    A masz Cosi ksiazke Ruszczyca "Forth"?
    • 10:
       
      CommentAuthorCosi
    • CommentTime6 Jul 2009
     
    Nie, a chętnie bym ją dorwał. Na Allegro jest tylko Bielecki ("Hello, I'm Jan B.") ;)
    • 11:
       
      CommentAuthorKaz
    • CommentTime6 Jul 2009
     
    No to z braku laku polecam wersje elektroniczna, o ktorej w dzisiejszej nowince :).
    • 12:
       
      CommentAuthorCosi
    • CommentTime6 Jul 2009 zmieniony
     
    Dzięki :) Będzie co czytać do poduchy ;)

    PS. Książka jest bardzo fajnie napisana, już w pierwszym rozdziale znalazłem fragment:
    "W warunkach współczesnego burzliwego rozwoju informatyki i przenikania jej do wszystkich dziedzin życia, w tym również do naszych ognisk domowych, poznawanie języków programowania staje się ważnym składnikiem podnoszenia ogólnego poziomu wiedzy każdego Polaka, w tym zwłaszcza wchodzących w życie pokoleń. Poznawanie języków programowania rozszerza horyzonty i pozwala lepiej rozumieć świat, zwiększa podobnie jak poznawanie języków obcych - możliwości udziału w postępie cywilizacyjnym dokonującym się wokół nas. Człowiek ograniczający się do znajomości jednego języka programowania ( a spotykamy takich, niestety, choć coraz rzadziej, również wśród zawodowych programistów ), ogranicza tym samym własne szanse i pozostaje w tyle."
    Czytając książki i gazety z lat 80-tych można zauważyć ciekawe zjawisko: niektórzy autorzy byli przekonani, że za 5-10 lat *każdy* będzie posiadał umiejętność programowania, tak samo jak umiejętność czytania czy liczenia :-) Nie przewidzieli tego, że obsługa komputera będzie tak prosta, jak telewizora czy mikrofalówki ;)
    • 13:
       
      CommentAuthorsikor
    • CommentTime7 Jul 2009
     
    Ja się na Forth-u nie znam, ale dla niektórych może byyć ciekawe - artykuł na 42 stronie 9-go numeru ANALOG-u (jest w bibliotece), może też ten na 55 stronie też...
    • 14:
       
      CommentAuthorCosi
    • CommentTime8 Jul 2009
     
    A rocznik jakiś ten numer posiada? ;-) Bo przejrzałem wszystkie i nie znalazłem niczego na temat Fortha...
    • 15:
       
      CommentAuthorKaz
    • CommentTime8 Jul 2009 zmieniony
     
    Szukaj po numeracji na okladce (numeracja ciagla), nie wedlug nazw plikow, bo te sa numerowane w ramach jednego roku.

    PS. Numer 1983_01
    • 16:
       
      CommentAuthorKaz
    • CommentTime8 Jul 2009
     
    A w ogole to facet zapowiadal cykl artkow o Forth i szukal wspolpracownikow. Cosi, moze bys do niego napisal? :)
    • 17:
       
      CommentAuthorCosi
    • CommentTime8 Jul 2009
     
    Sądzisz, że on jeszcze żyje? ;D
    • 18:
       
      CommentAuthorKaz
    • CommentTime8 Jul 2009 zmieniony
     
    Zyje i ma sie dobrze:

    ->link<-

    ->link<-
    • 19:
       
      CommentAuthorsikor
    • CommentTime8 Jul 2009
     
    Dotarłem do 13-go numeru i tam się cykl artków zaczyna, także dobrze szukać. Ja się w temat nie zagłębiam, bo na Fortha się póki co nie piszę. W pierwszym odcinku w każdym razie jest jakieś porównanie Basica, Fortha i ML (machine language ;) ) - tak więc w całości może być bardzo dobry i ciekawy cykl dla zainteresowanych.
    • 20:
       
      CommentAuthorCosi
    • CommentTime9 Jul 2009
     
    Zyje i ma sie dobrze

    Fajny profil na LinkedIn. Facet pisze o sobie w trzeciej osobie - Mr.Volk. Prawie jak Juliusz Cezar ;-) A może ktoś mu ten życiorys napisał?
    • 21:
       
      CommentAuthorKaz
    • CommentTime9 Jul 2009
     
    Pisanie o sobie w trzeciej osobie to czesty zwyczaj przedstawiania swoich osiagniec. Szczegolnie Ci, ktorzy maja do czynienia z mediami stosuja taka stylistyke swoich CV/profili, etc.

    Sikor - ja dotarlem na razie do 4 numeru. Pewnie dlatego, ze sobie wydrukowalem do czytania i papier mi sie skonczyl :D.
    • 22:
       
      CommentAuthorCosi
    • CommentTime9 Jul 2009
     

    Kaz:

    Pisanie o sobie w trzeciej osobie to czesty zwyczaj przedstawiania swoich osiagniec. Szczegolnie Ci, ktorzy maja do czynienia z mediami stosuja taka stylistyke swoich CV/profili, etc.

    Co nie zmienia faktu, że wygląda to potwornie pretensjonalnie ;)
    • 23:
       
      CommentAuthorKaz
    • CommentTime9 Jul 2009
     
    Wydaje mi sie, ze to ma cos wspolnego z tradycja/zwyczajem. U nich to raczej nie jest pretensjonalne, nie odnioslem takiego wrazenia (czesto na uniwerku spotykalem sie z taka autoprezentacja wykladowcow w pismach, folderach, pracach, etc), a u nas raczej tak.

    Wracajac do tematu - czy ktos ma pliki tych Forth-ow opisywanych przez Mr. Volka?
    • 24: CommentAuthorzbyti
    • CommentTime18 Feb 2020 zmieniony
     

    Tajemnice Atari 92/2:

    Widać wielką zaletę Odwrotnej Notacji Polskiej, a mianowicie brak nawiasów wymuszających pierwszeństwo dla danego działania. Wszystkie działania w języku FORTH są wykonywane zawsze w kolejności zapisu. Czytelnikom proponowałbym spróbować swych sił w następującym przykładzie:


    (1+2*3)+(1+2)*(2+3)


    Proszę zapisać to wyrażenie w ję- zyku FORTH i wyświetlić wynik. Czytelnik, który pierwszy prześle poprawny zapis na adres redakcji otrzyma bezpłatnie grę: "A.D.2044".

    ->link<-

    Także może jestem pierwszy i wygrałem grę?! Gdzie się zgłosić po odbiór? :D

    A tak na poważnie dopiero za 4x wpisałem poprawnie, tłumacząc sobie w duchu co jest na stacku :D

    Jak opanuję te pokręcone cudo na tyle by zrobić Bench by Yosh Plus to tutaj wrzucę.
    • 25: CommentAuthormono
    • CommentTime19 Feb 2020
     
    Raczej
    2 3 + 1 2 * + 2 3 * 1 + + ok
    • 26: CommentAuthorzbyti
    • CommentTime19 Feb 2020 zmieniony
     
    (1+2*3)+(1+2)*(2+3) = (1+6) + 3*5 = 7 + 15 = 22

    Nie ufam swojej matmie ;)

    Jeżeli w wyrażeniu nie ma nawiasów, to kolejność wykonywania działań jest następująca: potęgowanie i pierwiastkowanie, dalej mnożenie i dzielenie w kolejności ich występowania, a następnie dodawanie i odejmowanie również w kolejności występowania.

    @mono Twój wynik na obrazku w załączniku. Ale pewnie trollowałeś ;) Ale to wątek edukacyjny więc sprostowałem :]
    • 27: CommentAuthormono
    • CommentTime19 Feb 2020 zmieniony
     
    Nieee, walnąłem się z * + :) Powinno być
    2 3 + 1 2 + * 2 3 * 1 + +


    Edit: Chodziło mi o to, że w Twoim przykładzie końcówka nie powinna być "+ 1 +" bo poprawny wynik uzyskujesz przez przypadek. U Ciebie realizowane jest działanie
    (2+3)*(1+2)+(2*3)+1 = 5*3+6+1 = 15+6+1 = 22
    • 28: CommentAuthorzbyti
    • CommentTime19 Feb 2020 zmieniony
     
    Skorzystałem z przemienności dodawania ;) Mój zapis sprowadza się do:

    2 3 + 1 2 + * 2 3 * + 1 + => (5 * 3) + (6 + 1) 

    Na stos idą w kolejności (po działaniach): 5 i 3 zmienione mnożeniem na 15 i dalej 6 po dodaniu 1 zmienione na 7 i dodaję pozostające na stosie 15 = 22.

    mono:

    poprawny wynik uzyskujesz przez przypadek

    "Nie ma przypadków, są tylko znaki" ASCII :D
    • 29: CommentAuthorzbyti
    • CommentTime19 Feb 2020 zmieniony
     
    @mono przecież to jest kurka wodna to samo! :D Nie rozumiem, dlaczego to jest dowód na niepoprawność mojego zapisu. To co rozpisałeś (że niby jest niepoprawne) wygląda tak:

    (1+2*3)+(1+2)*(2+3) <=> (2+3)*(1+2)+(2*3)+1

    (2+3)*(1+2) = (1+2)*(2+3) = 15
    (1+2*3) = (2*3)+1 = 7
    • 30: CommentAuthormono
    • CommentTime19 Feb 2020
     
    Ok, ok. Jeśli zlikwidujemy niepotrzebne nawiasy to masz rację. Chodziło mi o dokładne odtworzenie kolejności działań jaka była we wzorze.
    • 31: CommentAuthorzbyti
    • CommentTime19 Feb 2020
     
    A! No to oddawaj swoją cyfrową wersję "A.D.2044" ;D
    • 32: CommentAuthormono
    • CommentTime19 Feb 2020
     
    Jest w archiwum atarionline :P
    • 33: CommentAuthorzbyti
    • CommentTime19 Feb 2020 zmieniony
     
    Już niedługo ;)

    A tak na poważnie to cenię sobie, że zechciało Ci sie skomentować w tym wątku, warto by ożyły takie sprawy :]
    • 34: CommentAuthorzbyti
    • CommentTime19 Feb 2020
     
    Forth Benchmarks ->link<-

    Kto ciekaw może przepisać na Action! i porównać. Ja może się o coś tam pokuszę ale dopiero jak zrozumiem co robię :]
    • 35: CommentAuthorzbyti
    • CommentTime19 Feb 2020 zmieniony
     
    No to mam wynik podstawowego benchmarka Yosha ->link<- czyli wykonywanie pętelki przez 2 sekundy.

    Bardzo słaby wynik.

    Do testów posłużyła mi wersja Extended fig-FORTH - APX w bazie AOL jako Extended fig-FORTH 1.1.atr.

    O ile sam język mi się mega (!) podoba to jego prędkość na A8 jest tylko niecałe 2x większa od BASIC'a.

    A gdzieś czytałem, że to jest tak blisko maszynowego i w ogóle...

    Sprawdzacie sami, może gdzie zrobiłem błąd? Licznik się nie przekręca jakby co.

    W porównani do Action! który w tym samym czasie taką pustą pętelkę wyobracał ponad 50 000 razy to marne 1090 iteracji FORTH'a nie zachęca mnie do dalszych badań.

    EDIT: volksFORTH w ostatniej wersji 3.8 jest nawet wolniejszy...

    CLSN Pascal w tym teście na A8 miał 1322 iteracje.
    • 36: CommentAuthorlaoo
    • CommentTime19 Feb 2020
     
    Akurat kolejność działań we wzorze zachowuje się przy zapisie

    1 2 3 * + 1 2 + 2 3 + * +

    I to jest "koszerna" konwersja bo nie zmieniamy kolejności liczb tylko operatory.
    • 37: CommentAuthorzbyti
    • CommentTime19 Feb 2020 zmieniony
     
    @laoo faktycznie, dobra uwaga, dzięki!

    To jeszcze Yosh Plus z wątku ->link<- i tyle w temacie :]

    Mad Pascal         YoshPlus: 35572 iterations in 100 ticks
    Action! YoshPlus: 33239 iterations in 100 ticks
    Quick 1.6 YoshPlus: 16242 iterations in 100 ticks
    DurexForth C64 YoshPLus: 1526 iterations in 100 ticks
    Fast Basic 4.0 Int YoshPlus: 1458 iterations in 100 ticks
    fig-Forth 1.1 YoshPlus: 715 iterations in 100 ticks
    CLSN Pascal YoshPlus: 487 iterations in 100 ticks
    • 38: CommentAuthorzbyti
    • CommentTime20 Feb 2020 zmieniony
     
    fig-Forth 1.1 i 10 iteracji SIEVE

    \ Sieve Benchmark
    8192 CONSTANT SIZE
    0 VARIABLE FLAGS
    0 FLAGS !
    SIZE ALLOT

    : DO-PRIME
    FLAGS SIZE 1 FILL ( set array )
    0 ( 0 COUNT ) SIZE 0
    DO FLAGS I + C@
    IF I DUP + 3 + DUP I +
    BEGIN DUP SIZE <
    WHILE 0 OVER FLAGS + C! OVER + REPEAT
    DROP DROP 1+
    THEN
    LOOP
    • 39: CommentAuthorzbyti
    • CommentTime20 Feb 2020 zmieniony
     
    Wszystkie programy w tabelce w najnowszych wersjach na 20.02.2020.
    CC65           YoshPlus:   41844 iterations in 100 ticks
    Mad Pascal YoshPlus: 35572 iterations in 100 ticks
    Action! YoshPlus: 33239 iterations in 100 ticks
    Quick 2.2 YoshPlus: 21320 iterations in 100 ticks
    Quick 1.6 YoshPlus: 16242 iterations in 100 ticks
    PL65 YoshPlus: 4708 iterations in 100 ticks
    FastBasic FBI YoshPlus: 2427 iterations in 100 ticks
    fig-Forth 1.1 YoshPlus: 715 iterations in 100 ticks
    CLSN Pascal YoshPlus: 487 iterations in 100 ticks

    CC65 Chessboard: 76 iterations in 150 ticks
    Mad Pascal Chessboard: 40 iterations in 150 ticks
    Action! Chessboard: 35 iterations in 150 ticks
    Quick 2.2 Chessboard: 27 iterations in 150 ticks
    Quick 1.6 Chessboard: 16 iterations in 150 ticks
    PL65 Chessboard: 12 iterations in 150 ticks

    MADS (opt) SIEVE: 440 ticks in 10 iterations
    CC65 (opt) SIEVE: 602 ticks in 10 iterations
    Mad Pascal (opt) SIEVE: 644 ticks in 10 iterations
    Mad Pascal SIEVE: 739 ticks in 10 iterations
    Action! SIEVE: 1003 ticks in 10 iterations
    Advan BASIC (opt) SIEVE: 1050 ticks in 10 iterations
    Quick 1.6 SIEVE: 2022 ticks in 10 iterations
    Quick 2.2 SIEVE: 2199 ticks in 10 iterations
    PL65 SIEVE: 3853 ticks in 10 iterations
    FastBasic FBI SIEVE: 6312 ticks in 10 iterations
    Advan BASIC SIEVE: 6800 ticks in 10 iterations
    fig-Forth 1.1 SIEVE: 8482 ticks in 10 iterations
    Turbo-BASIC XL [C] SIEVE: 16880 ticks in 10 iterations
    Turbo-BASIC XL SIEVE: 46060 ticks in 10 iterations
    BASIC SIEVE: 133960 ticks in 10 iterations