Рубрика «кодогенерация»

Год назад мой типичный пулл‑реквест писался руками часа три и ревьюился минут двадцать. Сейчас четыреста строк агент выдаёт за минуту, а ревью того же дифа занимает час: приходится вычитывать уверенно написанный чужой код, в котором ошибка выглядит ровно так же убедительно, как правильное решение. Узкое место переехало с набора кода на его проверку, и усилием воли оно не расширяется.

В августе у Google вышел текст о том, почему Go хорошо подходит для разработки с агентамиЧитать полностью »

Всем привет! Я хочу рассказать про свой путь написания компилятора Svelte на языке Rust, о своих мотивах и результатах.

Компилятор лежит тут: https://github.com/MrWaip/svelte-rs


Предыстория

Меня зовут Константин, я работаю в enterprise-компании на протяжении 5 лет фронтенд-разработчиком. Мы используем SvelteKit ещё с бета-версии.

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

Всё началось с бага, на который я убил вечер. В Tauri фронтенд вызывает Rust-команды так:

const user = await invoke("get_user", { userId: 42 });

Строка с именем команды, объект с аргументами, никакой проверки типов. У меня в Rust аргумент назывался user_id, и я честно передал user_id с фронта. В рантайме прилетело что-то вроде invalid args 'userId' for command 'get_user' — Tauri по умолчанию переименовывает snake_case-аргументы в camelCase. Это написано в документации, я это даже знал. Но знание, которое не проверяет компилятор, — не знание, а примета.

Дальше по классике: возвращаемый тип у invoke — anyЧитать полностью »

Короткая суть. Некоторые команды до сих пор хранят «правду» об API в трёх несовместимых местах: в голове бэкендера, в страничке Confluence, которая устарела ещё прошлой весной, и в реальном JSON, который прилетает с прода. Эти три источника постоянно расходятся, и расплачиваются за это все — особенно клиентские разработчики. OpenAPI — это способ свести правду к одному файлу-контракту, понятному и человеку, и машине. В статье я разбираю, зачем это нужно, почему кодогенерация — далеко не главная причина, но при этом проговариваю, во что внедрение обойдётся бэкенду, и где у подхода реальные слабые места.

СитуацияЧитать полностью »

Если вы работаете с базами данных и используете ORM, вы, вероятно, сталкивались с той же проблемой, что и я. ORM отлично подходят для отображения таблиц на объекты. Но они начинают мешать, когда запрос становится сложным: агрегации, тщательно продуманные JOIN’ы, формы отчетов, которые не соответствуют одной модели на таблицу. Вы боретесь с ORM, переходите на сырой SQL, а затем вручную пишете связующий код (маппинг).

Не каждый SELECT возвращает то, что подходит под одну ORM-модель. SQL - это лучший язык для доступа к данным. Лучшие ORM, которые я использовал, такие как DrizzleЧитать полностью »

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

Допустим, мы хотим сгенерировать тип с таким интерфейсом:

public interface IStudent
{
    string Name { get; set; }
    int Some(string value);
}

Логика метода Some (просто для примера):

public int Some(string value)
{
    string str = Name + value;
    Console.WriteLine(str);
    return str.Length;
}

Reflection.Emit

Можно использовать System.Reflection.Emit.

Читать полностью »
Запретный плод уже сорван - 1

Астрофизик Дэвид Киппинг попал на закрытую встречу в Институте перспективных исследований Принстона. Вернулся потрясённым и записал часовой подкаст. Я послушал его весь, чтобы вам не пришлось.

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

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

Я прошёл через все эти стадии. GPT-5 — это не волшебная палочка, которая сделает всю работу за вас. Это скорее невероятно быстрый, но не слишком сообразительный стажёрЧитать полностью »

Как Cursor устроен изнутри. Часть 2 - 1

Полная версия платной статьи, публикуется с разрешения автора. Первая часть здесь.

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

5. Инженерные вызовы

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

Как Cursor устроен изнутри. Часть 1 - 1

Всего за год нагрузка на Cursor выросла в 100 раз: более 1 млн запросов в секунду и миллиарды автодополнений кода каждый день. Подробный разбор архитектуры — вместе с сооснователем Суалехом Асифом.

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


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