공식 문서 / 언어 매뉴얼 / ReScript 문법으로 변경하기
Edit

BuckleScript/Reason에서 ReScript 문법으로 변경하기

ReScript는 BuckleScript v8.2.0과 Reason v3.6 이후의 버전을 정화하여 리브랜딩한 언어로, 더 견고한 compile-to-JS 스택, 더 이해하기 쉬운 문서와 툴링을 갖춤으로써 더 나은 개발 환경을 제공하게 되었습니다. 지금도 BuckleScript와 Reason 사용한다면, 다음 내용을 참고하세요.

  • ReScript의 많은 부분이 BuckleScript의 이미지를 새롭게 리브랜딩한 것으로, Reason과 닮아있지만, 더욱 JavaScript 사용자층을 고려한 새로운 문법들을 제공합니다.

  • 업그레이드하지 않아도 기존의 코드들은 잘 작동할 것입니다.

코드 베이스 업그레이드하기

리브랜딩 된 ReScript에는 새로운 기능과, 속도, 에러 메시지 등 여러 흥미로운 개선 사항이 있습니다. 이 업그레이드는 간단하고 이전 버전과 호환되며 파일 단위로 수행할 수 있습니다:

npm install rescript@9 # Also works with .rei / .ml / .mli / etc npx rescript convert src/MyFile.re

향상된 개발 경험을 즐겨보세요!

개별 폴더 업그레이드하기

다음은 디렉토리별 변환에 유용합니다:

CONSOLE
# *.rei, *.ml, *.mli,.... for f in your-folder/**/*.re; do; node_modules/.bin/rescript convert $f && rm $f; done;

코드 베이스 전체를 업그레이드하기

코드 베이스를 한 번에 변환하고 싶다면 다음을 참고하세요:

npx rescript convert -all

이전 Reason과의 차이점

  • 세미콜론을 완전히 제거해도 됩니다. (물론 사용도 가능합니다)

  • if, switch, try 구문 들에서 괄호가 필요하지 않습니다.

  • option(int)에서 option<int>로 타입 인자 구문이 변경됩니다.

  • 이전 {j|hello ${name}|j}로 작성했던 문자열 보간을 j`hello ${name}`라고 작성하며, 완전한 유니코드 지원도 갖추게 되었습니다.

  • 백틱(backtick)을 사용하는 새로운 문자열 보간법인 `hello world`는 멀티 라인 지원과 유니코드 지원도 갖추게 되었습니다. "hello world" 문자열은 이제 싱글 라인입니다.

  • 폴리모픽 배리언트는 `red 에서 #red처럼 앞에 샾을 붙여 사용하도록 변경됐습니다.

  • 배열은 [|1,2,3|] 에서 [1,2,3]로 JavaScript의 기본 배열처럼 사용합니다.

  • 리스트는 [1,2,3] 에서 list[1,2,3]와 같이 바뀌었었고, 8.1.1 업데이트 이후로는 list{1, 2, 3}처럼 사용합니다. 이는 set[...]map[...]처럼 통일된 방식으로 자료 구조(containers)에 접근하려는 향후 계획과 관련이 있는데, 일시적인 의견일 수도 있습니다.

  • 예외 처리는 try (compute()) { | Not_found => Js.log("oops")} 에서 try compute() catch { | Not_found => Js.log("oops")}와 같이 바뀌었습니다.

  • 1급 모듈(First class module)은 (module S: Student) 에서 module(S: Student)와 같이 바뀌었습니다.

  • mod를 포함한 커스텀 인픽스 오퍼레이터를 더 이상 사용할 수 없습니다.

  • 객체 접근은 settings##visible #= true 에서 settings["visible"] = true와 같이 바뀌었는데, 좀 더 JavaScript 같아진 이 점을 개발자들이 누리길 바랍니다!

  • 객체는 Js.t({"age": int})였던 것을 {"age": int}처럼 간단히 나타낼 수 있게 되었습니다. 이제 Js.t는 더 이상 필요하지 않습니다.

  • 어트리뷰트는 [@myAttribute "hello"]에서 @myAttribute("hello")와 같이 변경되었습니다. 정규 표현식도 [%re bla] 에서 %re(bla)처럼 바뀌었습니다.

  • result^와 같은 역참조 구문은 삭제되었습니다. 대신에 `result.contents``와 같이 사용합니다.

  • fun구문을 사용한 패턴 매칭 문법은 삭제되었습니다.

  • 타입 선언은 기본적으로 비재귀적이며 let 바인딩과 일치합니다. 재귀 타입을 만들기 위해서는, type rec myList<'a> = Nil | Cons('a, myList<'a>)와 같이 사용합니다.

  • let \"try" = true와 같이, 예약된 키워드를 포함한 모든 단어를 식별자 이름으로 사용합니다.