inikulin
0
Зря, все там было правильно в некотором смысле. 0.12 — это первая стабильная версия со времен 0.10 (читай — мажорная). У ноды четные версии стабильны, нечетные — экспериментальные.
inikulin
0
Self-hosting является де-факто показателем зрелости компилятора. Это когда компилятор компилирует сам себя. Вики ссылка на всякий: Self-hosting.
inikulin
0
Да, можно попробовать такой механизм, главное что бы накладные расходы на рантайм-профайлинг и откат к незаинлайненой функции не были велики. А self-hosting планируете (с компиляцией в node-тулзу)? Был бы отличный полигон для выявления проблем.
inikulin
0
Да, это вариант. С инлайнингом самому лучше не играться и отдать это на откуп JS-движку, т.к. есть вероятность увеличить полиморфность функции и как следствие увеличить количество bailout'ов, а в итоге v8 может вообще забить на оптимизацию такой функции , что выйдет только боком.
inikulin
0
Ну, они заоптимизили попросту арифметику, что дало эффект на число дробилки. Но, до полноценного asm.js там еще как до луны по перфомансу.
inikulin
0
А можно узнать, откуда дровишки? Если вы про этот пост: Chrome 28 Beta: A more immersive web, everywhere то там лишь сказано, что asm.js бенчмарки стали быстрее в новой версии хрома относительно предыдущей за счет оптимизаций арифметики в Hydrogen IR (маркетологи такие маркетологи). Что касается полноценной поддержки asm.js с директивой 'use asm' и переключением на оптимизирующий компилятор сразу минуя стадию сборки type feedback как это делает OdinMonkey, то эта тема находится в полумертвом состоянии и пока никто браться за ее реализацию в команде v8 не планирует: Implement «use asm». Относительно firefox на данный момент хром медленнее примерно в 3 раза на asm.js коде, т.к. использует general purpose JIT для него.
inikulin
+1
Не получится еще и потому что asm.js заточен сугубо под число дробилки, быстрые строки/объекты/коллсайты не завезли. А в общем и целом мономорфный JS (который и получится в случае трансляции с типизированного языка) очень-очень хорошо оптимизируется современными JIT'ами.
inikulin
+4
Рано его еще использовать. В частности v8 еще не умеет оптимизировать функции с let (возможно ситуация изменится с запуском TurboFan). Что влечет в свою очередь примерно x20 кратную потерю производительности, что порой критично. Да и вообще меня не покидает ощущение, что классы и let — это эдакий популизм. В отличии от реально нужных генераторов и ES7 async/await, argument pattern'ов и destructuring assignment (который, к сожалению, в v8 еще не родили, хотя использовать его с генераторами самое оно).
inikulin
+6
Конечно не мешает, но посыл в том, что простые вещи уже не становятся столь тривиальными. Цель большей части ПО — как раз-таки упрощать жизнь.
inikulin
+4
У нас конкретно была проблема с выше описанной NTLM-аутентификацией. Обычная Basic-аутентификация так же лажает в IE без специальных security-настроек (попробуйте, например, открыть http://test:1234@testcafe.devexpress.com/PersonalCabinet в IE).
inikulin
+3
Насколько я знаю все не так просто (раз, два). К тому же мы поддерживаем NTLM-аутентификацию. Не подскажите, как это сделать в Selenium?
inikulin
+5
Не углядели. К кукам вы можете обращаться напрямую через document.cookie прямо в тесте. Подключать любые сторонние js библиотеки (через директиву @require) вы так же можете. Таким образом, например, вы можете делать скриншоты, используя html2canvas — TestCafe — How to make a screenshot of a loaded page

В красивом интерфейсе и более простой и удобный

Во многих сферах жизнедеятельности человека — это весьма весомый аргумент для приобретения чего-либо.
inikulin
+5
Здравствуйте, спасибо за фидбэк.

1)
Используя тот же Selenium Grid нет нужду каждому думать об версиях, ну кроме тех кто поддерживает сам grid.

Ну т.е. получается, так или иначе, кому-то придется думать?

Если у команды проблемы с тестовым окружением, то у команды проблемы другого характера ибо сейчас есть куча инструментов для создания унифицированных окружений для разработки и тестирования

Есть, но они опять таки требуют конфигурирования и поддержки. Единый инструмент порой намного удобней «сборной солянки».

2)Для кого-то логично, а для кого-то нет. Кому-то cucumber может и не нравится — «на вкус и цвет фломастеры разные». Мы старались сделать максимально читаемое API без привлечения кардинально нового синтаксиса, а сделав небольшую надстройку над JS.

