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
와 같이, 예약된 키워드를 포함한 모든 단어를 식별자 이름으로 사용합니다.