Как стать автором
Обновить
0
0
Павел @Zloten

Пользователь

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

Почему я предпочитаю исключения, а не значения ошибок

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

Качественная обработка ошибок — это ключ к созданию надёжных программ; но программистов она часто пугает, ведь всегда найдётся ещё один пограничный случай.

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

Давайте рассмотрим пример, в котором применено защищённое от ошибок целочисленное деление:

int safeDiv(int a, int b) {
   if (b == 0)
      throw Div0(); // Исключения передаются особым образом
   return a / b; // Теперь-то всё абсолютно безопасно, ведь так?
}

Новые языки программирования склонны применять сообщения об ошибках в функциональном стиле и кодировать ошибки в возвращаемый тип. Например, Go кодирует ошибку в возвращаемый тип при помощи кортежа (res, err), а Rust возвращает Result<T, E> — тип-сумму результата и ошибки.
Читать дальше →
Всего голосов 65: ↑57 и ↓8+67
Комментарии214

В закладки: 23+ полезные ссылки для 1С-разработчика

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

Хабр, привет! Меня зовут Андрей Толмачёв, я 1С-разработчик, консультант, архитектор и руководитель проектов 1С, а ещё автор курсов по разработке 1С в Яндекс Практикуме.

Без лишних слов — делюсь полезными ссылками на видео, чаты, каналы и форумы, которые помогут начинающим и опытным 1С-разработчикам найти ответы на вопросы и почувствовать себя частью комьюнити.

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

Как мы написали конкурентные структуры данных на C++ и научились их верифицировать

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

Привет! В команде ВКонтакте мы переписываем рантайм движков баз данных — они становятся быстрее, надёжнее, а ещё с новым рантаймом проще писать код. Однако есть нюанс: в новом рантайме много конкурентных структур данных, в том числе нужных для работы с корутинами из С++20. Появляется интересная задача — проверять корректность этих конкурентных структур данных до выхода кода в продакшен.

Для решения этой задачи команда ВКонтакте вместе со студентами из университетов ИТМО и СПбГУ работала над научно-исследовательским проектом — верификацией конкурентных структур данных на языке C++. В этой статье подробно расскажем, как мы в рамках проекта проверяли корректность наших конкурентных структур данных и заодно исправили найденную в нашем новом рантайме ошибку.

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

Chrome 127 — опять «пиратим» для Windows 7

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

Вышла 127 версия браузера Google Chrome.

Вы уже предвкушавшие, что статья будет посвящена обзору нововведений в популярном браузере? Вообще-то да, только в очередной раз делать это будем через отладчик x64dbg (или любой другой по вкусу, кроме gdb).

Читать далее
Всего голосов 20: ↑18 и ↓2+20
Комментарии13

Пишем за неделю 3D-редактор на C

Уровень сложностиСредний
Время на прочтение6 мин
Количество просмотров9.6K
Прошлой осенью я участвовал в недельном мероприятии по программированию Wheel Reinvention Jam. Смысл этого джема заключается в том, чтобы взглянуть по-новому на уже существующие программные системы. Я написал для него 3D-редактор под названием ShapeUp. Пост будет понятнее, если вы сначала посмотрите видео-демо ShapeUp. Можно попробовать ShapeUp в браузере.

Вот, как он выглядит:

Майк Вазовски!

3D-редактор


Я ненавижу тормознутость компилятора Typescript (поверьте, это относится к теме статьи). Джем показался мне подходящей возможностью реализовать более быстрое подмножество Typescript, обгоняющее по скорости tsc. Мне показалось, что проект можно реализовать, если начать с парсера Typescript esbuild or Bun. Но потом ко мне пришло понимание, что успешный результат будет выглядеть как команда терминала, выполняющая работу быстрее другой. Не особо впечатляюще в качестве демо. Мне хотелось создать крутое демо, поэтому я выбрал 3D.
Читать дальше →
Всего голосов 51: ↑46 и ↓5+61
Комментарии7

