Przewinąłem do fragmentu w którym pan “programuje”

  • naur@tech.pr0n.pl
    link
    fedilink
    Polski
    arrow-up
    1
    ·
    edit-2
    7 days ago

    Mogę się założyć o czekoladę z okienkiem, że wynik prezentacji nie był wygenerowany w czasie rzeczywistym, tylko został przygotowany wcześniej. :-)

    Przy okazji, ostatnio dłubię trochę w GCC i próbuję poznać ten kompilator od środka. Ogólnie projekt jest znacznie gorzej udokumentowany od LLVM. Ciężko jest znaleźć od ręki sensowne opisy do wewnętrznych API, czy reprezentacji kodu (GIMPLE).
    Wyniki z Google często zawierają tylko szczątkowe informacje. Nawet na Stack Overflow są wątki z pytaniami bez żadnych odpowiedzi. Finalnie doszedłem do wniosku że pozostanie mi czytanie jakichś prac naukowych i prezentacji developerów. Ewentualnie analiza kodu źródłowego.

    Spróbowałem jeszcze z ciekawości zadać parę pytań LLMowi i okazało się, że Claude potrafi udzielić całkiem sensownych odpowiedzi. Można go poprosić o opis dowolnej funkcji w kodzie, podsumowanie różnych etapów kompilacji, albo o fragment kodu wykonujący konkretną manipulację na IR.
    Jestem prawie pewien, że nie są to informacje “przeklejone” z jakiejś strony. Spędziłem parę godzin na przeszukiwaniu sieci i nie udało mi znaleźć takich opisów.
    Moim zdaniem skraca to czas potrzebny na analizę projektu i “onboarding” o minimum jeden, może dwa rzędy wielkości. To jest faktycznie pierwszy przypadek, gdzie zauważyłem, że AI zwiększyło moją wydajność.

    Z drugiej strony, samo generowanie większych fragmentów kodu nie idzie mu już tak dobrze.
    Nie używam trybu agenta i model ewidentnie nie radzi sobie z poprawieniem błędów. Bez użycia narzędzi do debugowania nie ma chyba wystarczającej informacji zwrotnej o przyczynie problemu.

    • サぺル@tech.pr0n.plOPM
      link
      fedilink
      Polski
      arrow-up
      1
      ·
      7 days ago

      Pan tam chyba mówił, że pełne generacje kodu zajęły więcej niż ma do dyspozycji na prezentacji.

      Pewnie cała wiedza o gcc jest na irc i listach dyskusyjnych rozłożona na wiele lat. Pewnie dlatego niektórzy trenują pisząc coś w oparciu o sam kod źródłowy zamiast o dokumentację. Nawet rozwijają w tym kierunku swoje narzędzia wyszukiwania i analizy.

      Jak duże są większe fragmenty? To coś co wymaga już jakiejś ogólnej struktury? Wiele osób też nie umie kodować bez ciągłego uruchamiania kompilacji lub jakiegoś serwera wskazującego błędy podczas pisania. Ktoś jednak powiedział, że to psuje umysł. Najlepsze dla umysłu jest podobno “najpierw pomyśl, potem dobrze napisz”.

      • naur@tech.pr0n.pl
        link
        fedilink
        Polski
        arrow-up
        1
        ·
        7 days ago

        Nawet rozwijają w tym kierunku swoje narzędzia wyszukiwania i analizy.

        Właśnie po to analizuję IR gcc :-)

        Jak duże są większe fragmenty? To coś co wymaga już jakiejś ogólnej struktury?

        To zależy od złożoności zadania. Ogólnie nie ma problemu ze składnią kodu z LLMa. Kompilacja C++ prawie zawsze się udaje.
        W przypadku łatwiejszych zadań zdarza się, że kilkaset linijek boilerplate’u nie zawiera istotnych problemów.
        Ale czasem nawet 5 linijek z bardziej złożoną manipulacją na IR (generowanie wywołaia funkcji, obsługa wyjątków) potrafi spowodować Internal Compiler Error.
        W takich przypadkach przetworzony IR narusza zazwyczaj wewnętrzne założenia w GCC. Np. zaburza postać static single-assignment.

        Człowiek może takie problemy można dość prosto rozwiązać.
        Na przykład mój plugin ma automatycznie dodawać w określonych miejscach wywołania hooków.
        Najpierw piszę sobie wzorcowy kod C/C++ z wstawionymi hookami i dumpuję jego prawidłowy IR do pliku.
        Potem porównuję go z tym co wygenerował mój plugin dla kodu bez hooków.
        LLM (bez trybu agenta) takiego porównania nie zrobi, bo nie ma możliwości uruchomienia tych narzędzi.

        Wiele osób też nie umie kodować bez ciągłego uruchamiania kompilacji lub jakiegoś serwera wskazującego błędy podczas pisania.

        Carmack nie pisze testów, ale uruchamia każdą nową funkcję pod debuggerem i sprawdza jej działanie linijka po linujce.

        Ktoś jednak powiedział, że to psuje umysł.

        Nie wątpię, ale nadal zdobywam wiedzę o dużym projekcie komercyjnym i nie dałbym rady robić równolegle podobnej analizy dla gcc bez wspomagania.

        • サぺル@tech.pr0n.plOPM
          link
          fedilink
          Polski
          arrow-up
          1
          ·
          edit-2
          4 days ago

          Jestem pewien, że sobie poradzisz. Ciekawią mnie dalsze etapy tego co robisz.

          Czy w clang/LLVM byłoby łatwiej ze względu na jawność języków pośrednich? Przynajmniej tak mi wynika z prezentacji MOS, którą wklejałeś. Że za clang jest prosty IR i tam można łatwo wstawiać takie rzeczy.