Použití Objective-C mimo Apple

ava

Re:Použití Objective-C mimo Apple
« Odpověď #75 kdy: 03. 06. 2015, 09:37:37 »
Ten příklad se serializací nebyl úplně šťastný, lepší příklad je volání funkce, jejíž název mám uložený ve stringu. V Pythonu to jde. V C++ to buď nejde vůbec, nebo možná nějakou extra speciální berličkou, o které ví jenom Stroustrup a další dva vyvolení na planetě :)

Programování se sice už nějakou dobu nevěnuju, ale můžeš mi uvést reálný smysluplný příklad využití téhle fičury? Možná při nějakým skriptování dejme tomu, ale pokud tohle chceš přeložit do strojáku, zkus si uvědomit, co to pro překladač znamená. Mám takový pocit, že do takové situace, kdy se tohle hodí, se můžeš dostat jenom nějakou prasárnou a řešení tímhle způsobem je už jen další prasárna. Ale jak říkám, programování už se aktivně nevěnuju a možná to nějaký smysl má.

Přímo pro programování zákaznických aplikací to tolik užitečné asi není (i když je pěkné mít tu možnost :) ), ale např. ve smalltalku je vývojové prostředí plně reflexivní a také psané ve smalltalku, takže tohle se zcela běžně používá např. pro psaní debuggeru, inspektorů objektů atp.

Vzpomínám si, že jsme měli některé konfiguráky (ne pro koncové uživatele) udělané jen jako smalltalkovský kód uložený v souboru, který se prostě spustil a mohl konfigurovat jak chtěl :)


Re:Použití Objective-C mimo Apple
« Odpověď #76 kdy: 03. 06. 2015, 09:47:44 »
To není pravda. Actor model počítá s asynchronním doručováním zpráv (tj. odesílatel nečeká, až bude zpráva doručena a pokračuje ve vykonávání svého kódu), ve Smalltalku (tedy v jazyce, který implementuje OOP tak, jak bylo "původně zamýšleno") je posílání zpráv synchronní (čeká se na odpověď objektu, i kdyby měla být prázdná). To je dost klíčový rozdíl oproti aktorovému modelu.
SmallTalk je prostě nějaká implementace myšlenky. Jestli ideální a implementující všechny původní koncepty, to neumím posoudit. Kay sám říká, že "we changed Smalltalk constantly, treating it always as a work in progress" http://lists.squeakfoundation.org/pipermail/squeak-dev/1998-October/017019.html

Citace
In computer terms, Smalltalk is a recursion on the notion of computer itself. Instead of dividing "computer stuff" into things each less strong than the whole—like data structures, procedures, and functions which are the usual paraphernalia of programming languages—each Smalltalk object is a recursion on the entire possibilities of the computer. Thus its semantics are a bit like having thousands and thousands of computers all hooked together by a very fast network. Questions of concrete representation can thus be postponed almost indefinitely because we are mainly concerned that the computers behave appropriately, and are interested in particular strategies only if the results are off or come back too slowly.
http://worrydream.com/EarlyHistoryOfSmalltalk/

Citace
The AlanKay definition of OO is largely that given by CarlHewitt for the ActorsModel which is a model of computation, not a programming paradigm. AlanKay has acknowledged explicitly this derivation.
Versions of Smalltalk before Smalltalk-80 were still largely based on the (asynchronous, unidirectional) ActorsModel of computation, but with Smalltalk-80, the developers of SmalltalkLanguage switched entirely to the (synchronous, bidirectional) procedural model, while misleadingly retaining the ActorsModel terminology (such as "messages" for what essentially are procedure calls rather than one-way notifications).
http://c2.com/cgi/wiki?AlanKaysDefinitionOfObjectOriented

Ale ať nežeru: ok, beru zpět slovo "přesně". V tomhletom se to liší. Šlo mi ale o to, že objekt i aktor jsou oddělené samostatné entity, které komunikují pomocí zpráv.


Tuxik

  • *****
  • 1 473
    • Zobrazit profil
    • E-mail
Re:Použití Objective-C mimo Apple
« Odpověď #77 kdy: 03. 06. 2015, 09:52:37 »
Ten příklad se serializací nebyl úplně šťastný, lepší příklad je volání funkce, jejíž název mám uložený ve stringu. V Pythonu to jde. V C++ to buď nejde vůbec, nebo možná nějakou extra speciální berličkou, o které ví jenom Stroustrup a další dva vyvolení na planetě :)

Programování se sice už nějakou dobu nevěnuju, ale můžeš mi uvést reálný smysluplný příklad využití téhle fičury? Možná při nějakým skriptování dejme tomu, ale pokud tohle chceš přeložit do strojáku, zkus si uvědomit, co to pro překladač znamená. Mám takový pocit, že do takové situace, kdy se tohle hodí, se můžeš dostat jenom nějakou prasárnou a řešení tímhle způsobem je už jen další prasárna. Ale jak říkám, programování už se aktivně nevěnuju a možná to nějaký smysl má.

Přímo pro programování zákaznických aplikací to tolik užitečné asi není (i když je pěkné mít tu možnost :) ), ale např. ve smalltalku je vývojové prostředí plně reflexivní a také psané ve smalltalku, takže tohle se zcela běžně používá např. pro psaní debuggeru, inspektorů objektů atp.

Vzpomínám si, že jsme měli některé konfiguráky (ne pro koncové uživatele) udělané jen jako smalltalkovský kód uložený v souboru, který se prostě spustil a mohl konfigurovat jak chtěl :)

Tak to jo, tomu rozumím, na debugování to asi smysl má, protože debugování je svým způsbem jedna velká prasárna (myslím systémově, nemyslím, že je špatný něco debugovat :-D ) a ty konfiguráky, moc si to nedokáž představit, ale proč ne :-D

Re:Použití Objective-C mimo Apple
« Odpověď #78 kdy: 03. 06. 2015, 09:53:35 »
Programování se sice už nějakou dobu nevěnuju, ale můžeš mi uvést reálný smysluplný příklad využití téhle fičury?
Už jsem tady asi třikrát zopakoval RPC, mám znovu? :)

Možná při nějakým skriptování dejme tomu, ale pokud tohle chceš přeložit do strojáku, zkus si uvědomit, co to pro překladač znamená.
Pro překladač to znamená buďto to, že umí nějak "inspect" (nevím, jak se to říká česky) objekty - nakouknout do nich za běhu a držet si jejich typové signatury (což dělá Python).

Nebo to pro překladač neznamená vůbec nic a řeší to runtime. V Erlangu je to přesně takhle. Když chci zavolat funkci Mod:fun(1), tak se runtime prostě podívá, jestli má zavedený modul Mod a jestli v něm je funkce fun arity 1. Takže to "Mod" i "fun" může být úplně klidně uložené v proměnné (a tímpádem nakrásně klidně načtené z disku, čili naprosto neznámé v době překladu) a není s tím žádný problém. Samozřejmě je to pak o něco pomalejší než přímé volání pomocí nějakéhotoho CALL nebo JMP nebo jak se to dělá, asm u6 si fakt nepamatuju :)

Re:Použití Objective-C mimo Apple
« Odpověď #79 kdy: 03. 06. 2015, 09:57:29 »
a ty konfiguráky, moc si to nedokáž představit, ale proč ne :-D
Na tom je právě hezky poznat, jaké krásné možnosti dynamičnost přináší. Spousta softwarů navrhuje nějaký pseudo-programovací-jazyk jenom proto, aby mohly být konfiguráky dostatečně expresivní. Některé zajdou tak daleko, že je ten pseudojazyk dokonce turingovsky úplný. A kdo se má učit nějaký nový složitý formát? Proč, když máme dost programovacích jazyků?

Prostě do konfiguráku dáš úplně normální kód, který se úplně normálně provede a úplně normálně do runtimu zavede nějaké nové třídy/funkce, které pak zavoláš a máš konfigurační parametr. Žádný parser. Žádná nová, supercool syntaxe. Maximální možnosti.


Kolemjdoucí

Re:Použití Objective-C mimo Apple
« Odpověď #80 kdy: 03. 06. 2015, 10:52:08 »
Takový ty kecy jak jsou immutable struktury pomalí jdou z tlam amatérů který nevěděj o čem žvaněj.

Doporučuji benchmark třídění 1000000 32-bit int.

Actor model je přesně to, jak bylo OOP původně myšleno.

To jsem rád že jsme si to konečně ujasnili, tedy původní návrh s KayObject je dodnes z technických důvodů použitelný jen těžce.

"Synchronní" není totéž co serializovaný.

Nutným předpokladem asynchronnosti je na sobě nezávislý paralelní běh asynchronních funkcí.
Zavolání funkce a nečekání na výsledek, s tím že dále to pokračuje přes callback nebo doručení zprávy je stále synchronní záležitost.

lepší příklad je volání funkce, jejíž název mám uložený ve stringu. V Pythonu to jde.

Zjevně volně zaměňujete komunikaci mezi procesy a komunikaci uvnitř procesu. Při práci uvnitř procesu nepotřebuji hledat funkci podle názvu, protože znám její adresu rovnou. Při komunikaci mezi procesy to takhle není dost dobře možné, proto se funkce hledá podle názvu.

Když chci zavolat funkci Mod:fun(1), tak se runtime prostě podívá, jestli má zavedený modul Mod a jestli v něm je funkce fun arity 1.

Tohle přesně uvnitř většího projektu nemá co dělat. S RPC problém není.

Tuxik

  • *****
  • 1 473
    • Zobrazit profil
    • E-mail
Re:Použití Objective-C mimo Apple
« Odpověď #81 kdy: 03. 06. 2015, 10:52:08 »
a ty konfiguráky, moc si to nedokáž představit, ale proč ne :-D
Na tom je právě hezky poznat, jaké krásné možnosti dynamičnost přináší. Spousta softwarů navrhuje nějaký pseudo-programovací-jazyk jenom proto, aby mohly být konfiguráky dostatečně expresivní. Některé zajdou tak daleko, že je ten pseudojazyk dokonce turingovsky úplný. A kdo se má učit nějaký nový složitý formát? Proč, když máme dost programovacích jazyků?

Prostě do konfiguráku dáš úplně normální kód, který se úplně normálně provede a úplně normálně do runtimu zavede nějaké nové třídy/funkce, které pak zavoláš a máš konfigurační parametr. Žádný parser. Žádná nová, supercool syntaxe. Maximální možnosti.

Takže místo konfiguráku použiješ externí knihovnu konfiguračních funkcí :D No... možná pro nějaký vývoj se to hodit může, jinak v tom žádný velký výhody nenacházím :D Asi jako když v PHP pro konfiguraci použiju klasický php skript místo nějaké parsované konfigurace, takže místo parametr=hodnota napíšu $parametr="hodnota"; , což v tomhle konkrétním případě zase tak nevadí a není to moc k nepochopení, jenom když si parametry nastavuje uživatel, kterej PHP nezná, tak nesmí udělat syntaktickou chybu, jinak to shodí celý :D

Re:Použití Objective-C mimo Apple
« Odpověď #82 kdy: 03. 06. 2015, 11:26:32 »
Doporučuji benchmark třídění 1000000 32-bit int.
K čemu? Nikdo netvrdí, že dynamické, asynchronní, paralelizovatelné systémy jsou dobré na number crunching hrubou silou. To je samozřejmě dobré napsat v něčem jiném a s tím něčím jiným komunikovat vstupy a výstupy. Numpy i R funguje přesně takhle, je to jenom lepidlo a vlastní nuber crunching se dělá maximálně optimalizovaně. Proto je takový rozdíl použít v Rku for a apply :)

To jsem rád že jsme si to konečně ujasnili, tedy původní návrh s KayObject je dodnes z technických důvodů použitelný jen těžce.
To nevím, čím jsme si to ujasnili, ale nemám potřebu se hádat :)

Nutným předpokladem asynchronnosti je na sobě nezávislý paralelní běh asynchronních funkcí.
Zavolání funkce a nečekání na výsledek, s tím že dále to pokračuje přes callback nebo doručení zprávy je stále synchronní záležitost.
Zkusím to ještě jednou: Erlang VM má vlastní scheduler, který přepíná procesy, které běží naprosto nezávisle. Na jednojaderném stroji jsou samozřejmě ty procesy serializované, protože jaksi je tam prostě jenom jedno jádro. Ale "zevnitř" to člověk nepozná, funguje to pořád stejně ať je to jádro jedno nebo je jich 256.

Zjevně volně zaměňujete komunikaci mezi procesy a komunikaci uvnitř procesu. Při práci uvnitř procesu nepotřebuji hledat funkci podle názvu, protože znám její adresu rovnou. Při komunikaci mezi procesy to takhle není dost dobře možné, proto se funkce hledá podle názvu.
Nic nezaměňuju. Mluvím o tom, že existují systémy, které funkce vyhledávají v runtimu i pokud běží v jednom VM. Že to jde i jinak, o tom není sporu. Já jsem říkal, že pokud se to dělá vždy takhle, dá se vždy použít dynamický dispatch. Pokud se volání překládá na CALL, tak to samozřejmě nejde a žádný dynamický dispatch se nekoná, to je přesně ta pointa, nevím, kde je spor.

Tohle přesně uvnitř většího projektu nemá co dělat.
Existují lidi, kteří si myslí, že má. Beru na vědomí, že ty si to nemyslíš a jsem rád, že to vím :)

Re:Použití Objective-C mimo Apple
« Odpověď #83 kdy: 03. 06. 2015, 11:29:41 »
Takže místo konfiguráku použiješ externí knihovnu konfiguračních funkcí :D No... možná pro nějaký vývoj se to hodit může, jinak v tom žádný velký výhody nenacházím :D Asi jako když v PHP pro konfiguraci použiju klasický php skript místo nějaké parsované konfigurace, takže místo parametr=hodnota napíšu $parametr="hodnota"; , což v tomhle konkrétním případě zase tak nevadí a není to moc k nepochopení, jenom když si parametry nastavuje uživatel, kterej PHP nezná, tak nesmí udělat syntaktickou chybu, jinak to shodí celý :D
Jakou externí knihovnu? Prostě zavoláš nějakou obdobu eval(...). Výhodu to má v tom, že máš k dispozici mocný jazyk, který spoustu lidí umí, a nemusíš vymýšlet nový jazyk, který se všichni budou muset naučit. Pratktický příklad: awesome WM má konfiguraci v Lua. XMonad ji má, pokud se nepletu, v Haskellu.

noef

  • *****
  • 897
    • Zobrazit profil
    • E-mail
Re:Použití Objective-C mimo Apple
« Odpověď #84 kdy: 03. 06. 2015, 12:43:20 »
K tem konfigurakum v prog. jazyce jsem mirne skepticky. Pokud je bezne pouziti (tj. napr. 80% uzivatelu) pouze prirazeni hodnot do promennych (wordpress tusim to tak ma), tak s tim problem neni. Navic je tam primo vazba aplikace v PHP <-> konfigurak v PHP.

