Как стать автором
Обновить
5
0
Урядов Алексей @LedinecMing

Программист

Отправить сообщение

Поговорим об оптимизирующих компиляторах. Сказ первый: SSA-форма

Уровень сложностиСредний
Время на прочтение9 мин
Количество просмотров16K

Всем привет. Сегодня я хотел бы поговорить об устройстве современных оптимизирующих компиляторов. Я никогда не публиковался на Хабре ранее, но надеюсь, что мне удастся написать серию статей, которая просуммирует мой опыт в этой области.

Коротко обо мне. Меня зовут Макс, и так получилось, что я вот уже 10 лет, почти с самого начала своей карьеры, занимаюсь оптимизирующими компиляторами. Я начинал в Intel, потом перешёл в Azul Systems, год провёл в Cadence и вернулся обратно, всё это время занимаясь компиляторными оптимизациями для Java, C++ и нейросетевых моделей. На момент написания статьи у меня чуть за 900 патчей в LLVM, большинство из них посвящено цикловым оптимизациям.

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

Итак, поехали.

Погрузиться
Всего голосов 121: ↑119 и ↓2+117
Комментарии58

Производительность Android приложений Kotlin в сравнении с С++ или цена управления памятью

Время на прочтение9 мин
Количество просмотров17K

Взгляд на скорость выполнения кода с применением NDK.

Вычисление фрактала Мандельброта с помощью Kotlin и С++ и тест на реальных устройствах

Читать далее
Всего голосов 34: ↑33 и ↓1+32
Комментарии106

Главный цикл в пошаговых играх

Уровень сложностиСредний
Время на прочтение12 мин
Количество просмотров13K

Теперь, когда мой рогалик, написанный на Dart, имеет открытый исходный код, мне хотелось бы поговорить о том, на что было потрачено большое количество времени. На самом деле я вложил даже слишком много усилий в некоторые элементы этой игры и может когда-нибудь напишу и о них. Однако сейчас я хотел бы начать с того места, где стартует любая игра: главный цикл.

Читать далее
Всего голосов 34: ↑34 и ↓0+34
Комментарии15

Концепция ORM как двигатель прогресса – выявит слабое место Вашей СУБД

Время на прочтение7 мин
Количество просмотров4.4K

ORM (Object‑Relational Mapping) используется во многих языках программирования, в том числе и в 1С. Однако реализация высоконагруженных решений, приводит к мысли что разработчики ORM не учитывали ее влияния на производительность СУБД. Такая ситуация и в 1С и ORM на Java, и наверняка в других ORM. В предыдущей части статьи Концепция ORM как двигатель прогресса — выдержит ли ее ваша СУБД? были изложены результаты теста, в этой статье ответы на самые часто задаваемые вопросы и новый тест.

Читать далее
Всего голосов 4: ↑3 и ↓1+2
Комментарии32

Какую модель памяти следует использовать в языке Rust?

Время на прочтение10 мин
Количество просмотров9.2K
image

В этой статье рассматривается несколько альтернативных моделей памяти для языка Rust. Надеюсь, эта дискуссия будет ценна всему сообществу Rust – но, в конце концов, это их язык, поэтому и выбор модели памяти тоже за ними.

Эта дискуссия ведется с позиций принятой в Rust безбоязненной конкурентности. Затравкой для нее послужили различные обсуждения, которые я наблюдал и в которых сам участвовал, работая над этой серией статей. Разумеется, мнения у разных членов сообщества тоже разнятся, люди могут обоснованно отстаивать разные варианты решений. Те, кто меня знают, понимают, что эти точки зрения серьезно расходятся с моей. Однако, моя точка зрения продиктована тем, что я давно работаю в условиях максимально возможной производительности, масштабируемости, молниеносного отклика, энергоэффективности, устойчивости и многого другого. В таких условиях определенная перестраховка – выбор не только мудрый, но и жизненно необходимый. В авиации есть примета, что есть пилоты отважные, а есть старые, но отважные пилоты до старости не доживают.

Тем не менее, я рассчитываю, что мой более чем тридцатилетний опыт работы с конкурентностью и моя работа над моделью памяти в C/C++ (безотносительно memory_order_consume), а также моя роль ведущего специалиста по поддержке модели памяти ядра (LKMM) послужат хорошей отправной точкой, чтобы высказаться о более прозаических задачах, решение которых, я уверен, стремятся поддержать в сообществе Rust.
Читать дальше →
Всего голосов 31: ↑27 и ↓4+23
Комментарии3

