7/28 요약 Sui AMA: Move 프로그래밍 언어

이 요약은 미스텐 랩의 멤버들과 함께 Sui Move 프로그래밍 언어에 대한 AMA를 다룹니다.

7/28 요약 Sui AMA: Move 프로그래밍 언어

Koh:

오늘 AMA 세션에 오신 모든 분들을 환영합니다. 오늘 세션에서는 Move 프로그래밍 언어에 대해 이야기하겠습니다. 이제 팀원들이 관심 분야를 공유하도록 하겠습니다. Damir부터 시작하겠습니다.

Damir:

회사에서 공식 직함을 ' Move 가이'로 바꾸려고 노력하고 있지만 지금은 그냥 Move 소프트웨어 엔지니어로 일하고 있습니다.

Todd:

저는 2018년부터 Move 에서 일하고 있습니다. 저는 소스 언어와 다른 컴파일러를 작성했습니다. 가상 머신이나 툴링 등 Move 에서 다양한 작업을 해왔습니다. 지금은 Sui 에 Move 를 통합하는 방식에 더 집중하고 있습니다.

Adam:

저는 Move 팀에 속해 있으며 현재 개발자 경험과 툴링에 중점을 두고 있습니다. 최근 작업은 Visual Studio Code 플러그인( Move )의 상태를 개선하는 것이었는데, 몇 달 전보다 훨씬 개선되었습니다.

엠마

저는 2020년부터 Move 팀에서 풀타임으로 일하고 있습니다. 대부분의 기여는 Move 증명자에 대한 것이며, Diem 프레임워크에 대한 공식 사양도 많이 작성했습니다. 지금은 Move 에 기여하고 있으며 Sui 코어 프레임워크에 대한 많은 코드를 작성하고 있습니다.

. . .

Todd:

객체 지향이라는 용어는 매우 어려운 용어라고 말씀드리겠습니다. 객체는

Move 핵심 언어에 Sui 쪽에 객체라고 부르는 것들을 추가했습니다. 어떤 의미에서는 객체처럼 동작하지만 Java나 다른 객체 지향 언어에서 기대할 수 있는 객체 지향 프로그래밍 스타일은 찾을 수 없습니다. 인터페이스나 상속, 동적 디스패치, 가상 함수 등을 기대할 수 있지만 그런 것은 없습니다.

우리가 객체에 대해 가지고 있는 것은 스토리지 모델 관점에 가깝습니다. ID가 있는 특정 유형의 데이터 패킷이 개별적으로 존재하며, 이를 객체라고 부릅니다.

. . .

질문 #2: Move 외부의 누구나 사용할 수 있는 번역기를 지원하며, 이를 어떻게 적용할 계획인가요?

Adam:

Move 는 다른 언어이며 이는 단지 구문에 관한 것이 아닙니다. 다른 프로그래밍 언어를 살펴보면 루프, 변수, 함수 등과 같은 공통된 기능이 있지만 블록체인을 대상으로 하는 언어의 공간을 조금 더 깊이 들여다보면 차이점은 상당히 깊게 실행될 수 있다는 것입니다. Move 및 다른 블록체인을 위한 스마트 컨트랙트를 프로그래밍하는 데 사용할 수 있는 다른 언어도 마찬가지 상황입니다. 예를 들어, 대부분의 보안 속성은 분석, 메모리 관리 방식, 저장소 관리 방식이 불가능합니다. 이 모든 것이 다른 언어와 상당히 다릅니다.

따라서 블록체인을 대상으로 하는 한 언어로 작성된 코드를 받아 마술처럼 작동하는 Move 코드를 뱉어내는 트랜스파일러나 번역기를 작성하는 것은 적어도 사소한 일이 아니며 경우에 따라서는 불가능할 수도 있다고 말하고 싶습니다.

. . .

질문 #3: Move 은 Sui 의 스마트 컨트랙트 개선에 어떻게 도움이 되나요? 그리고 특히 규모에 따른 보안을 어떻게 달성할 수 있을까요?

Emma

다른 언어에 비해 Move 은 블록체인 사용 사례를 위해 설계되었습니다. Rust와 같은 언어에서 많은 보안 기능을 차용했으며, 처음부터 공식적으로 검증할 수 있도록 설계되었습니다. 저희는 보상을 분배하는 방법 등을 처리하는 핵심 Move 코드를 지정할 계획입니다. 송금은 어떻게 하나요? 이는 보안에도 도움이 될 것입니다.