Имплементация чисел с фиксированной точкой (часть 2)

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

Итак, в прошлый раз я представил базовую идею как можно реализовать Fixed-point arithmetic, а так же набросок кода на C++, в котором в комментариях нашли довольно много проблем (а я сам нашёл ещё больше). В этот раз хочется представить улучшенную реализацию, разбор тонких моментов в коде и провести более детальный анализ получаемых результатов.

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

Как устроены условные точки останова

Время на прочтение9 мин
Количество просмотров3K
Условные точки останова (conditional breakpoints) – исключительно полезный инструмент. Но всем известно, насколько они замедляют работу кода, так, что из-за этого некоторые даже бросают ими пользоваться. В Visual Studio в своё время удалось значительно улучшить ситуацию с ними, что не помешало пользователю @ryanjfleury высмеивать их крайнюю медлительность. Но даже у raddbg уходит около 2 секунд на выполнение 10000 итераций простого цикла, если внутри него расставлены точки останова. Для сравнения: без точек останова тот же самый цикл выполняется менее чем за 1 мс. Почему же так чертовски медленно?

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

Обратите внимание: в этой статье речь идёт об отладчиках, работающих с нативным кодом – например, GDB, LLDB, Visual Studio C++. Отладчики для управляемых и скриптовых языков работают примерно так же, но могут отличаться детали реализации.
Читать дальше →
Всего голосов 5: ↑5 и ↓0+10
Комментарии10

Macroni: рецепт поступательного улучшения языка программирования

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


Хотя, Clang и используется в качестве инструмента для рефакторинга и статического анализа, у него есть серьёзный недостаток: в абстрактном синтаксическом дереве не предоставляется информации о происхождении конкретных расширений-макросов на CPP, за счёт которых может надстраиваться конкретный узел AST. Кроме того, Clang не понижает расширения-макросы на уровень LLVM, то есть, до кода в формате промежуточного представления (IR). Из-за этого оказывается запредельно сложно конструировать такие схемы статического анализа, при которых учитывались бы макросы. Сейчас эта тема активно исследуется. Но ситуация налаживается, поскольку прошлым летом был создан инструмент Macroni, упрощающий статический анализ именно такого рода.

В Macroni разработчики могут определять синтаксис новых языковых конструкций на C с применением макросов, а также предоставлять семантику для этих конструкций при помощи MLIR (многоуровневого промежуточного представления). В Macroni используется инструмент VAST, понижающий код C до MLIR. В свою очередь, инструмент PASTA позволяет выяснить, откуда те или иные макросы попали в AST, и на основании этой информации макросы также удаётся понизить до MLIR. После этого разработчики могут определять собственные MLIR-конвертеры для преобразования вывода Macroni в предметно-ориентированные диалекты MLIR, чтобы анализировать предмет с учётом многочисленных нюансов. В этой статье будет на нескольких примерах показано, как Macroni позволяет дополнять C более безопасными языковыми конструкциями и организовать анализ безопасности C.
Читать дальше →
Всего голосов 15: ↑15 и ↓0+26
Комментарии1

LR-парсеры

Уровень сложностиПростой
Время на прочтение7 мин
Количество просмотров1.2K

LR-парсеры – это инструмент для анализа и синтаксического разбора языков программирования. LR в данном контексте означает Left-to-right, слева направо и Rightmost derivation, правое разложения. LR парсеры используют метод снизу вверх, который отличается от более известных LL-парсеров, работающих сверху вниз.

Одна из основных фич LR-парсеров - способность обрабатывать большую часть контекстно-свободных грамматик.

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

Комбинаторы синтаксического анализа на Kotlin

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

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

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

О чём не молчит Windows. Погружение в Windows Registry Forensic

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

Всем привет, Хабровчане!

