Обновить
33
0
Дмитрий @Keyten

JavaScript

Отправить сообщение
Заблокируют зарубежный интернет, и тогда IPv4 на всех хватит.
Интересно, а какие врожденные недостатки С и ассемблера возможно исправить, переписав/написав с нуля операционную систему на одном из более современных языков

Такие ошибки, как переполнение стека, там будут невозможны (в предположении, что у V8 их нет), например.
Но вообще мне не кажется, что основной смысл именно в исправлении недостатков C / Asm.
Тут вроде бы достаточно дать какой-то доступ к файлам / сети, нет? А в архитектуру браузера можно и не лезть.
А где конкретно плагины FF лезли внутрь архитектуры и прочее-прочее, чего нельзя сделать с сохранением совместимости?

Есть ощущение, что, если просто написать весь UI браузера на html/css/js, то получится примерно вся мощь XUL, а тормозить будет не очень сильно (примерно как одна дополнительная вкладка, что сегодня не очень много).
Ещё и от языка зависит. Где-то в Haskell вроде теоркат используется.
Яндекс браузер пытается. Или, как у меня сложилось мнение, пытался до недавнего времени.
Забавно, что на десктопе наоборот. Хром всё держит в фоне, а фф нет.
Кажется, кто-то где-то пытался создать ui браузера полностью на html, что было бы неплохой заменой для xul.
Можно ещё выпустить специальный диктофон, передающий всё сказанное сразу в ФСБ, и запретить говорить без него.
Можно использовать разные типы кавычек, разные виды тире / дефисов / дефисоминусов / разделителей в телефонном номере / etc. Это ещё незаметнее.

И можно даже пойти ещё дальше и заменять слова на синонимы.
Кстати, стоило бы делать так:

const zeroWidthSpace = '​';
const zeroWidthNonJoiner = '‌';
const zeroWidthJoiner = '‍';
const zeroWidthNoBreakSpace = '';

const binaryToZeroWidth = binary => (
  binary.split('').map((binaryNum) => {
    const num = parseInt(binaryNum, 10);
    if (num === 1) {
      return zeroWidthSpace;
    } else if (num === 0) {
      return zeroWidthNonJoiner;
    }
    return zeroWidthJoiner;
  }).join(zeroWidthNoBreakSpace);
);
Опыт показывает что часто при дебаге чужого кода приходится перелистывать весь код, чтобы понять не изменили ли где-то по пути такую-то переменную. А если начать использовать const — то вы удивитесь, как редко, на самом деле, вам нужны изменяемые переменные кроме как в циклах да в аргументах функций.

Вы удивитесь, но у меня ровно противоположный опыт. Смотреть, не изменилась ли переменная, приходится примерно никогда (да и зачем, если можно исполнить код и вывести её в консоль?), зато почти каждый день приходится лезть выше по коду и исправлять const на let, потому что модифицирую код, и внезапно теперь какую-то переменную нужно менять.
А уж в консоли вообще весело. Объявишь какую-нибудь переменную по привычке через const, а потом чертыхаешься, потому что её понадобилось поменять, а уже никак.

Если это не говнокод на кучке глобальных переменных — то зачем ему может понадобится var?

ться.
Для того, чтобы объявлять переменные. Ещё раз: от замены let на var в коде почти всегда не меняется примерно ничего. Хотя можете привести какой-нибудь пример, когда у вас реальный настоящий код, скажем, от замены var на let, стал в 2 раза чище и короче. Есть такие примеры?
Никаких багов не будет, если вы знаете, как работает var.
Так товарищи выше не символы экономят. Не-не. Они строчки экономят. Дескать чем меньше строк, тем больше на экран влезет. Ну и тем меньше глазами бегать искать чего-то.

Зачем вы продолжаете пытаться читать чужие мысли, если вам уже сказали, что у вас не получается?
Любое подобное утверждение (в том числе и «всегда используйте let») — это в немалой степени вкусовщина. Ну потому что по сути ничего не меняется кроме «мне кажется, что так красивее».

Моё имхо насчёт использования следующее:

1. const для любых констант, которые вряд ли может понадобиться менять. Например, число пи. Не могу представить адекватной ситуации, когда бы мне захотелось изменить значение этой константы.
Но при этом не использовать для всех-всех значений, которые не меняются конкретно в этом коде (мы можем что-нибудь захотеть изменить в коде, и нам придётся менять определение переменной).
2. let — когда видимость внутри блока существенно важна. Например, в цикле for, если внутри setTimeout.
3. var — во всех остальных случаях.
Эмм, раз уж вы взялись предсказывать мой ответ, почему тогда try-catch, а не if-else?
Вы зачем-то расширили моё утверждение. Я разве где-то утверждал, что он в чём-то лучше? Я скорее не понимаю, почему все стремятся использовать let вместо var везде, где нужно и где не нужно, если ошибки, связанные с var, попадаются очень редко, очень легко ловятся, и вообще достигаются, в основном, новичками в языке, не потрудившимися прочитать, как оно тут работает.
Это примерно как возмутиться, что у массивов могут быть повторяющиеся значения, и поэтому рекомендовать всегда вместо него использовать Set.

Моё мнение: они вполне равноправны. Да, где-то let бывает писать удобнее. Но ведь где-то и с var такая же ситуация! (а вот теперь утверждаю, да: всплытие на уровне функции действительно бывает удобным)

Чем вам var помешало?

Можно ещё и хитро маппить один объект в другой.
Например, хотим из


{ catName: 'Alex', fur: { color: 'black', length: 3 }, catAge: 8 }

Получить


{ type: 'cat', name: 'Alex', furColor: 'black', furLength: 3, age: 3 }

И при этом чтобы в случае отсутствия какого-то из полей в итоговом объекте не было полей, содержащих undefined.


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


function mapAnimal(source){
  return {
    type: 'cat',
    ...(source.catName && {
      name: source.catName
    }),
    // и так далее
  };
}

Или даже как-то так:


function mapAnimal(source){
  let {undefined, ...result} = {
    type: 'cat',
    [source.catName && 'name']: source.catName,
    [source.fur && source.fur.color && 'furColor']: source.fur.color
  };
  return result;
}

Можно ещё деструктурировать source прям в записи аргументов.

А перед этой функцией стоит async. Такая функция всегда возвращает промис.

Информация

В рейтинге
Не участвует
Откуда
Москва, Москва и Московская обл., Россия
Дата рождения
Зарегистрирован
Активность