« first day (2386 days earlier)      last day (937 days later) » 

 
16 hours later…
8:52 PM
@Grundy, появился вопрос требующий твоих блестящих познаний в JS - объясни нам это колдовство, пожалуйста.
 
@yar85 а что там не так?
 
@Grundy Там попытка создания собственного свойства объекта (через присваивание, obj.newProp = 'lalala';) натыкается на уже существующее прототипное свойство, и непонятно почему интерпретатор вообще лезет в цепочку прототипов :)
 
@yar85 да, вижу, смотрю почему
 
9:13 PM
@yar85 ух как там все закручено :-)
в общем проблема именно в том, что сделали propertyDescriptor с writable:false
 
@Grundy А в каком разделе спецификации можно найти объяснение такому поведению? Я сейчас смотрю ее, но в упор не вижу((
 
3 пункт
фактически первая проверка: If ownDesc.[[Writable]] is false, return false. все и рушит
 
9:38 PM
@Grundy Хм... я все же не понимаю: почему берется дескриптор из прототипа, а не из экземпляра? Там же (ранее в порядке выполнения) написано что дескриптор берется как O.[[GetOwnProperty]].
 
@yar85 не совсем понял вопрос :)
@yar85 сейчас ответ напишу, возможно понятнее станет
 
9:52 PM
@Grundy «не совсем понял вопрос» - если следовать по цепочке [[Set]]OrdinarySetOrdinarySetWithOwnDescriptor, то в OrdinarySet дескриптор свойства берется из "целевого" объекта O, а не из его прототипа. В общем, я на этой цепочке впадаю в ступор... лучше подожду ответ :)
 
@yar85 :)
 
Нашел в MDN «Unlike accessor properties, value properties are always set on the object itself, not on a prototype. However, if a non-writable value property is inherited(!!!), it still prevents from modifying the property on the object. - ссылку на статью тоже можно добавить в ответ.
Вот эту ссылку, если быть точным... А в переводе данную инфу вроде потеряли :)
 
@yar85 можешь сам ответ написать :-) у меня он скорее по спецификации будет :)
 
10:07 PM
@Grundy По спецификации всяко лучше. Мой ответ на основе цитаты из MDN, типа "ну вот так оно работает 🤷" будет бесполезным и неинформативным.
 
@yar85 тут все ответы будут " ну вот решили вот так" :)
 
avp
@yar85 а ведь кто-то думал, что добавим еще и такую фичу и лучше станет...
 
@Grundy да, и все же отсылка к священному ES-писанию гораздо больше информации дает (тем кто может прочесть эти алгоритмы на эльфийском языке). Плюс, популяризация спецификации это всегда хорошо... а то сейчас очень модно на YouTube и из бесплатных курсов черпать информацию, а там качество информации понятно какое 💩. Некоторые поначалу вообще не знают что спека существует.
@avp эта фича в целом выглядит как костыль, вполне может быть что ей в свое время чинили какое-то другое странное поведение.
Ну, если представлять причины по которым можно решить "а давайте наследовать отдельные части дескриптора", в голову приходят только кейсы связанные с перекрытием свойств, и всяческие веселые баги с путаницей между объектами с ридонли-свойствами и наследниками этих объектов.
 
10:36 PM
А вообще случай очень интересный. Самая его мякотка в том, что у отсутствующих свойств конечно же нет дескриптора (он undefined)... то есть, наследование параметра writable одноименным свойством в таких ситуациях - полностью "прозрачное". Если лезть отлаживать подобные случаи забыв о том что где-то в предках дескриптор изменен, будет очень-очень весело. Этакий полтергейст.
 
avp
@yar85 и я о том же. Вообще, хороший язык должен быть простым, с минимумом встроенных средств и они не должны зависеть от контекста
 
@avp нууу не знаю... на таком хорошем языке будет очень мучительно разрабатывать сложные штуки - ведь всю отсутствующую магию придется самому реализовывать. JS стал популярным во многом благодаря его магии, которая значительно ускоряет и упрощает запись алгоритма кодом.
 
@avp иногда зависимость от контекста может сделать использование средства проще :)
@yar85 ну и еще потому, что кроме него ни один язык не поддерживается нативно в браузере :-D
 
@Grundy так он весьма быстро из браузера вылез - и до ноды были попытки вытащить эту прелесть из браузера (если не ошибаюсь, на экспериментах с движком из Фаерфокса), а как нода вышла, так сразу началась мощная экспансия. И распространение-то не по воле некой корпорации (как например с Dart, который активно форсится гуглом через Flutter), а чисто силами энтузиастов. При всей репутации JS (взять хотя бы новичковую боль от '1'+1), любителей этого языка оказалось удивительно много.
 
@yar85 ¯\_(ツ)_/¯
 
avp
10:51 PM
@Grundy да, поэтому они постоянно усложняются и "ломаются" в других контекстах. Хвост вытащил, нос увяз
 
@avp зато очень гибко :)
 
А что, звучит. Надо сделать девизом JS "Ломаем вещи гибко!"
Кстати, интересно из-за чего гугл "недопропихнул" Dart в Хром вторым языком скриптов. Это же по сути "TS без детских болячек", да еще и без необходимости в транспайле - красота ведь.
Вместо этого зачем-то пошли путем трансляции в JS, и Flutter для веба остается абсолютно неюзабелен до сих пор 😁
 
avp
@yar85 на первый взгляд непонятно, а зачем Dart вообще нужен? Уж больно похож код на смесь жабы с крестами
 
11:08 PM
@avp для того и нужен - чтобы исцелить боль тех ~50% вебпрограммистов, которые JS'у предпочитают TS: добавив строгую типизацию, и модель ООП близкую к классической.
 
avp
@yar85 что мешает просто сделать трансляцию с любого языка в JVM интерпретатор и использовать его хоть в браузере, хоть в другом окружении? И писать там на своем любимом языке
 
@avp не знаю... наверное, мешает общая сложность такой затеи, и вопросы к производительности
Может быть гугл решил что было бы здорово не транслировать множество языков, а создать единый язык программирования для веба, который понравится большинству. И в этом есть некоторый смысл. Например, многим фронтэндерам грустно от того что для написания WA надо изучать Rust и терпеть издевательства его чудесного компилятора :)
Ведь в том что флаттер (как основной фреймворк дарта, нацеленный исключительно на фронтэнд) собирается под две мобильные платформы, веб, и две десктопные - явно есть какие-то проектные корни. Наличие у гугла подобных великих планов "объединить всея вебъ" десять лет назад весьма вероятно. Времечко было смутное. И они вроде официально анонсировали DVM в будущих версиях Хроме, если ничего не путаю.
 

« first day (2386 days earlier)      last day (937 days later) »