Repository navigation
Gooo API Changes
프로그램을 고치면 호출하는 쪽에서도 챙길 일이 생깁니다. 예를 들어 입력의 count가
선택 항목에서 필수 항목이 되었다면, 호출자가 그 값을 주는지 확인해야 합니다.
반대로 출력의 count를 생략할 수 있게 만들었다면, 값을 받는 쪽에서 누락을 처리해야 합니다.
이 차이를 Gooo로 읽는 도구를 작업장 PR 46에
추가했습니다. 작업장 소스는 b0dcc503, 사용하는 컴파일러 후보는 8951c5f8입니다.
컴파일러의 package interface가 타입과 필드를 해석하고, Go가 같은 ID의 이전 값과 새 값을
묶어 전달합니다. 그 다음 판단은 api-changes.gooo의 조건문이 합니다.
작업장 소스 빌드 안내에
따라 후보 컴파일러를 .gooo로 준비한 뒤 실행합니다.
go run ./cmd/workbench api-diff --compiler ./.gooo \
--before examples/api-evolution/before/gooo.workspace.json \
--after examples/api-evolution/after/gooo.workspace.json --out out/api-diff| 예제의 변경 | Gooo가 반환한 분류 | 다음 작업 |
|---|---|---|
| 입력 count를 필수로 변경 | input-tightened | 호출 예제에 필수 값 보충 |
| 출력 count를 선택 항목으로 변경 | output-weakened | 출력이 없는 경우 처리 |
| 선택적인 출력 note 추가 | field-added | 레코드 생성 부분 확인 |
타입·필드 추가와 삭제, 이름, 타입, 개수 조건, 필드·인자 순서, import와 진입점도 읽습니다. 필드 추가와 기존 필드의 재배치가 동시에 있어도 각각 기록합니다. 사용 방향은 두 버전의 활동 선언 전체에서 읽습니다. 외부 호출자의 사용 방식은 아직 관측하지 않습니다.
분류 규칙과 다음 작업은 Gooo 소스에 적어 둡니다. 출력의 세 필드를 구성하는 식마다 두 후보가 있고, 자체 소형 모델을 켜면 그 조합을 시도할 순서를 제안합니다. 모델을 생략하면 소스 순서대로 진행합니다. 아래 옵션으로 이번에 사용한 모델을 연결합니다.
--model models/graph-chooser-20261008/all-data-demonstration/qat_ternary/model.json이번 정책에는 작성한 선택 사례 17개와 필드 검사 51개가 있습니다. 실제 변경 3건은
정답 라벨 없이 실행했습니다. 결과에 적힌 classified_changes: 3은 세 건 모두에
알려진 분류가 붙었다는 뜻입니다. 실제 기능의 정답률은 이 숫자로 계산하지 않습니다.
같은 예제를 기존 자체 모델로 직접 실행했을 때 예측은 1회, 약 0.20 ms였습니다. 조립은 두 방식 모두 8조합을 시도했고 51/51을 충족했습니다. 전체 명령은 고정 순서 1.64초, 모델 사용 0.77초였고 최대 RSS는 각각 약 83.8/82.6 MiB였습니다. 프로세스 CPU 시간은 0.66/0.63초였습니다. 순서와 캐시 조건이 다른 한 번씩의 관측이므로 속도 차이를 모델의 개선 효과로 해석하지 않습니다. 기기 전체 CPU 사용률은 측정하지 않았습니다.
선택한 프로그램은 파일에 저장합니다. 첫 실행을 다시 실행해 결과를 대조하고, 128행을 넘는 변경도 같은 프로그램으로 나누어 처리합니다. 이 재사용에서는 새 추론이 없습니다. 테스트의 135행은 27종 입력을 반복해 경계를 넘긴 것으로, 독립적인 135종 실험을 뜻하지 않습니다.
이 도구는 선언 변경을 설명하고 다음 작업을 데이터로 반환합니다. 호출 코드를 자동으로 고치거나 그 프로그램의 동작이 호환된다고 판정하는 단계는 남아 있습니다. 선언이 그대로이고 본문만 바뀌면 선언 변경 0건과 소스 변경 사실을 따로 남기고, 런타임 동작을 관측하도록 제안합니다.
작업장 전체 native race 검사와 최종 API 검사를 통과했습니다. CI 결과 보관 경로를
추가한 최종 후보 e14e5e67도 PR·push 검사와 원본 아티팩트 검증을 마쳤고,
PR 46을 main fd53420e에 병합했습니다. 검사 후보와 병합 결과의 파일 트리는 같습니다.
병합 후 main CI도 완료됐습니다.
초기 컴파일러 후보의 별도 Windows 검사에서 시간 초과를 발견했습니다. 시작·대기
예산 수정을 통합한 8f4c9638은 필수 CI와 네 플랫폼·별도 ledger 검사를 모두 통과했고,
PR 1410을 dev e8ccf425에 병합했습니다. 기존 API 변경 분류도 그대로 확인했습니다.
새 사용 환경은 dev 68a5de0ea15f3a19b6fea182712f7a71cb442852 소스로 준비할 수 있습니다.
현재 공개 0.6.18에는 인터페이스 명령이 아직 없으며 0.6.19 배포를 준비 중입니다.
- 문서 홈
- 현재 상태와 지원 범위
- 업무 규칙 예제와 실제 도입 기준
- 요구를 바꾼 뒤 결과 비교하기
- 저장 결과를 비교하는 0.6.27 배포
- 작은 모델과 조립하는 0.6.26 배포
- 중간 조건을 확인하는 0.6.25 배포
- 분기 구성·재실행의 0.6.24 개발 후보
- 작은 도구로 발전시키는 Gooo
- 흐름도로 보는 Gooo
- 시작하기
- 언어 둘러보기
- 사용 흐름
- 작은 모델과 메타프로그래밍
- 우리 PC의 자체 경로 decision 모델
- 조건을 읽는 자체 모델과 실제 탐색
- SDK 0.2.39 자체 모델 받기
- 모델 선택 점수와 실제 실패
- 설명·변수 이름 변화의 27회 관측
- 작은 모델의 학습 범위를 넓힌 결과
- 소스에 적는 중간 조건과 선택
- 지표와 증거
- 참고하고 감사하는 연구
- 최근 연구와 다음 작은 기능