Programovací jazyk Nim

Re:Programovací jazyk Nim
« Odpověď #30 kdy: 28. 09. 2020, 22:04:43 »
Oprava faktoriálu:
Kód: [Vybrat]
(1..=3).product(); // 6

Samozřejmě, také vsázím na Rust. Asi hlavně kvůli WASM. Ať se to komu líbí či nelíbí, s webovými aplikacemi si ještě užijeme


Re:Programovací jazyk Nim
« Odpověď #31 kdy: 28. 09. 2020, 22:45:20 »
ukaz mi konkretni chybu, kterou Rust detekuje a bezne pouzivane lintery/kompilery nedetekuji. Podle me se vsechny takove chyby tykaji spravy pameti a soubezneho pristupu do pameti v paralelnich programech. Takove chyby hrozi jen v urcitem typu aplikaci. Kdyz pouzivas model pararelismu zalozeny na posilani zprav/komunikaci pomoci front a jazyk s GC, nic takoveho nemuze nastat.

Několik příkladů, které typový systém a další prostředky Rustu řeší:

1. Pattern matching a úplnost vyhodnocení možností a tím pádem:
2. Řádné ošetření nullable typů (Option rulez)
3. Řádné ošetření chybových výsledků (Result rulez)
4. Statická kontrola formátování řetězce (hygienic macro rulez)
5. Skvělá podpora pro serializaci pomocí maker (serde rulez)
6. Úžasná podpora pro budování parseru argumentů, opět pomocí maker a pomocí vyspělých složených typů (Enum atd.) (structopt rulez)
7. Oproti GC zcela deterministické uvolňování VŠECH možných prostředků, nejenom paměti, ale i třeba zámků nebo otevřených souborů a nevím čeho ještě. Na rozdíl od různých GC jazyků NEEXISTUJE, že by se volal nebo nevolal "destruktor" v závislosti na tom, jak se runtime zrovna rozmyslí (RAII rulez)

Rust není "jenom" hlídač paměti, ale autoři si dali hodně práce s tím, aby jazyk měl pokročilé vlastnosti známé z FP jazyků při zachování efektivity srovnatelné s C++ (protože zero cost abstractions) a v ideálním případě ne za cenu zhoršené ergonomie. Člověk často zjistí, že co mu chybělo oproti jiným jazykům, má Rust implementováno podobně nebo malinko jinými prostředky, ale se srovnatelným pohodlím.

Platí za to hlavně tím, že se musí dost věcí učit a že nad svým programem musí přemýšlet dopředu, případně vychytat fígle, které mu umožní část rozhodnutí přesunout do pozdějších fází vývoje. A pokud už do jazyka investoval, otevřou se mu další domény a věř tomu, že komunita kolem Rustu je hodně vitální a činí se, takže jeho využitelnost je od high performance web serverů přes embedded systémy a výpočetně náročné paralelní výpočty (Rayon rulez) k CLI utilitám a klidně i webovému frontendu s využitím WASM (Yew).

Už jsme na hraně flamewaru, takže za sebe tímto končím.

ok, asi mas pravdu, nebudu se vic hadat. Jen k tomu prvnimu bodu, v Pythonu 3.10 ma byt https://www.python.org/dev/peps/pep-0622/

Re:Programovací jazyk Nim
« Odpověď #32 kdy: 29. 09. 2020, 00:20:15 »
Tak Nim je to už poměrně dost dlouhou a nedávno došli k 1.0. Takže je to použitelné v produkci. Je to takový mix C, Pythonu, LISPu.
Fajn je kompilace i do JS, ale bohužel nezvládají es moduly, takže bohužel s dnešním moderním js frontendem si to moc neporozumí.
Osobně si myslím že dál už moc neporoste, spíš bude stagnovat. Je to podle mě právě tím, jaký je to mix všeho možného, prostě moc univerzální a tím pádem složité.

Poslední dobou jsou tu zajímavější věci

vlang  - https://vlang.io. Autor nasliboval neskutečné věci jako self hosted kompilátor, který je navíc super rychlý, polezou z něj ultra mini binárky atd. a dostal čočku za výmysly. Nejdřív totiž ani nebyly zdrojáky. Když to vylezlo ven, tak je to spíš takové alfa verze. Nicméně v json serializaci jeho http server vytřel celkem všem zrak - https://www.techempower.com/benchmarks/#section=data-r19&hw=ph&test=json. Tím začátkem to ale celkem pohnojil a už asi nemá moc šanci.

Co se mi ale poslední dobou nejvíc líbí je zig - https://ziglang.org. Ten se jen snaží udělat prostě lepší Cčko pro systémové programování a jde na to dost dobře. Není tam snaha tahat nic z C++, Rustu ... atd. Žádný GC jako v Go, to prostě do systémového programování nepatří. Dokonce se snaží zbavit maker! Je sám o sobě C kompilátorem a dokonce je oficiálně právě v NIMu podporovaný jako C kompilátor. Využívá moderní LLVM a kompiluje tak i do wasm. Vůbec další zajímavé věci.
Ale cesta k verzi 1.0 bude dost dlouhá, tak uvidíme :-)

Re:Programovací jazyk Nim
« Odpověď #33 kdy: 29. 09. 2020, 13:21:19 »
Zdravím. Vcelku nedávno jsem narazil na zajímavý programovací jazyk Nim. Syntax podobná Pythonu, rychlost se blíží k céčku (v porovnání s Pythonem rozhodně). Transpilace do C a JS, popřípadně C++ a ObjC (aby se daly pro ně psát knihovny/použít je?). Zajímavé syntaktické cukry. Problémem je že není moc rozšířený.

Co si o něm myslíte?

Tak kdysi jsem ho zkousel a ackolvi me na nem par veci zaujalo tak celkovy dojem nebyl nic extra. Je hodne citit ze neni prilis popularni a ma minimalni komunitu. Me osobne mnohem vice vyhovuje Dlang (jazyk D)

Re:Nim
« Odpověď #34 kdy: 29. 09. 2020, 14:48:54 »
- A ďalšia veľká revolačná zmena v programovaní bude podľa mňa živé programovanie - live coding. Nedávno som videl demo video a bolo to úchvatné... Niečo na štýl HMR z webpacku, ale omnoho pokročilejšie. Na jednej obrazovke ste písali kód a na druhej ste pozorovali živé zmeny úpkne bez ukladania. Žiaľ názov tej technológie si už nepamatám.
Lisp, Smalltalk, Erlang.


Re:Programovací jazyk Nim
« Odpověď #35 kdy: 29. 09. 2020, 17:04:47 »
Zeptám se, děláš ty věci v Rustu skutečně "idiomaticky"? Já si programuju v Rustu spíš menší věci (ať už na doma nebo utilitky do práce), ale přijde mi, že čím víc se tomu věnuju, tím méně klacků pod nohy mi ten jazyk klade. Určitě tam jsou oblasti, kde je problém (typicky cyklické datové struktury) a určitě některé věci navrhuju jinak než v Pythonu, kde je dynamický dispatch základním stavebním kamenem, ale tím se všechno zase často srovná a problém zmizí.
Snažím se, ale někdy prostě nenajdu/nepřijdu na nic moc hezkého. Zatím jsem to nepotřeboval ale co jsem se podíval na gtk-rs tak jsem celý zbělal... Nechce se mi moc bojovat s jazykem, nedělám tu řízení raketoplánu, ne?

Mně přišlo, že to už není tak hrozné, když ta makra původně pro nightly jsou použitelná i ve stable kanále. Ale jo, GUI je téma a slabina v použitelnosti Rustu.

Jedno slovo: Relm