Kinx v0.21.0 미리보기 출시

8481 단어 rubyjavascriptkinx
모두들 안녕!

Kinx v0.21.0 프리뷰 릴리즈를 공개했습니다! Release PageKinx를 봐 주세요

소개



버전 0.21.0에서는 패턴 일치, case-when 및 switch-when 구문에 의한 할당을 새로 지원했습니다.
  • 참고
  • 첫 번째 동기 ...
  • Kinx, 나는 C 계열의 구문을 가진 스크립팅 언어를 원했습니다.

  • 리포지토리 ... https://github.com/Kray-G/kinx
  • pull 요청을 기다리고 있습니다.



  • 패턴 매칭



    패턴 매칭은 매우 유용합니다. 예를 들어 다음과 같은 선언에서 사용할 수 있습니다.

    var [a, b, , ...c] = [1, 2, 3, 4, 5, 6];
    var { x, y } = { x: 20, y: { a: 30, b: 300 } };
    var { x: d, y: { a: e, b: 300 } } = { x: 20, y: { a: 30, b: 300 } };
    
    System.println("a = ", a);
    System.println("b = ", b);
    System.println("c = ", c);
    System.println("d = ", d);
    System.println("e = ", e);
    System.println("x = ", x);
    System.println("y = ", y);
    
    // => .y.b requires 300, but it is 3 in actual.
    var { x: d, y: { a: e, b: 300 } } = { x: 20, y: { a: 30, b: 3 } };
    


    마지막 경우에는 오른쪽이 왼쪽의 패턴과 일치하지 않습니다. 따라서 NoMatchingPatternException 예외가 표시됩니다.

    a = 1
    b = 2
    c = [4, 5, 6]
    d = 20
    e = 30
    x = 20
    y = {"a":30,"b":300}
    Uncaught exception: No one catch the exception.
    NoMatchingPatternException: Pattern not matched
    Stack Trace Information:
            at <main-block>(test.kx:14)
    


    할당, 함수의 인수, case-when에서도 동일한 기능을 사용할 수 있습니다.

    관련 기능에 대한 설명은 다음과 같습니다.

  • 선언 ... https://github.com/Kray-G/kinx/blob/master/docs/spec/statement/declaration.md

  • 할당 ... https://github.com/Kray-G/kinx/blob/master/docs/spec/statement/expression/assign.md

  • 함수 인수 ... https://github.com/Kray-G/kinx/blob/master/docs/spec/definition/function.md

  • 경우 - 때 ... https://github.com/Kray-G/kinx/blob/master/docs/spec/statement/expression/case_when.md

  • 전환 시기



    나는 fallthrough인 case-when 대신 fallthrough가 아닌 switch-case를 만들고 싶다고 생각했습니다.
    하지만 성능에 문제가 있었습니다.
  • case-when 패턴 매칭으로 조건을 평가하도록 설계되었습니다. 이는 조건 평가 순서가 위에서부터 순차적임을 의미합니다.
  • 반면 switch-case는 조건을 평가하는 순서가 정의되어 있지 않습니다. 즉, if-else 로 변환되거나 이진 검색으로 변환되거나 테이블별로 점프로 변환됩니다. 특히, 테이블로 점프하는 것은 퍼포먼스의 포인트에서 중요하다.

  • 따라서 switch-when 대신 switch-case 를 도입했습니다. when 레이블 대신 case 레이블을 사용할 수 있습니다. when 레이블을 사용하면 break 절의 마지막 문장 뒤에 when 문장이 자동으로 삽입됩니다.

    물론 else: 레이블 대신 default: 레이블을 사용할 수 있습니다. else: 레이블은 default:break를 의미합니다.
    when 에서 대체를 사용하려는 경우 fallthrough 의 마지막 문에서 when 키워드를 사용할 수도 있습니다.

    결론



    가끔 '왜 switch-case에서 fallthrough를 선택하셨나요?'', '잘못된 선택이군요.''라는 반응을 받기도 했습니다. switch-when 그에 대한 답이 될 거라 생각합니다. Kinx의 약점 중 하나가 제거됩니다.

    나는 당신이 Kinx의 사용자가 되어 이 언어로 무언가를 시도하기를 바랍니다. 어떤 피드백이든 환영합니다.

    또 봐요!

    좋은 웹페이지 즐겨찾기