Dołączyłem tutaj miniaturową wersję tego promptu, ponieważ seria "Moje ulubione prompty" ma być kompaktowa, małych rozmiarów, samodzielnie zawierająca informacje. Ale dzisiaj przekształciłem to w naprawdę szalony system. Nie ma to znaczenia, czy tworzysz kolejny program CRUD w React lub listę TODO, ale jeśli robisz coś dość skomplikowanego w Rust lub Golang, lub coś związanego z złożonymi danymi, to podejście jest prawie przerażające w tym, co może zrobić. To proces składający się z 2 rund. Oto Runda 1: --- Najpierw przeczytaj WSZYSTKIE pliki AGENTS dot md i README dot md bardzo uważnie i zrozum WSZYSTKO z obu! Następnie użyj trybu agenta do badania kodu, aby w pełni zrozumieć kod, architekturę techniczną i cel projektu. Następnie, gdy już wykonasz niezwykle dokładną i skrupulatną pracę w tym zakresie i głęboko zrozumiesz cały istniejący system, co robi, jego cel, jak jest wdrożony i jak wszystkie elementy łączą się ze sobą, muszę, abyś hiper-intensywnie zbadał, studiował i rozmyślał nad tymi pytaniami, które dotyczą tego projektu: Czy są jakieś inne poważne nieefektywności w systemie podstawowym? miejsca w bazie kodu, gdzie 1) zmiany rzeczywiście wpłynęłyby na ogólną latencję/reaktywność i przepustowość; 2) w taki sposób, że nasze zmiany byłyby dowodowo izomorficzne pod względem funkcjonalności, abyśmy wiedzieli na pewno, że nie zmieni to wynikowych wyjść przy tych samych wejściach; 3) gdzie masz wyraźną wizję oczywiście lepszego podejścia pod względem algorytmów lub struktur danych (zauważ, że w tym przypadku możesz uwzględnić w swoich rozważaniach mniej znane struktury danych oraz bardziej ezoteryczne/sofistykowane/matematyczne algorytmy, a także sposoby przekształcenia problemów, aby ujawnić inny paradygmat, taki jak lista pokazana poniżej (Uwaga: przed zaproponowaniem jakiejkolwiek optymalizacji ustal metryki bazowe (p50/p95/p99 latencja, przepustowość, maksymalna pamięć) i uchwyć profile CPU/alokacji/I/O, aby zidentyfikować rzeczywiste gorące punkty): - eliminacja wzorca zapytań/fetch N+1 - zero-copy / ponowne użycie buforów / scatter-gather I/O - koszty formatu serializacji (przeanalizuj/zakoduj) - ograniczone kolejki + backpressure (zapobiegaj wzrostowi pamięci i latencji ogonowej) - sharding / zablokowane paski, aby zmniejszyć kontencję - memoizacja z strategiami unieważniania pamięci podręcznej - techniki programowania dynamicznego - teoria optymalizacji wypukłej - leniwa ewaluacja / opóźnione obliczenia - wzorce iteratorów/generatorów, aby uniknąć materializacji dużych kolekcji - przetwarzanie strumieniowe/podzielone dla pracy ograniczonej pamięcią - wstępne obliczenia i tabele wyszukiwania - wyszukiwanie oparte na indeksach vs liniowe skanowanie - wyszukiwanie binarne (na danych i na przestrzeni odpowiedzi) - techniki dwóch wskaźników i przesuwającego się okna - sumy prefiksowe / kumulacyjne agregaty...