Už né další zapřísáhlý nepřítel typové inference. Zkus si někdy nějaký jazyk s pořádným typovým systémem který se i řádně používá a nepoužívat inferenci. Mě by asi trefilo...
Teď dělám na jednom projektu kde ta typová signatura může mít až několik řádků.
24. 7. 2022, 10:57 editováno autorem komentáře
V Rustu. Přesněji s touto skvělou knihovnou: https://docs.rs/chumsky/latest/chumsky/
Měl jsem tu čest pracovat na projektu kde byl jeden člověk jehož motto bylo "auto everywhere". Nevěřil bys, ale udělat review a údržbu takového kódu stojí hodně času a úsilí.
Nikdy jsem neřekl, že auto je špatně, ale používat ho všude a vlastně vůbec nevědět, co kde je, good luck u velkého projektu co má miliony řádků kódu...
Tak v takové situaci to chápu, v tu chvíli má celý projekt úplně jiný coding style. Možná bych se to v tu chvíli snažila částečně obejít nějakou mock knihovnou která bude poskytovat api pro snadnější vývoj, ale v takové situaci jsem nebyla. Mně teď stačí že musíme pravidelně skoro naslepo integrovat projekt s kdejakým proprietárním nemocničním softwarem, který si standardy mnohdy vykládá po svém, a jestli to bude fungovat se zjistí až při deploymentu.
Ten povzdech s auto ovšem zněl jako by to bylo špatně za každé okolnosti.
Ne, protože ho většinou ani nevypínám, ale umí to i každý rozumný programátorský editor. A i bez toho, pokud jsou proměnné pojmenované rozumně, na zběžné "prohlídnutí" kódu přesný typ často znát nepotřebuju. Na složitější už se fakt hodí mít možnost přesunu na definici funkce, tooltipy se signaturou funkcí, docstringy a podobně, což bez rozumného editoru stejně nejde.
V Rustu se typy specifikují fakt jen v případě kdy není inference možná, a že by to někomu chybělo...
Neznámá *code base* s neznámými signaturami funkcí, na to se přeci nějaký nástroj pro inspekci zdrojového kódu hodí, nebo ne? A nemusíme to mu říkat IDE. Každý lepší editor dnes má plugin s LSP pro daný jazyk. Doby kdy se programy psali pomocí standardní knihovny, nebo sis vše psal sám a tudíž jsi věděl, co která funkce bere a vrací, jsou dávno pryč. Nostalgii dejme stranou.
U nových jazyků ani u spousty věcí nemusí být jasné, jak je správně psát, protože se to u toho jazyka prostě ještě nestihlo ustavit. Je to součást adopce nových jazyků, že se hledá, jak v nich vlastně psát (a zda v nich psát). Navíc i u starých jazyků se vyvíjí úzus, jak v nich psát (a nejde jen o nové vlastnosti jazyka).
Nové jazyky vznikají stále. Jsem v IT od 90 let, a nevzpomínám si na dobu, kdy by se neobjevil nějaký nový jazyk. Přežije jich minimum a mimo dílnu svého autora se jich začne používat promile. O náhradě C++ se mluví 20 let. Osobně si nedovedu představit masivnější rozšíření s tak vůči C++ odlišnou syntaxí.
Ještě se doplním - to, že nové jazyky vznikají a zanikají je dobře - mění se IT, mění se možnosti, mění se úlohy, mění se komplexita úloh, se kterými se pracuje. Nové koncepty, nové jazyky prošlapávají cesty, a vývoj jazyka, jeho testování není dobré dělat na rozšířeném masově používaném jazyku. Něco z toho se pak dostane do stávajících jazyků, s novým konceptem, paradigmatem, prostředím mohou vzniknout a rozšířit se i nové jazyky (mohou vzniknout nové revize programovacích jazyků a prostředí).
Jinak, čím je IT jako obor starší, tím je přijetí a rozšíření nového programovacího jazyka pomalejší a méně pravděpodobnější. Carbon, pokud by se začal používat, tak mimo Google na nových projektech za 5 - 10 let. Jako náhrada C++ (že by se začaly stávající projekty přepisovat) to je možná horizont 10-30 let. Nový jazyk nemá programátory, nemá lektory, neexistují pro něj osnovy a ani studenti.
Ne každý z těch nových jazyků byl propagovaný jako náhrada C++. A to jsem ani nepsal a nemyslel. Ale o neřešitelných problémech C++ se ví déle než 20 let (tím myslím baroknost návrhu, redukce C++ není možná z důvodů zpětné kompatibility), a tudíž se dá čekat, že tu budou vznikat nové kompilované OOP jazyky aspirující na to, aby C++ nahradili. Vzpomínám si na SWIFT, NIM, C#
Swift měl myslím nahradit zastaralé Objective-C, i když zrovna na něj platí “baroknost návrhu” taktéž. U Go si vzpomínám, že jeho vznik obhajovali pomalostí překladu C++. Evidentně problémy C++ pálí kdekoho :) U těch nových jazyků ale také bývají komplikace, Rust se kompiluje stejně pomalu jako C++, Swift je víceméně jen pro macOS, iOS, iPadOS, tvOS a watchOS — wow, pět OS :D — takže Carbon možná smysl dává, pokud nepřinese zase jiné problémy.
Swift je pro všechny OS: https://www.swift.org/download/
Tady máš jako příklad kalkulačku pro Windows:
https://www.swift.org/blog/swift-on-windows/#example-application
Podobně Objective-C byl taky i pro Windows a Linux (tam je dokonce přímá podpora jeho systému předávání zpráv v kernelu).
EDIT: A samozřejmě Swift, ObjC (a třeba i C#) nejsou pro všechny OS jen v podobě holého jazyka, ale včetně standardní knihovny:
https://www.swift.org/standard-library/
U ObjC vznikly jedna nebo více OSS implementací Cocoa knhovny.
25. 7. 2022, 13:39 editováno autorem komentáře
To tady asi všichni víme, ale všude mimo applí OS je to prakticky nepoužitelné (v IBM to zkoušeli a vzdali). ObjC na Linuxu bylo taky pakárna, jiný runtime, zastaralé verze, nemožnost statického linkování, napůl (ne)funkční ARC, prostě vopruz. Je to jako C# mimo Windows, přeloží se “hello, world” a s trochou štěstí kalkulačka, ale k produkci to má stejně daleko jako trakař ke stavbě kosmodromu (kromě Bajkonuru onehdá).
.NET má z historických dôvodov problém s UI, tak teraz vyvýjaný
.NET MAUI nepodporuje Linux. Plus viaceré knižnice sú naviazané
na MS SQL (beží ale pod Linuxom.)
Väčšina vecí funguje bez problémov. Stačí zopár príkazov a pár minút, a máme pod Linuxom k dispozícii jeden z najviac prepracovaných a najrozsiahlejších vývojárskych ekosystémov k dispozícii. Od webu, po gaming, IOT, či machine learning.