Adam:

스마트 컨트랙트를 작성하는 언어는 Move 언어가 만들어질 당시에도 사용 가능했지만, 안전 속성이 내장되어 있지 않았습니다. 모든 것은 일종의 명시적인 프로그래밍 개입을 통해 이루어져야 했습니다. Move 를 사용하면 많은 것들이 컴파일러나 엠마가 이미 언급한 것처럼 증명자에 의해 시행됩니다. 그러나 이중 지출 금지와 같이 보존하고자 하는 속성은 증명자가 없어도 언어에 내장되어 있습니다. 이것이 솔리디티와 같은 전통적인 구형 블록체인 언어의 주요 장점이자 차이점입니다.

. . .

질문 #4: Move 언어가 다른 특정 언어에 비해 어떤 장점이 있나요?

Damir:

Move 는 자산 중심 언어로, 네트워크에서 가치 있는 자산 유형을 정의할 수 있는 방법을 제공하며, 이것이 Move 의 표현력을 제공하는 주요 차이점입니다. 대부분의 다른 언어에서는 자산을 정의하고 여러 단계를 거칠 수 있는 자산이라고 말하는 대신 자산의 의미를 만들어내야 하지만 Move 에서는 매우 짧고 간단하며 직관적인 방식으로 이를 달성할 수 있습니다.

Todd:

그렇다면 자산 외에도 블록체인 전용 언어가 필요한 이유는 무엇일까요? Go나 Rust, 웹어셈블리 등을 사용하면 안 되는 이유는 무엇일까요? 저는 에셋이 그 해답의 일부라고 생각하지만, 저희도 가지고 있습니다:

  • 결정론: Rust나 Go를 그냥 던져 넣으면 언어가 결정론적이지 않기 때문에 이를 실현하기 위해 많은 작업을 해야 합니다. 결국 이 안에 하위 언어를 구축하게 될 것이고, 과거에 사용하던 라이브러리를 사용하지 못할 수도 있습니다. 같은 언어 내에서 완전히 다른 언어 환경을 구축함으로써 효용성을 잃게 되는 것입니다.
  • 미터링: 네트워크 계산에 비용을 지불한 것보다 더 많은 리소스를 사용하고 있지는 않은지, 네트워크 사용이 공평하게 결정되었는지 확인하고 싶을 것입니다. 비용을 지불하는 것도 한 가지 방법이지만, 실행을 측정하고 "내가 X만큼 계산을 했으니 이만큼의 비용을 지불해야 합니다."라고 말할 수 있는 기능이 필요합니다.

. . .

질문 #5: 새로운 Move 버전에서 가장 기대되는 업데이트는 무엇인가요? 개발자는 이를 어떻게 활용할 수 있나요?

Todd:

Sui 광학의 가장 큰 장점은 병렬 처리입니다. 일반적으로 블록체인 환경에서는 모든 트랜잭션이 서로 관련이 없는 트랜잭션이라도 일종의 순서가 정해져 있습니다. 예를 들어 앨리스가 밥에게 코인을 보내고 나도 아담과 엠마에게 코인을 보낸다고 하면, 이 거래는 서로 관련이 없지만 일반적인 블록체인에서는 모든 거래가 같은 순서로 합의를 거칠 때까지 기다려야 합니다. 따라서 Sui 에는 이러한 작업이 관련되어 있는지 여부를 알려주는 객체 모델이 있어 Move 의 원래 형태로 병렬로 실행할 수 있습니다.

Damir:

또한 소유권 모델과 스토리지 모델에 따라 소유권에 대한 보안을 강화할 수 있는 다양한 소유권 모델도 있습니다. 따라서 여러분이 무언가를 소유하고 있다면 누구도 가져갈 수 없습니다. 그러나 솔리디티와 핵심인 Move 에 버그가 있는 경우 이 모듈은 개체에 액세스할 수 없습니다.

Koh:

감사합니다. 병렬 처리, 특히 공유 객체와 단일 객체의 병렬 처리에 대한 후속 질문이 많았습니다. 이에 대해 특별히 의견을 제시해 주실 분이 있나요?

