Pull to refresh
4
0

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

Send message

Операционная система в 1 000 строк кода (часть 3)

Level of difficultyMedium
Reading time28 min
Views8.9K

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

▍ Навигация по вышедшим частям


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

Операционная система в 1 000 строках кода (часть 2)

Level of difficultyMedium
Reading time18 min
Views11K

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

▍ Навигация по вышедшим частям


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

Armadillo: матрицы, кубы и разреженные данные на C++

Level of difficultyEasy
Reading time3 min
Views2.4K

Привет, Хабр!

Работа с матрицами в стандартном C++ — это боль, страдание и масса ненужного кода. Почему? Потому что стандартная библиотека STL вообще не предназначена для линейной алгебры. Например, если вы хотите умножить две матрицы, вам придётся писать кастомный алгоритм, отлаживать его, а затем ещё раз писать его, когда поймёте, что оптимизация не та.

Но есть библиотека Armadillo — и с ней всё иначе.

Читать далее

Пишем легаси с нуля на С++, не вызывая подозрение у санитаров. 03 — Начинаем разрабатывать фреймворк

Level of difficultyEasy
Reading time5 min
Views4.3K

Приветствую, Хабравчане!

В данной статье я начну реализацию кроссплатформенной библиотеки LDL. Опишу её исходный код, архитектуру. Пока библиотека умеет только рисовать несколько примитивов, но я только в начале реализации. Если интересно заходите.

Loading, please wait

Операционная система в 1 000 строках кода (часть 1)

Level of difficultyMedium
Reading time11 min
Views37K

Всем привет! В этой небольшой книге (серии статей, — прим. пер.) мы с нуля, шаг за шагом, напишем скромную ОС.

▍ Навигация по частям



Вы можете насторожиться, услышав, что разработка ОС или ядра, в частности, их базовых функций на удивление проста. Даже система Linux, которая воспринимается как масштабный опенсорсный проект, на стадии версии 0.01 включала всего 8 413 строк кода. Сегодня ядро Linux действительно огромно, но начиналось оно, как и типичный хобби-проект, с крохотной базы кода.

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

Но сразу предупрежу — процесс окажется не так прост, как выглядит на первый взгляд. Самой сложной частью создания собственной ОС является отладка. И мы не сможем использовать для этого printf, пока её не реализуем. Здесь вам потребуется освоить различные техники и приёмы отладки, которые в разработке ПО вы никогда не использовали. В частности, начиная «с нуля», вы будете встречать сложные этапы вроде процесса загрузки и страничной организации памяти. Но не пугайтесь, «отлаживать ОС» мы тоже научимся!

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

Теория категорий для самых маленьких. Введение

Level of difficultyMedium
Reading time5 min
Views6.4K

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

Надеюсь, они также помогут и всем заинтересованным в этой теме :-)

Читать далее

Запускаем советский процессор из журнала «Радио» с помощью Arduino

Level of difficultyHard
Reading time17 min
Views48K

Привет! Меня зовут Илья Мамай, я инженер-программист в группе разработки операционных систем YADRO. В этой статье я хочу поделиться опытом некромантии сборки советского компьютера по мотивам «Микро-80», схемы которого были опубликованы в журнале «Радио». Но собирать я буду не по этим схемам. Используя их как опору и источник вдохновения, я начну с запуска процессора КР580ВМ80А (советского клона Intel 8080), определения признаков жизни и продолжу постепенным наращиванием функционала и возможностей системы. Здесь мы займемся и радиотехникой, и DIY, и программированием как самого процессора, так и современных микроконтроллеров. Но перед этим поделюсь историей, как я, будучи студентом 4 курса, дошел до этого…

Читать далее

Пишем легаси с нуля на С++, не вызывая подозрение у санитаров. 01 — Маленькая программа

Level of difficultyEasy
Reading time4 min
Views14K

Приветствую, Хабравчане!

