Move 2024년 버전에 열거형 및 매크로 추가

2024년 초에 Move, Sui 의 기본 프로그래밍 언어에 출시될 예정인 새로운 기능에는 열거형, 매크로 함수, 메서드 구문이 포함됩니다.

Move 2024년 버전에 열거형 및 매크로 추가

올해 Move 프로그래밍 언어에 대한 업데이트를 통해 개발자는 데이터를 정의하고 함수를 호출하는 새로운 방법을 사용할 수 있습니다. 이러한 중요한 새 기능 을 통해 Sui 에서 앱을 더욱 유연하게 구축하고 최신 프로그래밍 언어에 대한 기대에 부응할 수 있습니다.

Move의 기본 프로그래밍 언어인 Sui 를 사용하면 개발자는 효율적이고 표현력이 풍부한 코드를 작성할 수 있습니다. 미스텐 랩스의 CTO이자 공동 설립자인 샘 블랙셔가 처음 설계한 이 스마트 컨트랙트 중심 언어는 Sui 의 확장 가능하고 처리량이 많은 환경을 활용합니다.

Move 2024 에디션의 업데이트에서는 열거형, 매크로 함수, 메서드 구문 및 기타 여러 가지 새로운 기능을 도입하여 더욱 강력한 기능을 제공합니다. 오픈 소스인 Move 및 Sui 을 통해 커뮤니티의 지속적인 개선이 가능합니다. 

주요 Move 업데이트 

다음 기능은 알파 버전에서 먼저 테스트할 수 있으며, 이후 릴리스 후보 및 최종 릴리스에서 테스트할 수 있습니다.

메서드 구문

메서드 구문 는 모듈에서 직접 함수를 호출하는 대신 값에 대해 함수를 '호출'할 수 있도록 하는 구문 변환입니다. 이 변경으로 Move 에서 프로그래밍의 편의성이 크게 향상되었습니다.

예를 들어

let c2: Coin<SUI> = c.withdraw(10);

로 확장됩니다:

let c2: 코인 = sui::코인::withdraw(&mut c, 10);

새로운 구문, 재미 사용를 사용하여 공개 또는 내부 메서드 별칭을 추가할 수 있는 기능이 도입됩니다. 이 기능은 메서드의 이름을 바꾸는 별칭을 만드는 데 사용할 수 있습니다. 또는 연관된 유형 정의 모듈 외부에 로컬 메서드 별칭을 만드는 데 사용할 수 있습니다.

인덱스 구문

메서드 구문을 기반으로 하는 인덱스 구문은 액세스 유형에 따라 특정 코드를 사용하여 인덱스에 액세스하는 코드를 추가합니다. 잠정적으로 이 코드는 다음과 같습니다:

&x[i]는 x.borrow(i)로 확장됩니다.
&mut x[i]는 x.borrow_mut(i)로 확장됩니다.
x[i]는 *x.borrow(i)로 확장됩니다.
x[i] = v는 x.assign(i, v)로 확장됩니다.

매크로 기능

다음과 같은 고차 함수 지도, 필터, 접기for_each는 컬렉션을 간결하게 변환하는 데 많은 언어에서 유용합니다. Move 에는 없습니다. 람다, 폐쇄또는 함수 포인터를 사용하여 이러한 종류의 연산을 정의하는 것이 불가능합니다.

매크로 함수를 사용하면 Move 런타임에 동작을 지원하지 않고도 이러한 유형의 작업을 모방할 수 있습니다. 고차 함수를 모방하는 매크로의 본문은 각 호출 사이트에서 인라인 처리됩니다. 그리고 호출 사이트는 매크로가 확장될 때 대체될 람다를 제공할 수 있습니다. 

예를 들어

v2 = v.map!(|x| x + 1);

또는

v.for_each!(|x| foo(x));

또한 '람다'는 다음을 통해 제어 흐름을 지원합니다. break 그리고 반환.

열거형

열거형 를 사용하면 개발자가 여러 가지 다른 형태의 데이터를 담을 수 있는 단일 유형을 정의할 수 있습니다. 항상 동일한 필드를 갖는 구조체와 달리 열거형은 열거형의 변형에 따라 다른 필드를 가질 수 있습니다. 예를 들어 enum Option<T> { None, Some(T) }변형 없음 에는 필드가 없고 변형 일부 에는 단일 유형의 필드 T.

Move 를 사용하면 일치 표현식을 사용하여 열거형을 파괴할 수 있습니다. Move 에서 열거형의 몇 가지 예는 다음과 같습니다:

public enum Color {
    RGB { red: u8, green: u8, blue: u8 },
    HSL { hue: u16, saturation: u8, lightness: u8 },
    Hex(u32)
}
public enum Option<T> {
    None,
    Some(T),
}
public fun is_rgb_color(color: Color): bool {
    match (color) {
        Color::RGB{ .. } => true,
        _ => false,
    }
}
const EOptionIsNone: u64 = 0;
public fun unwrap_some<T>(option: Option<T>): T {
    match (option) {
        Option::Some(x) => x,
        Option::None => abort EOptionIsNone,
    }
}

