Pull to refresh
16K+
-15
Mickey Rookie@amcured

Ambient Coder

10,6
Rating
6
Subscribers
Send message

Л. Кэролл, «Алиса в стране розовых волнушек».

Нет: After fixing the bug, I finally feel myself good.

Это почему ещё? Уже и порадовать себя после того, как закрыл баг, запрещено?!

В каком смысле «результатов»? Я не могу же опубликовать куски проекта из-под NDA.

Ну вот, библиотека, сделанная по описанию (ноль ручных правок, рабочая версия с первого раза, три дополнительные итерации по итогам пожеланий сообщества): https://hexdocs.pm/marcli/readme.html

Я вообще, я имел в виду, что вот мой опыт, он мне нравится, если хотите — попробуйте сами.

Давайте-ка вернемся к истокам. Я утверждал:

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

И тут ворвались вы, в белом плаще и на вороном коне:

Все возможно. Только начинать надо с фундаментальных классических трудов, а не с новомодных веяний.

И тут, спустя некоторое количество комментариев, выясняется, что:

Соответственно, это накладывает определенное требование И НА всех и любого клиента, и это требование уровня проектирования системы и предусмотренной возможности расширения этой системы.

О как. Требование-то, оказывается, значительно жёстче, чем у меня (я всего-то просил тип в одном месте сохранить). Вы можете себе позволить рассказывать клиентам (пользователям вашего кода) — как им жить и по каким канонам писать код. Ну что ж, в таких условиях и студент напишет хотрелоад (а я даже написал, вместо демагогии про «правильные архитектуры»).

Может вам будет интересно, […] на Хабре

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

Это вот тот самый «фундаментальный классический труд», разрекламированный выше? Понимаю, сам рыбак.

«Абсолютная инкапсуляция» — понятие, которое пришлось придумать в мире ООП, когда был вывернут наизнанку, изгажен до неузнаваемости и фактически испорчен термин «полиморфизм». Круто, чё. Я уже прямо приготовился к каким-то откровениям, а тут банальщина из пятого класса церковно-приходской школы.

Ну и ладно, я со своими (если даже и общепринятыми в разработке) терминологиями в чужие монастыри не хожу. Не потрудитесь объяснить, как мне все это поможет в описанной ситуации (виртуальная машина BEAM без остановки принимает и должна адекватно обработать изменившийся код в ситуации, когда у нас запущено сто тысяч легких эрланговских процессов со старым кодом, и начинают запускаться новые с новым кодом)?

Не, с плюсами-то всё понятно, мы просто выкинем нахрен из их сессий сто тысяч пользователей, остановим весь мир, подменим исполняемый файлик и улюлю. Но меня такие синтетические примеры не очень интересуют. Я останавливать сервис не могу, пардон, простите уж за такое уважение к пользователям.

На вашем языке: плагин изменился и перекомпилировался, но старая версия продолжает использоваться в уже загруженных сессиях. Как вызывающий код должен понять, можно Енкодеру (ваша терминология) передать среди прочих новый параметр, или нет, если старый код рухнет, увидев его, а новый — откажется работать без него?

А теперь давайте рассмотрим тот же самый пример, но на завтипах. (Шутка, не нужно его рассматривать, там всё сложно.)

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

Типичный хабракомментарий: напыщенный, глубокомысленный, пустой и безнадёжно бесполезный.

С каких ещё трудов? Почему именно с них надо начинать? Кому-то удалось это «всё возможно» сделать, хотя бы авторам этих мифических «трудов»? И, наконец, что именно позволяет думать, что я — необразованный баран?

В общем, хабр во всей его красе: профессионализма — ноль, одни надутые щеки и общие слова.

Как увижу отхожее место, типа хабра, — сразу тянет испражниться, рефлекс.

Вот тут: https://github.com/Nikita-Filonov/ai-review/pull/4 видно, что инструмент предупреждает о делении на ноль. Это же без статического анализа делается, так? Иными словами, PR на несколько тысяч строк (я в курсе, что лучше так не делать, но мир жесток) — будет жрать токены как не в себя и может не уместиться в контекст, так?

А вот тут: https://github.com/Nikita-Filonov/ai-review/tree/da6aabb5b3a6a494c71991d2ce792c26065c69a0/docs/prompts кажется, что stack-agnostic — невероятно громкое заявление, особенно учитывая, что промпты для других стеков придется писать руками из головы, чтобы повторить вот это: https://github.com/Nikita-Filonov/ai-review/blob/da6aabb5b3a6a494c71991d2ce792c26065c69a0/docs/prompts/python/inline/strict.md?plain=1#L21-L23

А теперь, внимание, главный вопрос: чем это лучше, чем «Клод, сделай мне PR»? Цифры, примеры, юзкейсы?

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

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

test epmd::server::tests::test_handle_list_nodes ... error: unsupported operation: `clock_gettime` with `REALTIME` clocks not available when isolation is enabled
   --> /home/am/.rustup/toolchains/nightly-x86_64-unknown-linux-gnu/lib/rustlib/src/rust/library/std/src/sys/pal/unix/time.rs:107:22
    |
107 |         cvt(unsafe { libc::clock_gettime(clock, t.as_mut_ptr()) }).unwrap();
    |                      ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ unsupported operation occurred here
    |
    = help: set `MIRIFLAGS=-Zmiri-disable-isolation` to disable isolation;