Todd:

많은 사람이 같은 개체에 액세스하도록 하려면 어떻게 해야 하나요? Sui 에서 이를 위한 두 가지 방법론이 있습니다:

  • 누구나 액세스할 수 있는 공유 개체가 있을 수 있습니다. 트랜잭션이거나 개체에 대한 일부 수정일 수 있습니다. 이 경우, 여러분에게 익숙한 것처럼 합의를 거쳐야 합니다. 그러나 공유 객체에 대한 합의만 필요하고 다른 객체는 여전히 병렬로 실행될 수 있습니다. 또한 다른 공유 객체와 병렬로 실행할 수 있습니다.
  • 예를 들어, 이 객체는 모든 데이터가 불변이고 변경하지 않으려는 상황이 발생할 수 있습니다. 다른 사람들이 이 객체에서 데이터를 가져오고 자신의 트랜잭션을 불변으로 유지하기를 원합니다. 따라서 이 읽기 전용 객체를 만들고 동결을 불변 객체로 호출할 수 있습니다.

. . .

질문 #6: Move 언어에 사용할 수 있는 강좌는 무엇인가요?

Damir:

Move 를 배우고 싶다면 Sui 문서로 바로 이동하세요. 단계별로 모든 것이 기록되어 있습니다. 이 코드를 사용해보고 네트워크에 배포하면 됩니다.

코딩에 대해 조금 알고 계신다면 좋은 리소스도 있습니다. 일련의예제예제가 있습니다. Move 의 주요 기능 대부분을 구체적으로 다루고 있지만, 대부분의 예제가 매우 예리하기 때문에 예제를 보면 요점을 알 수 있습니다.

Adam:

제 입장에서 두 가지 설명을 드리자면, 종속성에 대해 두려워하지 마세요. 종속성 설치의 주요 문제는 Windows에 있다고 생각하므로 지침은 분명히 거기에 있습니다. 이 모든 것이 온라인에서 무료로 제공되며 모든 문서가 공개되어 있으며 기여도 환영합니다. 방문하기Sui 개발자 포털을 방문하여 문서를 찾아 해킹을 시작하세요.

. . .

질문 #7: Move 의 장기 비전은 무엇인가요? 그리고 앞으로 어디로 나아갈 것인가요?

Todd:

우리가 이야기할 수 있는 다양한 주제가 많으니 많은 이야기를 나누도록 노력하겠습니다.

  • 저희는 언어의 사용성을 확장하고 언어의 표현력을 계속 주시하고 있습니다. 자동 서식 지정과 같이 여러분이 기대할 수 있는 도구나 점점 더 쉬워지는 테스트 작성 등 더 나은 개발자 도구가 필요합니다.
  • 사람들이 우리가 말하는 언어를 배우도록 하기 위해 해야 할 일이 많이 남아 있습니다. 사람들이 더 쉽게 글을 쓸 수 있도록 증명 기능을 완전히 작동시키고 Sui 에 통합해야 합니다.
  • 언어의 유용성도 있습니다. 괄호를 사용한 벡터로의 인덱스 액세스나 일반적인 루프와 같은 작은 구문 트릭 등 다른 언어에서는 당연하게 여기는 기능도 있습니다.

엠마

예를 들어, 다양한 유형의 소유권을 도입하여 객체 모델을 약간 개선하는 등 Move 에서 개선하고자 하는 사항도 있습니다( Sui).

지금은 객체 벡터를 입력 함수에 전달할 수 없어 표현력에 약간의 영향을 미치고 있습니다. 이 기능의 부족으로 인해 도달할 수 없는 코드가 몇 가지 있어서 이를 개선하는 작업도 진행 중입니다.

Adam:

이 언어가 어디로 갈지는 모두 개발자 여러분과 커뮤니티 여러분에게 달려 있으며, 저희는 여러분의 피드백을 환영합니다. 사실, 앞으로의 작업은 저희가 생각하는 언어와 생태계에 좋은 것 외에도 실제 언어를 사용하는 사람들이 생태계에서 언어에 중요하다고 느끼는 것에 의해 주도되기를 바랍니다.

Damir:

