• Какой самый оптимальный провайдер интернета без фильтрации контента, если такие ещё есть?

    @popov654 Автор вопроса
    Moskus, если провайдер мелкий, можно на законность и подзабить, вероятность проверок мала. Вы так говорите, как будто это я что-то противозаконное планирую. Мне нужна даже не Телега, а чтобы игры нормально работали. А то Fortnite тот же почти не пашет уже дня три-четыре
  • Как бороться с конфликтующими версиями, откуда они вообще берутся?

    Печально, что всё именно так... Любая система контроля версий без проблем сверила бы содержимое. Хотя бы хэши посчитать - проще некуда.

    Кстати, вы не пробовали аналоги? Мне вот интересно, есть ли у Sync такая же проблема (я им пользуюсь как раз, он поддерживает Win XP). Проверить что ли, поставив на второй компьютер, там тоже есть копии файлов, которые я синхронизирую с облаком...
  • Чем Slack лучше Telegram?

    Влад Токарев, две симки разве проблема? Люди ведь даже телефоны покупают с поддержкой двух сим-карт, чтобы разделять рабочее и личное пространство :)
    А так - да, согласен... Вот во времена аськи мобильный для создания аккаунта, вроде, не нужен был, хех.
  • Чем Slack лучше Telegram?

    pavelkunyavskiy, ну это Ваш частный случай, при всём уважении. Меня как пользователя-"домохозяйку" Скайп более чем устраивает: качеством связи, интерфейсом, скоростью работы, нагрузкой на память и cpu. Единственное "но" - в 8-ой версии ужасно испортили интерфейс, на мой взгляд. Всё стало огромным и безобразным. И шрифт стал хуже намного (тестил на Windows 7 с масштабом 150 процентов на уровне системы).
  • Чем Slack лучше Telegram?

    Александр Таратин, спасибо, выглядит очень неплохо! Буду пользоваться)
  • Чем Slack лучше Telegram?

    Антон, без понятия, что такое electron, сорри. А классик версия - это 7-ая, которая больше не поддерживается, или и 8-ая тоже (где сильно дизайн поменяли)?
  • Чем Slack лучше Telegram?

    А чем симметричное шифрование переписки не вариант? Можно просто периодически менять симметричный ключ, и либо всё перешифровывать, либо хранить полную историю ключей. Зачем тратить ресурсы видеокарт (если это был не сарказм), когда обычный XOR делается за пару процессорных тактов? При длинном рандомном ключе этого хватит :)
  • Чем Slack лучше Telegram?

    В ТГ много контента, который может отвлекать сотрудника от работы

    Прошу прощения, но что мешает завести два акка в Телеграме, и открыть их, например, в разных браузерах? Личное отдельно, рабочая переписка - отдельно.
  • Чем Slack лучше Telegram?

    Антон, разве уже есть? Несколько лет назад вроде не было, точно проверял. Только настройки профиля и пароль менять можно было через сайт.
  • Почему в Java наследование реализовано именно так?

    @popov654 Автор вопроса
    Александр Мовчан, вот к слову менее глупый пример, когда это реально доставляет неудобства. Представьте класс, хранящий внутри себя HashMap (назовём его JSObject, объект языка JavaScript). От него унаследован класс Window, который тоже имеет поле items - да вот только в конструкторе туда прописывается ссылка на совсем другой HashMap, на корневой scope. При этом я получаю warning, что поле скрывает другое поле из родительского класса, но меня всё устраивает: мне вообще в Window родительский HashMap не нужен (а станет нужным - есть оператор super). Теперь я в классе JSObject делаю метод, удаляющий элемент из HashMap. А в Window его не копирую, потому что, например, забыл. И теперь как только мой код где-то вызовет метод удаления у объекта класса Window (независимо, кстати, от типа ссылки на этот объект), я получу неверную логику работы. Потому что реализация метода удаления у JSObject, хоть и делает то же самое удаление из HashMap, делает его из СВОЕГО HashMap, который у нас в классе Window как раз скрыт, и никакого влияния на состояние моего объекта с точки зрения бизнес-логики не оказывает. В итоге - мне опять приходится копипастить реализацию.
  • Почему в Java наследование реализовано именно так?

    @popov654 Автор вопроса
    Александр Мовчан, иными словами - почему данные жёстко привязаны к методам в рамках класса, а не берутся у объекта в рантайме (тем более, при полном соответствии типа поля и даже имени)?
  • Почему в Java наследование реализовано именно так?

    @popov654 Автор вопроса
    Александр Мовчан, да я не говорю, что базовый класс должен знать о наследниках. Я говорю - почему бы методу из базового класса не поработать с приватным полем объекта-наследника, у которого метод вызван (а не обращаться к полю базового класса, которое лежит на одном уровне иерархии с вызванной реализацией метода)?
  • Почему в Java наследование реализовано именно так?

    @popov654 Автор вопроса
    В вашем примере вы просто определили новое поле с таким же именем, что привело к так называемому name shadowing

    Это не объясняет, почему реализация из A не хочет работать с полем, определённым в B с таким же именем. Ведь объект, у которого вызван метод - экземпляр B. Да и ссылка на него имеет тип класса B (хотя в Java, как мои эксперименты показывали, тип ссылки ну вот вообще не влияет ни на что практически)...
  • Почему в Java наследование реализовано именно так?

    @popov654 Автор вопроса
    Нельзя переопределить значения поля, как это работает с методами.

    И это очень печально...

    Если хотите задавать в наследнике значение родительского поля, сделайте в родителе конструктор с соответствующим параметром.

    Ну да, способ 3.2 в действии.
    Вообще, если я использую конструктор только для реализации довольно сложной логики - это означает, что с моим кодом не всё хорошо? :) Значения полям я обычно прямо в момент объявления задаю, снизу...

    Опять же, по поводу конструктора - было бы логично его создать, если бы значение этого поля должно было определяться динамически (например, по значению параметра в конструкторе, как Вы сказали, или сделать несколько конструкторов - один полный и несколько с сокращённым набором аргументов, при этом сокращённые будут иметь некоторые дефолты для ряда этих аргументов, и могут вызывать полный внутри себя). Или даже ещё сложнее - вычислять значение этого поля на основе других параметров, переданных в конструктор, состояния каких-то объектов, переданных в тот же конструктор... Но в случае, когда я для всех объектов класса Item хочу сделать поле type, имеющее значение "item", и других полей, требующих определения, нет - то только ради этого создавать конструктор несколько не с руки...
  • Дает ли .net/java преимущества для небольших веб-сервисов?

    А что такое биндинг, кстати, не объясните пожалуйста? Тоже вот заинтересовало
  • Как грамотно написать интерпретатор?

    @popov654 Автор вопроса
    Даниил Колесниченко, статью прочитал, спасибо. Очень проясняет многие моменты.

    Сначала да, но если там ничего не найдёт, пойдёт по цепочке скоупа в котором функция вызывалась.


    Однако вот с этим ты не прав, имхо. Только что проверил в Хроме, это не работает. Да и в тексте по ссылке на это нет никаких намёков.

    скриншот
    5a6335f8effa3831811291.png
  • Как грамотно написать интерпретатор?

    @popov654 Автор вопроса
    Даниил Колесниченко, так идея замыкания ведь в чём? Если я правильно помню - обернуть функцию в ещё одну функцию, передав внешней функции часть аргументов, таких образом "заморозив" их значения для внутренней функции путём использования промежуточного скоупа. Вообще я понял, в чём несостыковка: скоуп надо учитывать тот, который был при объявлении функции, а не при вызове. Окей, тогда твой подход совершенно правильный. Насчёт того, что проходится дважды - да, это плохо. Код, в котором вообще нет замыканий - там эти две цепочки скоупов временами будут совпадать, временами же цепочка скоупов вызова будет содержать цепочку скоупов объявления (наоборот быть не может, мы не можем вызвать снаружи что-то, что объявлено в более вложенном скоупе, например функцию, вложенную в другую функцию). Может, стоит рассматривать сценарий с замыканиями вообще отдельно? В любом случае, есть ещё bind, который занимается тем же самым (может "прибить" к функции контекст, может "прибить" контекст и переменные). И его тоже хорошо бы реализовать.
    UPD: Пардон, мы можем вызвать то, что внутри. Но только не напрямую, а если нам кто-то вернёт ссылку на эту функцию внутри переменной :)
    UPD2: Как идея найти более длинную из цепочек и пройтись по ней? Ведь когда мы создаём замыкание (через "function(args) { return function ... }(...)"), мы это делаем уже внутри какого-то скоупа. И функция, которую мы получим, при своём вызове всё равно пойдёт вверх по всей этой цепочке. Из этого я делаю вывод, что достаточно лишь посмотреть, где функция была объявлена, и обойти лишь эту цепочку, этого будет достаточно. А эта информация, вроде как, неизменна. Можно один раз сохранить её вместе с функцией в момент её создания как сущности.
  • Как грамотно написать интерпретатор?

    @popov654 Автор вопроса
    Даниил Колесниченко, а, вон оно что... Учебники, по которым я учил JS, явно не очень написаны. Там говорилось про запись в window, подразумевая поведение внутри функций, которые оюбъявлены прямо в window scope. Спасибо.
    Насчёт оверрайдинга - можно так, а можно просто при исполнении разобранной цепочки выражения в этом случае кидать эксепшен или просто писать ошибку юзеру, что обнаружена синтаксическая ошибка. Я на самом деле ещё не очень понял, как следует хранить операторы вызова. С бинарными арифметическими и побитовыми операторами всё ясно: у нас цепочка (в инфиксной или постфиксной форме, не важно) где лежат вперемешку значения и операторы (это разные сущности). Мы с этой цепочкой работаем, исполняя её по частям, с учётом приоритета операторов. А вот как быть с вызовом функции ("выражение(аргументы)"), я вот реально без понятия. Можно считать это таким особым оператором на произвольное число операндов, где важен их порядок (и между собой, и кто будет самым первым (имя функции, по которому её искать)). Но это какой-то вообще кривой и сложно реализуемый подход. Может, проще через какой-то костыль это сделать? Лишь бы он был простым и легко поддерживался :)
  • Как грамотно написать интерпретатор?

    @popov654 Автор вопроса
    Не знал даже, что такое есть, интересно. То есть можно использовать готовый интерпретатор от Sun/Oracle в своём проекте, если лень писать свой?
  • Как грамотно написать интерпретатор?

    @popov654 Автор вопроса
    Спасибо за ответ)

    1. Сделать метод call у всех (в базовом классе), а не только у функций - интересная идея, надо будет подумать. Хотя наверное смысла нет, я собираюсь не динамически менять тип сущностей через поле, а создавать каждый раз новую нужного класса (а тип проверять через instanceOf). Они очень легковесные, мне кажется, падения производительности сильного не будет.
    2. Нормальный вариант, но вектор наверное лучше тем, что есть ссылка на root scope (он часто нужен, когда какая-нибудь плохо написанная функция пишет переменные в глобальную область без var). Ну или просто ссылку на первый элемент списка хранить в переменной
    3. Ну да, в самом деле, вы правы. Просто передавать ссылку на объект надо будет аргументом дополнительно в call