2021.08.19

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

Paul Krill | InfoWorld
구글에서 개발한 오픈소스 프로그래밍 언어 ‘고(GO)’의 최신 버전이 8월 16일(현지 시각) 프로덕션 릴리즈로 출시됐다. 
 
ⓒ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



 



2021.08.19

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

Paul Krill | InfoWorld
구글에서 개발한 오픈소스 프로그래밍 언어 ‘고(GO)’의 최신 버전이 8월 16일(현지 시각) 프로덕션 릴리즈로 출시됐다. 
 
ⓒ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



 

X