Рубрика «компиляция»

Английская версия этой статьи ранее была опубликована мной в LinkedIn. Для Habr я подготовил адаптированную версию, добавил исторический контекст и подробнее раскрыл главный тезис.

Краткое сожержание

  • Каждая крупная революция в программировании повышала уровень, на котором человек описывает машине свои намерения.

  • Джон Бэкус и команда FORTRAN перенесли работу программиста от машинных инструкций к формулам, циклам и условиям.

  • Генеративный ИИ сделал программный код дешёвым и практически мгновенным.

  • Читать полностью »

Меня зовут Самир, мне 16 и я хотел бы поделиться с вами одним из моих текущих проектов: Veo ( https://github.com/SamirShef/veolang ). Veo это системный язык программирования. Я хочу использовать его для написания своих программ в будущем. А ещё я разрабатываю его потому что мне интересны комплияторы и потому что мне нечего делать.

Читать полностью »

В этой статье изложено всё, что нужно знать об устройстве компьютера с точки зрения программиста. А именно:

  • для чего нужен тактовый генератор, регистры, кэши и виртуальная память

  • что такое архитектура процессора

  • что такое машинный код и код ассемблера

  • чем отличается компиляция в машинный код в C, C++ или Rust от компиляции в байт-код виртуальной машины в языках типа Java и C#; в чём их отличие от интерпретируемых языков вроде JavaScript или Python

  • что такое динамические и статические библиотеки (.dll/.so, .lib/.a); что такое фреймворк

  • что такое API и web-API

  • Читать полностью »

Недавно мы переделали наши внутренние инструменты, визуализирующие компиляцию JavaScript и WebAssembly. При работе оптимизирующего компилятора Ion мы теперь можем генерировать интерактивные графы, демонстрирующие, как конкретно обрабатываются и оптимизируются функции.

Вы можете сами поэкспериментировать с этими графами в оригинале статьи. Просто введите какой-нибудь код на JavaScript в функцию testЧитать полностью »

Всем очевидно: индустрия ИИ стремительно развивается. Но здесь появляется одно гигантское слоноподобное НО. В последнее десятилетие лидеры ИИ предпочли развиваться экстенсивно - то есть, например, ЛЛМ максимизируют объём моделей. Это в свою очередь тянет за собой целую цепочку гигантских затрат: от электростанций до передовых числодробилок. Из последнего - xAI готовится запуститьЧитать полностью »

❯ Глоссарий

  1. Ассемблер — программа, которая преобразует (транслирует) код, написанный на языке ассемблера в машинный код;

  2. Язык Ассемблера — низкоуровневый язык программирования, где машинный инструкции (числа) заменены на мнемоники (слова) для удобства человека.

  3. Программа — текстовый файл, который содержит в себе код на каком либо из языков программирования;

  4. Процесс — абстракция операционной системы, позволяющая следить и управлять ходом выполнения программы;

❯ Введение: что будет в статье?

Читать полностью »

Почему мы ложимся спать с багами в голове, а просыпаемся с готовым решением? Сон программиста — это не просто отдых, а своеобразная ночная компиляция опыта, где нейроны оптимизируют код нашей памяти, удаляют мусорные зависимости и иногда даже проводят рефакторинг идей. Попробуем разобраться в архитектуре этого процесса — через аналогии с компиляторами, кешами и garbage collector’ами.

Читать полностью »

Я потратил месяц на создание веб-сайта в Docker и теперь готов поделиться ужасными историями.

У меня есть проблема.

Мой веб-сайт (на котором была опубликована эта статья) в основном обслуживается одним двоичным файлом Rust. Он стал слишком длинным. Каждый раз, когда мне нужно внести изменение, я должен:

  1. Собрать новую статически компонуемую библиотеку (с --target=x86_64-unknown-linux-musl)

  2. Скопировать её на сервер

  3. Перезапустить веб-сайт

Ситуация, мягко говоря, неидеальная.

Читать полностью »

C++ шаблоны — мощный инструмент, но работать с ними бывает больно: многословные ошибки, путаница с типами и enable_if, который все усложняет. Concepts в C++20 появились, чтобы упростить жизнь разработчикам и сделать шаблонный код понятнее. В этой статье — разбор конкретного кейса: как с помощью концептов задать корректные ограничения на контейнеры, избежать ловушек с массивами и получить внятные ошибки от компилятора.


Это слишком опасно для C++ - 1

Некоторые паттерны стало возможно использовать на практике только благодаря безопасности Rust по памяти, а на C++ они слишком опасны. В статье приведён один такой пример.

Работая над внутренней библиотекой, написанной на Rust, я создал тип ошибок для парсера, у которых должна быть возможность сделать Clone без дублирования внутренних данных. В Rust для этого требуется указатель с подсчётом ссылок (reference-Читать полностью »


https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js