Интересно, а какие врожденные недостатки С и ассемблера возможно исправить, переписав/написав с нуля операционную систему на одном из более современных языков
Такие ошибки, как переполнение стека, там будут невозможны (в предположении, что у V8 их нет), например.
Но вообще мне не кажется, что основной смысл именно в исправлении недостатков C / Asm.
А где конкретно плагины FF лезли внутрь архитектуры и прочее-прочее, чего нельзя сделать с сохранением совместимости?
Есть ощущение, что, если просто написать весь UI браузера на html/css/js, то получится примерно вся мощь XUL, а тормозить будет не очень сильно (примерно как одна дополнительная вкладка, что сегодня не очень много).
Опыт показывает что часто при дебаге чужого кода приходится перелистывать весь код, чтобы понять не изменили ли где-то по пути такую-то переменную. А если начать использовать const — то вы удивитесь, как редко, на самом деле, вам нужны изменяемые переменные кроме как в циклах да в аргументах функций.
Вы удивитесь, но у меня ровно противоположный опыт. Смотреть, не изменилась ли переменная, приходится примерно никогда (да и зачем, если можно исполнить код и вывести её в консоль?), зато почти каждый день приходится лезть выше по коду и исправлять const на let, потому что модифицирую код, и внезапно теперь какую-то переменную нужно менять.
А уж в консоли вообще весело. Объявишь какую-нибудь переменную по привычке через const, а потом чертыхаешься, потому что её понадобилось поменять, а уже никак.
Если это не говнокод на кучке глобальных переменных — то зачем ему может понадобится var?
ться.
Для того, чтобы объявлять переменные. Ещё раз: от замены let на var в коде почти всегда не меняется примерно ничего. Хотя можете привести какой-нибудь пример, когда у вас реальный настоящий код, скажем, от замены var на let, стал в 2 раза чище и короче. Есть такие примеры?
Никаких багов не будет, если вы знаете, как работает var.
Так товарищи выше не символы экономят. Не-не. Они строчки экономят. Дескать чем меньше строк, тем больше на экран влезет. Ну и тем меньше глазами бегать искать чего-то.
Зачем вы продолжаете пытаться читать чужие мысли, если вам уже сказали, что у вас не получается?
Любое подобное утверждение (в том числе и «всегда используйте let») — это в немалой степени вкусовщина. Ну потому что по сути ничего не меняется кроме «мне кажется, что так красивее».
Моё имхо насчёт использования следующее:
1. const для любых констант, которые вряд ли может понадобиться менять. Например, число пи. Не могу представить адекватной ситуации, когда бы мне захотелось изменить значение этой константы.
Но при этом не использовать для всех-всех значений, которые не меняются конкретно в этом коде (мы можем что-нибудь захотеть изменить в коде, и нам придётся менять определение переменной).
2. let — когда видимость внутри блока существенно важна. Например, в цикле for, если внутри setTimeout.
3. var — во всех остальных случаях.
Вы зачем-то расширили моё утверждение. Я разве где-то утверждал, что он в чём-то лучше? Я скорее не понимаю, почему все стремятся использовать let вместо var везде, где нужно и где не нужно, если ошибки, связанные с var, попадаются очень редко, очень легко ловятся, и вообще достигаются, в основном, новичками в языке, не потрудившимися прочитать, как оно тут работает.
Это примерно как возмутиться, что у массивов могут быть повторяющиеся значения, и поэтому рекомендовать всегда вместо него использовать Set.
Моё мнение: они вполне равноправны. Да, где-то let бывает писать удобнее. Но ведь где-то и с var такая же ситуация! (а вот теперь утверждаю, да: всплытие на уровне функции действительно бывает удобным)
И при этом чтобы в случае отсутствия какого-то из полей в итоговом объекте не было полей, содержащих undefined.
Есть целых два способа записать это только деструктуризацией, без кучи многострочных ифов, в одну строку. Не скажу, что код получается сильно понятнее (хотя это больше дело привычки и знания такой конструкции), но сама возможность крутая.
function mapAnimal(source){
return {
type: 'cat',
...(source.catName && {
name: source.catName
}),
// и так далее
};
}
Такие ошибки, как переполнение стека, там будут невозможны (в предположении, что у V8 их нет), например.
Но вообще мне не кажется, что основной смысл именно в исправлении недостатков C / Asm.
Есть ощущение, что, если просто написать весь UI браузера на html/css/js, то получится примерно вся мощь XUL, а тормозить будет не очень сильно (примерно как одна дополнительная вкладка, что сегодня не очень много).
И можно даже пойти ещё дальше и заменять слова на синонимы.
Вы удивитесь, но у меня ровно противоположный опыт. Смотреть, не изменилась ли переменная, приходится примерно никогда (да и зачем, если можно исполнить код и вывести её в консоль?), зато почти каждый день приходится лезть выше по коду и исправлять const на let, потому что модифицирую код, и внезапно теперь какую-то переменную нужно менять.
А уж в консоли вообще весело. Объявишь какую-нибудь переменную по привычке через const, а потом чертыхаешься, потому что её понадобилось поменять, а уже никак.
ться.
Для того, чтобы объявлять переменные. Ещё раз: от замены let на var в коде почти всегда не меняется примерно ничего. Хотя можете привести какой-нибудь пример, когда у вас реальный настоящий код, скажем, от замены var на let, стал в 2 раза чище и короче. Есть такие примеры?
Никаких багов не будет, если вы знаете, как работает var.
Зачем вы продолжаете пытаться читать чужие мысли, если вам уже сказали, что у вас не получается?
Моё имхо насчёт использования следующее:
1. const для любых констант, которые вряд ли может понадобиться менять. Например, число пи. Не могу представить адекватной ситуации, когда бы мне захотелось изменить значение этой константы.
Но при этом не использовать для всех-всех значений, которые не меняются конкретно в этом коде (мы можем что-нибудь захотеть изменить в коде, и нам придётся менять определение переменной).
2. let — когда видимость внутри блока существенно важна. Например, в цикле for, если внутри setTimeout.
3. var — во всех остальных случаях.
Это примерно как возмутиться, что у массивов могут быть повторяющиеся значения, и поэтому рекомендовать всегда вместо него использовать Set.
Моё мнение: они вполне равноправны. Да, где-то let бывает писать удобнее. Но ведь где-то и с var такая же ситуация! (а вот теперь утверждаю, да: всплытие на уровне функции действительно бывает удобным)
Чем вам var помешало?
Можно ещё и хитро маппить один объект в другой.
Например, хотим из
Получить
И при этом чтобы в случае отсутствия какого-то из полей в итоговом объекте не было полей, содержащих undefined.
Есть целых два способа записать это только деструктуризацией, без кучи многострочных ифов, в одну строку. Не скажу, что код получается сильно понятнее (хотя это больше дело привычки и знания такой конструкции), но сама возможность крутая.
Или даже как-то так:
Можно ещё деструктурировать source прям в записи аргументов.
А перед этой функцией стоит async. Такая функция всегда возвращает промис.