프로그래밍 언어를 만들고 있습니다. 어떻게 생겼어?

안녕.



나는 또 다른 프로그래밍 언어를 만들고 있는데 당신이 여기 있는 이유는 당신이 직접 만드는 데 흥미가 있거나 프로그래밍 언어가 어떻게 만들어지는지 배우고 싶어하기 때문일 것입니다.
솔직히 말해서, 우리는 다른 프로그래밍 언어가 필요하지 않을 것이며, 당신이 합리적으로 요구할 수 있는 만큼 기존의 언어가 훌륭하다고 확신합니다. 따라서 내 언어의 핵심을 설명하기 전에 내가 왜 이 일을 하기로 결정했는지 설명해야 할 것입니다.
  • 프로그래밍 언어를 만드는 것은 재미있다! 그리고 이것은 온라인에서 찾을 수 있는 많은 자습서를 능가할 것입니다.
  • 그렇다고 이것이 완전히 연습이라는 것은 아닙니다. 이 언어를 마치면 이 언어를 광범위하게 사용할 것입니다!
  • 나는 Rust(이 언어의 대부분이 기반이 됨)를 좋아하지만 완전히 솔직히 말해서 나는 그것을 효과적으로 사용하기에는 너무 멍청하다고 느낍니다. 그래서 분명히 Rust를 배우고 능숙해지는 데 시간을 할애하는 대신 완전히 새로운 프로그래밍 언어를 만들기로 결정했습니다!

  • 이것이 제가 이것을 시작하게 된 세 가지 동기이며, DEV.to는 프로그래밍 언어를 만드는 방법에 대한 내 생각/세미 튜토리얼의 일종의 블로그/두뇌 덤프 역할을 할 것입니다. 내가 성공하기를 바랍니다. 즐기다!

    자, 드디어 제목의 질문에 답할 시간입니다.

    그래서 어떻게 생겼어?



    음, TL;DR 방식으로 이 언어의 폭을 설명하는 코드 스니펫이 있습니다.

    use date
    use strings
    
    struct Message: strings::ToString {
      string message = "Hello World"
      date::Time time
    }
    
    impl Message {
      toString(&self) string {
        return strings::Builder()
          .push("[").push(self.time).push("]: ")
          .push(self.message)
          .build()
      }
    }
    
    main() {
      time := date::Time.now()
      mut msg := Message{
        message: default,
        :time
      }
      msg := msg.message + "!"
      println(msg) // [UTC 11:44:23 27/1/22]: Hello World!
    }
    


    보시다시피 Go , Rust , V , 그리고 Pony 에서 영감을 얻은 일부 구문 설탕의 융합입니다. 나는 그것이 거의 모든 사람에게 친숙하고 전체적으로 그루크하기 쉽다고 생각합니다. 나는 Bob Nystrom과 그의 책 "Crafting Interpreters"에서 언어 디자인에 많은 영감을 받았습니다.

    그런데 어떻게 이런 디자인을 하게 되었나요?



    계획. Google 슬라이드 프리젠테이션에 내용을 작성하고(지금까지 슬라이드가 100개가 넘었는데... 마음에 들지 않습니다) 디자인 선택에 대해 토론하는 데 많은 시간이 소요되었습니다. 언어 디자이너에게 언어에 대한 몇 가지 핵심 공리를 만들 것을 적극 권장합니다. 여기 내 것:
  • 모양 및 느낌 > 일관성 > 가독성 > 쓰기 가능성 > 설탕.
  • 명확성과 균일성은 훌륭하지만 이것이 주요 언어 기능에 액세스하기 어렵게 만들면 안 됩니다.
  • 프로그래밍 언어는 메모장이나 Google 문서도구로 작성하는 것이 재미있어야 합니다. 그렇다고 해서 편리하다는 것은 아닙니다.
  • 올바른 컨텍스트가 주어지면 IDE가 코드를 이해하는 데 필요하지 않아야 합니다.
  • 언어의 약속에 대해 약간 거짓말을 하는 것은 괜찮습니다. 객관적으로 정확한 총괄 진술 같은 것은 없습니다. (그 자체가 담요 진술입니다 :P)
  • 언어 표준에 대한 예외는 직관적이어야 합니다.

  • 그리고 무엇보다도 "프로그래머가 더 나은 코드를 작성할 수 있도록 언어가 제시하는 제한 사항이 있어야 합니다."
    이것들이 제가 언어를 더 잘하는 데 도움이 되기를 바랍니다. 그리고 지금까지 그것들은 제가 어려운 결정을 내리고 무엇을 잘라내고 무엇을 유지해야 하는지 아는 데 도움이 되었습니다.

    글쎄... 지금은 그게 다야. 이것은 Cure에 대한 시리즈의 첫 번째 게시물이므로 언어 ​​디자인 드롭 및 개발 업데이트를 계속 지켜봐 주십시오. 아래에 어떻게 생각하는지 알려주고 언어에 대한 아이디어를 좋아하거나 싫어하는지 확실히 말해주세요. 확실히 이 문제에 대해 더 많은 외부 영향이 필요하다고 느낍니다. 언어에 대한 모든 정보가 있는 웹사이트를 만들려고 하고 있지만 시간이 좀 걸릴 수 있습니다.

    좋은 시간 되시고 행복한 발전하세요!

    좋은 웹페이지 즐겨찾기