이 시점에서 많은 사람들이 언어에 대해 물어보지만 저희는 잘 모릅니다. 우리 모두가 오랫동안 이 언어에 관여해 왔기 때문에 이 시점에서는 알 수 없습니다. 저희는 언어의 시작이나 경로를 알지 못합니다. 따라서 피드백을 제출해 주시는 것이 가장 이상적입니다. 튜토리얼을 진행하면서 이해가 되지 않는 부분이 있으면 메시지를 보내 주시면 명확하게 파악할 수 있도록 도와드리겠습니다.

Koh:

여기까지 질문이 끝났지만 잠시 시간을 내어 청중의 질문이 있으시면 받겠습니다.

커뮤니티 회원 #1:

안녕하세요 여러분. 저는 이 이론의 아이디어에 대한 종합적인 견해를 얻고 싶습니다. 저는 분명히 ERC 20과 ERC 721을 가지고 있는데, Sui 에서는 필요하지 않을 수도 있고, 정리가 매우 인터페이스 중심적인 것 같다는 생각이 듭니다. 반면 Move 에서는 거의 제네릭 개념에 기반한 유형 중심적이고 정적으로 검증할 수 있습니다. 이에 대해 말씀해 주시고 토큰 표준이 어떻게 발전할 것으로 예상하시는지 말씀해 주시겠어요?

Damir:

솔리디티 세계에는 인터페이스가 존재하므로 사람들은 토큰을 구축하는 이 코드가 실제로 토큰이라는 것을 알 수 있습니다. 코인 유형은 기본적으로 이것이 ERC 20 또는 Sui 코인이라고 말하기 때문에 모든 코인 사이에 이러한 정렬이 있으며 모두 동일한 방식으로 작동합니다. ERC 721이나 다른 대체불가토큰 표준과 관련해서는 기본적으로 모든 객체, 심지어 코인 자체도 어떤 가치를 가진 하나의 코인이 어떤 식으로든 대체불가토큰이기 때문에 필요하지 않습니다. 우리는 자체 코인을 만들 프로젝트가 있을 것이라고 가정하기 때문에 이 코인이 존재할 수 있는 유일한 코인이라고 말하지 않습니다. 다른 유형이 될 것이고, 다르게 작동할 것이며, 이 코인을 관리하는 기관이 있을 수도 있고, 사내에서 두 번만 표시할 수 있는 코인을 상상하는 것처럼 이 코인과 함께 작업하는 몇 가지 방법이 구현될 수도 있습니다.

Todd:

코인의 가장 큰 장점 중 하나는 일반적으로 모든 코인이 동일한 방식으로 작동하기를 원한다는 것입니다. 표준의 요점은 여러분이 견고성 측면에 있기 때문에 이러한 기록 작업을 할 수 있기를 원하고, 분할과 결합과 같은 모든 종류의 작업이 자연스럽게 작동하기를 원한다는 것입니다. 따라서 모듈을 직접 작성할 필요 없이 구조체만 작성하면 됩니다.

커뮤니티 회원 #2:

모듈을 업데이트하거나 변경할 때 계약을 맺는 게시 모듈에 대해 간단히 질문이 있습니다. 예를 들어, 솔리디티에서 프록시 계약을 사용하는 것이 그런 경우인가요? 아니면 어떻게 구축하는지에 대한 래핑 기능에 대한 일종의 문제인가요? 이에 대해 생각해 보신 적이 있나요?

Todd:

네, 최근에 이 문제에 대해 많이 이야기했습니다. 오브젝트에 따라 프록시 설정을 할 수 있다고 말씀드리고 싶습니다. 제가 말씀드리고 싶은 것은 기존 에셋을 사용하는 새 모듈을 작성할 수 있다는 것입니다. 기존 모듈에 노출된 항목에 따라 기본적으로 버전 2를 작성하거나 최소한 일부 래핑 동작을 가질 수 있습니다. 저희는 패키지를 새 버전의 코드로 완전히 대체하려는 문제를 조사하고 있습니다.

누군가가 악의적이거나 사악한 일을 저지르고 기존 자산을 훔치려 하지 않는지 어떻게 확인할 수 있을까요? 새로운 버그를 도입하지 않았는지, 새로운 문제가 발생하지는 않았는지 어떻게 확인할 수 있을까요?

저희는 모든 세부 사항을 파악하고 몇 가지 질문에 답하기 위해 노력하고 있습니다.