Найти в Дзене

Как я разлюбил динамическую типизацию 2

В первой части я касался больше истории развития проектов и систем типов. Теперь чуть больше про то как я перекатился. Небольшой рекап. Довольно долго все что было типизируемо, было очень неудобно, слабые фреймворки, многословные и ограниченные системы типов (в промышленных языках). Одновременно с этим rails был на голову выше большинства фреймворков по возможностям, что в моих задача перевешивало. Тайпскрипт в этом смысле изменил многое. Когда стало понятно что он с нами надолго и уже было понаписано немало типов, я в своих проектах стал подключать комментарий @ts-check который дал бесплатную типизацию в js проектах, самого js и либ, где эти типы были прописаны. И все это бесплатно, код не нужно было никак менять. Затем мне пришлось разбираться с ts по долгу службы, так как запрос вырос и на Хекслете не было соответствующих курсов. Я потратил месяцы на эксперименты и написание разных небольших либ плюс поработал с ts в реакте. Здесь я прочувствовал удобство структурной типизации, во

Как я разлюбил динамическую типизацию 2

В первой части я касался больше истории развития проектов и систем типов. Теперь чуть больше про то как я перекатился. Небольшой рекап. Довольно долго все что было типизируемо, было очень неудобно, слабые фреймворки, многословные и ограниченные системы типов (в промышленных языках). Одновременно с этим rails был на голову выше большинства фреймворков по возможностям, что в моих задача перевешивало.

Тайпскрипт в этом смысле изменил многое. Когда стало понятно что он с нами надолго и уже было понаписано немало типов, я в своих проектах стал подключать комментарий @ts-check который дал бесплатную типизацию в js проектах, самого js и либ, где эти типы были прописаны. И все это бесплатно, код не нужно было никак менять.

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

Где-то там же, стало понятно, что надо весь фронт Хекслета переводить на react (раньше был только кусками), потому что бекендовая шаблонизация начала умирать. Тут удачно появилась inertia.js, которая позволила это делать максимально комфортно. Этот процесс мы стартанули чуть больше года назад и вот вот закончим (в начале марта). Чем больше я работал с этим кодом, тем больше мне становилось некомфортно возвращаться в Rails и особенно шаблоны, где возможности навигации и рефакторинга достаточно ограничены. Да этого сильно больше в больших идехах, но это все заслуга их разработчиков, а не самой экосистемы. Короче не очень надежно и перспективно.

Я не говорю что было прямо совсем плохо, потому что в этот момент мы активно использовали ruby-lsp, а он довольно крут. Но даже этого не достаточно, особенно сильно это стало проявляться когда я активно пересел на агентскую разработку. Уже постфактум могу сказать, что наличие типов значительно улучшает качество генерации и скорость исследования исходников. А пока их совсем не было, агенты часто не угадывали происходящее.

В итоге сошлась кучка факторов: упало значение многих фишек rails, потому что шаблонизация уехала в react целиком, разработка стала вестись через агенты, а им нужны типы, ts сильно повысил планку к возможностям которые дает хорошая система типов вкупе с тем насколько это может быть компактным. Последним и решающим фактором стало то, что агенты отлично пишут типы. Первое время с ts я нехило так мучился, когда надо было дописывать сложные типы самому (всякие хитрые дженерики). Как же это упростилось, когда подключилась генерация агентами.

Закончилось это тем, что я подключил к Хекслету Sorbet это статическая система типов, которую очень необычно (в других языках ваще не так сделано) интегрировали в Ruby. А благодаря агентам и ии автокомплиту мы буквально за неделю описали все типами и весь новый код стали писать только с ними. По пути пришлось менять привычки и подходы, за что наверное на меня рубисты посмотрят косо, но местами код стал напоминать java стиль, с явным созданием dto и отказу от dsl там где это можно сделать безболезненно. Метапрограммирования в общем стало меньше (кому интересно, гляньте гем tapioca, который очень помогает)

За это время я полностью трансформировался. Новые проекты я точно буду начинать только на статически типизированных языках. Мой личный топ для типовых веб проектов kotlin, ts, go (только там где по все остальное не подходит). На уровне фреймворков я буду брать spring boot + react. Про это точно будет отдельный пост. Вот такой вот поворот

Telegram | YouTube | Сообщество