3)Вы, видимо, не имели дело с проектами, имеющими порой по пять параллельно поддерживаемых версий, которые при этом состоят из миллионов строк кода. Вникнуть в контекст изменений и понять что к чему, конечно, всегда можно, но другой вопрос сколько человеко-часов это займет. И не такой уж это критический факт, с которым нужно считаться, как показывает практика. Более того, порой подобные «разборы полетов» порой очень далеко уводят от решения реальной проблемы.

4)Если вы обладаете каким-то сакральным знанием, как это сделать просто для всех браузеров, например, в Selenium, то я буду рад, если вы им поделитесь.

5)Вы не уловили мысль, никто и не говорит про незнание DOM. Речь как раз шла о надстройках над DOM, с которыми приходится иметь дело во многих фреймворках. Тут же вы как раз можете работать напрямую с нативным DOM.
inikulin
0
процесс передачи знаний/умений/навыков о (процессе приобретения знаний/умений/навыков о чем-либо).


Если мне не изменяет память, то на русском языке это называется педагогика. Получается у нас ничего кроме педагогики не преподают?
inikulin
+13
Качественное высшее образование советской школы в первую очередь учит учиться.

Люблю эту мантру.
Во-первых, «учит учиться» — это тавтология.
Во-вторых, как быть тем гарным хлопцам, которые уже собственно научились учиться (sic) еще в школе и хотят получить наконец актуальные знания и необходимый практический базис для работы по будущей профессии?
inikulin
+1
С angular все забавно: у них вроде как парадигма «не используйте jQuery», а при этом сам фреймворк тащит jqLite, который по сути порезанный jQuery. При попытке объяснить сие для себя, я впадаю во внутреннее противоречие.
inikulin
+1
Советую глянуть вот эту замечательную библиотечку: fastdom. Она в общем-то реализует этот подход и имеет лаконичный (400 строк) и хорошо задокументированный код, вполне достаточный что бы разобраться что к чему.
inikulin
0
Тогда тем более jQuery тут не bottle-neck, все как всегда упирается в тяжелые DOM-манипуляции (от которых спасают batch-операции с использованием requestAnimationFrame, внутри которого все можно колбасить jQuery'ей)
inikulin
+3
Для любого нетривиального приложения я выиграю в общем объеме занимаемой памяти за счет минификации оберток нативных методов (e.g. el.querySelectorAll() — не минифицируется, $()-минифицируется). Более того, могу взять только необходимые модули от jQuery или использую zepto.
inikulin
+11
Ко всему этому новому трэнду с отказом от jQuery везде и всюду (этот github-проект всего лишь вершина айсберга) у меня возникает ровно один вопрос: зачем?
inikulin
0
Oh geez, here we go again…
inikulin
+1
Прочитайте послесловие.
inikulin
–1
Я бы с удовольствием посмотрел на разбиение на сущности какого-нибудь токенизатора. Можно даже какого-нибудь более тривиального, буду очень благодарен за мастер класс, а то из десятков исходников, которые я изучал, нигде подобного не встречал. Спасибо, опять таки, что рассказали про непрерывный рефакторинг (которым, я кстати, и занимаюсь, если посмотреть на то, как поменялся весь этот код за последние два дня и менялся до этого), но это опять таки не имеет никакого отношения к тому, что вы написали. Очень глупо считать, комментарии в коде признаком плохого кода (а больше вы ничего конкретного расписать и не смогли). Вынесение метода работает ровно до тех пор, пока вы может придумать адекватное название для метода. Здесь не та ситуация (здесь следование четко заданное спецификации, нет никакой сакральной логики в комментированом коде, а лишь обработка ситуации, связанной с историческими причинами). В таком случае просто необходимо комментировать код. Да в общем, что тут распинаться, все эти вещи есть и в литературе и должны взвешенно откладываться в голове. Мнение «этот код плох, потому что в нем есть комментарии» просто не претендует на какую-либо состоятельность
inikulin
–1
Например, комментарий поясняющий код, значит нужно выделить в метод

Спасибо, что рассказали о самодокументируемости кода, но как раз тут ничего выносить не нужно, т.к. в этом проекте я очень щепетильно отношусь к производительности, а вызов метода ради такой мелочи — аллокация нового скойпа — полная глупость. Причем, если уж вы такой любитель паттернов, то приминительно к этому случаю откройте Фаулера и найдите там про «Стрельбу по воробьям». В этом коде ровным счетом ничего экстраординарного нет, если у вас вызывает затруднение чтение такого элементарного кода, то у меня для вас плохие новости. Вот вам реализация того же лексера в Вебките github.com/WebKit/webkit/blob/master/Source/WebCore/html/parser/HTMLTokenizer.cpp (осторожно, вам может совсем поплохеть)
inikulin
–2
P.S. Я вам еще в карму плюнул, т.к. аргументы ad hominem в спорах о недостатках языка выдают в вас невежественного человека, а я таких не люблю.
inikulin
–1
Товарищ, во первых это токенизатор HTML, где впринципе по-другому особо не напишешь, а во-вторыз это не client-side, ну а в третьих ООП в это проекте как раз есть =)) Так что пальцем в небо, чувак
inikulin
+4
Очень даже фича, с динамическим контекстом можно творить много интересных вещей (делать примеси, например)
inikulin
0
нелексические замыкания

