• Особенности вызова функций в С++

      Не так давно у меня произошёл очередной разговор с коллегой на извечную тему: "по ссылке, или по значению". В результате возникла данная статья. В ней я хочу изложить результаты моего исследования по этой и смежным темам. Далее будут рассмотрены:


      • Регистры и их назначение при вызове функций.
      • Передача и возврат простых типов и структур.
      • Как передача по ссылке и по значению влияют на оптимизации тела функции компилятором.
      • Как используется место при многочисленных вызовах функций.
      • Механизм виртуальных вызовов.
      • Оптимизация хвостовых вызовов и рекурсии.
      • Инициализация структур, массивов и векторов.

      Осторожно! Статья содержит большое количество кода на C++ и ассемблере (Intel ASM с комментариями), а также множество таблиц с оценками производительности. Всё написанное актуально для x86-64 System V ABI, который используется во всех современных Unix операционных системах, к примеру, в Linux и macOS.

      Читать дальше →
    • Я могу стать Apple, и ты тоже

      • Перевод

      Публичное раскрытие уязвимости в сторонней проверке подписи кода Apple


      В отличие от некоторых предыдущих работ, данная уязвимость не требует прав администратора, не требует JIT-кода или повреждения памяти для обхода проверки подписи кода. Всё что нужно — правильно отформатированный файл Fat/Universal, и проверка подписи кода покажет валидный результат.

      Резюме


      • Найденный обход применяемого сторонними разработчиками API для подписи кода позволяет представить любой код как подписанный Apple.
      • Все известные вендоры и проекты с открытым исходным кодом уведомлены (см. список ниже). Для них доступны патчи.
      • Есть вероятность, что проблема затрагивает другие сторонние программы, где используются официальные API подписи кода от Apple.
      • Разработчики несут ответственность за правильное использование API подписи кода. Есть инструменты демо-взлома (PoC) для тестов.
      • Относится только к macOS и более старым версиям OSX.
      Читать дальше →
      • +23
      • 8,2k
      • 1
    • Почему вам стоит перестать использовать продуктовые роадмапы и попробовать GIST

      • Перевод

      Вольный перевод статьи Итамара Гилада, консультанта по росту и стратегии, бывшего продакт-менеджера Google, о подходе к стратегическому планированию развития продуктов.




      На протяжении лет я разработал немалое количество продуктовых стратегий, роадмапов и диаграмм Ганта по проектам. Но больше я их не делаю. Я нашёл альтернативу получше, о которой сейчас расскажу.

      Читать дальше →
      • +23
      • 9,8k
      • 6
    • Неформальный и формальный стили речи

        Cтили речи существуют во всех языках, и английский не исключение. Овладеть стилистикой необходимо каждому, кто стремится освоить язык и говорить на нем также естественно, как его носители.

        image
        Читать дальше →
      • Джон Кармак: Мои истории о Стиве Джобсе

        • Перевод
        Однажды моя жена спросила меня «Почему ты бросаешь то, чем ты занимаешься, когда Стив Джобс просит тебя сделать что-то для него? Для всех остальных ты так не делаешь».

        Действительно, здесь есть над чем задуматься.

        В юности я был поклонником компьютера Apple, Джобс и Возняк были для меня почитаемыми людьми, а желание иметь Apple 2 было определяющей чертой моего детства на протяжении нескольких лет. Годами позже, когда я впервые увидел компьютер NeXT на компьютерной выставке — в те времена, когда я уже продавал свое первое коммерческое ПО — он показался мне взглядом в будущее (но ценник был более чем в 10 000 $ — нехило!).

        Когда Id Software стала успешной благодаря Commander Keen и Wolfenstein 3D, первой личной серьезной покупкой для меня стал не автомобиль — это был компьютер NeXT. Как вскоре выяснилось, для разработки нашего ПО он оказался весьма полезен, и в итоге мы перевели на оборудование NeXT всю нашу компанию.

        Нам так нравились наши NeXT-ы, что мы хотели выпустить Doom со специальным логотипом «Разработано на компьютерах NeXT» на заставке. Однако, когда мы попросили разрешения на подобный шаг, нам было отказано.

        Некоторое время спустя после релиза, — когда Doom начал свое шествие по планете и начал оставлять на ней заметный след, — мы узнали о том, что Стив изменил свое мнение по этому вопросу и был бы рад увидеть брендинг NeXT на игре — однако, этот корабль для него уже уплыл. Тогда мы обменялись несколькими сообщениями со Стивом Джобсом и я думал, что это круто.

        Годы спустя, основываясь на своих наблюдениях и косвенных свидетельствах, я пришел к выводу, что в глубине души Стив никогда не был высокого мнения об играх — и что он всегда хотел, чтобы игры не имели настолько большого значения для его платформ, какое они занимали на самом деле. Я никогда не принимал это лично на свой счет.
        Читать дальше →
      • Go: ускоряем выборку больших таблиц из MySQL

          Я использую Go для написания рекламной сети вот уже почти год. Разработку веду на сервере Intel i7-7700, 16Gb RAM, 256Gb SSD. И в скрипте который выполняется раз в сутки появилась задача выбрать все показы за прошедшие сутки и пересчитать на этой основе статистику за день сразу по нескольким объектам (сайт, кампания, баннер).

          По идиомам Go делается всё достаточно тривиально:
          Читать дальше →
        • Самые трудные пары английских времен

            С грамматикой в предыдущей статье разобрались, теперь посмотрим, с какими трудностями сталкивается студент, для которого русский – родной язык. Сразу отметим, что сравнивать языки бесполезно: русский и английский принадлежат к разным группам. Аргумент «а по-русски не так!», к сожалению, бесполезен. Естественно, не так, ведь русский – славянский язык, а английский – германский. Мы можем лишь стараться проводить параллели, но одинаковыми правила не будут никогда.

            image
            Читать дальше →
          • Руководство по ассемблеру Go

            • Перевод


            Прежде чем заняться реализацией runtime и изучением стандартной библиотеки, необходимо освоить абстрактный ассемблер Go. Надеюсь, это руководство поможет вам быстро овладеть нужными знаниями.
            Читать дальше →
            • +25
            • 8,1k
            • 8
          • TON: Telegram Open Network. Часть 2: Блокчейны, шардирование

              TON


              Данный текст — продолжение серии статей, в которых я рассматриваю структуру (предположительно) готовящейся к выходу в этом году распределенной сети Telegram Open Network (TON). В предыдущей части я описал её самый базовый уровень — способ взаимодействия узлов между собой.


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


              Сегодня посмотрим на основной компонент TON — блокчейн.

              Читать дальше →