구조 자체는 신택스 훑어서 짜집기 하는 식 같은데
하나 하나 어디서 뭐를 써야 하는지 파악하는게 일이더라
하루 종일 gpt 붙들고 있는데 이렇게 무에서 의존한 적 처음임
아는 사람들한테는 쉬워서 그런지 문서들도 애매하게 있고 읽으면 뭔 소린지 눈에 안 들어옴
구조 자체는 신택스 훑어서 짜집기 하는 식 같은데
하나 하나 어디서 뭐를 써야 하는지 파악하는게 일이더라
하루 종일 gpt 붙들고 있는데 이렇게 무에서 의존한 적 처음임
아는 사람들한테는 쉬워서 그런지 문서들도 애매하게 있고 읽으면 뭔 소린지 눈에 안 들어옴
팁을 주자면 1. 생성하는 코드가 구문, 의미론적 컨텍스트에서 무엇이 필요한지 생각해 볼 것, 구문 구조는 요즘 ide에서 볼 수 있는 툴 있으니 그거 활용하기 2. 코드 생성 각 단계에서 캐싱이 잘 일어나도록 처리. 코드에 변화가 있을 때 생성기의 이전, 현재결과 비교시 변화가 없다면 반드시 내부적으로 캐싱처리된 결과로 나와야 함. 반드시 달성해야 하는 성능 문제임 3. 테스트 케이스를 반드시 작성해서 테스트와 함께 작업. 항상 원하는 최종 결과물이 나오는지 원활하게 확인하기 위함
와 이런게 필요했음 ㄳㄳ
참 여러 모로 아직도 감이 잘 안옴 Incremental이라 일단 코드 변화만 있는 영역?내에서 작동하는 건 알겠는데 필터링을 Re!gisterSourceOutput 전에 최대한 하는 게 좋은 건지 생성기 이전 정보는 걍 static에 박으면 되나? analyzer가 어떻게 작동하는 거지? 영상 긴거 몇개 보고 문서도 봤는데 아직도 횡설수설함 그렇다고 이거 학습에 시간 다 투자할 수도 없고
@ㅇㅇ SourceOutput 전에 원하는 정보로 가공하는게 핵심임. SourceOutput 단계에서는 파이프라인에서 제작된 데이터로 빠르게 코드 문자열만 뽑는거. 생성기 이전 정보는 너가 캐싱해둘 필요가 없음. 파이프라인 구성시 각 변환단계에서 자동으로 일어남. 다만 너가 가공한 데이터 구조가 있으면 파이프라인에서 데이터 비교를 위해 comperer를 제공하거나 IEquatable을 구현해 둘 필요가 있음
@ㅇㅇ(39.115)
https://github.com/dotnet/roslyn/blob/main/docs/features/incremental-generators.md
이건 읽어보고 하셈
@ㅇㅇ(39.115) Incremental이라 일단 코드 변화만 있는 영역?내에서 작동하는 건 알겠는데 = X compilation 단위로 변경 트리거가 발생함. 유니티로 기준으로 설명해주면 어셈블리안에서 작성된 코드가 통째로 넘어온다고 보면 됨. 너가 타이핑 하는 실시간으로 말이야. 그래서 위에 설명한 2번이 중요한거
@ㅇㅇ(39.115) 아 ㄳㄳ 님 말 댓 읽고 다시 읽으니 조금 더 이해할거 같음