Простой для изучения компилятор C11
Наверняка многие мечтали разобраться с тем, как устроены компиляторы их любимых языков программирования. Теория трансляции — непростая тема, но сделать простой компилятор под силу каждому.
Рю Уэяма (Rui Ueyama) создал компилятор языка C, поддерживающий большинство возможностей стандарта C11, специально для обучения других непростому делу разработки компиляторов.
Репозиторий chibicc устроен необычным образом: каждый коммит в истории изменений целостно расширяет возможности более простого компилятора, полученного на предыдущем шаге.
Первый коммит соответствует примитивному компилятору, который считывает число и генерирует код, подставляющий это число в качестве кода возврата. Каждый новый шаг постепенно приближает компилятор к поддержке полноценного языка C современного стандарта. Очень увлекательное путешествие.
У Рю есть и книга, описывающая chibicc, но она написана на японском — вероятно, это не самый удобный вариант для большинства наших читателей.
До chibicc Рю уже разрабатывал компиляторы C-подобных языков, в том числе создал 9cc, простой по своему устройству компилятор с промежуточным представлением и аллокатором регистров, совсем как у «больших» компиляторов.
#digest
Наверняка многие мечтали разобраться с тем, как устроены компиляторы их любимых языков программирования. Теория трансляции — непростая тема, но сделать простой компилятор под силу каждому.
Рю Уэяма (Rui Ueyama) создал компилятор языка C, поддерживающий большинство возможностей стандарта C11, специально для обучения других непростому делу разработки компиляторов.
Репозиторий chibicc устроен необычным образом: каждый коммит в истории изменений целостно расширяет возможности более простого компилятора, полученного на предыдущем шаге.
Первый коммит соответствует примитивному компилятору, который считывает число и генерирует код, подставляющий это число в качестве кода возврата. Каждый новый шаг постепенно приближает компилятор к поддержке полноценного языка C современного стандарта. Очень увлекательное путешествие.
У Рю есть и книга, описывающая chibicc, но она написана на японском — вероятно, это не самый удобный вариант для большинства наших читателей.
До chibicc Рю уже разрабатывал компиляторы C-подобных языков, в том числе создал 9cc, простой по своему устройству компилятор с промежуточным представлением и аллокатором регистров, совсем как у «больших» компиляторов.
#digest
GitHub
GitHub - rui314/chibicc: A small C compiler
A small C compiler. Contribute to rui314/chibicc development by creating an account on GitHub.
👍15
Облака и операционные системы
Удивительно, как развитие одного сегмента индустрии расходится кругами, затрагивая все больше других сегментов. Это была подводка к тому, чтобы рассказать, как облака (cloud computing) влияют на развитие операционных систем.
Можно сформулировать три вектора.
👉 Подробнее
#digest
Удивительно, как развитие одного сегмента индустрии расходится кругами, затрагивая все больше других сегментов. Это была подводка к тому, чтобы рассказать, как облака (cloud computing) влияют на развитие операционных систем.
Можно сформулировать три вектора.
👉 Подробнее
#digest
👍4
Книги про криптографию
В свете популярности нашего недавнего поста про цифровую подпись – два полезных (и как всегда free download) труда о важной и сверхактуальной в наше время науке — криптографии.
Майк Розулек (Mike Rosulek) — «The Joy of Cryptography»
Хорошая вводная книга про теорию криптографии. Автор уделяет особое внимание доказательствам и предлагает множество упражнений. Для поверхностного чтения в транспорте не подойдет. Но написана книга достаточно легко.
Лоренс ван Хоутвен (Laurens Van Houtven) — «Crypto 101»
Короткая книга с введением в основные идеи и алгоритмы современной криптографии. Читается гораздо легче вышеупомянутого Майка Розулека и подходит для поверхностного ознакомления с предметом. Некоторые главы все еще не дописаны, но базовые основы уже хорошо изложены. Хоть книга и распространяется в PDF-формате, она неплохо подходит для e-ink читалок: в ландшафтном режиме текст оказывается достаточно крупным.
#literature
В свете популярности нашего недавнего поста про цифровую подпись – два полезных (и как всегда free download) труда о важной и сверхактуальной в наше время науке — криптографии.
Майк Розулек (Mike Rosulek) — «The Joy of Cryptography»
Хорошая вводная книга про теорию криптографии. Автор уделяет особое внимание доказательствам и предлагает множество упражнений. Для поверхностного чтения в транспорте не подойдет. Но написана книга достаточно легко.
Лоренс ван Хоутвен (Laurens Van Houtven) — «Crypto 101»
Короткая книга с введением в основные идеи и алгоритмы современной криптографии. Читается гораздо легче вышеупомянутого Майка Розулека и подходит для поверхностного ознакомления с предметом. Некоторые главы все еще не дописаны, но базовые основы уже хорошо изложены. Хоть книга и распространяется в PDF-формате, она неплохо подходит для e-ink читалок: в ландшафтном режиме текст оказывается достаточно крупным.
#literature
👍5
Алгоритмы, дети и веселая практика
«Это одна из главных причин, по которой я занялся программированием :)», — пишут в комментариях к видео Джоша Дарнита (Josh Darnit) и его детей под названием «Exact Instructions Challenge».
Забавный ролик, демонстрирующий, как важно давать точные инструкции даже для самого простого, казалось бы, задания.
#fun
«Это одна из главных причин, по которой я занялся программированием :)», — пишут в комментариях к видео Джоша Дарнита (Josh Darnit) и его детей под названием «Exact Instructions Challenge».
Забавный ролик, демонстрирующий, как важно давать точные инструкции даже для самого простого, казалось бы, задания.
#fun
YouTube
Exact Instructions Challenge - THIS is why my kids hate me. | Josh Darnit
Exact Instructions Challenge PB&J edition
Another Challenge with Johnna and Evan: https://www.youtube.com/watch?v=sLaVM6af-RE&t=121s
We asked the kids to write instructions for a simple task but left out that we were going to be following their instructions…
Another Challenge with Johnna and Evan: https://www.youtube.com/watch?v=sLaVM6af-RE&t=121s
We asked the kids to write instructions for a simple task but left out that we were going to be following their instructions…
👍4
10 лучших книг про разработку ОС
Часто приходится слышать вопрос: «Что почитать, чтобы начать писать свою ОС?»
Выяснилось, что у каждого из нас, авторов канала, есть свои любимые книги на эту тему!
👉 Те самые 10 книг
#literature
Часто приходится слышать вопрос: «Что почитать, чтобы начать писать свою ОС?»
Выяснилось, что у каждого из нас, авторов канала, есть свои любимые книги на эту тему!
👉 Те самые 10 книг
#literature
👍5
Анатомия терминала
Любая достаточно продвинутая технология неотличима от магии.
Мы постоянно пользуемся терминалом, редко задаваясь вопросом, как он работает. Как командная оболочка взаимодействует с эмулятором терминала в графической среде? Как библиотеки, подобные ncurses, могут отображать псевдографические окна и элементы управления?
Арам Древекенин (Aram Drevekenin) создал замечательную интерактивную статью «Anatomy of a Terminal Emulator», в которой он объясняет, как различные компоненты системы взаимодействуют друг с другом, создавая такой знакомый консольный интерфейс.
#digest
Любая достаточно продвинутая технология неотличима от магии.
Мы постоянно пользуемся терминалом, редко задаваясь вопросом, как он работает. Как командная оболочка взаимодействует с эмулятором терминала в графической среде? Как библиотеки, подобные ncurses, могут отображать псевдографические окна и элементы управления?
Арам Древекенин (Aram Drevekenin) создал замечательную интерактивную статью «Anatomy of a Terminal Emulator», в которой он объясняет, как различные компоненты системы взаимодействуют друг с другом, создавая такой знакомый консольный интерфейс.
#digest
👍11
Как писать на английском языке хорошо?
Небольшая книга Уильяма Странка-младшего (William Strunk, Jr.) «The Elements of Style» — нестареющая классика. Она именно о стиле, о форме, а не о содержании. Информация из некоторых глав может быть полезна не только в английских текстах, но и при подготовке материалов на любом другом языке.
Прошло больше 70 лет со дня смерти автора, так что есть подозрение, что книга находится в публичном достоянии на территории большинства стран.
#literature
Небольшая книга Уильяма Странка-младшего (William Strunk, Jr.) «The Elements of Style» — нестареющая классика. Она именно о стиле, о форме, а не о содержании. Информация из некоторых глав может быть полезна не только в английских текстах, но и при подготовке материалов на любом другом языке.
Прошло больше 70 лет со дня смерти автора, так что есть подозрение, что книга находится в публичном достоянии на территории большинства стран.
#literature
👍11
А в эту пятницу – еще одна классная игра для NES от Morph cat Games: «Spacegulls»
Трейлер доступен на YouTube
#fun
Трейлер доступен на YouTube
#fun
itch.io
Spacegulls (NES) by Morphcat Games
A cute platformer featuring birds in space developed for the NES. Spacegulls ROM included
👍4
Простой растеризатор TrueType шрифтов
Многие знают библиотеку FreeType 2: масса проектов использует ее для растеризации векторных шрифтов и вычисления метрик глифов. Эта библиотека имеет большую историю и работает с невероятным количеством разновидностей шрифтов.
Но что делать, если вы хотели бы просто разобраться в теме растеризации глифов, почитав код библиотеки? FreeType для таких целей великоват. Но есть хорошая альтернатива — stb_truetype.
stb_truetype — минималистичная библиотека на языке Cи, поставляемая в виде одного заголовочного файла. В отличие от FreeType, она не старается поддерживать большинство форматов векторных шрифтов, реализует сравнительно простой растеризатор, и вынуждена принимать целостность файлов шрифтов на веру, поскольку не проверяет некоторые инварианты. Тем не менее, реализация библиотеки достаточно полна для практического применения.
stb_truetype активно применяют в игровой индустрии, она же используется в коде текстового редактора Lite, как и во многих других open source проектах.
#digest
Многие знают библиотеку FreeType 2: масса проектов использует ее для растеризации векторных шрифтов и вычисления метрик глифов. Эта библиотека имеет большую историю и работает с невероятным количеством разновидностей шрифтов.
Но что делать, если вы хотели бы просто разобраться в теме растеризации глифов, почитав код библиотеки? FreeType для таких целей великоват. Но есть хорошая альтернатива — stb_truetype.
stb_truetype — минималистичная библиотека на языке Cи, поставляемая в виде одного заголовочного файла. В отличие от FreeType, она не старается поддерживать большинство форматов векторных шрифтов, реализует сравнительно простой растеризатор, и вынуждена принимать целостность файлов шрифтов на веру, поскольку не проверяет некоторые инварианты. Тем не менее, реализация библиотеки достаточно полна для практического применения.
stb_truetype активно применяют в игровой индустрии, она же используется в коде текстового редактора Lite, как и во многих других open source проектах.
#digest
👍7
Сегодня советуем книгу «Building Secure and Reliable Systems» – творение целой группы авторов о том, как Google подходит к разработке безопасных и надежных продуктов.
В книге есть главы о построении процесса разработки, об архитектуре безопасных систем, особенностях разработки безопасного кода и сопровождении.
#literature
В книге есть главы о построении процесса разработки, об архитектуре безопасных систем, особенностях разработки безопасного кода и сопровождении.
#literature
👍5
Cхемы Эшера
Как известно, логика может привести вас от пункта А к пункту Б, а вот воображение — куда угодно. И, пожалуй, где-то в золотой середине находятся схемы Эшера.
Это визуальное представление примитивных логических элементов, которое позволяет выполнять вычисления, следуя за схемой глазами. В подходе занятно используется внутренняя природа человеческого визуального восприятия.
#digest
Как известно, логика может привести вас от пункта А к пункту Б, а вот воображение — куда угодно. И, пожалуй, где-то в золотой середине находятся схемы Эшера.
Это визуальное представление примитивных логических элементов, которое позволяет выполнять вычисления, следуя за схемой глазами. В подходе занятно используется внутренняя природа человеческого визуального восприятия.
#digest
👍6
Еще немного о наших любимых играх на NES. Точнее, о двоичном трансляторе, который умеет транслировать ROM-файлы, содержащие игру для приставки, в исполняемые файлы x86_64.
#literature
#literature
👍5
Ментальный инструментарий
Наверняка многие из читателей сталкивались с такими штуками, как «шесть шляп мышления» или «матрица важных и срочных дел Эйзенхауэра». Подобных инструментов создано невероятно много, и они действительно помогают справляться с непростыми задачами. Множество ментальных инструментов для эффективного принятия решений, системного мышления и решения трудных задач были сведены Адамом Амраном (Adam Amran) в перечень и доступны на его сайте untools.co.
#digest
Наверняка многие из читателей сталкивались с такими штуками, как «шесть шляп мышления» или «матрица важных и срочных дел Эйзенхауэра». Подобных инструментов создано невероятно много, и они действительно помогают справляться с непростыми задачами. Множество ментальных инструментов для эффективного принятия решений, системного мышления и решения трудных задач были сведены Адамом Амраном (Adam Amran) в перечень и доступны на его сайте untools.co.
#digest
👍8
«Компиляция Фортрана-66, предписанная богом»
Наткнулись на настоящую капсулу времени – чудный текст из 1990-х «про настоящих программистов».
Чего стоит один только этот пассаж:
«Из собственного опыта, я думаю, можно смело сказать, что будущее прекрасно для настоящих программистов. Ни OS/370, ни Фортран не высказывают ни каких признаков отмирания, несмотря на усилия программистов на Паскале. Даже такие изощренные уловки, как добавление конструкций структурного программирования в Фортран, провалились. Да, конечно, некоторые изготовители ЭВМ выпустили компиляторы Фортрана-77, но каждый из них оставил возможность перейти в режим компилятора Фортрана-66 с помощью удаления одной перфокарты - чтобы компилировать циклы DO как предписано богом».
Полная версия – по ссылке.
Если вдруг вы тоже натыкались на статьи N-летней давности а-ля «Python обречен» или «С++ мертв» – дайте огня в комментариях :)
#fun
Наткнулись на настоящую капсулу времени – чудный текст из 1990-х «про настоящих программистов».
Чего стоит один только этот пассаж:
«Из собственного опыта, я думаю, можно смело сказать, что будущее прекрасно для настоящих программистов. Ни OS/370, ни Фортран не высказывают ни каких признаков отмирания, несмотря на усилия программистов на Паскале. Даже такие изощренные уловки, как добавление конструкций структурного программирования в Фортран, провалились. Да, конечно, некоторые изготовители ЭВМ выпустили компиляторы Фортрана-77, но каждый из них оставил возможность перейти в режим компилятора Фортрана-66 с помощью удаления одной перфокарты - чтобы компилировать циклы DO как предписано богом».
Полная версия – по ссылке.
Если вдруг вы тоже натыкались на статьи N-летней давности а-ля «Python обречен» или «С++ мертв» – дайте огня в комментариях :)
#fun
👍13
Генерируем видео-демонстрации на языке C
В своем блоге Крис Веллонс опубликовал заметку, где рассказал о методе, который он использует для генерации видео-демонстраций.
Подход покупает своим минимализмом: в программе на языке C Крис создает кадры будущего видео в форме Netpbm изображений, а звук генерирует в формате WAV. Оба этих формата достаточно просты для ручной генерации и не требуют внешних зависимостей. Далее отдельные кадры и звук склеиваются при помощи ffmpeg.
Обратите внимание, насколько качественные видеоролики можно получить с таким простым подходом:
Демонстрация алгоритмов сортировки
Демонстрация рейтрейсера
Демонстрация физического движка и рейтрейсера
Такой метод не будет работать без установленной в системе ffmpeg, но эта утилита, как и одноименная библиотека, доступна во всех современных Unix-системах. Можно ли обойтись без нее? Возможно, ведь существуют достаточно простые видеоформаты, например MPEG-1, спецификации которого открыты. Но, конечно, для достижения аналогичного результата придется потрудиться.
#digest
В своем блоге Крис Веллонс опубликовал заметку, где рассказал о методе, который он использует для генерации видео-демонстраций.
Подход покупает своим минимализмом: в программе на языке C Крис создает кадры будущего видео в форме Netpbm изображений, а звук генерирует в формате WAV. Оба этих формата достаточно просты для ручной генерации и не требуют внешних зависимостей. Далее отдельные кадры и звук склеиваются при помощи ffmpeg.
Обратите внимание, насколько качественные видеоролики можно получить с таким простым подходом:
Демонстрация алгоритмов сортировки
Демонстрация рейтрейсера
Демонстрация физического движка и рейтрейсера
Такой метод не будет работать без установленной в системе ffmpeg, но эта утилита, как и одноименная библиотека, доступна во всех современных Unix-системах. Можно ли обойтись без нее? Возможно, ведь существуют достаточно простые видеоформаты, например MPEG-1, спецификации которого открыты. Но, конечно, для достижения аналогичного результата придется потрудиться.
#digest
👍10
Вы определенно знаете WSL, подсистему Windows Subsystem for Linux. А вот этот проект творит нечто совершенно невероятное – он реализует своего рода подсистему DOS для Linux. Вы можете запустить сеанс Linux из командной оболочки DOS, а затем вернуться к DOS. Детали реализации впечатляют :)
#digest
#digest
👍2
Метапрограммирование в стандартном C
Препроцессор языка C, конечно, не полон по Тьюрингу, но позволяет выполнять достаточно сложные вычисления, пользуясь моделями, основанными на CPS (continuation passing style). Количество подстановок макросов, доступных для программиста, лимитировано, но достаточно для большинства практических нужд, например для реализации кодогенераторов.
Известны случаи, когда на основе препроцессора создавали интерпретаторы LISP-подобных языков. Но в большинстве случаев это были не законченные инструменты для задач метапрограммирования, а скорее упражнения в написании незаурядного кода, достигающего лимитов языка программирования.
Бывают и практичные исключения, например Metalang99, который позволяет выполнять несложные вычисления и операции со списками на стадии препроцессирования. У Metalang99 есть вполне прагматичное применение: на его основе реализована библиотека Datatype99, привносящая в C99 полноценные алгебраические типы данных с привычным деконструирующим оператором match, совсем как в OCaml и Haskell.
#digest
Препроцессор языка C, конечно, не полон по Тьюрингу, но позволяет выполнять достаточно сложные вычисления, пользуясь моделями, основанными на CPS (continuation passing style). Количество подстановок макросов, доступных для программиста, лимитировано, но достаточно для большинства практических нужд, например для реализации кодогенераторов.
Известны случаи, когда на основе препроцессора создавали интерпретаторы LISP-подобных языков. Но в большинстве случаев это были не законченные инструменты для задач метапрограммирования, а скорее упражнения в написании незаурядного кода, достигающего лимитов языка программирования.
Бывают и практичные исключения, например Metalang99, который позволяет выполнять несложные вычисления и операции со списками на стадии препроцессирования. У Metalang99 есть вполне прагматичное применение: на его основе реализована библиотека Datatype99, привносящая в C99 полноценные алгебраические типы данных с привычным деконструирующим оператором match, совсем как в OCaml и Haskell.
#digest
👍3
Краткий гайд по анонимному ведению блога, который может быть полезен даже профессиональным журналистам, не говоря уже о простых технических энтузиастах. Да, и мы кое-какими приемами оттуда тоже пользуемся :)
Существуют и более продвинутые гайды по анонимности, например этот. А совсем увлечённым рекомендуем поискать The Hitchhiker’s Guide to Online Anonymity – невероятно подробный, постоянно обновляемый учебник по практически полной анонимности в сети.
#literature
Существуют и более продвинутые гайды по анонимности, например этот. А совсем увлечённым рекомендуем поискать The Hitchhiker’s Guide to Online Anonymity – невероятно подробный, постоянно обновляемый учебник по практически полной анонимности в сети.
#literature
👍5👎1
Поддержка микроядер в железе
Так уж сложилось, что большинство популярных операционных систем работают поверх монолитных ядер. Все современное оборудование создавалось и оптимизировалось под монолитную архитектуру ОС и не учитывает нужды альтернативных архитектур вроде микро и экзоядер.
Таким образом, разработчикам микроядерных систем приходится «есть, что дают»: решение максимально оптимизируется под железо, которое ориентируется на запуск ОС с монолитным ядром. Поэтому, микроядерные ОС часто проигрывают в производительности своим монолитным собратьям.
Но прогресс не стоит на месте, микроядерные ОС набирают популярность, а значит, пришло время для того, чтобы оборудование начало предоставлять возможности, необходимые таким системам.
На конференции FOSDEM 2019 сотрудник Huawei Мартин Деки (Martin Děcký) поделился со зрителями видением, какие технологии, реализованные в железе, улучшат производительность и безопасность решений на основе микроядер в будущем.
#digest
Так уж сложилось, что большинство популярных операционных систем работают поверх монолитных ядер. Все современное оборудование создавалось и оптимизировалось под монолитную архитектуру ОС и не учитывает нужды альтернативных архитектур вроде микро и экзоядер.
Таким образом, разработчикам микроядерных систем приходится «есть, что дают»: решение максимально оптимизируется под железо, которое ориентируется на запуск ОС с монолитным ядром. Поэтому, микроядерные ОС часто проигрывают в производительности своим монолитным собратьям.
Но прогресс не стоит на месте, микроядерные ОС набирают популярность, а значит, пришло время для того, чтобы оборудование начало предоставлять возможности, необходимые таким системам.
На конференции FOSDEM 2019 сотрудник Huawei Мартин Деки (Martin Děcký) поделился со зрителями видением, какие технологии, реализованные в железе, улучшат производительность и безопасность решений на основе микроядер в будущем.
#digest
YouTube
Hardware/Software Co-Design for Efficient Microkernel Execution
by Martin Děcký
At: FOSDEM 2019
https://video.fosdem.org/2019/AW1.121/hardware_software_co_design.webm
While the performance overhead of IPC in microkernel multiserver operating systems is no longer considered a blocker for their practical deployment (thanks…
At: FOSDEM 2019
https://video.fosdem.org/2019/AW1.121/hardware_software_co_design.webm
While the performance overhead of IPC in microkernel multiserver operating systems is no longer considered a blocker for their practical deployment (thanks…
👍4
Хороший гайд по нонфикшн
Эксперт по развитию Джулиан Шапиро (Julian Shapiro) создал Writing Well – короткий гайд про то, как писать полезные и понятные тексты.
Из него читатель узнает, как правильно выбрать тему для статьи, как подготовить первый черновик, как редактировать и улучшать текст, как добавить в текст немного своего стиля, а также как взяться за работу, когда ничего не клеится.
#literature
Эксперт по развитию Джулиан Шапиро (Julian Shapiro) создал Writing Well – короткий гайд про то, как писать полезные и понятные тексты.
Из него читатель узнает, как правильно выбрать тему для статьи, как подготовить первый черновик, как редактировать и улучшать текст, как добавить в текст немного своего стиля, а также как взяться за работу, когда ничего не клеится.
#literature
Julian
Writing Well Handbook by Julian Shapiro
Learn how to write well. Topics include figuring out what to write about, how to write an introduction, the writing process, writing style, and copyediting.
👍4
Угадай DDI
Вопрос с подвохом: какой видеовывод на картинке?
Кажется, что это VGA. Но с точки зрения программирования контроллера дисплея, можно даже не пытаться угадать. К примеру, на одном из устройств на Gemini Lake от Intel есть VGA вывод. Это сразу вызывает подозрение, поскольку всем известно, что начиная с поколения Haswell, контроллеры дисплея в графическом устройстве идут только с поддержкой DDI — digital display interface...
👉 Продолжение
#digest
Вопрос с подвохом: какой видеовывод на картинке?
Кажется, что это VGA. Но с точки зрения программирования контроллера дисплея, можно даже не пытаться угадать. К примеру, на одном из устройств на Gemini Lake от Intel есть VGA вывод. Это сразу вызывает подозрение, поскольку всем известно, что начиная с поколения Haswell, контроллеры дисплея в графическом устройстве идут только с поддержкой DDI — digital display interface...
👉 Продолжение
#digest
👍14👎1