Не дразните программиста

Время на прочтение4 мин
Количество просмотров168K
Подходит к концу очередная рабочая неделя. Не знаю, как у вас, а у меня эта неделя, что называется, — не задалась. Потрачена куча энергии и нервных клеток, и никакого движения вперед. Переносить стрессовое состояние на выходные мне очень не хочется, поэтому я решил взять короткую паузу и немного развеяться.

Вы устали? Хотите выпустить пар? Вам требуется передышка? Предлагаю вам присоединится ко мне, тем более, что на дворе пятница.
Читать дальше →
Всего голосов 424: ↑394 и ↓30+364
Комментарии126

Как я стала системным архитектором без инженерного бэкграунда, и почему это нормально

Время на прочтение8 мин
Количество просмотров5.5K

Системными архитекторами чаще всего становятся бывшие инженеры, проектировщики и системные администраторы. Я же пришла в эту профессию совсем другим путем. Начинала товароведом, была маркетологом и затем через разные позиции в ИТ доросла до системного архитектора. Хочу поделиться опытом и рассказать, почему для системных архитекторов важны не только технические навыки, и показать, что люди из околотехнических специальностей могут также состояться в этой профессии.

Читать далее
Всего голосов 27: ↑18 и ↓9+9
Комментарии35

Секретный прогноз IT-экосистемы (сбывшийся на 82%), чтобы понять к чему готовиться

Время на прочтение11 мин
Количество просмотров48K

Меня зовут Константин Кичинский, я технологический эксперт Kaspersky Product Studio – продуктовой студии в «Лаборатории Касперского». Наша команда занимается поиском и инкубацией свежих идей, стартапов и проектов, и нам важно отслеживать, что происходит на рынке в целом. Я расскажу о прогнозе, который собирал с конца февраля этого года, и который представил на рубеже весны-лета 2022 года на конференции Highload Foundation. У меня смешанные чувства: к моему глубочайшему сожалению, он оказался достаточно верным и сбылся на 82%, но я рад, что модель технологической экосистемы, на которой он базируется, работает.

Читать далее
Всего голосов 70: ↑64 и ↓6+58
Комментарии71

Портирование DOS игр. Tutorial

Уровень сложностиСредний
Время на прочтение12 мин
Количество просмотров8.5K

Мотивация к написанию статьи

Уважаемые коллеги, доброго времени суток!

Этой статьей я хочу показать приёмы портирования программ между аппаратно-программными платформами, и привлечь внимание к книге «Секреты программирования игр» Андрэ Ламота, 1995, которую вспомнят добрым словом многие разработчики компьютерных игр, и другим не менее полезным книгам этого автора.

Нам интересны приёмы портации, но мы так же проведём ревью, проверим насколько долговечен код 25-тилетней давности, и насколько сложно его портировать на любые современные платформы.

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

Читать далее
Всего голосов 40: ↑40 и ↓0+40
Комментарии9

Децентрализованный поиск для свободного веба

Время на прочтение12 мин
Количество просмотров10K

Возможно ли создать поисковую систему, которую тяжело подвергнуть цензуре, влиянию и блокировке?

Говоря техническим языком, возможно ли выполнять полнотекстовый поиск не имея удаленного сервера, удобным для пользователя способом, одновременно храня поисковый индекс в peer-to-peer системе и имея возможность быстро обновлять поисковый индекс?

Да, это возможно!

Под катом описание архитектуры поискового движка Summa на Rust и набора приемов, позволивших ответить утвердительно на все вопрос

Читать далее
Всего голосов 65: ↑63 и ↓2+61
Комментарии21

HelloWorld — это просто?

Время на прочтение11 мин
Количество просмотров33K

Введение


Открывая любой учебник по языку программирования мы первым делом видим простой прмер, показывающий программисту базовые возможности языка. Обычно в качестве такого примера выступает всеми любимый вывод «HelloWorld» на экран. Все давно привыкли к тому, что такой пример просто реализует минимальную структуру программы, и не дает забросить книгу куда-нибудь в уборную на дальнюю полку. Но существует некоторые языки программирования в которых вывод сообщения на экран не является такой уж тривиальной задачей. Ниже будет приведено несколько простых примеров.
Милости прошу...
Всего голосов 176: ↑120 и ↓56+64
Комментарии29