Решил сделать цикл статей по написанию на С++, различных небольших программ. Под новые и старые ОС. Мне кажется мы стали забывать как раньше программировали:) Для себя определил несколько важных критериев.

Loading, please wait

Самостоятельно учить языки и глубже понимать текст. Зачем читать в параллельном переводе?

Level of difficultyEasy
Reading time11 min
Views10K

Примеры в параллельном переводе — Что привносится в чтение?— Что и как читать? Отрывки из Шекспира — Попытки чтения на совсем незнакомых языках — Где читать? Печатные и онлайн ресурсы — Заключение

Примеры из Улисса

В первый раз в параллельном переводе я прочел роман Улисс (Ulysses).

Это толстый модернистский роман ирландца Джеймса Джойса, написанный по⁠-⁠английски в начале прошлого века.

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

Пример 1

Начало третьей главы Улисса, последней в предисловии, самой запутанной:

«Неотменимая модальность зримого. Хотя бы это, если не больше, говорят моей мысли мои глаза. Я здесь, чтобы прочесть отметы сути вещей: всех этих водорослей, мальков, подступающего прилива, того вон ржавого сапога. —»

Оригинал:

«Ineluctable modality of the visible: at least that if no more, thought through my eyes. Signatures of all things I am here to read, seaspawn and seawrack, the nearing tide, that rusty boot.»

Здесь, в отличии от перевода, хотя бы видна какая⁠-⁠то красивость, ради чего затевался этот сырбор: гармоничное «thought through», а еще «seaspawn and seawrack» / «водоросли, мальки» — даже если не знать конкретных значений этих слов, за счет повторения корня «sea» рождается образ моря, и с первого абзаца понятно, где стоит герой. Это такой способ избежать утилитарщины в описании сцены. Хочется сказать, что «видел перед собой море», но как⁠-⁠то иначе, сохранив протяженность фразы. В переводе же пройдет еще четыре абзаца до первого появления корня «мор».

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

«Мистер Леопольд Блум с удовольствием ел внутренние органы животных и птиц. Он любил жирный суп из гусиных потрохов, пупки с орехами, жареное фаршированное сердце, печенку, поджаренную ломтиками в сухарях, жареные наважьи молоки. Всего же больше любил он бараньи почки на углях, которые оставляли во рту тонкий привкус с отдаленным ароматом мочи.»

Пример 2

«What sound accompanied the union of their tangent, the disunion of their (respectively) centrifugal and centripetal hand? The sound of the peal of the hour of the night by the chime of the bells in the church of Saint George»

«Какие звуки сопровождали соединение их касательных и разъединение их (соответственно) центробежной и центростремительной рук? Звуки колоколов, отбивавших ночные часы на колокольне церкви Святого Георгия.»

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

Пример 3. В редакции газеты Моллой декламирует часть из лучшей на его памяти речи в суде.

Читать далее

256 байт веселья, или как развлечь себя Ассемблером когда скучно

Level of difficultyMedium
Reading time15 min
Views29K

Это еще одна статья про демосцену, сайзкодинг, ассемблер, MS‑DOS и ретрокодинг. То есть, о том, как ночами напролет добровольно и бесплатно писать бесполезный и очень трудоемкий код, и получать от этого массу удовольствия (и седую бороду). Даже если вы уже пробовали и вам не понравилось, вам все равно стоит почитать. Возможно, вы что‑то делали не так. Например, использовали не те буквы и цифры. А еще тут есть подборка «демок» размером в 256 байт!

Читать далее

Автоматизация внесения исправлений в исходные файлы С++ с помощью CLang LibTooling

Level of difficultyMedium
Reading time6 min
Views1.4K

image


Еще одна статья в продолжение темы анализа сходных текстов на С/С++ с помощью Clang. Предыдущие публикации:



Это не перевод довольно подробной публикации Emitting Diagnostics in Clang от Peter Goldsborough про различные нюансы диагностических инструментов у Clang, а преимущественно адаптация старого кода под текущую версию компилятора.