Ну как так-то? Нет, MIRIFLAGS=“-Zmiri-disable-isolation” cargo +nightly miri test прошёл, UB у меня, вроде, нет. Но что-то не так в стандартной библиотеке, в коде, который отвечает за операции со временем (!). Серьёзно?

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

Лермонтова Вы зря задели, он Вам лично ничего плохого не сделал

Во-первых, он у меня несколько стихотворений украл, испортив рифму и нашалив с размером. Во-вторых, право говорить «зря», или «не зря» я что-то сделал — надо заслужить, иначе это выглядит площадным хамством.

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

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

и даже Erlang с Elixir-ом

https://cure-lang.org/ же

фактически идентичны инлайн функциям

Ух ты, новое слово в макросостроении! Может, всё-таки, анонимным функциям (closures)? А то это уже не гигиена, а артериальное огораживание (кровь не поступает).

У вас жена, что ли, из богатой семьи? Или вы таксуете по ночам? Не может же быть, чтобы вам кто-то платил за разработку.

Это макросы Шрёдингера, что тут может быть непонятного?

Если не заглядывать в AST, они есть. А если заглянуть — уже нет. Или наоборот.

———

Я хотел ещё про гигиену спросить, но потом решил, что могу не вынести ответа.

Любое решение, завязанное на IDE (и любой иной инструментарий, кроме консольных пайпов) — мертворожденное говно, которое никогда не взлетит вне очень узкого круга академических структур.

Wolfram Mathematica — блистательнейший инструмент, опередивший время на десятилетия. Требовал своего IDE. Остался игрушкой для продвинутых студентов.

Про Матлаб вообще говорить смешно: сделай они импорт/экспорт в текстовые форматы двадцать пять лет назад — уже покорили бы мир.

Список бесконечен.

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

Я уже раз триста, по-моему, вам сказал: мета-язык никому не должен ничего генерировать, чтобы генерировать — обычные компиляторы подойдут, они и так (нормальные, современные, речь не идет, разумеется, про наколеночные поделия типа го/раста и про мастодонтов типа питона/плюсов) работают с AST.

Ну отвлекитесь вы от витания в облаках, посмотрите, что люди уже сделали, даже ваш собеседник вон приложился: https://hexdocs.pm/metastatic/

А мне кажется, это вы не очень уловили, что написали.

есть вещи естественные для человека, а есть неестественные

Абсолютно.

Потому что утка крякает. А не шум издать утка. Не мыслят люди так.

Да ну? Что там за шум? — Это утка в камышах. «Утка крякает» — это примитивизм, который покрывает только простейшие императивные жизненные ситуации. Чуть более сложные — уже нет.

должны различать «посмотреть все методы утки» и «посмотреть все функции на свете, которые принимают что-то типа утки»

Второе — тривиально (даже grep с удовольствием покажет все имплементации). Первое — в ООП практически невозможно. Потому что вот тот джун унаследовал от утки утконоса (ну ему так показалось, что они похожи), и у вас теперь тут инстанс утконоса, на котором определен метод «не эволюционировать», а метод «крякать» бросает экспепшн. Но по коду, в котором вы понятия не имеете, какой монстр скрывается за каждой переменной, это увидеть совершенно нельзя.

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

Вот так на самом деле устроен окружающий мир. И такая модель на самом деле для человека естественна, потому что она моделирует именно его, а не безумные рабовладельческие фантазии наподобие утка.крякать. Ну подите заставьте утку крякать, если уж на то пошло. Поэтому там всегда _наблюдаемое_, то есть — шум, издаваемый уткой (если нужен полиморфизм).

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

А то взяли моду: как строители напортачили, или таксист не туда привёз — сразу рублём наказывать, а как самих тех же метлой — сразу «мы нетакусики, нас нельзя штрафовать, мы ранимые».

  1. Мне не надо было ничего узнавать, я прекрасно знал всё и так: при микроменеджменте сложнее околачивать груши.

  2. Я не менеджер (и даже не лид), я разработчик (правда немного привилегированный).

  3. Адекватного работника требование сдавать задачи в срок напугать не может в принципе, только смузихлёбы почему-то опасаются такого невероятного унижения.

  4. Использование заезженных тупых штампов двадцатилетней давности — верный признак отсутствия собственных мыслей.

Перевожу со стокгольмского на русский:

У нас начальник такой дебил, что не в состоянии в срок подготовиться к изменениям в законодательстве (там-то как раз не совсем дегенераты, они одним днём ничего закрыть не требуют), и не способен ни договариваться с партнерами, ни планировать. Но мы жрём кактусы, прикрываясь оправданием всех некомпетентных работников: «Так надо бизнесу!».

Ясно.

Зумеры изобрели LISP.

Этому поделию больше 15 лет. Оно уже не воскреснет, хватит его раскапывать и пытаться расшевеливать. Там буквально всё сделано неправильно.

1
23 ...

Information

Rating
703-rd
Registered
Activity

Specialization

Бэкенд разработчик, Архитектор программного обеспечения
Старший
Linux
Ruby
Erlang/OTP
Проектирование архитектуры приложений
Алгоритмы и структуры данных