Byla vydána verze 3.0 (Mastodon) nástroje pro záznam a sdílení terminálových sezení asciinema (GitHub). S novou verzí formátu záznamu asciicast v3, podporou live streamingu a především kompletním přepisem z Pythonu do Rustu.
Canonical oznámil, že bude podporovat a distribuovat toolkit NVIDIA CUDA (Wikipedie) v Ubuntu.
Tržní hodnota americké společnosti Alphabet, která je majitelem internetového vyhledávače Google, dnes poprvé překonala hranici tří bilionů dolarů (62,1 bilionu Kč). Alphabet se připojil k malé skupině společností, které tuto hranici pokořily. Jsou mezi nimi zatím americké firmy Nvidia, Microsoft a Apple.
Spojené státy a Čína dosáhly dohody ohledně pokračování populární čínské platformy pro sdílení krátkých videí TikTok v USA. V příspěvku na síti Truth Social to dnes naznačil americký prezident Donald Trump. Dosažení rámcové dohody o TikToku vzápětí oznámil americký ministr financí Scott Bessent, který v Madridu jedná s čínskými představiteli o vzájemných obchodních vztazích mezi USA a Čínou. Bessentova slova později potvrdila také čínská strana.
MKVToolNix, tj. sada nástrojů pro práci s formátem (medialnym kontajnerom) Matroska, byl vydán ve verzi 95.0. Podpora přehrávání formátu Matroska míří do Firefoxu [Bug 1422891, Technický popis]. Přehrávání lze již testovat ve Firefoxu Nightly.
Spolek OpenAlt zve příznivce otevřených řešení a přístupu na 211. sraz, který proběhne v pátek 19. září od 18:00 ve Studentském klubu U Kachničky na Fakultě informačních technologií Vysokého učení technického na adrese Božetěchova 2/1. Na srazu proběhne přednáška Jiřího Eischmanna o nové verzi prostředí GNOME 49. Nemáte-li možnost se zúčastnit osobně, přednáškový blok bude opět streamován živě na server VHSky.cz a následně i zpřístupněn záznam.
Microsoft se vyhnul pokutě od Evropské komise za zneužívání svého dominantního postavení na trhu v souvislosti s aplikací Teams. S komisí se dohodl na závazcích, které slíbil splnit. Unijní exekutivě se nelíbilo, že firma svazuje svůj nástroj pro chatování a videohovory Teams se sadou kancelářských programů Office. Microsoft nyní slíbil jasné oddělení aplikace od kancelářských nástrojů, jako jsou Word, Excel a Outlook. Na Microsoft si
… více »Samba (Wikipedie), svobodná implementace SMB a Active Directory, byla vydána ve verzi 4.23.0. Počínaje verzí Samba 4.23 jsou unixová rozšíření SMB3 ve výchozím nastavení povolena. Přidána byla podpora SMB3 přes QUIC. Nová utilita smb_prometheus_endpoint exportuje metriky ve formátu Prometheus.
Správcovský tým repozitáře F-Droid pro Android sdílí doporučení, jak řešit žádosti o odstranění nelegálního obsahu. Základem je mít nastavené formální procesy, vyhrazenou e-mailovou adresu a být transparentní. Zdůrazňují také důležitost volby jurisdikce (F-Droid je v Nizozemsku).
Byly publikovány informace o další zranitelnosti v procesorech. Nejnovější zranitelnost byla pojmenována VMScape (CVE-2025-40300, GitHub) a v upstream Linuxech je již opravena. Jedná se o variantu Spectre. KVM host může číst data z uživatelského prostoru hypervizoru, např. QEMU.
Už som podobné fórum zakladal aj inde, ale keďže som nedostal uspokojivú odpoveď skúsim štastie aj tu.
Neviete mi poradiť nejaké jazyky, ktoré pri objektovom programovaní používajú namiesto volania metód
posielanie správ
(message passing)? Potreboval by som to pre inšpiráciu.Ak nič nevymyslím použijem syntax z Objective C, ktorá mi ale príde trošku nepraktická trebárs:
poslanie správy v Objective C[stvorec setSize: [stvorec getSize] * 2];volania metódy (resp getteru a setteru v JS):
stvorec.Size *= 2;ak teda použijeme takúto triedu:
class Stvorec { private size = 10; get Size() { return this.size } set Size(value : number) { this.size = value; } ...
Smalltalk… A pak je několik dalších jazyků, které sice většinou nejsou považované za ilustrativní příklad v tomto ohledu, ale message passing mají (bez lámání přes koleno).
Mne sa zdá, že ide len o zápis syntaxe. V čom sa líši "zavolanie metódy" od "poslania správy"? Tak či tak sa nakoniec uložia nejaké parametre na stack cez push, urobí sa call, zmení sa IP register, urobí sa telo metódy a nakoniec sa urobí ret. Žiadne kúzlo tam nie je.
Uvědomme si dobře ten nejdůležitější rozdíl mezi zasíláním zpráv, využívaným v objektovém prostředí, a mezi voláním funkcí, používaném v jazycích C, C++ a podobných: při zasílání zpráv to, jaká operace bude na základě přijetí zprávy provedena, rozhodne až přijímající objekt ve chvíli, kdy zprávu dostal. Protože se takto vazba mezi požadavkem toho, kdo zprávu odesílá, a reakcí toho, kdo ji přijímá, naváže co nejpozději to je možné (tedy až v okamžiku faktického odesílání zprávy za běhu programu), nazývá se tento systém někdy také pozdní vazba (late binding).
Zdroj: http://www.mujmac.cz/rubriky/zaciname-s/objective-c-to-si-vysvetlime-podrobneji-54731cz
V objektovém prostředí může instance reagovat na všechny zprávy, i na zprávy, které v době překladu neznáte. Třeba je může někam předat. Představte si reflexi, proxy, delegaci, event dispatch, message bus, microservices, agentní systém a podobné věci - takto nějak bylo OOP původně od Alana Kaye míněno.Nemyslim si, ze je todle neco specifickeho pro objektove prostredi. Kdyz si v perlu definuju funkci AUTOLOAD, tak se mi zavola v pripade volani neexistujici funkce taky a klidne si volani muzu delegovat pres sit na server a zadne objekty nemusim pouzivat.
On ani ten Perl není zcela neobjektový.
Aby se zavolala metoda AUTOLOAD, když není nalezena volaná metoda, musí někdo zařídit. Zařídí to interpret při směrování volání metod. On to totiž musí Perl dělat tak jako tak, když potřebuje vědět, na jakou funkci z kterého balíku skočit. Takže doimplementovat fallback na AUTOLOAD() namísto zabití programu bylo triviální.
Všimněte, že to funguje jen při volání metod (Foo->bar). Nikoliv při volání funkcí (Foo::bar). Což opět je dáno tím, že se jedná o funkcionalitu z objektové infrastruktury Perlu.
Všimněte, že to funguje jen při volání metod (Foo->bar). Nikoliv při volání funkcí (Foo::bar). Což opět je dáno tím, že se jedná o funkcionalitu z objektové infrastruktury Perlu.Funguje to pri volani funkci ale jen pokud se AUTOLOAD nezdedil:
#!/usr/bin/perl sub AUTOLOAD { print "$AUTOLOAD(@_)\n"; } blahblah(1, 2, 3); # blahblah neni metodaDrive bylo mozne definovat UNIVERSAL::AUTOLOAD pokud nekdo chtel autoloadovat funckce z balicku, ale to relativne nedavno vyhodili.
C++ implementuje late binding pomocí virtuálních metod a polymorfismu. Nebo pokud to má být plně dynamické (včetně jmen metod a jejich parametrů), tak se tak chová Python. Způsob zápisu je přitom stejný.Late binding v C++ se ale s tím Smalltakovým nedá moc srovnávat, protože nemá smalltalkovské bloky. Ty jsou něco, co staví celý jazyk doslova naruby (jakože fakt doslova, to i obrací fungování většiny konstrukcí, takže vznikají věci jako
[a < 1] ifTrue: [ ... ]
, které jsou plně dynamické ale zároveň přirozené. Dělat něco takového v C++ by bylo pekelně nepraktické.
Co je zajímavé, tak Bluebook (Smalltalk-80: The Language and its Implementation, 0-201-11371-6, celkově fakt doporučuju přečíst) ukazuje jakési hooky, které je možné zavěsit zvnějšku na akt poslání zprávy. Pak když pošleš objektu zprávu, tak dojde automaticky k rozeslání zpráv dalším objektům. Další zajímavá věc, která odlišuje původní ideály posílání zpráv od dnešního chápání konceptu OOP je, že pokud objekt zprávu nenajde, tak dojde k vyvolání metody ala doNotUnderstand: ""
, která funguje podobně jako __getattr__()
a __getattribute__()
v pythonu, s tím však že v některých programovacích jazycích je jako parametr přijímám i objekt který zprávu poslal. Reakce na zprávu tak nemusí proběhnout jen formou návratové hodnoty, ale například posláním zprávy (či několika) objektu zpět.
Dost zajímavých myšlenek okolo konceptu posílání zpráv měl Jecel Mattos de Assumpcao Jr, který jeden čas pracoval na verzi Selfu, která zprávy implementovala hardwarem a jejich zpracování mělo probíhat paralelně a zastavovat se jen na místech kde byla skutečně nutná synchronizace.
s tím však že v některých programovacích jazycích je jako parametr přijímám i objekt který zprávu poslalJak se syntakticky vyjadri, kdo je odesilatel zpravy? Napriklad pokud poslu blok kodu, ktery posle zpravu, je volajici ten, kdo blok kodu evalne a nebo samotny blok?
Late binding v C++ se ale s tím Smalltakovým nedá moc srovnávat, protože nemá smalltalkovské bloky. Ty jsou něco, co staví celý jazyk doslova naruby (jakože fakt doslova, to i obrací fungování většiny konstrukcí, takže vznikají věci jako [a < 1] ifTrue: [ ... ]
, které jsou plně dynamické ale zároveň přirozené. Dělat něco takového v C++ by bylo pekelně nepraktické.
V C++17 tohle jde implementovat celkem rozumně pomocí generických lambd a return type deduction, jen by se ta první lambda musela zabalit do něčeho, co implementuje ty zprávy. Úplně stejně (až na použití jiného druhu závorek) by to šlo implementovat v Kotlinu, tam se dají metody objektům (včetně bloků kódu) přidávat.
Další zajímavá věc, která odlišuje původní ideály posílání zpráv od dnešního chápání konceptu OOP je, že pokud objekt zprávu nenajde, tak dojde k vyvolání metody alaTo je ale dvousečná zbraň a důvod, proč se to moc neujalo. Je to totiž hodně náchylné na chyby (překlepy, nedokonalý refactoring, out-of-tree plugin), které nezachytí překladač.doNotUnderstand: ""
, která funguje podobně jako__getattr__()
a__getattribute__()
v pythonu, s tím však že v některých programovacích jazycích je jako parametr přijímám i objekt který zprávu poslal. Reakce na zprávu tak nemusí proběhnout jen formou návratové hodnoty, ale například posláním zprávy (či několika) objektu zpět.
setSize()
lhal.
Syntaxe říká, že je to v pořádku, ale implementačně to v pořádku není.
a.setSize(10)je sice syntakticky odlišný od
a.size = 10ale sémanticky jsou zcela shodné a zpravidla jsou i shodně implementovány. Přitom v OOP není správně ani jeden, protože oba porušují zapouzdření objektu.
a.size = 10zavolá setter (metodu) a v jeho implementaci si může objekt dělat, co chce, klidně tu změnu může ignorovat, může vyhodit výjimku a nic nenastavit nebo může odpálit jaderné hlavice. Je to totéž jako ve Smalltalku:
a setSize: 10Porušuje tohle zapouzdření?
Způsob volání metod není ani tak syntaktická věc, jako spíše věc implementace toho kterého jazyka. Syntakticky to v obou případech (zasílání zpráv, volání metod) může vypadat úplně stejně.Může, ale většinou nevypadá. Například binární zprávy jsou většinou syntakticky řešeny jinak (nepoužívají tečkovou notaci), než ostatní, což v jazycích smalltalkovského typu neplatí.
Jinak řečeno jste mi potvrdil, co jsem psal. Syntaxe má jen minimální souvislost s tím, jak se zprávy implementují. Pro autora, co tvoří nový jazyk, tedy není vůbec nutné, aby kopíroval syntaxi jiného jazyka s předáváním zpráv. Protože si tím může naběhnout a je to totální ptákovina.To jsem vskutku nerozporoval. Jak si tím může naběhnout a proč je to ptákovina ovšem úplně nerozumím. Například kaskádovací operátor by podle mého v klasické céčkové notaci působil dost divně.
obj zpráva. obj další.můžeš zjednodušit na
obj zpráva; další.
with
:
with (obj) { metoda() další() }A C by to klidně mohlo mít taky, kdyby to někdo implementoval.
obj.setFoo(1).setBoo(2).setGroo("abc").do()
Je to to samé, nebo se to něčím liší?
Jasný. Znám něco podobného pod názvem fluent interface:
obj.setFoo(1).setBoo(2).setGroo("abc").do()
Je to to samé, nebo se to něčím liší?
Liší se to hlavně tím, že tady musí všechny metody vracet původní objekt, což v případě kaskád není pravda. Kaskády mi přijdou v tomhle elegantnější, protože tě nenutí přepsat celou svojí knihovnu, přitom ta implementace je triviální. Ale jak psal Sten, není to nic jiného než syntaktický cukr, který ovšem ve Smalltalku šetří dost prostoru.
Osobně se mi i líbí, jak kaskády zapadají do syntaxe Smalltalku.
Tiskni
Sdílej: