Postřehy ohledně architektury JavaScriptu

SB

Re:Postřehy ohledně architektury JavaScriptu
« Odpověď #60 kdy: 25. 08. 2016, 09:55:33 »
Čumile, slyšel jsi už někdy třeba o Babelu? Ty kecy o shitech u tříd, které jsou přitom jenom trochu přehledněji zapsaným kódem, jsou taky dost mimo.
... babel je limitovanej. Pokud featura potřebuje úpravu v enginu, je na to krátkej.

Hlavně je Babel další mezivrstvou s potenciálem chyb.

...a ten class shit je snaha vyjít vstříct ignorantům.

Taky si myslím.
Napište mi prosím nějaký pro vás zajímavý materiál o modelování domény v Javascriptu. Děkuji.


Re:Postřehy ohledně architektury JavaScriptu
« Odpověď #61 kdy: 25. 08. 2016, 09:56:03 »
To se tu zase sešla "parta". Všechno je špatně, go je neobjektové (po 10 minutách studia), žádné knihovny neumožní klonovat objekty, experti na ES6 a přitom neznají ani Object.assign. No comment.

SB

Re:Postřehy ohledně architektury JavaScriptu
« Odpověď #62 kdy: 25. 08. 2016, 10:13:44 »
...Mnohem diskutabilnější mně přijdou properties. Jejich používání může kód znepřehlednit.

Properties jako vlastnosti objektů? To je jedna z nejlepších věcí na Javascriptu, vysoce reflexivní přístup umožňuje vytváření obecných zpracování vlastností.

SB

Re:Postřehy ohledně architektury JavaScriptu
« Odpověď #63 kdy: 25. 08. 2016, 10:19:05 »
Co mě ale sere je absence nějaké built-in metody na klonování objektů. Neexistuje a nikdo ji asi ani v příštím století nepřidá. Takhle si musí člověk napsat vlastní, ale protože je v JS, tak je to samozřejmě pomalejší než kdyby to bylo nativní.

To je docela problém. Ale horší věc, co mě sere, je, že odstranili elegantní __noSuchMethod__ https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/noSuchMethod a nahradili to jakýmsi komplikovaným Proxy. Nechápu.

čumil

Re:Postřehy ohledně architektury JavaScriptu
« Odpověď #64 kdy: 25. 08. 2016, 10:33:21 »
To se tu zase sešla "parta". Všechno je špatně, go je neobjektové (po 10 minutách studia), žádné knihovny neumožní klonovat objekty, experti na ES6 a přitom neznají ani Object.assign. No comment.
Assign nedělá ani deep copy idiote :D


gl

Re:Postřehy ohledně architektury JavaScriptu
« Odpověď #65 kdy: 25. 08. 2016, 10:34:03 »
V mojej oblubenej knizke "Douglas Croockford - Javascript:The good parts" autor vytvoril klonovaciu metodu monkey patchingom objektu "Object".

Kód: [Vybrat]
if (typeof Object.create !== 'function') {
     Object.create = function (o) {
         var F = function () {};
         F.prototype = o;
         return new F();
     };
}

Klonuje sa potom takto:
Kód: [Vybrat]
var another_stooge = Object.create(stooge);
Mne to vzdy fungovalo, je nejaky dovod, preco to nepouzivat?

Pytam sa, lebo tu su sami experti a ja som len vysokoskolsky vzdelana lopata v odbore softverove inzinierstvo s praxou.

Tohle objekt neklonuje. Pouze to vytvoří nový objekt s prototypem o.

čumil

Re:Postřehy ohledně architektury JavaScriptu
« Odpověď #66 kdy: 25. 08. 2016, 10:36:24 »
Co mě ale sere je absence nějaké built-in metody na klonování objektů. Neexistuje a nikdo ji asi ani v příštím století nepřidá. Takhle si musí člověk napsat vlastní, ale protože je v JS, tak je to samozřejmě pomalejší než kdyby to bylo nativní.

To je docela problém. Ale horší věc, co mě sere, je, že odstranili elegantní __noSuchMethod__ https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/noSuchMethod a nahradili to jakýmsi komplikovaným Proxy. Nechápu.
Hej to je fakt pruser, a co je nejhorší, proxy to nenahradí. Může odchytit přístup na neexistující slot ale už nevý jestli si ten slot zpřístupňoval a nebo volal (a s čím).

Na to sem zapoměl a je to fakt fakt nahovno.

balki

Re:Postřehy ohledně architektury JavaScriptu
« Odpověď #67 kdy: 25. 08. 2016, 10:40:10 »
V mojej oblubenej knizke "Douglas Croockford - Javascript:The good parts" autor vytvoril klonovaciu metodu monkey patchingom objektu "Object".

Kód: [Vybrat]
if (typeof Object.create !== 'function') {
     Object.create = function (o) {
         var F = function () {};
         F.prototype = o;
         return new F();
     };
}

Klonuje sa potom takto:
Kód: [Vybrat]
var another_stooge = Object.create(stooge);
Mne to vzdy fungovalo, je nejaky dovod, preco to nepouzivat?

Pytam sa, lebo tu su sami experti a ja som len vysokoskolsky vzdelana lopata v odbore softverove inzinierstvo s praxou.

Tohle objekt neklonuje. Pouze to vytvoří nový objekt s prototypem o.

a?

čumil

Re:Postřehy ohledně architektury JavaScriptu
« Odpověď #68 kdy: 25. 08. 2016, 10:43:24 »
A nenapadá tě, že pokud je to záměr, tak je kurva debilní ? Zvlášť v prototype based OOP kde se nové objekty standardně tvoří právě skrz klonování.

Zaprvé, objekty se AFAIK většinou vytváří konstruktorem. Zadruhé, jQuery.extend má volbu pro deep copy. Lodash má deepClone. Všechny kopírovací funkce, se kterými jsem se setkal, přenáší prototyp.  Cyklické reference ty funkce kontrolují.
Tak asi hej ...  V dokumentaci ale není nic o přenesenejch prototypech napsáno. Natožpak o schopnosti překlopit i zacyklenej objekt. Takže je to k hovnu.

SB

Re:Postřehy ohledně architektury JavaScriptu
« Odpověď #69 kdy: 25. 08. 2016, 10:43:55 »

Taková funkce je v každé utility knihovně. Nepoužíváš underscore, lodash nebo jQuery?
V 90% případů ty knihovní funkce nejsou schopny ani udělat deep copy. Přenos prototypů je z říše pohádek, o cyklickejch referencích ani nemluvím.

Nehledě na to že to furt neřeší problém. Není to nativní == je to pomalí.

Clone je klíčová operace a mohla by být součástí jazyku.
Na deep copy pozor, z podstaty věci si ji musí stejně udělat vývojář sám dle situace (není deep jako deep).

čumil

Re:Postřehy ohledně architektury JavaScriptu
« Odpověď #70 kdy: 25. 08. 2016, 10:45:27 »
V mojej oblubenej knizke "Douglas Croockford - Javascript:The good parts" autor vytvoril klonovaciu metodu monkey patchingom objektu "Object".

Kód: [Vybrat]
if (typeof Object.create !== 'function') {
     Object.create = function (o) {
         var F = function () {};
         F.prototype = o;
         return new F();
     };
}

Klonuje sa potom takto:
Kód: [Vybrat]
var another_stooge = Object.create(stooge);
Mne to vzdy fungovalo, je nejaky dovod, preco to nepouzivat?

Pytam sa, lebo tu su sami experti a ja som len vysokoskolsky vzdelana lopata v odbore softverove inzinierstvo s praxou.

Tohle objekt neklonuje. Pouze to vytvoří nový objekt s prototypem o.

a?
To cos postnul je polyfill na object.create, hovno klonování ...

gl

Re:Postřehy ohledně architektury JavaScriptu
« Odpověď #71 kdy: 25. 08. 2016, 10:47:54 »
V mojej oblubenej knizke "Douglas Croockford - Javascript:The good parts" autor vytvoril klonovaciu metodu monkey patchingom objektu "Object".

Kód: [Vybrat]
if (typeof Object.create !== 'function') {
     Object.create = function (o) {
         var F = function () {};
         F.prototype = o;
         return new F();
     };
}

