> 웹 프론트엔드 > JS 튜토리얼 > JS 개발자의 Zig 첫인상

JS 개발자의 Zig 첫인상

PHPz
풀어 주다: 2024-08-24 22:31:38
원래의
981명이 탐색했습니다.

Zig First Impressions from a JS Dev

저는 게임 개발 프로젝트를 위해 zig를 배우고 있습니다. 자세한 내용은 여기에서 읽어보세요. 이것은 주로 JS/TS의 최근 경험에서 비롯된 언어에 대한 나의 초기(주로 긍정적인) 인상입니다.

오류 처리

오류는 가치입니다 - 현재로서는 예외가 최선이 아니라는 의견이 꽤 대중적입니다. 그들은 숨겨진 제어 흐름을 생성하며 JavaScript에서는 선언조차 할 수 없습니다. 이로 인해 애플리케이션이 훨씬 더 불안정해집니다.

Zig는 쉽고 재미있는 오류 처리를 위해 오류 열거형과 유용한 구문을 사용합니다. 예를 들면 다음과 같습니다.

fn failingFunction() error{MyError}!void {
    return error.MyError;
}

pub fn main() !void {
    try failingFunction();
}
로그인 후 복사

위 코드에서는 오류 MyError를 선언하고(별도로 수행할 수도 있음) 이를 반환합니다.
try는 다음과 같이 "오류가 반환되면 여기에 반환하세요"를 의미합니다.

failingFunction() catch |err| return err;
로그인 후 복사

저는 이 접근 방식이 훌륭한 조합이며 Go land의 끝없는 if(err != nil)에서 우리를 구해 준다고 믿습니다.

기타 하이라이트:

  • 오류는 명시적이므로 모든 유형을 선언하고 처리해야 합니다
  • 블록 수준이 아닌 그 자리에서 바로 처리가 이루어집니다
  • 페이로드 캡처 덕분에 오류가 올바르게 입력되고 자동 완성되므로 스위치 표현식과 같은 것을 쉽게 사용할 수 있습니다.

!void 구문 - ! 반환 유형과 오류 유형 간의 통합을 만드는 데 사용됩니다. Zig는 함수에서 실제로 반환하는 모든 오류의 통합을 생성하는 ! 앞에 오류를 추가하지 않도록 지원합니다.

실제로는 이 구문이 도움이 되지 않습니다. 적어도 내 IDE 경험으로는 이 경우 어떤 지능도 얻지 못하며 이로 인해 기능이 덜 명확해집니다. 무엇을 돌려받을지 알려주세요!
main() 함수에서만 유용하다고 생각합니다.

페이로드 캡처

TS에서 숫자 | 한정되지 않은? if 또는 일부 논리를 사용하여 필요한 유형으로 범위를 좁힐 수 있으며 TS는 자동으로 새 유형을 올바르게 표시합니다.
쉽지만 이 접근 방식에는 문제가 있습니다.

  • 함수 전체에서 유형이 변경될 수 있으면 따라가기가 더 어렵습니다
  • 캐스트를 해야 하는 경우도 있습니다

Zig에서는 "페이로드 캡처"를 사용하여 이 작업을 수행합니다. 결과 유형으로 새로운 불변 ​​변수를 생성하는 일명 "캡처"를 수행할 수 있습니다. 예:

const maybe_num: ?usize = 10; // `?` Means it can be `null`

if (maybe_num) |num| {
    // Use num
}
로그인 후 복사

무슨 일이 일어나고 있는지 매우 분명합니다! 게다가 변수는 변경할 수 없지만 정말 변경해야 하는 경우 대신 값에 대한 포인터를 캡처할 수 있습니다.

이 메커니즘은 for, switch, catch 등을 포함하여 언어 전반에 걸쳐 사용될 수 있다는 점도 언급할 가치가 있습니다.

Comptime 헛소리

물론 저는 아직 comptime의 모든 가능성을 파악하지 못했습니다. 그러나 간단히 말해서 컴파일 중에 일반 코드를 실행할 수 있습니다. 이 시간에만 사용되는 전체 함수를 생성할 수 있으며, 필요한 경우 컴파일 오류를 반환할 수도 있습니다.

매우 유연한 언어이기 때문에 Zig와 매우 잘 어울립니다. 유형도 값입니다. 즉, 유형에 대한 정보를 생성, 변경 및 얻을 수 있습니다(특히 comptime에서).

Zig Guide의 기본 예:

const a = 5; // When a number type isn't specified, it defaults to comptime_int
const b: if (a < 10) f32 else i32 = 5;
// b: f32 after compilation
로그인 후 복사

편집자 경험

공식 Zig 플러그인(zls 사용)과 함께 VSCode를 사용하고 있습니다. 에디터에서 보이는 인텔리센스와 오류는 아쉬운 점이 많습니다.

"검출 가능한 불법 행위" 일명 컴파일 오류를 일으키는 불법 행위는 일반적으로 편집기에 표시되지 않습니다. 예:

const nums = [3]u8{ 2, 1, 3 };
_ = nums[4]; // Index out of bounds error
로그인 후 복사

저는 0.14(dev) 마스터 브랜치 버전을 사용하고 있습니다. 제대로 작동하려면 댓글로 알려주세요!

위 내용은 JS 개발자의 Zig 첫인상의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:dev.to
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