Картографический фотопроект «По местам съёмок фильма «Брат»

Время на прочтение2 мин
Количество просмотров13K

Идея создать проект «По местам съёмок фильма «Брат» пришла спонтанно, когда я собирался в поездку в Санкт-Петербург. Подумал о том, что я могу объединить профессиональные знания в картографии и своё почтительное отношение к фильму, тем более, что совсем недавно было 25 лет со дня выпуска фильма. Стандартные туристические маршруты надоели. Мне не нравится гулять там, где ходят толпы туристов, делая одни и те же фотографии.

Первый этап — это понимание того, где конкретно снят тот или иной фрагмент. Информацию искал в интернете, но многие точки были описаны очень неконкретно. Двор на такой-то улице или Морская набережная, 15Б, а по факту этот дом на 29 подъездов. Приходилось на месте искать точки съемки и делать фото, потом уточнять точки в геоинформационной программе на карте QGIS.

Читать далее
Всего голосов 93: ↑84 и ↓9+75
Комментарии10

Rust должен умереть, МГУ сделал замеры

Время на прочтение25 мин
Количество просмотров100K

В предыдущих сериях:



Медленно, но верно Раст проникает не только в умы сотрудников больших корпораций, но и в умы школьников и студентов. В этот раз мы поговорим о статье от студента МГУ: https://rustmustdie.com/.


Её репостнул Андрей Викторович Столяров, доцент кафедры алгоритмических языков факультета ВМК МГУ им. М. В. Ломоносова и по совместительству научрук студента-автора статьи.


Я бы сказал, что тут дело даже не в том, что он "неинтуитивный". Дело скорее в том, что компилятор раста сам решает, когда владение "должно" (с его, компилятора, точки зрения) перейти от одного игрока к другому. А решать это вообще-то должен программист, а не компилятор. Ну и начинается пляска вида "как заставить тупой компайлер сделать то, чего я хочу".
Бред это всё.

— А. В. Столяров
Кощунство!
Всего голосов 363: ↑344 и ↓19+325
Комментарии230

Парсите, а не валидируйте

Время на прочтение16 мин
Количество просмотров29K

Еще в декабре мне попалась одна совершенно замечательная статья на английском, посвящённая использованию системы типов языка для более широкого класса задач, для повышения надежности приложений и простоты рефакторинга. К сожалению, в тот момент я был слишком занят написанием статей по ФП, которые крайне важно было написать, пока свежи воспоминания. Но теперь, когда с этой задачей я справился, наконец дошли руки перевести эту замечательную заметку. Оригинальный язык примеров — Хаскель, но я решил переписать их на раст, для более широкого охвата аудитории. Однако язык тут совершенно неважен, советы этой статьи я применяю в ежедневной разработке на вполне себе "приземлённых" C# и TypeScript, так что если вы просто стараетесь писать надёжный и поддерживаемый код, то, вне зависимости от языка, статья вам будет в тему.


Благодарю за вычитку и помощь в переводе Hirrolot, funkill и andreevlex


Читать дальше →
Всего голосов 74: ↑71 и ↓3+68
Комментарии155

Как защититься от сканирования портов и Shodan?

Время на прочтение5 мин
Количество просмотров15K

Серверы в опасности!

Вы знали, что каждый включенный и подключенный к сети сервер постоянно подвергается атакам? Это могут быть разные атаки и с разной целью.

Это может быть перебор портов с целью найти открытые от какой-то компании, которая позиционирует себя борцом за безопасность, но которая собирает статистику открытых портов на будущее по всем доступным IP (например Censys).

Может быть Shodan, который тоже собирает базу о том, где какие порты открыты, и отдаёт эту информацию любому заплатившему. И могут быть менее известные компании, которые работают в тени. Представьте, кто-то ходит по всем домам и переписывает модели замков входных дверей, дергает за дверь и выкладывает это в публичный доступ. Дичь! Но тоже самое происходит в интернете тысячи раз в секунду.
Кроме компаний могут быть бот-сети, перебирающие порты для поиска чего-то конкретного или для подготовки к целевым атакам.