И основная идея, которая меня заинтересовала в исходной публикации, это использование инструмента FixIt из набора диагностики clang для внесения исправлений в исходные файлы.

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

Энтропия – это мера того, как мало мы на самом деле знаем

Level of difficultyMedium
Reading time20 min
Views23K

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

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

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

Читать далее

Роберт Бартини: советский авангардист, изменивший мир авиации

Level of difficultyEasy
Reading time10 min
Views8.5K

Сегодня расскажем о человеке, которого многие называли не иначе, как «Русский Леонардо» и «Второй Тесла». Его проекты будоражили умы современников, а Сергей Королев и Олег Антонов называли его своим учителем и гением авиации. Речь пойдет о Роберте Людвиговиче Бартини: его непростой биографии, достижениях и наследии. 

Читать далее

Создаем эмулятор Sega Mega Drive на C++

Level of difficultyMedium
Reading time26 min
Views31K

В этой статье описано создание эмулятора 16-битной приставки Sega Mega Drive на C++.

Будет много интересного: эмуляция процессора Motorola 68000, реверсинг игр, графика на OpenGL, шейдеры, и многое другое. И все это на современном C++. В статье много картинок, можно хоть на них посмотреть.

Blast Processing!

Анализ AST и рефакторинг кода в Clang

Level of difficultyMedium
Reading time6 min
Views2.7K


В продолжение темы кастомизации компилятора С++ публикую перевод еще одной интересной статьи от Eli Bendersky AST matchers and Clang refactoring tools.

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


Прекрасным результатом этого быстрого темпа разработки является то, что постоянно появляются новые API и инструменты.


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

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

Стековая виртуальная машина на языке Си

Level of difficultyMedium
Reading time23 min
Views11K

Разработка виртуальных машин может быть не только интересным занятием на вечер, но также и полезным приложением при обучении студентов языку ассемблера на предметах ОАиП (основы алгоритмизации и программирования) и ААС (архитектура аппаратных средств). Целью данной статьи станет создание простой стековой виртуальной машины с собственным языком ассемблера, способным выполнять операции условного и безусловного переходов, инкрементирования и декрементирования чисел, загрузки и выгрузки значений в стек. Машина получится минималистичной и будет обладать лишь 10-ью инструкциями, на основе которых можно будет далее вполне корректно создать собственный высокоуровневый язык программирования.

Читать далее

Книги, софт, сайты для изучения китайского языка

Level of difficultyEasy
Reading time20 min
Views15K

Год назад я публиковал статью о китайской письменности, которая вызвала живое обсуждение. Опрос в статье и некоторые комментарии показали, что есть интерес к изучению языка и вопрос по каким материалам это удобней делать.

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

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

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

Готовим кофе - список материалов обширный!

Реализация шифра «Кузнечик» на языке RUST

Level of difficultyEasy
Reading time17 min
Views7.7K

Привет Сегодня мы рассмотрим, заключительный в цикле материалов, Российский шифр «Кузнечик».

«Кузнечик» — это современный стандарт шифрования в России и за рубежом. Опубликован был в 19 июня 2015 года. В наступающем 2025 году будем отмечать его юбилей.

Читать далее

​Как создать собственное расширение компилятора C++

Level of difficultyMedium
Reading time10 min
Views8.5K


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

Создание пользовательского расширения компилятора C++ подразумевает понимание базовых механизмов работы компиляторов, изменение или расширение их функциональности и бесшовную интеграцию этих изменений в существующую инфраструктуру компилятора. Это руководство проведет вас через весь процесс, от понимания основ до внедрения и тестирования вашего пользовательского расширения. Целевая аудитория этого руководства — разработчики, которые уже знакомы с C++ и имеют базовое понимание концепций компилятора.

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

Information

Rating
7,218-th
Registered
Activity