Názor k článku Programovací paradigma založené na tocích (dat) a knihovna goflow od lojza - Akorát v tom Erlangu se nejedná o nějakou...

  • Článek je starý, nové názory již nelze přidávat.
  • 21. 4. 2022 18:45

    lojza

    Akorát v tom Erlangu se nejedná o nějakou knihovnu nad obecným jazykem, ale o součást jazyka (syntaktické konstrukce na odesílání a příjem zpráv). Procesy tam nejsou jako vlákna operačního systému, ale interní tzv. odlehčené procesy, které si Erlang spouští vlastním plánovačem (shedulerem). Takže jich může být opravdu moc hodně, je laciné je vytvářet a mohou se spouštět tehdy kdy je třeba. (netřeba mít nějaký pool předforknutch vláken a různě je recyklovat).

    Na Erlangu není zajímavý ten vlastní jazyk. I když je hodně vizionářský. Ale to runtime. Je rychlé a spolehlivé.

    Z věcí co v Erlangu jsou už cca 30 let očekávám znovuobjevení např.

    * spojování procesů (jeden proces ze skupiny spadne, shodí to celou skupinu, neboť je na něm závislá) a monitorování procesů (zhavarovaný proces je nahlášen zprávou dozorci). Z toho se pak dá udělat strom závislostí a supervisorů (nějaký proces spadne, tak se restartuje a případně to restartuje skupinu závislých procesů) - aplikace se pak stane odolnější proti chybám - chyba shodí a otočí jen to co je nutné, co na tom nezávisí to nesletí.

    * imutable struktury - tady IT mainstream začíná uznávat, že to je dobrý nápad. Ale ještě pokud vím nezašel tak daleko, aby to byla přímo součást jazyka. To má význam při uvolňování nepotřebné paměti. Garbage collector je pak jednodušší a může být per proces místo jednoho velkého pro celý runtime. Takže Erlang nemá problém "stop the world". Viděl jsem velké problémy, které to na vytížených systémech v Javě způsobovalo. (ale nesleduji to, pokud je to už je vyřešené, tak pardon)

    * tabulky s daty jako součást aplikace - pokud data a aplikace jsou v jednom procesu (z hlediska OS), tak přístupová doba pro hledání řádku podle indexu jsou jednotky mikrosekund. U meziprocesové komunikace s externí databází (obvykle přes sockety) to je bývá o 3 řády více.

    * transparentní spojování více nodů do clusteru - v článku popsané zasílání zpráv jde dělat přes síť. Na ID procesu se pošle zpráva a je jedno, na kterém počítači ten proces běží. Z toho se pak dá postavit distribuovaná aplikace podle potřeby.

    * změna kódu za běhu - to má Erlang udělané přímo v sobě. Viděl jsem jen něco podobného v Javě kde se to řešilo změnou názvu tříd. Kdy se kód generoval z nějakého metajazyka. Ale byl to takový hack.