구글 고 1.23 버전 출시...PGO 빌드타임 오버헤드 감소
구글이 프로그래밍언어 '고(GO)'의 신규 버전 고 1.23를 공개했다. 이번 버전은 빌드 효율성 향상을 위해 프로필 기반 최적화(PGO) 사용 빌드 시간을 감소시켰다. 15일 인포월드 등 외신에 따르면 구글 고 개발팀은 공식 사이트를 통해 고 1.23버전를 통해 출시했다. 해당 언어는 윈도를 비롯해 리눅스, 맥OS를 지원한다. PGO는 실행 시 수집된 성능 데이터를 활용해 컴파일러가 최적의 코드 경로를 선택하도록 도와주는 역할을 한다. 하지만 기존 고의 경우 PGO를 사용할 경우 빌드시간이 증가하는 문제가 있었다. 특히 대규모 프로젝트의 경우 빌드 시간이 두 배 이상 늘어나는 등 오히려 악효과가 발생했다. 고 1.23버전은 PGO의 이점을 누리면서도 빌드 시간에 큰 영향을 주지 않도록 개선했다. 이를 위해 컴파일러에서 함수의 서로 겹치지 않는 영역에서 액세스되는 로컬 변수의 스택 프레임 슬롯을 겹치도록 처리하는 기능을 추가해 고의 스택 사용량을 감소시켰다. i386과 amd64 아키텍처의 경우 고 1.23 컴파일러가PGO에서 얻은 정보를 활용해 루프 안에서 자주 실행되는 코드 블록을 더 효과적으로 배치한다. 이를 통해 CPU가 해당 코드를 실행할 때 더 빠르게 접근할 수 있어 성능이 1-1.5% 정도 향상시킨다. 이 과정에서 실행 파일의 크기가 0.1%정도 증가하는 현상이 발생할 수 있다. 이는 성능을 조금 더 높이기 위해 코드 배치를 최적화한 결과로, 증가값이 작기 때문에 성능 개선에 비해 그 영향은 거의 무시할 수 있는 수준이다. 또한 for-range 루프에서 반복자 함수를 사용할 수 있도록 변경됐다. 이를 활용해 특정 조건에 맞는 요소만 골라내거나, 원하는 방식으로 데이터를 처리하면서 루프를 돌리는 것이 가능하다. 새로 추가된 반복자(iter) 패키지와 함께 슬라이스(slices)와 맵(maps) 패키지에 추가된 기능을 활용해 루프를 더 유연하게 사용할수도 있다. 제네릭 타입 별칭을 미리보기 형식으로 지원한다. 이 기능은 제네릭 타입에 간단한 별칭을 붙여 보다 간단하게 코드에서 재사용할 수 있게 한다. 이를 통해 복잡한 타입 이름을 반복해서 작성할 필요 없이, 짧고 명확한 이름으로 제네릭 타입을 더 효율적으로 사용하고 코드의 가독성과 유지보수성을 높일 수 있다. 라이브러리에서는 타이머(time.Timer, time.Ticker)를 보다 쉽게 사용하고, 메모리 관리도 더 효율적으로 할 수 있도록 개선됐다. 프로그램에서 더 이상 사용되지 않는 타이머와 티커는 메모리에서 자동으로 제거되며, 타이머와 티커에 연결된 채널의 버퍼를 없애 데이터를 정확히 전송할 수 있도록 변경했다. 또한, 고에서 지원하는 도구를 사용하는 방식과 발생하는 오류에 대한 정보를 수집하는 고 텔레메트리 기능이 추가됐다. 개발팀은 수집한 정보를 분석해 오류를 해결하고 기능을 개선할 계획이다. 이 밖에도 트레이스 도구는 프로그램이 예기치 않게 중단되었을 때 보다 효율적으로 데이터를 복구할 수 있도록 개선됐으며, 링커는 코드 안정성을 높이기 위해 표준 라이브러리 내부 특정 기능이나 변수에 직접 접근하는 것을 방지할 수 있다. 64비트 RISC-V를 사용하는 오픈BSD에 대한 실험적 지원이 추가됐다. 구글 고 개발팀은 "고 1.22 이후 6개월 만에 1.23버전을 출시하게 됐다"며 "대부분의 변경 사항은 툴체인, 런타임 및 라이브러리 구현으로 기존 버전과의 호환성을 약속하며 거의 모든 고 기반 프로그램이 이전과 같이 컴파일되고 실행되기를 기대한다"고 말했다.