Mnohem horsi mi prijde, kdyz mam Gradle a musim se naucit Groovy a DSL pro konfiguraci, prestoze pisu Java aplikaci (na jednoduchy az stredne slozity buildeni by v pohode stacil nejaky konfigurak ve znamem a jednoduchem formatu). A takove SBT je jeste dal, prestoze je to Scala, tak jejich naduzivani custom operatoru z toho dela uplne novy jazyk  - co mam napr. cekat od operatoru <++=?

Kolemjdoucí

Re:Použití Objective-C mimo Apple
« Odpověď #85 kdy: 03. 06. 2015, 13:53:54 »
Zkusím to ještě jednou:

Erlang ano, většina ostatních včetně Smalltalk ne.

Existují lidi, kteří si myslí, že má.

To myslí špatně, hledání metod v rámci jednoho procesu až v runtime je neospravedlnitelný nápad bez podstatné přidané hodnoty, nemůže to být výchozí metoda, dá se akceptovat pouze u specialit. Typická specialita je plugin v jiném jazyce, zde se naopak hodí dynamic binding.

Re:Použití Objective-C mimo Apple
« Odpověď #86 kdy: 03. 06. 2015, 23:23:58 »
Erlang ano, většina ostatních včetně Smalltalk ne.
Uniklo ti
Citace
GNU Smalltalk uses preemptive green (non-native) threads; that is, multiple Smalltalk processes are run by the virtual machine in one operating system thread.
http://smalltalk.gnu.org/faq/35
?

Jinak green threads má (aspoň podle wiki) docela dost jazyků: http://en.wikipedia.org/wiki/Green_threads#Green_threads_in_other_languages

Re:Použití Objective-C mimo Apple
« Odpověď #87 kdy: 03. 06. 2015, 23:25:17 »
Navic je tam primo vazba aplikace v PHP <-> konfigurak v PHP.
Čili používá přesně ten mechanismus, o kterém mluvím? A ptáš se, kdo to používá a proč?

Inkvizitor

Re:Použití Objective-C mimo Apple
« Odpověď #88 kdy: 03. 06. 2015, 23:45:46 »
Jakou externí knihovnu? Prostě zavoláš nějakou obdobu eval(...). Výhodu to má v tom, že máš k dispozici mocný jazyk, který spoustu lidí umí, a nemusíš vymýšlet nový jazyk, který se všichni budou muset naučit. Pratktický příklad: awesome WM má konfiguraci v Lua. XMonad ji má, pokud se nepletu, v Haskellu.

Xmonad je de facto knihovna, která se "dokonfiguruje" nahozením v mainu s přidanými parametry/prostředím.

Ne že bych tuhle debatu dopodrobna sledoval, ale konfigurace v "normálním" jazyce je dost ošemetná záležitost, protože se dovnitř dá nainjektovat v zásadě cokoliv, pokud tam není nějaký sandbox. V praxi to asi často nevadí, ale ten princip je (opět bez sandboxu) dost šílený.

U Haskellu ten sandbox dělá typový systém (když vynecháme věci typu unsafe IO nebo FFI), tam mi to ještě nějaký smysl dává.

Re:Použití Objective-C mimo Apple
« Odpověď #89 kdy: 04. 06. 2015, 00:14:20 »
Ne že bych tuhle debatu dopodrobna sledoval, ale konfigurace v "normálním" jazyce je dost ošemetná záležitost, protože se dovnitř dá nainjektovat v zásadě cokoliv, pokud tam není nějaký sandbox. V praxi to asi často nevadí, ale ten princip je (opět bez sandboxu) dost šílený.
Není vůbec šílený, pokud se konfigurovaná aplikace spouští s právy toho, kdo ji má právo konfigurovat. Není žádná tragedie, že bys mohl  injektovat kód, který můžeš úplně klidně spustit tak jako tak :) Čili efektivně se nám to prakticky smrskává jenom na to, že by se takhle neměly konfigurovat suid programy, v čemž není sporu ;)

Ale obecně máš samozřejmě pravdu, sandboxing je čistější.