Думаю ни у кого не возникает сомнений в важности грамотной работы специалистов ИБ и ИТ служб, учитывая события недавних дней с ТК СДЭК, а также другие крупные взломы/утечки, которых было немало за последние пару, тройку лет. Обеспечение грамотной работы включает в себя обычно комплекс мероприятий, да и в целом в работе служб ИБ есть множество направлений, где одним из интереснейших направлений, без которого, на мой взгляд, трудно обойтись, является компьютерная криминалистика (Forensic или форенсика).

Читать далее
Всего голосов 12: ↑11 и ↓1+11
Комментарии7

Бюджетный и шустрый ультрабук для работы и сёрфинга: Обзор Ninkear N14 Pro

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


Пожалуй, рубрика, связанная с обзором и ремонтом различных ноутбуков уже успела стать одной из самых любимых среди моих читателей. Мы с вами успели рассмотреть множество весьма необычных и диковинных устройств прошлых лет: ноутбуки на базе процессоров Transmeta Crusoe, миниатюрные японские девайсы с графикой PowerVR и даже бюджетные ARM-смартбуки на базе различных Linux-дистрибутивов! Поскольку желание копаться в девайсах, писать код и созидать что-то своё у меня возникает даже в дороге, моё творческое начало постоянно требует дописывать и переписывать черновики будущих статей в редакторе Хабра. Для этих целей, мне нужна была надёжная, портативная рабочая машинка, на которой я мог бы с комфортом заниматься подготовкой будущих статей. И этой машинкой оказался получивший апгрейд Ninkear N14 Pro! Что за девайс мы получаем за 40.000 рублей? Читаем в статье!
Читать дальше →
Всего голосов 11: ↑10 и ↓1+10
Комментарии32

Трудовой договор, ГПХ или самозанятый: что выбирают айтишники

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

Раньше работать удалённо, а значит экономить время и деньги на транспорте, было плюсом гибкого трудоустройства. Сейчас многие ИТ-компании совсем не против, если местные сотрудники работают удалённо, и даже вводят для них гибридный формат работы. Поэтому этот плюс уже не такой привлекательный. 

Работодатели часто предлагают не оформиться в штат, а заключить договор как с ИП или самозанятым, обещая при этом платить больше. Айтишники отказываются от трудового договора и оформляют самозанятость или заключают договоры ГПХ из-за возможности самим выбирать себе заказчиков и проекты, определять график работы, а также устанавливать собственную цену за услуги и быстро менять её при необходимости. Круто жить в отдалённом регионе и брать заказы у компаний, находящихся в совершенно разных точках страны, а может быть — даже мира.

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

Читать дальше →
Всего голосов 15: ↑11 и ↓4+10
Комментарии13

Как перестать «ходить на дырку» на даче и не надышаться миазмами

Уровень сложностиПростой
Время на прочтение5 мин
Количество просмотров74K

Эта статья адресована тем, кто сам занимается строительством канализации на даче.

Миллионы дач в России ранее были оборудованы туалетами типа "сортир с выгребной ямой". С этого многие начинали и многие этим и закончили. Но по мере продвижения ИИ в массы и вообще развития технологий, многие задумались о том, что душ доме на даче это хорошо. А также нормальный тубзик. В котором можно нормально гнездится и почитать газету в интернете, Хабр или что-то еще полезное, а не напряженно ждать вцепится ли в тебя рой мух или нет. Опять же эстетика сортира уже устарела.

Читать далее
Всего голосов 124: ↑91 и ↓33+81
Комментарии225

Книга «Основы компиляции: инкрементный подход»

Время на прочтение14 мин
Количество просмотров5.7K
image Привет, Хаброжители!

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

Вместо этого в «Основах компиляции» выбран инкрементный подход: компилятор совершенствуется последовательно, и читатель может написать весь код самостоятельно. Книга помогает создать собственный компилятор для небольшого, но достаточно мощного языка программирования, постепенно, шаг за шагом вводя все более сложные языковые средства.

Джереми Сик объясняет важнейшие концепции, алгоритмы и структуры данных, лежащие в основе современных компиляторов, и закладывает основу для изучения более сложных тем. Это краткое, но доступное руководство уже давно используют студенты и профессионалы.
Читать дальше →
Всего голосов 19: ↑19 и ↓0+19
Комментарии6