Извините, это что за зверь такой? Особенно учитывая, что сам термин «замыкание» является сокращенным варинатом термина «лексическое замыкание».
inikulin
+2
Оно не может быть больше единицы, исходя из определения, Вообще, у байт-кода нативного оно ближе всего к единице, поэтому, это конечно не самая объективная характеристика языка, но одна из возможных, если брать в расммотрение еще читаемость кода, но этом контексте к JS вроде бы никто не предъявлял притензий, Если отвечать конкретно на ваш вопрос, то все зависит от языка, Например, в LISP (и производных, например Scheme и т, д, — да оно близко к единице, в силу легкого синтаксиса, возможности создавать необходимые для задачи DSL на лету и в общем открытости в сторону мултипарадигменности, т, е, рамки смягчены лепи что хочу), а вот в Haskel дела уже хуже, что является обратной стороной его формалистического функционального подхода (где, извините, без монады даже пукнуть нельзя), Но опять таки не стоит все это воспринимать как характеристику, позволяющую отделять хорошие языки от плохих, Как раз интересно искать плюсы в языках и минусы, в нашем своеобразном и разноплановом мире у всего есть своя ниша, даже у Visual Basic ;), имеющая свое право на существование, Даже экзотерические вещи, вроде Brainfuck находят свое практическое приминение (например, в llvm для примера реализации языка с использованием инфраструктуры используется как раз Brainfuck. А что? Синтаксис минималистичен, язык Тьюринг-полный, да и известен более или менее для обучения самое то. Вот дабы не быть голословным: https://github.com/earl/llvm-mirror/tree/master/examples/BrainF), Что-то я сегодня многословный =)
inikulin
+34
Странные вещи высказаны в статье, Откуда-то на клиенте взялась бизнес-логика на js в 100000 строк, Я, честно, говоря не видел пока клиентских браузерных проектов таких объемов, Во-вторых, что за странная убежденность, что статическая типизация хоть в каком-то виде спасает от проблем в масштабных проектах? Тысячи проектов бажных на C++ тому пример, более того не спасает даже дополнительный статический анализ кода (почитайте Джона Кармака о его энтузиазме и разочаровании в статическом анализе C++ кода), В подобных проектах проблемы связаны не с языком, а с архитектурой приложения, инфраструктурой тестирования и т.д. Вся проблема, описываемая в статье, возникает из ложного посыла о том, что динамическая природа языка — источник всех бед, Меня, честно говоря, сильно раздражает раздутая паника вокруг js (и ее производные в виде TypeScript), т.к. сам прошел все эти стадии в начале своей карьеры программиста. И именно поэтому считаю подобный подход незрелым, Я начинал изучать программирование C/C++ еще в школе, на работе познакомился с C# и первое время JS меня раздражал, Я просто его не понимал, Совершенно, Весь мой языковой кругозор ограничивался императивными статически-типизированными языками и больше для меня мира программирования не существовало, С таким кругозором JS мне казался шуткой, девиацией, Я настолько его ненавидел что на рабочем столе у меня была фотография Брендана Ахо с нецензурной подписью, Подобную же реакцию я испытал, например, по отношению к Lisp, когда познакомился с ним в университете, Но я нашел в себе силы (а вернее меня вынудила работа =)) все таки углубится в JS, И мое мнение изменилось, Этот язык не идеален, как и все в этом мире. Но преодолев порог вхождения («где классы?», «фу прототипы», «фу динамическая типизация» и прочее) я чувствую себя как рыба в воде, Мне очень нравится гибкость языка, возможность буквально заниматься «лепкой» кода, т.к. в js я не так сильно ограничен синтаксисом, как в статически-типизированных языках, Я вижу в нем свою элегантность, Перейдя через эту «гору ненависти к JS» в свое время я открыл для себя другой мир программирования, где не IDE диктует мне мышление, не язык, а мышление определяет мой образ действий, Моя «программисткая ксенофобия» прошла, С этим ощущением я решил дать второй шанс Lisp и открыл для себя мир функционального программирования, я вернулся к C и мне теперь он во многом нравится на много больше C++, Я осознал, что восприятие ООП, как панацеи от всего наивно, Мне все еще нравится C#, но теперь я вижу сколько оверинджиниринга и бутстрап-кода приходится в нем писать, что бы поддержать эфимерную парадигму, Наверно, главное чем мне нравится JS — это его выразительная способность, У Эдварда Тафти в книга есть понятие DataInk приминительно к аналитической графике (чарты, инфографика и прочее), DataInk — это отношение чернил, используемых для отображения полезной информации, информации при потере которой, график перестанет выполнять свое информационное предназначение к общему количеству чернил, использованных для отображения графика, Чем ближе это значение к 1, тем лучше, Для кода я бы ввел такую же характеристику DataCode — отношение кода, который выражает непосредственно решение задачи ко всему написанному коду, Так вот, это значение у JS ближе к 1, нежели у многих других языков, Тоже касается C (его я тоже люблю=)), В общем, к чему все это эссе: не существует серебрянных пуль, изучайте разные языки, вникайте в их дизайн, ищите плюсы и минусы и научитесь их использовать себе во благо. Не стройте себе тюрьму из предубеждений и не пытайтесь все новое запихать в узкую коробку, в который вы сидите, Возможно, то что вы так не любите, является ключом в целый новый мир (правда при условии, что вы перестанете пытаться запихать его себе в задницу, вместо замочной скважины =))
inikulin
0
Динамическая типизация, которая вызывает множество регрессионных ошибок.
Отсутствие модульности. Нет ни модулей, ни классов, прототипное ООП рвет мозг тем, кто пишет на C++\Java\C#.
Неочевидное поведение во многих местах.

Aw Jeez, not this shit again…
inikulin
+11
Появилась идея — предупреждать пользователей, что при нажатии по ссылке будет произведен переход на другой домен (+1 to abididea)

Нет, спасибо.

Сайты, такие как Google and Facebook, продолжат нормально функционировать, т.к. используют один домен, а это исключит возможность фишинга.

Полная чушь. Похоже, автор оригинальной статьи не совсем понимает, что такое домен. Да и сама «уязвимость» заставляет усомниться в его компетентности в вопросах безопасности. Как писали выше — существует 1000 и 1 более изощренный способ отъема чего угодно, если злоумышленник уже смог внедрить код в страницу.
inikulin
0
Перефразирую вопрос: как процесс запущенный в VM (которая должная, как я понимаю, являться песочницей для это процесса) может модифицировать эту VM?
inikulin
0
Спасибо, буду знать. Не думал что звонок идет напрямую в банк, минуя посредников. Хотя в общем-то вполне логично. Век живи — век учись.
inikulin
+3
Dial up, например, до сих пор используется в терминалах оплаты банковской карточкой. Технических предпосылок сего не знаю. Думаю, учитывая распространенность безналичных денежных операций в США, большая часть dial-up-трафика генерируется подобными устройствами.
inikulin
0
Допустим у меня есть три класса GrandParent, Parent и Child. Думаю из названий понятна иерархия наследования. Допустим у всех из них есть метод foo. Допустим я хочу вызвать из foo в Child метод foo Parent'а, с прототипам я сделаю так:

Parent.prototype.foo.apply(this, arguments);


В вашем случае, я так понимаю, это будет выглядеть так (если я все правильно понял):
this.__bases[1].foo.apply(this, arguments);


Нужно держать в голове всю цепочку наследования, код перестает быть самодокументируемым. Ко всему этому оверхэд по памяти в вашей реализации. Да и в сущности вы реализовали все те же прототипы, вид сбоку и кривовато.
inikulin
+2
Как вызывать перекрытый метод базового класса?
inikulin
+3
Добро пожаловать! Было бы безумно интересно узнать о технологии бенчмарков (т.е. как осуществляются замеры, какие используются критерии и каковы отличия от обычных игровых движков). Было бы интересно вообще почитать о 3D движках, их внутреннем устройстве. С упоением недавно перечитал ревью движков от Id Software, которые делает Fabien Sanglard — хотелось бы чего-то подобного. Заранее спасибо!
inikulin
+5
Меня умные книжки в детстве научили, что неумно и невежественно на любую глупость реагировать битьем морды. P.S. личное мнение никак не противоречит работе чиновника (сейчас вот взял и перечитал, что запрещено государственным служащим), печально, что вы считаете скабрезным его иметь.
inikulin
0
Этот на самом деле одно из самых больших заблуждений. Люди каждый день не могут чего-то, у них что-то не получается. И то, что не получилось у других — далеко не гарантирует, что не получится лично у вас, Учиться нужно у историй успеха и вдохновляться, а от историй провала не так уж много толку.