Portál AbcLinuxu, 5. května 2025 16:01
Python je jazyk, který si neví rady sám se sebou (mám být objektový, funkcionální, nebo jiný?). Na druhou stranu má jednoduchou syntaxi a pyGtk vytváří přímo vývojáři Gtk. Problematická standardní knihovna (každý modul je jiná ves). Nevhodný pro aplikace náročné na výkon procesoru. Je multiplatformní.Huh?! Osobne nepoznam objektovejsi jazyk ako python.. V uvode k objektom snad kazdej prirucky o pythone je veta "Vsetko je objekt." Nepleties si to nahodou s Perlom?
len()
, nebo map()
a reduce()
je co? Já v Pythonu dělám, takže snad vím, že na tom není s konzistencí dvakrát dobře a souvisí to i s tím, že Guido nechtěl z počátku podporu objektů zavádět, takže se jednalo o čistě procedurální jazyk. A když mi nevěříš, co třeba new stylled class, textové výjimky a hromadu dalších dokladů o tom, že návrh Pythonu není tak bez chybičky, jak se obecně tvrdí.
Problematická standardní knihovna je to, že se každý modul ovládá jinak, mnoho z nich existuje jen díky zpětné kompatibilitě, protože je nahradili daleko lépe udělané nové. Není (anebo o něm nevím) žádné doporučení, jak dělat moduly.
C má mizernou implementaci gtk? Vždyť C je nativní jazyk pro gtk Docela dobrý argument proč NEPOUŽÍVAT C++ je kouknout se na zdrojáky skutečných dynamických objektových systémů- Lisp, Smalltalk, Python, Perl, Lua.. Všechno je implementováno v C, nikoliv v C++. Kdyby objekty v C++ byly použitelné, proč by jednoduše autoři nenavrstvilit interpret kolem nich, a neušetřili si tak spoustu práce?Argumentace autoritou není korektní argumentací
Spojovat C++ a asm dohromady bylo jako kdybyste se pokoušel mýt v paneláku schody a někdo vám vždy když se předkloníte vrážel rozžhavenou tyč do zadku.
Tak to nemůžu posoudit, nemám takové životní zkušenosti jako vy… :-)
... Třeba změna třídy za běhu je něco, co jsem viděl (jenom viděl) ve SmalltalkuPche, změna metody za běhu, prkotina. Změnit třídu objektu uvnitř jeho metody? Prkotina. V čem? V PERLu!...
„Dnešní CPU jsou zcela viditelně optimalizovány pro konstrukce jazyka C, což byste poznal, pokud byste znal nějaké hodně staré procesory.“To mi povídejte, u nohou mi leží VAX.
„2) a nebo bezpečný dynamický, ale pomalejší kód (pak se dělá hodně za běhu, cesta Smalltalku, Pythonu), pak je ale třeba vědět, že je to daň za tuto vymoženost, a neplakat na špatném hrobě a nezatěžovat cpu blbostma“Já pořád doufám, že s tím pomalejším kódem to není nezbytně nutné, a Self 93, HPS (High Performance Smalltalk - jádro VisualWorks) a Strongtalk mě v tom tak nějak utvrzují. Je ale jasné, že ze všech tří cest je tahle absolutně nejnáročnější na kvalitu implementace a na množství práce a času do ní investované. Proto chápu, že na některé věci si budeme muset ještě počkat. :-/
Ze stejného ranku jsou dřívější Forth procesory a Lisp procesory, ale prostě počítač s takových specializovaným cpu se prostě nemůže vyvíjet.Hmm, akcelerátor Lispu v FPGA ... že bych ještě změnil téma disertačky (a pravděpodobně i ústav?)
„Proč dlouho přemýšlet jestli by náhodou nebylo lepší tady tohle držet v registru místo v paměti, když L1 cache má latenci pouze 1T?“A ještě jednodušší je prostě mít třicet dva celočíselných registrů nebo rovnou registrová okna.
... takže při volání identické virtuální metody záleží na tom z kterého konstruktoru ji voláte.Vy ste ale komik.
$ more cee_flus_flus_sucks.cpp #include <stdio.h> struct Sracka { virtual void Blb() { printf("objekt je typu Sracka\n"); } Sracka() { Blb(); } }; struct SrackaKvadrat : Sracka { virtual void Blb() { printf("objekt je typu SrackaKvadrat\n"); } SrackaKvadrat() { Blb(); } }; int main() { SrackaKvadrat jedna_a_ta_sama_sracka; return 0; } $ g++ cee_flus_flus_sucks.cpp $ ./a.out objekt je typu Sracka objekt je typu SrackaKvadrat $Jaký komik? Tak mění C++ objektům svévolně za běhu třídy nebo ne? A mimochodem, ta "vyřešená interoperabilita" a bezproblémová implementace překladače a knihoven- jak se to shoduje s tím že když uvedený příklad zkusím místo
g++
přeložit jiným compiler driverem a sice gcc
, dostanu toto úžasně užitečné a insajghtfulní chybové hlášení:
$ gcc cee_flus_flus_sucks.cpp /tmp/ccSkOQw4.o:(.rodata._ZTI13SrackaKvadrat[typeinfo for SrackaKvadrat]+0x0): undefined reference to `vtable for __cxxabiv1::__si_class_type_info' /tmp/ccSkOQw4.o:(.rodata._ZTI6Sracka[typeinfo for Sracka]+0x0): undefined reference to `vtable for __cxxabiv1::__class_type_info' /tmp/ccSkOQw4.o:(.eh_frame+0x11): undefined reference to `__gxx_personality_v0' collect2: ld returned 1 exit status
virtual and for contructor use only
?
ano, šlo by to ojekabátiť spomenutým for contructor
Sracka
, takže se volá příslušná virtuální metoda a teprve potom vzniká instance třídy SrackaKvadrat
, přičemž se volá zase její metoda. Nevím, jak si představuješ, že se v okamžiku, kdy ještě není vytvořena instance třídy SrackaKvadrat
, bude volat právě její virtuální metoda ...
Myslím, že jsi právě ukázal, že C++ vůbec nerozumíš. Pořadí volání konstruktorů při vytváření objektů je specifikováno normou jazyka, takže pokud bys znal C++, věděl bys to.
BTW: jak souvisí chyby (při linkování) v jednom konkrétním překladači s C++ jako takovým?
gcc -x c++ main.cpp -lstdc++ -o zde_nema_zrovna_dobry_den
.c
gcc
nemá ten -l stdc++
ve svém -dumpspecs
? Jak má build tušit jak se ta pitomá knihovna na které architektuře jako jmenuje?
gcc
kompiluje .s, .c, .S, .C bez problémů, a zřejmě i .f nebo .java. Proč kvůli .cpp zavádět nový šmejd?
gcc
správně kompiluje C++ - a bez problémů. Pouze má jinou sadu defaultně přilinkovaných knihoven, pokud ho spouštíte jako gcc
, a jinou, pokud ho spouštíte jako g++
.
.cpp a .cxx su vymysly pre istu nahrazku os, ktora ma case insensitive nazvy suborov a ani nezvladala + v nazve suboru.
gcc
kompiluje C++ zdrojáky správně, ať mají příponu cc
, C
, cpp
, cxx
nebo c++
. Pokud používáte gcc pro linkování, pak sada automaticky linkovaných knihoven závisí na tom, zda voláte gcc
nebo g++
.
stdc++
přidávala, v zimě nikoliv- aspoň by programátor v C++ neztrácel kontakt s realitou. A co rovnou /dev/urandom
, to by bylo zábavné!
Linkovat pomocí gcc se samozřejmě může, sám to dělám (jen když chcete linkovat pomocí gcc
C++ moduly, musíte přidat ručně -lstdc++
). Nemělo by se ovšem tvrdit, že má gcc problémy s kompilováním C++ zdrojáků, protože to prostě není pravda.
Mimochodem, vím nejméně o jednom projektu, který k linkování C++ modulů záměrně používá gcc
, protože i když je psaný v C++, standardní C++ knihovnu nepoužívá.
libsupc++
, což je minimalistická podmnožina libstdc++, obsahující vše potřebné.
objekt.x = y
mohl udělat objekt.předek = x
. Ten parent slot (jak se tyhle speciální sloty (po C++kovsku membery) objektu nazývají v Selfu) má výsadní postavení pouze v tom, že když se na objekt volá metoda a nenajde se v samotném objektu, prohledávají se objekty odkazované parent sloty objektu (více parent slotů => „vícenásobná dědičnost“).
Typicky tedy většina objektů obsahuje „sloty s členskými daty“ a jeden parent slot na objekt s metodami společnými pro rozsáhlou skupinu objektů. A ten sám může odkazovat na „nadtřídu“ (resp. druhý prototyp v pořadí). Jinými slovy, svým způsobem máte pravdu – OOP s dynamickou změnou třídy opravdu „příliš nepočítá“, dalo by se říci, že v objektovém systému se to považuje za samozřejmost a není tomu tedy třeba věnovat nějakou zvláštní pozornost. #become:
, v některých implementacích s tím počítají třídy využívající objekty proměnné délky (tj. typicky kolekce).
Moje uvaha je z oblasti skifi. Ale... ted byla do boostu prijata knihovna GIL(Adobe Generic Image Library), kterou navrhl Adobe a postupne v komunite Boostu dostava konkretni tvar, jak ji lidi pouzivaji. Momentalne Adobe pouziva Boost asi ve 30 aplikacich. Tim chci rict, ... jelikoz povazuju Adobe za firmu, co grafice rozumi, pak by vitr mohl vanout z techto koncin. Kdovi, jestli si Adobe timhle neklesti cesticku.
Iniciativa pro GUI framework by urcite byla: "GUI libraries will always have specialized widgets, arbitrary graphics, deep operating system dependencies, different architectures; no GUI framework is good for everyone, so a "Boost::GUI" would be at best a popular option for specific tastes and needs, not a standard."
Po prijmuti noveho std c++09 se zrejme diskuze orientuji na toto tema. Zatim je to tabu, cehoz Qt vyuziva.
Slovo kvalitní je subjektivní. Proč Linux nedává energii, kterou dává do podpory Qt do jiných frameworků? Záměrně nejmenuji.Obrovská podpora směřuje do GTK+ a jeho bindingů. Bohužel.
Pokud komunita protlačuje řešení zdarma a souběžně s tím propaguje jako správné řešení za statitisíce je to nekonzistentní.Nechapu, proc by to nemelo byt nekonzistentni - komunita propaguje OTEVRENE, tedy GPL reseni. VETSINA bezne distribuce Linuxu JE GPL! Nechapu, jak licence Qt podle tebe nemotivuje komercni firmy. V tom si opravdu odporujes - jako komercni firma bych prave byl stastny, ze mam nekoho, kdo mi za moje penize poskytne support a konzistentni "balik". (at uz to je RedHat nebo Trolltech) Dale:
Linux začne být rozšířenější, až pro něj komerční firmy budou běžně psát swJako treba Oracle? IBM? SAP?
a k tomu je potřeba aby Linux preferoval základní grafické knihovny a základní prostředky pro grafické prostředí zdarma.Jako treba Qt? (GPL je zdarma!) GTK? wxWidgets?
Srovnejte to s cenou za grafickou vrstvu pro vývoj Windows.Nevsiml jsem si, ze by Visual Studio a MSDN bylo pro komercni aplikace zdarma - narozdil od Qt, GTK, wxWidgets. Jen pro srandu se podivej na: http://www.sws.cz/default.asp?cls=SPresentTrees&StrType=1&StrSort=J9QAT0DXT
Psat, ze je "zdarma JEN pro GPL" je psychologicky zavadejici, i kdyz technicky spravne.
Na tom není nic zavádějícího, to je prostě důležitá skutečnost, která omezuje její použitelnost. Např. pokud je nějaký produkt zdarma jen pro použití ve školství, pak není "zdarma tečka", ale je zdarma jen pro školy. Stejně tak Qt není "zdarma tečka" ale zdarma pouze pro použití v GPL projektech (tedy ani zdaleka ne všech open source).
Pro mne jsou to nekřesťanské peníze, vezmu-li v úvahu, že je dvojnásobek ceny C++ Builder Professional a skoro tolik, co stojí C++ Builder Enterprise. Srovnám-li, co nabízejí tyto produkty a co nabízí Qt, pak tu cenu musím považovat za naprosto neadekvátní.
Gtk je LGPL, takže program, který je proti ní dynamicky linkován, může mít licenci, jakou uznám za vhodné. Qt je GPL, takže program, který proti ní linkuji, lhostejno zda staticky nebo dynamicky, musí být GPL.
Chtel jsem jenom trochu zchladit ten zapal meho predrecnika. Protoze ve spojeni s tim moc-procesorem ma podle mych zkusenosti zacatecnik znacne problemy uz pri kompilaci.Co je na použití qmake tak složitého (qmake se postará o vše, i o
moc
)?
Proc jsme Qt opustili byl ten problem, kdy jsme meli vektory pointru na objekty a kdyz chtel clovek pak nastavit napr x-souradnici nejakeho objektu, tak to meslo obejit jinak nez s _cast_.Můžete to nějak rozvést? Pod tím si dovedu představit jen vektor QWidgetů, u kterých X souřadnici nastavíte raz dva...
p->move(novéX, p->y())
?
Já se domnívám, že v jiných jazycích napíšeš velmi snadno špatný kód. Ale C: to buď umíš a napíšeš v něm cokoli -- anebo neumíš a nenapíšeš v něm nic. Nic mezi tím...
Asi jsi jeste moc C zdrojaku programu nevidel co? Pravda je takova, ze v C je to uplne stejne jako vsude jinde: spatny kod se pise velice lehce.pak přijdou pointery a další věci, v těch místech tě C začne srát, ale pokud se nevzdáš, zvykneš si.He he, úplně přesně. Četl jsem nějakou knihu o Céčku. Do kapitoly ukazatelů jsem to bral docela rychle, neboť základní věci jako podmínky a cykly znám a potřeboval jsem znát pouze syntaxi. Dál už jsem začal docela nestíhat a vzdal jsem to. Takže říkáš, že když to nevzdám, tak z toho bude ovoce?
Chci také pochopit počítač a nějakým způsobem se s ním sžít, poznat ho.Pak nelze jinak, než doporučit assembler
Vždyť tam vlastně nic jiného než ukazatele nejsoupak přijdou pointery a další věci, v těch místech tě C začne srát, ale pokud se nevzdáš, zvykneš si.He he, úplně přesně. Četl jsem nějakou knihu o Céčku. Do kapitoly ukazatelů jsem to bral docela rychle, neboť základní věci jako podmínky a cykly znám a potřeboval jsem znát pouze syntaxi. Dál už jsem začal docela nestíhat a vzdal jsem to. Takže říkáš, že když to nevzdám, tak z toho bude ovoce?
Hledá se PYTHONISTA (fulltime) !!!
Proč mi do toho nesedí / sedí až moc ta patička?Protože život je pes a dobrých programátorů není nikdy dost..Hledá se PYTHONISTA (fulltime) !!!
Python
, pygtk
, idle + ipython
.
btw, otázka GTK vs Qt ... čo je viac? sloboda programátora (voľba toolkitu) alebo sloboda užívateľa (voľba výzoru)
Filozofická odpoveď: licencia
v prípade, že by callbacky boli iba libky, ktoré samotný midlayer dynamicky ťahá (povedzme, že by mal loader aj pre javu, aj pre C/C++, aj pre perl, v núdzi aj pre python ...) odtiaľto sa dostávame k projektu parrot (veď aký je dôvod, že by sa napr C nemohlo interpertovať?)
Konečně pořádný hlas! Ale zásadně FOTRAN 68. Novější verze je pro sraby
GUI taky, samozřejmě. Nejlepší vstupně/výstupní zařízení je ovšem dálnopis!
Slzu jsem již zatlačil...
Nejspíš proto, že aby se člověk mohl programováním živit, stačí právě znát jeden jazyk (a často ani ne moc dobře)... A když se tím uživím (programováním), tak to přeci umím, ne?Á kolega bude také z VŠE
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.