No, proč vlastně trváme na tom, že nový jazyk má mít jeden "zastřešující" cíl a mít jeden nosný důvod pro svoji existenci?
Protože zkušenost říká, že to jinak nefunguje. Když honíte moc zajíců, nechytíte nakonec ani jednoho.
Co když vezmu něco stávajícího a to jenom vylepším resp. něco v tom fixnu?
Pokud v tom vylepšíte jedu věc, je to jeden cíl. Pokud si tu věc k fixnutí nevyberete úplně špatně, bude výsledek fungovat.
V čem konkrétně je podle vás ten jazyk nekonzistentní (kočkopes)?
Vy jste ale psal o tom, že se něco (tj. jedna věc) fixne. To ale není případ Kotlinu.
Podle wikipedie kotlin začal někdy 2010, 2011 ho oficiálně uvolnili, java 8 byla 2014. V době kdy Kotlin začínal, v té javě něco evidentně bolestně chybělo. To není objektivní argument, ale subjektivní výsledek pozorování (dělal jsem tehdy šéfa menšího týmu vývojářů v jedné bance). Pamatuju si, jaké urputné boje u nás u developerů nastaly za nasazení javy 8 do produkce. Hlavně šlo tedy o ty lambdy, že... To bylo slávy, když se na tu osmičku konečně i v tom zabetonovaném korporátu přešlo. Skoro to bylo na nějakou bouřlivou oslavu. Ajťáci, no. Nikdy potom už něco takového nepamatuju. Třeba jsme nijak nebojovali o to, aby se java 12 rozšířila na javu 14 To je každému jedno. Tak tam opsové nasadí novou javu no. Ta 8čka byl nějaký zlom. Dokonce takový, že valná část lidí zbranže mi připadá, že dělí javu na "před osmičkou a tu s těma lambdama". Pro mladou generaci je java < 8 už asi něco jako pevná linka/fax. Vidí to v retrofilmech, používali to tátové, ale.... brr No to jsem se nechal trochu unést populismem. Vemte si, ale, za 3 roky java začala dokulhávat tam, kde už byli ostatní..
To všechno je pravda. Ale nic z toho neříká, že když vezmu jazyk a naskládám do něj bez ladu a skladu půlku zajímavých věcí, které jsem potkal v jiných jazycích, že to jako celek bude dobře fungovat. Ostatně, kdyby to fungovalo, Kotlin by musel být úplná hvězda vzhledem k tomu, kolik sladkostí se tam přidalo.
Nejde to jenom shodit na hezčí syntax. Jde i o ty filozofické změny (třeba nullable typy), které přinesly větší bezpečnost. (Dobře, aby mohl mít člověk objekt. srovnání, musel by asi naprogramovat a běžet totéž v K a javě a porovnávat počet NPE za časovou jednotku.). Nejde jen ale o nullable reference.
Vlamujete se do otevřených dveří. Celou dobu říkám, že ty jednotlivosti jsou super. Každé to jednotlivé cukrátko z Kotlinu bych chtěl mít v jazyce, ve kterém budu psát. Akorát že, jak už jsem psal, jenom poskládat na hromadu ty hezké vlastnosti nestačí. Neumím to pořádně pospat, je to jenom můj dojem, ale podle mne programovací jazyk (stejně jako spousta dalších věcí) musí mít nějakou vnitřní logiku, systém, jednotlivé věci do sebe musí hezky zapadat. Je to jako s matematickými nebo fyzikálními teoriemi – ty opravdu zajímavé jsou pozoruhodně
krásné, elegantní, věci do sebe hezky zapadají. I jejich matematické vyjádření bývá překvapivě stručné. Kotlin je pro mne ošklivý, ježatý, ty fíčury z něj trčí na všechny strany. Jsou jiné moderní jazyky, které se nechlubí tím, jak mají spoustu fíčur, ale vidím v nich nějakou vnitřní logiku – třeba Go, pravděpodobně i Rust. Vedle toho jsou staré jazyky, které se dokážou modernizovat a přijmout do sebe i dost odlišnou novinku – ale pěkně se to spojí s původním jazykem a nová verze je opět kompaktní a na první pohled nepoznáte, co tam bylo přidáno. Java takhle třeba přijala lambdy – počáteční návrhy byly dost hrozné, v diskusích jsem se o nich nevyjadřoval hezky, ale postupně se to otesalo a našel se tvar, který do Javy nakonec docela dobře zapadl. JavaScript dokázal přidat spoustu drobných vylepšení a pořád to drží pohromadě, v podobě TypeScriptu se dokonce přidal typový systém a pořád to jako celek dává dobrý smysl.
Jeden příklad z praxe za všechny. V projektu jsem kdysi refaktoroval field z int na Integer. V kódu na jednom místě zůstalo porovnávání přes ==. Unit testy prošly (pracovaly s dostatečně malými čísly Bum problém "na produkci". Jasně, chyba obsluhy. Ale já alibisticky doteď trvám na tom, že kdo to takhle celé navrhnul, udělal bug v návrhu. Dokonce to bude kombinace více bugů v návrhu. Typový systém v Kotlinu je bugfix. (Jasně, kdybych býval tehdy ten kód prohnal přes nějaké PMD nebo jinou statickou analýzu kódu, býval bych to asi chytil. IDEčka tehdy nebyla na takové úrovni, těm to bylo jedno. Dneska už by IDEA svítila na tom "dvojpodtržítku" žlutou barvou jak pampeliška -- statická analýza/IDE je ale berlička).
Ano, primitivní typy v Javě jsou chyba návrhu, i když pochopitelná a omluvitelná dobou vzniku. Ale je to přesně ta věc, která tam nepatří, trčí z toho. Přidáte do jazyka novou vlastnost, na vše ostatní se to pěkně naváže – jenom primitivní typy to rozbijou. Přitom v době vzniku Javy byly podle mne primitivní typy přesně to cukrátko, které tam chce každý mít.