Máte například CUDA Fortran, který výpočty dělá i na grafické kartě https://developer.nvidia.com/cuda-fortran
Jistěže se dá Perlem psát naprosto prasácky. Nicméně pokud chci čistý a přehledný kód, jaký jsem si zvykl psát ještě za dob BASICu, tak ho napíšu.
S tím Active Perl popisuji vlastní zážitek. Je docela možné, že se dal někde najít nebo koupit normální instalační soubor, nicméně jsem to řešil přechodem na Linux, kde se člověk s takovými číčovinami nemusí zabývat.
Navíc Perl pro windows (jako většina jiných věcí na této platformě) není stoprocentně kompatibilní s normou jazyka a nelze na něm používat řadu knihoven (zdroj Satrapa: Perl pro zelenáče). Stejně tak jsou na win problémy s TeXem, nefunguje tam Image Magick, není k dispozici nějaká funkceschopná náhrada Midnight Commanderu a mnoho dalších věcí.
"Tak PL/I to byla taky docela dobrá směs konvencí posbíraných odjinud a na rozdíl od C, člověk nevěděl jak se co přeloží a co jak bude náročné."
Pointa byla, že jsem napsal myšlenky tvůrce jazyka C. To byl jediný důvod, proč jsem ten jazyk zmínil - a žádný jiný. Já fakt nemůžu za životní názory a zážitky Ritchieho a dalších.
Nicméně PL/I byl strašný jazyk, ale mimo jiné proto, že o pouhých 10-20 let existovaly kvalitativně lepší programovací jazyky. Dnes je ale trend - programovací jazyk musí být úplně hloupý, nic neumět, a čím méně toho umí tím lépe. Zbytek se dožene knihovnami. Jazyk pak špatně optimalizuje, protože nemá dostatek informací ve zdrojovém kódu (takový 60 let starý Fortran dokáže pro vědecké výpočty vygenerovat optimálnější kód, než nejlepší kompilátor C). Dále špatně chytá chyby, opět pro nedostatek informací. A řadě zkušenějších programátorů se pak začínají ty starší jazyky jevit v lepším světle, protože něco uměly a programátorovi pomáhaly výrazně lépe, než dnešní jazyky.
Abych se vrátil k tématu, Python se stává populárním mimo jiné proto, že důsledně nesledoval moderní trend dnešních programovacích jazyků, tedy být hloupý, umět co nejméně, a ideálně všechno složitě. Což je docela zvláštní u Pythonu, protože je to vlastně glue language, jazyk na lepení kousků kódu v jiných jazycích, a ten vlastně nemusí tak mnoho umět.
Zkrátka Rossum, autor Pythonu, si zachoval trochu praktičnosti, na rozdíl od mnohých dosti populárních jazyků. To je celé.
"Omyl, jeste neni lez, vazeny pane. :-) A to, ze pro nejaky OS existuje kompilator, jeste neznamena, ze dany programovaci jazyk se na dane platforme opravdu pouziva."
Brání tedy něco používat ten jazyk na dané platformě, když pro něj existuje kompilátor/interpretr?
"Dobra rada: i kdyz mate treba pravdu, nemusite byt hned agresivni."
Omlouvám se, příště nebudu fackovat, kopat ani jinak inzultovat účastníky diskuse. Dnes jich už 10 muselo vyhledat lékařské ošetření. Také se omlouvám za všechna sprostá slova, která jsem v této diskusi napsal, např. - a sakra ani jedno jsem nenapsal!
"Nerozbilo vam to "C" nejake hracky :-)"
Nerozbilo - jak jste si všiml, nemám žádný problém pochválit jazyk, který nemám rád (Python), a zkritizovat jazyky, které mám rád. Ta politická korektnost, kdy lidé nejsou schopné přímo a natvrdo napsat, jak se věci mají - by měla zůstat v politice, ne v technice a IT.
"Ne vazne, doufam, ze to myslite vsechno v nadsazce."
Myslím to naprosto vážně - a klidně mi vyvraťte cokoli jsem napsal, pokud něco z toho není pravda. Zdůrazňuji, že v C/C++ programuji poměrně často, a to i dnes. A mám ty jazyky rád. Ale proč bych si lhal o skutečnosti?
"Kazdy programovaci jazyk se hodi na neco jineho, ve vetsine vetsich dnesnich projektu narazite na nejakou kombinaci programovacich jazyku, ktere se (doufejme) dobre doplnuji. "C" byl navrzen, aby umoznoval low-level programovani, ale odprostil programatory od assembleru, vic bych zatim nehledal."
No a já napsal, k čemu se hodí C programování.
C nebyl navržen, aby oprostil od assebleru, to mimochodem až tak zcela nezvládá. Zkuste v C programovat třeba různé vědecké algoritmy, když pojedou třeba 1000 x rychleji na SIMD instrukcích v assembleru, než v C. To u náročných výpočtů nemá smysl. Stejně tak C potřebuje, aby procesor měl určitou sadu instrukcí, jinak je C neefektivní - na řadu různých méně standardních architektur s C pohoříte jako papír.
C byl navržen proto, co jsem napsal. Pro možnost psaní přenositelných jader operačních systémů. A i tam se bez pomoci kusů assembleru neobejde.
C nahrazuje assembler zhruba stejně, jako většina jiných vyšších programovacích jazyků. Vyšší programovací jazyky byly stvořeny proto, aby člověk nemusel psát v assembleru - to je důvod, proč vůbec existují.
Jediné dva důvody, proč se protěžuje C: 1) Vznikl kolem unixu, a unix je brán jako bůh a modla. Co je součástí unixu, to se bere za správné, i když je to špatné a nedomyšlené. 2) Je to tak hloupý a jednoduchý, nic neumějící jazyk, že C je extrémně snadné implementovat. Proto je implementován na kde co.
"A zrovna PL/I bych osobne neopevoval, ani ne kvuli jazyku samotnemu, ale hlavne kvuli tomu, ze se s nim setkate vlastne jen na mainfraimu, coz je lepsi obejit obloukem, pokude nejste masochista"
O tom, že PL/I je jen na mainframu - zde vás lze usvědčit ze lži ve zlomnku sekundy (http://teampli.net/candt.html).
A i kdyby byl jen na mainframu, neznamená to nutně, že PL/I je špatný jazyk.
"S "C" uz v mainstreamu dneska taky vlastne nesetkate."
Bohužel, kéž by to byla pravda.
P. S.: Berte na vědomí, že mám C rád. A programouji v něm víc, než se zdá. Ale to mi nezabraňuje mít růžové brýle a nevnímat ho pragmaticky.
Nerozbilo vam to "C" nejake hracky :-)
Ne vazne, doufam, ze to myslite vsechno v nadsazce. Kazdy programovaci jazyk se hodi na neco jineho, ve vetsine vetsich dnesnich projektu narazite na nejakou kombinaci programovacich jazyku, ktere se (doufejme) dobre doplnuji. "C" byl navrzen, aby umoznoval low-level programovani, ale odprostil programatory od assembleru, vic bych zatim nehledal. A zrovna PL/I bych osobne neopevoval, ani ne kvuli jazyku samotnemu, ale hlavne kvuli tomu, ze se s nim setkate vlastne jen na mainfraimu, coz je lepsi obejit obloukem, pokude nejste masochista :-) . S "C" uz v mainstreamu dneska taky vlastne nesetkate.
"Popravdě, každá syntaxe a každý jazyk má něco, co mě s...e. Na C-čku už jenom taková blbina, že musím napřed deklarovat a potom použít, linker to prostě nedá, i když .a file je v pořádku"
Jazyk C nastartoval boom hloupých, blbých, neschopných programovacích jazyků, kde programátor zbytečně dělá práci za kompilátor/linker. Od té doby se hloupé programovací jazyky tvůrcům jazyků zalíbily, a sekají je jako baťa cvičky jeden za druhým.
Jazyk C neumí téměř nic, a vznikl proto a jen proto, že bylo potřeba nějak rychle zbastlit multiplatformní assembler, aby bylo možné rychle přenést unixové jádro na jiný procesor. Navíc autor C byl posedlý myšlenkou, že programovací jazyk nesmí vůbec nic umět, co není bezpodmínečně nutné, a totéž platí pro standardní knihovnu. To byla jeho idea poté, co se nesrovnal z programování v jazyce PL/I, který měl plnou sadu funkcí a schopností.
Když budete brát, že C je jen další druh assembleru, tak to je přesně, o co v C jde. Není to plnohodnotný vyšší programovací jazyk, je to prostě jen luxusnější assembler.
Linker v C funguje přesně stejně jako linker v assembleru. Najde identifikátory a slinkuje jejich adresy. Finíto. Nic víc. Linkery vyšších programovacích jazyků toho musí umět podstatně více, ale C je vlastně opravdu jen assembler.
Spíše se divím, že tuto blbost z C převzalo i s chlupama C++.
"Ve všech příručkách, které mám k dispozici, jak v papírové tak i v elektronické podobě, se hned zkraje píše, že Python je čistě objektový jazyk a že v něm ani nic jiného než objekty neexistuje."
Tak si najděte příručky od autorů, kteří mají znalosti větší, než jejich ego a drzost tvrdit nepodložené věci. Autory těchto příruček si dejte na blacklist a už od nich nikdy nic nekupujte, nečtěte a neřiďte se tím.
Python není čistě OOP jazyk a nikdy nebyl. Lze v něm psát procedurálně/strukturovaně, objektově, částečně i funkcionálně.
"Perl ... Jeho syntaxe je, v porovnání třeba s tím Pythonem, křášťálově čistá a srozumitelná."
Ehm, křišťálově čistá a srozumitelná syntaxe Perlu - to je poněkud silné tvrzení. Syntaxe Perlu je nedomyšlená a zamotaná. Dokonce i pravověrní perlisté, co jsem kdy potkal, se neodvážili tvrdit, že syntaxe Perlu je čistá a srozumitelná. Když už chcete chválit Perl, najdete tisíc věcí, které můžete na Perlu pochválit, ale čistota a srozumitelnost syntaxe tam opravdu nepatří, to se nedá tvrdit ani při vykouření hodně kvalitního LSD.
"Absence Perlu pro windows byla jedním z důvodů, proč jsem přešel na linux."
Já si nainstalovat Perl na Windows poprvé už v době Windows 95 a neměl jsem sebemenší problém. A ten Perl jsem roky na Windows provozoval. Zřejmě problém bude někde jinde.
Tak ty prirucky zahodte - Python rozhodne ciste objektovy jazyk neni, ma dynamicke typovani, coz ale neznamena ze vsechno jsou objekty a uz vubec ne, ze kazdy Python kod je OOP. Python ma za sebou nejakych 15 let vyvoje a je mozne v nem programovat vlastne cokoliv a jakkoliv - i to, ze se jedna o interpretovany jazyk diky PyPy (JIT compiler pro Python) take neplati. O to, ze Pythonu stoupa popularita ma IMHO nasledujici duvody:
(1) Predevsim na americkych univerzitach se Python poslednich par let pouziva coby "pseudo" jazyk pri vyuce algoritmu a programovani
(2) Python doprovazi hype okolo AI a cloud sluzeb, kdyz se podivate na napr. AWS APIs tak Python (a vetsinou JS na Node.js) je jasne preferovany jazyk
(3) Python po letech porodnich bolesti zvladnul prechod z verze 2 na verzi 3, ktera se zbavila nekterych zastaralych konstrukci
Python ma take svoje problemy, ale v mixu s ostatnimy jazyky hraje ve vetsich projektech vyznamnou roli - YouTube je jen jeden priklad z mnoha (dalsi info napr. zde: https://en.wikipedia.org/wiki/List_of_Python_software)
Live with it. :-)
Ve všech příručkách, které mám k dispozici, jak v papírové tak i v elektronické podobě, se hned zkraje píše, že Python je čistě objektový jazyk a že v něm ani nic jiného než objekty neexistuje.
Do "alchymie" obcházení objektovosti se pouštět nehodlám, když je k dispozici vícero procedurálních jazyků.
Perl se najde prakticky na všech instalacích linuxu, vyjma nějaké speciální nebo jednoúčelové a očesané. Jeho syntaxe je, v porovnání třeba s tím Pythonem, křášťálově čistá a srozumitelná.
Absence Perlu pro windows byla jedním z důvodů, proč jsem přešel na linux. Respektive jsem kdysi stáhl Active Perl a zkusil instalovat a dostal jsem hlášku ve smyslu (přesný text po těch letech si liž nepamatuji) "toto není klasiclý instalační .exe soubor. musíte si koupit speciální instalační program, který vám ho nainstaluje". Takže bye, Blile Gatesi, download a install linux.
Popravdě, každá syntaxe a každý jazyk má něco, co mě s...e. Na C-čku už jenom taková blbina, že musím napřed deklarovat a potom použít, linker to prostě nedá, i když .a file je v pořádku :( Takže pokud budu psát třeba testy, budu mít konstantní strukturu s popisem každýho z nich (jméno, funkce, next) a budu je chtít přío coby konstanty řetězit, musím jejich seznam psát odzdola... (přitom stačí, aby si linker udělal interně tabulku odkazů při jednom průchodu, seskládal to při druhým průchodu a optimalizoval při dalších, pokud je co).
A za ty roky člověk najde stovky takových bot, co zdržují, komplikují a hází klacky pod nohy...
Jenomže zrovna na aktuálním projektu, kde mám
- 2MB FLASH
- 256kB RAM
- mikroSD (ze které nejde nic spustit)
a musí se tam vejít
- GUI (grafiku dělá jiná deska, kterou nemůžu přeprogramovat)
- TCP/IP stack
- FAT32
- malá DB
- XML parser
- proprietální protokol
- SHA256, TSL a SSL
a není to x86 a frekvence jádra je pod 200MHz.
Tam je takový vendor a platform locked C# hodně praktický, víš... A sorry, předělávat to na nejnovějšího Atoma a doufat, že to s M$ výkalama pojede i za půl roku kvůli stringům fakt nikdo nebude. Tohle je věc, která má mít životnost řádově 10 let...
V každém ze zmiňovaných jazyků (i řady dalších) mám praktické, minimálně několik trvající, zkušenosti. Zcela drsně to začnete cítit, až dostanete požadavek, že program musí umět všechny světové jazyky - a nebo dostanete převodní čískou tabulku, abyste to počínštili pro Asii.
Z vámi zmiňovaných jazyků PHP řetězce nemá vůbec, nutí vás emulovat práci s textem skrze bajtová pole v nějaké znakové sadě. Nakonec vás stejně donutí pracovat v UTF-8, protože je to jediné kde je plná sada funkcí včetně regulárních výrazů a dalších věcí.
Java a C# má práci s řetězci v jazyce, na rozdíl od PHP - a má datový typ String. Zde je ale omezení, že unicode řetězec je vnímán jako "pole 16bitových unsigned integerů", a tedy ve skutečnosti je to vnitřně UTF-16 kódování. Takže občas pracuje se znaky (kódovými pozicemi), občas s těmi 16bitovými kódy v UTF-16 kódování - a celkově oba tyto jazyky tím obtěžují, že ne vždy je "znak" skutečným znakem.
Je vůbec zvláštní, jak mají programovací jazyky problém implementovat bez komplikací a bez obtěžování nějakou znakovou sadou (a nějakými vnitřními reprezentacemi toho řetězce uvnitř jazyka) - takovou základní věc, jak je textový řetězec v dnes standarndím Unicode. Z vámi zmiňovaných jazyků to dokázal pouze Python.
Jinak dejte si do google "python string" - pokud chcete odkaz na referenci a standard pythonu, nebo "python string tutorial" - pokud chcete něco pro prvotní představu. Lupa by mi asi zakázala komentář, pokud bych sem dal haldu odkazů.
Protože nemůžu zmiňovat všechny jazyky.
Bylo by smutné, kdyby Perl neuměl práci s řetězci, když začínal jako náhrada unixových filtrů sed/awk pro práci s texty.
Na druhé straně je Perl upadající jazyk. Neskutečně zamotaná a nedomyšlená syntaxe Perlu. A pak počínání autora Perlu Larryho Walla, který tolik let vysvětloval, že Perl 5 zanikne a bude zlikvidován, a vznikne nový Perl 6, zcela nekompatibilní s tehdejším Perlem - až to lidi přestalo bavit, a z nadějného a rozšiřujícího se jazyka Perl se stal umírající jazyk bez většího zájmu o něj.
S příchodem C-like syntaxe skončila rozumná práce se stringy.
Pascalovský typ syntaxe zničil Niklaus Wirth. Bohužel jeho jazyky upřednostňovaly snadnost vytváření parseru gramatiky před praktičností. Tedy zavedl úchylnou tezi, že je lépe usnadnil práci jednomu člověku (tomu kdo tvořil kompilátor), aby jí zesložitil miliónům programátorů, kteří budou jazyk používat. Tím sice vytvářel jazyky s nepraktickou syntaxí, ale zase se mu tak snadno dělaly kompilátory, že těch jazyků vytvořil celou řadu: Pascal, Modula, Oberon, ... Já jen doufám, že všechny umřou, a nebudou se používat.
Bohužel Niklaus Wirth tím znemožnil jinak dobrou pascalovskou syntaxi, kterou považuji za výrazně lepší, než Céčkové syntaxe. Existují ale i docela dobré jazyky s pascalovskou syntaxí, jako je Simula nebo Ada.
Teprve s C syntaxí přišel boom jazyků, které neuměly ani základní věci, mimo jiné alespoň slušnou práci se stringy a poli (C, C++, Java, a další).
Osobně jsem s Pythonem ještě neměl tu čest, takže ten nebudu hodnotit.
Pod stringy bych se ale podepsal. Vlastně poslední jazyk, kde se s nima dalo dělat celkem rozumně, byl Pascal - ano, ta mrtvola. Ať už jako TurboPascal, nebo ObejctPascal.
str := 'váha = '+ IntToStr(weight) +' kg';
je něco, co hodně jazyků může jenom závidět. I když tam je zase řada lumpáren, jako třeba že není case sensitive a chybí zase plno dalších věcí.
Ve spojitosti se zpracováním řetězců nemůžu ani po letech zapomenout, jak k nám do firmy nastoupil sofťák a měl upravit SW pro jednočip v C. Měl přiat nějaký výpis na displej, nechtělo se mu s tím drbat, no tak použil printf(). Velikost SW vyletěla z 12kB na 18kB. Ovšem jednočip měl jenom 16kB FLASH. Ten monolog, co následoval, se nedá ani zapomenout, ani publikovat...
Zkuste napsat v Pythonu jednoduché udělátko typu "tyhle políčka vyplň, tyhle zaškrtni, tady vyber jednu z nabízených možností" a vyplněné ulož (tedy v praxi např. převádění vyplněných dotazníků do elektronické podoby) a to samé v Javě. V tom Pythonu je to nebetyčný opruz, protože kdejaké číslo nebo znak musejí být "instancí objektu" a musí se s nimi zacházet s naprosto šíleně nesmyslnou a nelogickou syntaxí. V Javě se "objektovost" dá alespoň částečně obejít a naprogramovat to alespoň částečně normálně.
Není to záhada.
Python má sice špatnou syntaxi, kdy bílé znaky hrají roli, ale má něco, na co klasické jazyky kašlou. Má plný arzenál nejčastějších datových typů a má plný arzenál abstraktních datových typů. Kromě toho relativně bohatou knihovnu.
Oproti tomu:
PHP nemá ani tak základní typ jako je textový řetězec neboli string. Neskutečný opruz. Dá se sice nějak emulovat knihovnou a žonglovat mezi polem bajtů (nazývaným pompézně string) a textovým řetězcem skrze nějaké znakové kódování, ale slabota.
C/C++ nemá ani pořádnou práci s poli, vše se musí emulovat skrze pointry a pointerovou aritmetiku. C++ má sice STL, která emuluje některé datové struktury, ale je to zase zabité tím, že tvůrci C++ se rozhodli nekontrolovat v této knihovně nic, takže když se omylem netredíte indexem pole, tak "chování je nedefinovatelné". Na zvracení.
O Javě ani nemluvím, tak je sice trochu lepší, protože má alespoň skutečné řetězce, a práce s textem pro ní není jen emulace nad polem znaků jako v C/C++. Ale má jiné nectnosti.
Mohl bych takto brát další programovací jazyky jeden po druhém.
Nikdy jsem nepochopil, proč není základním požadavkem na jazek mít přímo v jazyce excelentní práci s řetězci, poli, a dalšími abstraktními datovými strukturami. To by měla být naprostí samozřejmost. Vždyť ve většině programů takové struktury jsou a práce s nimi je ve většině jazyků masochistická. Jazyka a programy jsou pak zbytečně složité, kryptické, emulují se knihovnou i naprosto záklandí věci, které měl jazyk umět.
Zkuste si prácovat třeba se složitějším stromem v C, C++, Javě, PHP, Pythonu - a rovnou pochopíte, o čem mluvím.
A to pěkně prosím, nemám Python ani trochu rád, napsal jsem před lety článek, že s Pythonem končím - a dodržuji to. A jsem známý jako propagátor C++, kde to jenom trochu jde. Nicméně to hlavní, co se v programech řeší pořád dokola je v jazycích mimo Python strašný oser. Takže těžko můžu být obviněn z nadržování Pythonu.
Nechápu, jak ve 21. století se mohou masivně používat programy, které nemají dobrou práci se stringy, a nemají excelentní práci se základními abstraktními datovými typy. To, co má ve stringách a ADT Python, to by měl být standard - a ostatní jazyky by to měly zkopírovat.
Lidé netouží po jazycích, kde k napsání běžního programu potřebuje 20 000 knihoven o velikosti v megabajtech a doktorát z atomové fyziky (případ C/C++/Javy). Python je vzorný v tom, že v pure Pythonu tak jak je ve standardu napíšete hodně sami o sobě, a ten jazyk se nesnaží dělat složité věci, které být nemusejí složité. I grafické prostředí uděláte jen v pure instalaci Pythonu bez dalších věcí.
Pokud chcete odstrašující příklad, jak neschopnost jazyka je nutné nahrazovat rozsáhlými knihovnami, podívejte se na C++ a Javu.