Vlákno názorů k článku Factor: revoluce v programování nebo propadák? od dejfson - basic ze ZX spectra. Nadupany a nedovoli udelat...

  • Článek je starý, nové názory již nelze přidávat.
  • 19. 2. 2008 17:38

    dejfson (neregistrovaný)
    basic ze ZX spectra. Nadupany a nedovoli udelat jakoukoliv syntaktickou chybu :)
  • 19. 2. 2008 19:01

    atarista (neregistrovaný)
    Lepsi je Atari Basic, protoze se v nem jednoduse da udelat eval :-D To na Spektraci (48k) nejde, ale stejne je zajimave, ze nektere vlastnosti Basiku obecne - napriklad preklad do bytekodu - se nyni vraci jako velka novinka :-)
  • 20. 2. 2008 13:18

    Pavel Tišnovský
    Zlatý podporovatel
    Zato Basic mel tu transformaci obousmernou, to zas tak obvykle nebylo (jestli tedy myslis Lispovsky masiny od IBM nebo p-kod).
  • 20. 2. 2008 15:07

    Rejpal (neregistrovaný)
    Mno já nevím, ale určitě Smalltalk 80 měl obousměrně šoupatelný bajtkód, a pokud se nepletu, Smalltalk 78 na tom byl v podstatě stejně. :-) Navíc si nejsem jist, jestli se cokoli na osmibitech z roku 1978 dá označit za bytecode. Bytecodové implementace BASICu musely přijít o dost později, BASICy soudobé pouze ukládaly tokeny z lexeru, což zjevně není totéž. :-) Rozhodně ne pro člověka, co zná vnitřnosti Javy a Lispu, a třeba i takových věcí, jako je Python nebo CLISP, který je taky bajtkódový - minimum literálů, samé pushe, cally a tak.

    Tokenizovaný zdroják se za bajtkód v dnešním pojetí brát dá jen dost blbě. Z toho všeho usuzuji, že dotyčný hovořil o něčem na STčko, protože na osmibitech fakt o ničem takovém nevím. Něco jako bajtkód měl u mě na Commodoru jen Forth, a taky G-Pascal - měl nějaký p-kód na způsob UCSD Pascalu. Možná bajtkódový kompilátor měl nějaký pokročilejší osmibitový BASIC, než ten originální ataří, ale nevím o něm. Kdyby to byl originální ataří, asi bych o tom věděl tím spíš. ;]

    BTW, jaké lispové mašiny vyvinulo IBM? :-)
  • 20. 2. 2008 15:23

    Pavel Tišnovský
    Zlatý podporovatel
    No praveze napriklad ten osmibitovy Atari Basic mel docela rozumny bytekod - treba se v nem vyskytovaly pouze indexy promennych, resp. ukazatele do tabulky promennych. Jakej je rozdil treba oproti JVMnebo Pythonovskemu bytekodu? Misto postfixoveho kodu (rikejme mu bezregistrovy) jsou tam osmibitove indexy promennych, toz je povazujme za 256 registru a je to :-)

    Symbolics nebyl koupeny IBM? Priznam se, ze ani nevim, kde jsem to cetl, ale mel jsem ten dojem, ze kvuli ne az tak dobremu vykonu Lispu na IBM 704/709 atd. se koupil Symbolics, ktery nejaky HW pro Lisp delal (snad jeste Xerox a nekdo z MITu?)
  • 20. 2. 2008 16:16

    Rejpal (neregistrovaný)

    Ehm, schválně, co najdeš na http://www.symbolics.com ? ;-) Mimochodem, vřele doporučuju zkusit whois symbolics.com, a obzvlášť se kouknout na datum. :-)

    Pokud jde o Symbolics, opravdu by bylo bývalo možné, aby ho IBM bylo koupilo kvůli nízkému výkonu Lispu na strojích 704/709. Nicméně mi není příliš jasné, proč by to byli dělali (ať žijí kondicionály préterita! :D). V době vzniku firmy Symbolics měly 704ky "odpočítáno" nějakých dvacet pět let a 709ky dvacet let, a snad už všude byly nahrazeny novějšími systémy IBM. ;-)

    Symbolics (ZetaLisp) se jako startup odštěpil z MIT, stejně jako LMI. Texas Instruments vyráběly vlastní stroje TI Explorer, co používaly dialekt odvozený od dialektu LMI, a Lisp (InterLisp-D) běžel nativně i na strojích Xeroxu, jen se přebootoval mikrokód ze Smalltalku na Lisp. ;-)

  • 20. 2. 2008 19:23

    Biktop (neregistrovaný)
    > Něco jako bajtkód měl u mě na Commodoru jen Forth

    Který? U Forthu obecně bych byl velmi opatrný v terminologii. Ale bytekódem bych to rozhodně nenazýval. Dalo by se říci, že sám program ve Forthu je vlastně symbolicky zapsaným bytekódem. Po přeložení forthovského programu (ač interpeter, jedná se o "částečně kompilovaný" jazyk) nedostaneme nijak standardizovaný a už vůbec ne přenositelný tok směsi kódů operací a literálů; v případě realizace interpreteru/překladače formou STC (subroutine threaded code) už de facto k žádné interpretaci kódu nedochází, ale je přímo prováděn procesorem. Po doplnění volitelného modifikátoru, který požaduje okopírování PFA (=CFA v této implementaci) místo vložení odkazu na slovníkovou položku při přikompilovávání nového slova, se už výsledný kód stává klasickým produktem kompilátoru (který má oproti klasickým kompilátorům tu výhodu, že je dynamický a vzhledem k absenci zásobníkového rámce v mnoha případech i rychlejší).

    U BASICů na osmibitech bych souhlasil, že také nejde o bytekód - jedná se pouze o (částečně) tokenizovaný zdrojový text, tedy elementární makroprocesing, nikoli o kódy operací majících instrukční charakter. Některé implementace dokonce měly samostatné tokeny pro "GO", "TO", "SUB", takže GOTO a GOSUB sestávaly ze dvou tokenů (a GO TO a GO SUB ze dvou tokenů oddělených mezerou), přičemž stejný token "TO" byl použit ve smyčce FOR...TO.
    BTW - on si to dnes už málo kdo uvědomuje, ale tehdejší interpretery BASICu byly koncipovány poměrně flexibilně - snad jen s výjimkou ZX Spectra nebyl vůbec žádný problém obohatit interpreter o nové příkazy a vlastnosti (i když, pravda, obvykle ne prostředky BASICu :-) Nicméně autoři zmiňovaných interpreterů těmto budoucím uživatelským rozšířením očividně nechávali doširoka otevřená zadní vrátka).
  • 20. 2. 2008 21:27

    Pavel Tisnovsky (neregistrovaný)
    Pravda, tokenizované příkazy použité u Basiců (aspoň těch na osmibitech) se dost podstatně odlišuje například od bytekódu pro JVM. Zase je však bližší například bytekódu Pythonu (tomu klasickému, u Parrotu je to trošku jinak). Asi by bylo zapotřebí rozlišovat, jestli se jedná o bytekód na "vyšší" úrovni, což je právě případ Basicu (co příkaz, to jeden byte, co proměnná to většinou také jeden byte odkazující do tabulky názvů, čísla jsou převedena na binární reprezentaci, čísla řádků typicky 2 byty, řetězce formou odkazů do paměti - tady dokonce některé Basicy měly něco jako garbage collector) nebo o bytekód, který vlastně s původním programem nemá skoro nic společného - viz JVM, kde se některé informace ztrácí.

    Osobně Basicy vůbec nezatracuju (vždyť jsem na nich vyrostl, než jsem utekl k asm :-)), ono taky nacpat do 4-8 kB ROMky interpreter i s de facto velmi dobrým debuggerem a k tomu ještě na osmibitovém procesoru, který má většinou dost omezený repertoár instrukcí, byl docela kumšt (na druhou stranu je na tom jazyku vidět jeho stáří). Není ostatně tajemstvím, že Atari chtělo Basic původně koupit od Microsoftu, ale ten nedokázal svůj Basic nacpat do požadovaných 8 kB ROM, tak se nakonec použil Basic přímo vytvořený pro Atari.