Ну и собственно целевые атаки, во время которых ваши серверы в первую очередь тестируются на наличие открытых портов, а затем производятся атаки на найденные сервисы. Это может быть подбор эксплоитов для использования известных дыр или пока неизвестных 0-day, как и обычный DDoS.

Во всех этих сценариях используется предварительный перебор открытых портов. Скорее всего применение nmap или подобных утилит в каких-то скриптах.
Как защитить сервер от сканирования портов без CloudFlare и подобных прослоек?

Как стать невидимым для Shodan, Censys?
Всего голосов 13: ↑8 и ↓5+3
Комментарии24

ООП, «святая троица» и SOLID: некоторый минимум знаний о них

Время на прочтение43 мин
Количество просмотров114K

Необходимое вступление


Я не гарантирую, что изложенные здесь трактовки общепринятых терминов и принципов совпадают с тем, что изложили в солидных научных статьях калифорнийские профессора во второй половине прошлого века. Я не гарантирую, что мои трактовки полностью разделялись или разделяются большинством IT-профессионалов в отрасли или научной среде. Я даже не гарантирую, что мои трактовки помогут вам на собеседовании, хоть и предполагаю, что будут небесполезны.


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


Столь малые гарантии поднимают вопросы о причинах, по которым статья пишется. Я считаю, что этим вещам должны учить везде, где учат программированию, вплоть до уроков информатики в школах с углублённым её изучением. Тем не менее, для меня стала пугающе нормальной ситуация, когда я узнаю, что собеседник мой коллега, причём работающий уже не первый год, но про инкапсуляцию «что-то там слышал». Необходимость собрать всё это в одном месте и давать ссылку при возникновении вопросов зрела давно. А тут ещё и мой «pet-project» дал мне изрядно пищи для размышлений.


Тут мне могут возразить, что учить эти вещи в школе рановато, и вообще на ООП свет клином не сошёлся. Во-первых, это смотря как учить. Во-вторых, 70% материала этой статьи применимо не только к ООП. Что я буду отмечать отдельно.



Читать дальше →
Всего голосов 88: ↑82 и ↓6+76
Комментарии79

Как работает неточное сравнение строк

Время на прочтение7 мин
Количество просмотров27K

https://fakt309.github.io/thisisthewall/

В языках программирования строки сравниваются очень просто, если строка отличается хотя бы на один символ, то возвращает false.

Но вот что если мы хотим не просто получать дискретное значение (true / false), а дифференцированное, например в процентах. Ведь согласитесь строки test и testing гораздо ближе к друг другу, чем test и abcd. Для данной проблемы существует множество решений, мы поговорим о самый популярных алгоритмах (также об их модификациях):

Расстояние Хэмминга

Расстояние Левенштейна

Сходство Джаро — Винклера

Коэффициент Сёренсена

Читать далее
Всего голосов 50: ↑47 и ↓3+44
Комментарии43

Пусть программирует Серёжа

Время на прочтение6 мин
Количество просмотров93K

У каждого клиента – свои предпочтения. Не только в выборе автомобиля, блюда на обед или корпоративной информационной системы. Клиенты любят выбирать программистов.

Ну, что программисты разные – ежу понятно. Считается, что клиенты предпочитают профессионалов. Мы тоже так думали, и искренне стремились сделать каждого своего программиста этим самым профессионалом.

Однако, несколько клиентов, ставя нам задачи, упорно твердили: пусть программирует Серёжа. Хотя Серёжа – лютейший говнокодер, объект всеобщей жалости и главный поставщик материалов для конференций на тему «Как не надо программировать».

Читать далее
Всего голосов 189: ↑161 и ↓28+133
Комментарии245

Советы, которые могут спасти Вас от ужасов PyYAML

Время на прочтение5 мин
Количество просмотров11K

YAML - это широко используемый язык сериализации данных. Все разработчики сталкиваются с необходимостью обработать YAML время от времени. Но обработка YAML, особенно с использованием PyYAML в Python, мучительна и полна ловушек. Здесь изложены некоторые советы, которые могут облегчить Вашу жизнь с PyYAML.

Читать далее
Всего голосов 10: ↑9 и ↓1+8
Комментарии2

Информация

В рейтинге
Не участвует
Дата рождения
Зарегистрирован
Активность