Klonuje sa potom takto:
Kód: [Vybrat]
var another_stooge = Object.create(stooge);
Mne to vzdy fungovalo, je nejaky dovod, preco to nepouzivat?

Pytam sa, lebo tu su sami experti a ja som len vysokoskolsky vzdelana lopata v odbore softverove inzinierstvo s praxou.

Tohle objekt neklonuje. Pouze to vytvoří nový objekt s prototypem o.

a?

V některých situacích to může stačit. Ale třeba hasOwnProperty nebude fungovat.

SB

Re:Postřehy ohledně architektury JavaScriptu
« Odpověď #72 kdy: 25. 08. 2016, 10:48:38 »

ES6 třídy jsou jen cukr nad prototypy. Narozdíl od čumila si nemyslím, že je to shit, ale není to nic převratného. To co se píše v Good Parts stále platí.

Přehled podporovaných featur v jednotlivých verzích je zde:

http://node.green/

Osobně si myslím, že předstírat, že Javascript je třídně-instanční, není dobře, je prostě prototypový, tak by se neměly v jazyku takovéto excesy objevovat. Jazyk má být minimalistický - narážím na Lisp či Smalltalk a jejich protipólů C# a Javu, proto mě tyto tendence v Javascriptu netěší.
Dovolil bych si připomenout citáty 2 velikánů:
„Dokonalosti není dosaženo tehdy, když už není co přidat, ale tehdy, když už nemůžete nic odebrat."
„Jednoduchost je nejvyšší sofistikovanost."

Squeak image ma 7 mb, pharo ma 18 mb. Kosate java api bolo prave inspirovane smalltalkom.

Je třeba uvažovat ještě VM, ale to má kolem 3 MB bez ovladačů. Image Phara má 24 MB (pořád je to prd na to, jakou funkcionalitu to zvládá), image Cuisu 6 MB (jestli si to dobře pamatuju)!

balki

Re:Postřehy ohledně architektury JavaScriptu
« Odpověď #73 kdy: 25. 08. 2016, 10:49:01 »
V mojej oblubenej knizke "Douglas Croockford - Javascript:The good parts" autor vytvoril klonovaciu metodu monkey patchingom objektu "Object".

Kód: [Vybrat]
if (typeof Object.create !== 'function') {
     Object.create = function (o) {
         var F = function () {};
         F.prototype = o;
         return new F();
     };
}

Klonuje sa potom takto:
Kód: [Vybrat]
var another_stooge = Object.create(stooge);
Mne to vzdy fungovalo, je nejaky dovod, preco to nepouzivat?

Pytam sa, lebo tu su sami experti a ja som len vysokoskolsky vzdelana lopata v odbore softverove inzinierstvo s praxou.

Tohle objekt neklonuje. Pouze to vytvoří nový objekt s prototypem o.

a?
To cos postnul je polyfill na object.create, hovno klonování ...

Zaujimave veci sa dozviem, povedzte mi kefalin, co je potom rozumiete pod takym slovom "klonovanie" v prototype based programming?

čumil

Re:Postřehy ohledně architektury JavaScriptu
« Odpověď #74 kdy: 25. 08. 2016, 10:50:26 »
V mojej oblubenej knizke "Douglas Croockford - Javascript:The good parts" autor vytvoril klonovaciu metodu monkey patchingom objektu "Object".

Kód: [Vybrat]
if (typeof Object.create !== 'function') {
     Object.create = function (o) {
         var F = function () {};
         F.prototype = o;
         return new F();
     };
}

Klonuje sa potom takto:
Kód: [Vybrat]
var another_stooge = Object.create(stooge);
Mne to vzdy fungovalo, je nejaky dovod, preco to nepouzivat?

Pytam sa, lebo tu su sami experti a ja som len vysokoskolsky vzdelana lopata v odbore softverove inzinierstvo s praxou.

Tohle objekt neklonuje. Pouze to vytvoří nový objekt s prototypem o.

a?

V některých situacích to může stačit. Ale třeba hasOwnProperty nebude fungovat.
Nejen !!! Nic se sakra neklonuje, jenom se to frkne do prototypu novýho objektu. Ty data sou kurva sdílený, používat todle na klonování je ve stylu javamana...