열거형은 Move 2024 에디션의 일부이지만, Sui 메인넷에서 즉시 사용할 수 있는 것은 아닙니다. 대신, 이 기능은 먼저 데브넷에서만 출시되고, 프로덕션 환경에 적합하다고 판단되면 테스트넷과 메인넷에 차례로 적용될 예정입니다. 

새로운 기능 추가

위에 표시된 것 외에도 Move 2024 버전 에는 명시적인 친구 선언의 필요성을 없애고 break에 값을 사용할 수 있도록 하는 등의 소규모 업데이트가 추가로 포함됩니다. 로드맵에는 이러한 업데이트에 대한 명시적인 이유와 예시가 포함되어 있습니다. 일반적으로 이러한 업데이트는 미래를 대비하여 Move 코딩 환경을 보다 효율적으로 개선하기 위해 설계되었습니다.

주요 변경 사항

Move 에 예정된 몇 가지 업데이트는 기존 코드에 영향을 미칩니다. 여기에 언급된 세 가지 변경 사항 중 대부분은 다음과 같이 보다 명시적인 코드가 필요합니다. mut 어노테이션을 할당하거나 상호 차용한 경우 로컬 변수에 대한 어노테이션을 추가합니다. 

구조체 선언

현재 구조체 선언은 다음과 같이만 가능합니다. 공개를 사용할 수 있으므로 가시성 수정자를 포함할 필요가 없습니다. 향후에 구조체 유형이 다른 가시성을 갖게 될 경우를 대비하여 공개의 2024년 버전( Move )에는 다음이 필요합니다. 공개 를 모든 구조체 선언에 추가합니다.

뮤트 주석

현재 Move 의 모든 로컬 변수를 할당할 수 있습니다. x = e 그리고 상호 차용 &mut x. 변수는 다음과 같이 주석을 달 필요가 없습니다. mut 를 수정하거나 변경 가능하게 차용하기 전에 개발자가 항상 로컬에서 할당이나 변경 가능한 차용을 확인할 수 있기 때문입니다. 그러나 위에서 언급한 새로운 메서드 구문은 일부 상황에서 자동으로 로컬을 차용합니다. 

메서드 호출이 있는 경우 가독성과 이해도를 높이기 위해 2024년판( Move )에는 다음과 같은 내용이 추가됩니다. mut 어노테이션을 할당하거나 상호 차용한 경우 모든 로컬 변수에 추가합니다.

새로운 키워드

Move 2024년에는 이전에 식별자로 허용되었던 새로운 키워드가 추가됩니다. 새로운 키워드는 다음과 같습니다:

  • mut
  • 열거형
  • 유형
  • 일치

이러한 이름을 가진 기존 필드, 함수 또는 로컬 변수를 마이그레이션하는 데 도움이 되도록 개발자가 키워드를 식별자로 사용할 수 있는 새로운 구문이 추가되었습니다. 예를 들어

let `유형` = 0; `유형` + 1

요컨대, 어떤 키워드든 'type'과 마찬가지로 백틱으로 묶어 식별자로 사용할 수 있습니다.

테스트 및 구현

2024년 버전( Move )은 개발자가 새로운 기능을 테스트하고 그에 따라 기존 코드를 업데이트할 수 있도록 신중하게 출시될 예정입니다. 개발자는 다음을 지정하여 알파 버전 테스트를 시작할 수 있습니다. 에디션 = "2024.알파" 아래의 [패키지] Move섹션을 참조하세요. 알파 버전으로 출시된 기능은 불안정하며 컴파일에 실패할 수 있습니다.

릴리스 후보 버전은 이러한 새로운 기능이 비교적 안정화되고 획기적인 변경 사항이 추가된 후에 출시될 예정입니다. 알파 버전과 마찬가지로 개발자는 다음을 지정하여 릴리스 후보 버전을 테스트할 수 있습니다. edition = "2024.rc" 아래의 [패키지] 섹션의 Move.toml 파일에 있습니다. 

릴리스 후보 버전은 알파 버전보다 더 안정적이지만, 향후 작은 변경 사항이 발생할 수 있습니다. 올해 초, 아마도 3월 초에 컴파일러는 개발자가 프로젝트를 빌드할 때 릴리스 후보 버전으로 마이그레이션할지 여부를 묻게 될 것입니다. 그러면 자동화된 도구가 프로젝트를 새 버전으로 마이그레이션하여 Move.toml에 버전 마커를 추가하고 모든 변경 사항을 자동으로 수정합니다.

올해 말에는 2024년 Move 업데이트가 릴리스 후보에서 진행되며, 다음과 같이 변경됩니다. edition = "2024" 가 모든 새로운 Move 패키지의 기본값이 됩니다.