На самом деле SMI это далеко не только то что это целое представление и оно быстрее FPU. Чтобы этот вопрос отпал сам собой нужно понять как работают идентификаторы в v8. Они всегда работают как указатель на значение в куче. Но каждый раз создавать новое значение в куче / следить за его жизнью / обращаться через особую структуру HeapNumber -- это дорого. В то время как SMI это буквально число вставленное вместо указателя. Те 1ый бит в значении идентификатора говорит: Я не SMI а указатель, иди по нему там реальное значение. А SMI - хей тут уже лежит число, бери его и делай что хочешь. Чем и обусловлено ограничение в 31 бит ибо 32-ой бит это указатель на то что это число. Думаю с этого момента понятно чем обсулавливается кратная разница по перфу
Ошибка дизайна языка, когда планировалось делать его схожим с Java? Можно обнаружить в старых спеках языка кучу заразервированных слов из Java/C++ на всякий случай. На практике же undefined и null достаточно сильно отличаются и это важно учитывать. Смысл несут они разный
Обычно я не рекомендую напрямую юзать provide / inject а сделать композабл (ака хук в реакте) и в нем типизировать значения относительно provide / inject. Если хочется, то сделать ~99%-ую компию по API контексту из реакта можно в строк 30-50
Сравнение с экосистемой вебпака. Да сейчас экосистема вебпака больше, но это будет оч быстро меняться. Уже все современные фреймворки и продукты уходят от поддержки первого уровня webpack-а на поддержку в первую очередь vite (Angular тоже уже заявил о переходе на vite. только с React вопросы ибо им все равно)
rollup - ну и чем это плохо? тем более на последней конференции объявили что уже в разработке Rolldown (Rollup на Rust)
В комменте про китайца и автобус. Ну глупости то зачем говорить? Он создатель, но далеко не единственный разработчик. Для опровержения бас-фактора можно посмотреть, что сейчас он уже оч мало своего вносит https://github.com/vitejs/vite/graphs/contributors
Я просто уточнил, что строгость это не дихотомия "строго" или "не строго", а вопрос меры и кол-ва строгости. Например в JS-е тоже есть некоторая строгость: нельзя сложить BigInt и number(речь о неявном те 150n + 150).
Вы правда верите, что все кто хвалят $mol это фейки?
Я могу понять неоднозначную реакцию на автора, но сама технология от этого не становится $trash-ом, как вы позволяете себе выражаться (с высокой долей вероятности не попробовав его толком)
Любопытно было бы увидеть полноценное сравнение Vivaldi и Arc. Так как оба браузера, как я понял, сосредоточились на кастомизации и максимизации комфортного пребывания в интернете.
Некоторые вещи уже хотелось бы, чтобы разработчики Vivaldi взяли себе на заметку:
Облегченный режим до отправки в конкретное окно
Так называемые "бусты" для стилизации (возможно поддержка UserScript-ов из коробки)
Кастомизация пространств (чтобы сразу понимать в каком ты). Пространства были добавлены недавно и хочется верить, что они будут активно развиваться
В остальном выглядит некоторым переосмыслением UX и это шаг в верную сторону экспериментов с настолько важной для современного человека вещью. Однако, пока, Vivaldi выглядит поинтереснее и помощнее
Вполне работает, только как я и написал, нужно будет каждый раз catch с onerror явно прописывать. Но `unhandledrejectuin` все же предпочтительнее, соглашусь
Только вот сигналы/атомы - про реактивность, а useState это просто геттер и сеттер вызывающий ререндер, причем достаточно топорный(требующий изменения значения в итоге имеем кучи пересборок объектов на каждый чих). Поэтому такое сравнение сродни "калькулятор vs счёты"
То что подсвечено действительно камень в сторону автора оригинала статьи. Однако разберемся с указанными проблемами:
Бесспорно по Vue нет FQN из MAM-а. Однако можно попытаться решить проблему 3мя путями:
Script Setup
<template>
<Test />
</template>
<script setup>
import Test from './components/Test.vue'
</script>
Global component (определяем компонент глобально и используем его везде) или миксином с нужными компонентами
Auto-import (имеются плагины, которые по определенным правилам из указанных папок по указанным правилам генерирует имена компонентов и при совпадении подставлять автоматический импорт)
Насчет массива. В случае использования JS, можно добавить валидатор, который явно в рантайме проверит значения. Однако при переключении на TS появляется большой набор вариантов решить эту проблему. Те там можно будет явно указать какой тип и с какими параметрами используется в пропсе (расписывание отдельных вариантов нахожу тривиальным).
Браво. Очень красивые приемы, обязательно возьму их на вооружение. Век живи - век учись.
+undefined|21 // прям очень классно, что NaN при бинарной операции считается 0-ом
?? // немного в шоке, что до такой очевидной операции не догадался
Хоть вторую часть пиши по вашим комментариям, так как приемы меня прямо в восторг привели. И еще раз, крайне рад, что кто-то еще поигрался над этой "головоломкой".
Думаю, спустя какое-то время сделаю нечто схожее, но попробую ваши приемы обязательно показать, так как некоторые из них весьма неочевидны
Очень круто, рад что кому-то тоже было интересно поломать голову над этим и у него получился результат даже лучше. Я свой код скоратил +- с вашими шагами и и получилось 140. На 1 символ больше чем у вас для полностью работающего варианта.
Насчет требований: я их обозначал, что условием является прохождением тестов задачи на CodeWars (ссылка на задачу есть в статье). Поэтому варианты без [] и абсолютным позиционированием не пройдут, но являются хорошим дополнением к задаче.
Действительно, спасибо за то что заметили, в листинге опечатка: v спутана с w. При данном изменении тесты на целевой платформе проходятся все, кроме тех, где валится из-за рекурсии
Вы правы, ее можно безболезненно убрать, так как необъявленные переменные без strict-мода записываются сразу в глобальный скоуп. Но погоды это особо не делает (-4 символа)
Вполне можно. Я сразу после листинга кода указал, что есть 3 варианта: if+else/switch/hashmap. Но так или иначе, пришлось бы возвращаться к варианту выбора из 4ех, так как это более краткий вариант. Можно даже сразу писать в краткой форме `{i() {...}. d() {...}}` и это-все равно слишком громоздко
Не совсем, позвольте дополнить ваш комментарий. Если говорить о ЕГЭ-шном формате эссе, то там крайне жесткая структура. Можно буквально по трафарету его писать (из-за чего я не считаю, что эссе на ЕГЭ подобием сочинений). В 10-11 классе гоняют преимущественно по такому формату. Поэтому, когда говорят о эссе, то все-таки в ру-сегменте есть структура, когда речь о сочинении, то жесткой структуры нет (и не должно быть)
На самом деле SMI это далеко не только то что это целое представление и оно быстрее FPU. Чтобы этот вопрос отпал сам собой нужно понять как работают идентификаторы в v8. Они всегда работают как указатель на значение в куче. Но каждый раз создавать новое значение в куче / следить за его жизнью / обращаться через особую структуру HeapNumber -- это дорого. В то время как SMI это буквально число вставленное вместо указателя. Те 1ый бит в значении идентификатора говорит: Я не SMI а указатель, иди по нему там реальное значение. А SMI - хей тут уже лежит число, бери его и делай что хочешь. Чем и обусловлено ограничение в 31 бит ибо 32-ой бит это указатель на то что это число. Думаю с этого момента понятно чем обсулавливается кратная разница по перфу
Ошибка дизайна языка, когда планировалось делать его схожим с Java? Можно обнаружить в старых спеках языка кучу заразервированных слов из Java/C++ на всякий случай. На практике же undefined и null достаточно сильно отличаются и это важно учитывать. Смысл несут они разный
Обычно я не рекомендую напрямую юзать provide / inject а сделать композабл (ака хук в реакте) и в нем типизировать значения относительно provide / inject. Если хочется, то сделать ~99%-ую компию по API контексту из реакта можно в строк 30-50
Легковесность - тут скорее про тулчейн, чем про выходной файл
Быстрая Сборка - проекты на вебпаке прямо ощутимо дольше собираются чем на vite. Особенно если хорошая работа над разбиением на чанки была произведена
Простая Настройка - бабель там не используется. Вместо него esbuild, что и дает заметный выигрыш по скорости
Давайте все по пунктам разберем.
Сравнение с экосистемой вебпака. Да сейчас экосистема вебпака больше, но это будет оч быстро меняться. Уже все современные фреймворки и продукты уходят от поддержки первого уровня webpack-а на поддержку в первую очередь vite (Angular тоже уже заявил о переходе на vite. только с React вопросы ибо им все равно)
Официальное решение по SSR это vike
rollup - ну и чем это плохо? тем более на последней конференции объявили что уже в разработке Rolldown (Rollup на Rust)
В комменте про китайца и автобус. Ну глупости то зачем говорить? Он создатель, но далеко не единственный разработчик. Для опровержения бас-фактора можно посмотреть, что сейчас он уже оч мало своего вносит https://github.com/vitejs/vite/graphs/contributors
тогда в чем смысл статьи? Выдать нам набор имен... чтобы что? Они ссылочку на эту статью в резюме положат?
А я где-то давал оценку этому?
Я просто уточнил, что строгость это не дихотомия "строго" или "не строго", а вопрос меры и кол-ва строгости. Например в JS-е тоже есть некоторая строгость: нельзя сложить BigInt и number(речь о неявном те 150n + 150).
чтож вы так к этому сложению пристали? Полиморфизм выражается и в других операторах. Например:
И что делает эта функция? Умножает числа?
Нет, я ее создал для умножения строк
Да, это не авто-каст типов, но защиты от дурака в данном случае не шибко больше.
Ну и строгость это скорее шкала. И в питоне ее нельзя назвать супер строгой:
В условном Rust выдаст ошибку, так как тут авто-каст целочисленного и нецелочисленного
Вы правда верите, что все кто хвалят $mol это фейки?
Я могу понять неоднозначную реакцию на автора, но сама технология от этого не становится $trash-ом, как вы позволяете себе выражаться (с высокой долей вероятности не попробовав его толком)
Любопытно было бы увидеть полноценное сравнение Vivaldi и Arc. Так как оба браузера, как я понял, сосредоточились на кастомизации и максимизации комфортного пребывания в интернете.
Некоторые вещи уже хотелось бы, чтобы разработчики Vivaldi взяли себе на заметку:
Облегченный режим до отправки в конкретное окно
Так называемые "бусты" для стилизации (возможно поддержка UserScript-ов из коробки)
Кастомизация пространств (чтобы сразу понимать в каком ты). Пространства были добавлены недавно и хочется верить, что они будут активно развиваться
В остальном выглядит некоторым переосмыслением UX и это шаг в верную сторону экспериментов с настолько важной для современного человека вещью. Однако, пока, Vivaldi выглядит поинтереснее и помощнее
Команде Arc удачи и развития!
Вполне работает, только как я и написал, нужно будет каждый раз catch с onerror явно прописывать. Но `unhandledrejectuin` все же предпочтительнее, соглашусь
Только вот сигналы/атомы - про реактивность, а useState это просто геттер и сеттер вызывающий ререндер, причем достаточно топорный(требующий изменения значения в итоге имеем кучи пересборок объектов на каждый чих). Поэтому такое сравнение сродни "калькулятор vs счёты"
То что подсвечено действительно камень в сторону автора оригинала статьи. Однако разберемся с указанными проблемами:
Бесспорно по Vue нет FQN из MAM-а. Однако можно попытаться решить проблему 3мя путями:
Script Setup
Global component (определяем компонент глобально и используем его везде) или миксином с нужными компонентами
Auto-import (имеются плагины, которые по определенным правилам из указанных папок по указанным правилам генерирует имена компонентов и при совпадении подставлять автоматический импорт)
Насчет массива. В случае использования JS, можно добавить валидатор, который явно в рантайме проверит значения. Однако при переключении на TS появляется большой набор вариантов решить эту проблему. Те там можно будет явно указать какой тип и с какими параметрами используется в пропсе (расписывание отдельных вариантов нахожу тривиальным).
Браво. Очень красивые приемы, обязательно возьму их на вооружение. Век живи - век учись.
Хоть вторую часть пиши по вашим комментариям, так как приемы меня прямо в восторг привели. И еще раз, крайне рад, что кто-то еще поигрался над этой "головоломкой".
Думаю, спустя какое-то время сделаю нечто схожее, но попробую ваши приемы обязательно показать, так как некоторые из них весьма неочевидны
Очень круто, рад что кому-то тоже было интересно поломать голову над этим и у него получился результат даже лучше. Я свой код скоратил +- с вашими шагами и и получилось 140. На 1 символ больше чем у вас для полностью работающего варианта.
Насчет требований: я их обозначал, что условием является прохождением тестов задачи на CodeWars (ссылка на задачу есть в статье). Поэтому варианты без [] и абсолютным позиционированием не пройдут, но являются хорошим дополнением к задаче.
Действительно, спасибо за то что заметили, в листинге опечатка:
v
спутана сw
. При данном изменении тесты на целевой платформе проходятся все, кроме тех, где валится из-за рекурсииВы правы, ее можно безболезненно убрать, так как необъявленные переменные без strict-мода записываются сразу в глобальный скоуп. Но погоды это особо не делает (-4 символа)
Всегда можно проверить на практике:
Сократил вариант с хэш-мапой. Итого: 173 символа против 146.
Думаю, если посижу подольше, то смогу выгрызть еще несколько символов, но точно не смогу догнать вариант с сокращениями через явные проверки.
Вполне можно. Я сразу после листинга кода указал, что есть 3 варианта: if+else/switch/hashmap. Но так или иначе, пришлось бы возвращаться к варианту выбора из 4ех, так как это более краткий вариант. Можно даже сразу писать в краткой форме `{i() {...}. d() {...}}` и это-все равно слишком громоздко
Не совсем, позвольте дополнить ваш комментарий. Если говорить о ЕГЭ-шном формате эссе, то там крайне жесткая структура. Можно буквально по трафарету его писать (из-за чего я не считаю, что эссе на ЕГЭ подобием сочинений). В 10-11 классе гоняют преимущественно по такому формату. Поэтому, когда говорят о эссе, то все-таки в ру-сегменте есть структура, когда речь о сочинении, то жесткой структуры нет (и не должно быть)