Компилятор за выходные: синтаксические деревья

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

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

Итак, чтобы самому разобраться в теме, я собираюсь написать транслятор с эзотерического языка программирования wend (сокращение от week-end), который я только что сам придумал, в обычный ассемблер. Задача уложиться в несколько сотен строк питоновского кода. Основной репозиторий живёт на гитхабе (не забудьте заглянуть в мой профиль и посмотреть другие tiny* репозитории).

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

Разреженные структуры данных

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

Когда-то я писал пост про различные интересные структуры данных. Среди них был т.н. sparse set. Там мы описали его в общих чертах, опустив некоторые детали (которыми позже статья была дополнена). Но кроме sparse set существуют и другие разреженные структуры данных! На них сегодня и посмотрим : )

Разредиться!
Всего голосов 27: ↑27 и ↓0+27
Комментарии11

35 лет SimCity

Уровень сложностиПростой
Время на прочтение10 мин
Количество просмотров7K


В этот день, 35 лет назад, появилась SimCity (1989) – градостроительная стратегия, ставшая хитярой и положившая начало целой серии. Более того, благодаря этой игрушке и её создателю Уиллу Райту, появилась на свет Божий другая серия, известная в народе как The Sims (или «Симсы»), в которой можно было создавать с помощью виртуальных человечков всё то, что ты, читатель, обычно делаешь в реальной жизни. А именно – смотреть зомбоящик, вкалывать на работе, есть, спать, справлять нужду, читать газеты, убираться в хате, строить любовь с другими симами, сгореть в квартире или утопиться в бассейне, да-а… впрочем, об этом как-нибудь потом. Сейчас же – окунемся в истоки и узнаем, как Райт сделал то, что сделал и что из этого вышло. Наливай чаёк и усаживайся поудобнее, мы погнали.
Читать дальше →
Всего голосов 33: ↑31 и ↓2+38
Комментарии13

Как устроена страничная организация памяти x86_64

Уровень сложностиПростой
Время на прочтение15 мин
Количество просмотров11K

В этом посте я буду говорить о страничной организации только в контексте PML4 (Page Map Level 4), потому что на данный момент это доминирующая схема страничной организации x86_64 и, вероятно, останется таковой какое-то время.

Окружение

Это необязательно, но я рекомендую подготовить систему для отладки ядра Linux с QEMU + gdb. Если вы никогда этого не делали, то попробуйте такой репозиторий: easylkb (сам я им никогда не пользовался, но слышал о нём много хорошего), а если не хотите настраивать окружение самостоятельно, то подойдёт режим практики в любом из заданий по Kernel Security на pwn.college (вам нужно знать команды vm connect и vm debug).

Я рекомендую вам так поступить, потому что считаю, что самостоятельное выполнение команд вместе со мной и возможность просмотра страниц (page walk) на основании увиденного в gdb — хорошая проверка понимания.

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

Разбираем самый маленький PNG в мире

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

Самый миниатюрный PNG в мире весит 67 байт и представляет собой один чёрный пиксель. Выше вы видите его в 200-кратном увеличении.

Красота, не так ли?

Состоит этот файл из четырёх частей:

  1. Сигнатура PNG, одинаковая во всех файлах этого формата: 8 байт.
  2. Метаданные изображения, включая его размеры: 25 байт.
  3. Данные пикселя: 22 байта.
  4. Маркер «конец изображения»: 12 байт.

Далее я опишу этот файл подробнее и постараюсь объяснить принцип работы формата PNG.

В качестве небольшой затравки скажу, что в конце предстоит неожиданный поворот. Хотя, надеюсь, вам и без того интересно побольше узнать о PNG.
Читать дальше →
Всего голосов 104: ↑96 и ↓8+124
Комментарии112
1
23 ...

Информация

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

Специализация

Software Developer, 1C Developer
Middle