고(Go) 1.17 출시··· “언어 및 컴파일러 개선” - CIO Korea

 
09시 32분
Paul Krill | InfoWorld
구글에서 개발한 오픈소스 프로그래밍 언어 ‘고(GO)’의 최신 버전이 8월 16일(현지 시각) 프로덕션 릴리즈로 출시됐다.
notion imagenotion image
​​
ⓒGetty Images
‘고 1.17(Go 1.17)’ 릴리즈 노트에 따르면 unsafe.Pointer 안전 규칙을 준수하는 코드 작성 간소화를 포함해 언어와 관련한 3가지 작은 개선사항이 있다. 다음과 같다.
  • 슬라이스에서 배열 포인터로의 변환: s 유형의 표현식 []T는 이제 배열 포인터 유형 *[N]T로 변환될 수 있다. 만약 이러한 변환의 결과가 a라면 범위에 있는 해당 인덱스는 동일한 기본 요소를 참조한다(&a[i] == &s[i] for 0 <= i < N). 단 if len(s)N보다 작으면 변환 오류가 발생한다.
  • unsafe.Add: unsafe.Add(ptr, len)ptrlen을 추가하고, 업데이트된 포인터 unsafe.Pointer(uintptr(ptr) + uintptr(len))를 반환한다.
  • unsafe.Slice: ptr 유형의 표현식 T에서 unsafe.Slice(ptr, len)는 기본 배열이 ptr에서 시작하고, 길이와 용량이 len인 유형 []T의 슬라이스를 반환한다.
고 1.17에서 컴파일러는 스택 대신 레지스터를 사용하여 함수 인수와 결과를 패싱하는 새로운 방법을 구축했다. 이 기능은 64-비트 x86 아키텍처의 리눅스, 맥OS, 윈도우에서 사용할 수 있다.
개발팀에 의하면 벤치마크 결과 약 5%의 성능 향상과 2%가량의 바이너리 크기 감소가 나타났다. 이 변경사항은 안전한 고(GO) 코드의 기능에는 영향을 미치지 않는다.
또한 컴파일러를 사용하면 클로저를 포함하는 함수를 인라인할 수 있다. 이를 통해 클로저를 포함하는 함수가 (함수를 인라인한 각 위치에서) 별개의 클로저 코드 포인터 함수를 생성할 수 있다고 개발팀은 설명했다.
이번 릴리즈에는 정리된 모듈 그래프도 도입됐다. go.mod 파일에서 고 1.17 이상 버전을 지정하는 모듈의 모듈 그래프에는 다른 고 1.17 모듈의 즉각적인 종속성만 포함되며, 전체 전이 종속성은 포함되지 않는다.
한편 ‘고 1.17’은 이곳(golang.org)에서 다운로드할 수 있다. 현재 스테이블 릴리즈에는 고 1.16.5와 고 1.15.13이 있다. 고 개발자를 위한 퍼징 기능은 향후 릴리즈로 계획돼 있다. ciokr@idg.co.kr
notion imagenotion image