23.06.15
DEVOTEE를 활성화 시키면
지금 작성한 커뮤니티 글에 대해 1개의 댓글을 달아줍니다.
버튼을 누르면 글 수정 시 ChatGPT가 작성한 댓글이 수정됩니다.
| 컨텐츠 유형 | 제목 | 저장일 | 삭제 |
|---|
본인인증 로그인에 실패하였습니다.
회원이 아니시거나 본인인증 등록이
완료되지 않은 사용자입니다.
안녕하세요 데보션 영 3기 5CEAN에서 활동 중인 권지원이라고 합니다.
우선 노래 좀 들으면서 시작할까요?
저는 종종 노래방에서 Linkin Park의 Given Up을 부르면서 스트레스를 풀곤 합니다. 코딩을 할 때는 유명한 락 밴드들의 노래를 하루종일 틀어놓고요.
노래를 들으며 코딩을 하다 보면 이런 생각이 들 수 있습니다. 프로그래밍 언어와 노래는 아무런 연관이 없을까?
"Just call my name, 'cause I'll hear you scream Master, Master"란 Metallica의 Master of Puppets 노래 가사를 보고, 프로그래밍 언어의 컴파일러를 생각해보는 겁니다.
call에게 print 란 키워드 역할을 주고, my name이 변수 이름이라고 가정하면?
call my name
Master hear your screamprint(my name)
Master = "your scream"공백을 기준으로 파싱하고, 특별한 규칙을 적용할 키워드를 정의한다면? 흥미로운 언어가 만들어지지 않을까?
실제로 이런 농담 같은 생각에서 만들어진 언어가 존재합니다. 바로 오늘 소개할 프로그래밍 언어인 Rockstar입니다.
The Art of Code 란 컨퍼런스를 보신 분 계신가요? 코드의 예술적인 면을 보여주는 아주 재미있는 강연입니다.
그중에서도 제 눈을 이끈건 영상 말미에 소개된 강연자 Dylan Beattie가 제작한 Rockstar란 언어입니다.
프로그래밍 언어 자체로도 아름다울 수 있다는 것을 깨닫게 해주었죠. 예제 코드를 한번 볼까요?
Midnight takes your heart and your soul
While your heart is as high as your soul
Put your heart without your soul into your heart
Give back your heart
Desire is a lovestruck ladykiller
My world is nothing
Fire is ice
Hate is water
Until my world is Desire,
Build my world up
If Midnight taking my world, Fire is nothing and Midnight taking my world, Hate is nothing
Shout "FizzBuzz!"
Take it to the top
If Midnight taking my world, Fire is nothing
Shout "Fizz!"
Take it to the top
If Midnight taking my world, Hate is nothing
Say "Buzz!"
Take it to the top
Whisper my world해당 코드는 Rockstar로 쓰인 Fizzbuzz입니다.
코드에 리듬만 붙이면 그럴싸한 노래가 될 것 같습니다.
Rockstar 언어의 핵심 가치인 "If you can't sing it, you can't have it"이 드러난 코드입니다.
그렇다면 Rockstar 언어는 어떻게, 그리고 왜 만들어지게 된 것인지 알아보겠습니다.
Rockstar란 메탈 가사처럼 보이는 프로그램을 작성할 수 있는 동적 타입 컴퓨터 프로그래밍 언어입니다.
Paul Stovell의 트윗에서 영감을 받아 Dylan Beattie에 의해 만들어진 언어로, 1980년대 하드 록과 파워 발라드 가사 컨벤션에 큰 영향을 받았습니다.
Rockstar 언어는 왜 만들어진 걸까요? Rockstar 개발자에 따르면 해당 언어는 순전히 농담에서 출발한 언어라고 합니다.
그리고 노래 가사를 컴파일하는 것이 멋지고 'CERTFIED ROCSTAR DEVELOPER'라고 스티커를 붙일 수도 있다는 점이 장점인 언어라 홍보하고, 그 이외에 기능적인 장점은 일절 언급하지 않습니다.
이것도 이 언어의 매력적인 점이라고 볼 수 있죠 😄
언어의 주요 특징으로는 거의 모든 코드가 문자라는 것입니다.
Rockstar의 주요 문법은 Hello World 코드 샘플을 분석해보며 훑어보겠습니다.
Eternity takes the pain.
The prize is silence
Until the pain is nothing,
Roll the pain into violence,
Cast violence into your lies,
Let the prize be with your lies.
Give back the prize
The night is calling me
Rock the night like a colourcast tranquility
The dawn is a spellbound moonbeam
Rock the night with the dawn, the dawn,
Your fire is a neverending aftereffect
Rock the night with your fire
The spirit is electric thunder
Rock the spirit with your fire
Rock the spirit like a thunderbolt fist
Rock the spirit with the dawn
Rock the spirit like a chamaeleon stormcloud
Let fear be eternity taking the night
Let hope be eternity taking the spirit
Time is all up
Cast it into the void
Let fear be with the void
Let fear be with hope
Shout fear해당 Rockstar 코드를 실행하면 콘솔 창에 Hello World가 출력됩니다. 엄청 길지만 참 멋진 코드입니다.
Rockstar에서는 주석을 소괄호로 처리합니다.
이번 게시글에서는 가볍게 알아보는 자리이므로 예제에 주석으로 코드가 의미하는 바를 분석해놓았고, 예제 밑에 주요 문법 특징을 적어보았습니다.
Eternity takes the pain. (함수의 시작점으로, 함수 이름은 Eternity, 파라미터 이름은 the pain이란 뜻입니다.)
The prize is silence (The prize의 값은 10진수 7 *poetic literals 참고)
Until the pain is nothing, (the pain의 값이 0이 될 때까지 반복되는 반복문)
Roll the pain into violence, (the pain의 첫번째 원소를 반환하고, 반환 값은 violence에 할당됩니다.)
Cast violence into your lies, (cast는 문자열을 숫자로 바꾸고, 숫자를 문자열로 바꿉니다. 앞서 violence에 저장된 값이 숫자 혹은 문자열로 바뀌어 your lies에 저장됩니다.)
Let the prize be with your lies. (the prize + your lies = the prize란 의미입니다.)
Give back the prize (the prize가 함수의 반환값이란 의미입니다.)Rockstar만의 독특한 언어 기능.
개발자 내면 깊숙한 곳의 공포, 두려움을 표현하도록 도와줍니다.
그중 poetic number literal에 대해 살펴볼까요?
변수 이름 + 키워드 is, are, was, were 뒤에 오는 해당 줄의 코드는 모두 10진수로 취급됩니다.
따라서 The prize == 7이 됩니다.
Rockstar에서 문자와 숫자는 유니코드를 기준으로 변환됩니다.
The night is calling me (the night = 72, calling == 7, me == 2라서 72)
Rock the night like a colourcast tranquility (the night = [72, 101])
The dawn is a spellbound moonbeam (The dawn == 108)
Rock the night with the dawn, the dawn, (the night == [72, 101, 108, 108])
Your fire is a neverending aftereffect (Your fire == 111)
Rock the night with your fire (the night + your fire -> the night == [72, 101, 108, 108, 111])Rock -> 배열에 원소 삽입
with 뒤에 있는 원소를 삽입
The spirit is electric thunder (The spirit == 87)
Rock the spirit with your fire (the spirit == [87, 111])
Rock the spirit like a thunderbolt fist (the spirit == [87, 111, 114])
Rock the spirit with the dawn (the spirit == [87, 111, 114, 108])
Rock the spirit like a chamaeleon stormcloud (the spirit == [87, 111, 114, 108, 100])변수 이름은 case insensitive이기 때문에 The dawn과 the dawn은 모두 같은 변수입니다.
Let fear be eternity taking the night (fear = eternity(the night) => "Hello")
Let hope be eternity taking the spirit (hope = eternity{the spirit} => "World")
Time is all up (Time == 32)
Cast it into the void (it은 가장 최근에 선언된 변수를 지칭합니다. Time = the void -> the void == 32, 32를 문자열로 바꾸면 '')
Let fear be with the void (fear + the void => "Hello" + " ")
Let fear be with hope (fear + hope => "Hello " + "World")
Shout fear ("Hello World"를 출력합니다.)Rockstar 깃헙 레포지토리에 있는 예제를 이용해 "Hello World"를 출력해보았습니다.
단순히 문자열만 출력하는 방법도 있지만 Rockstar 언어의 특징을 살려 "Hello World"를 출력한 코드를 보는 것이 더 의미있을 것 같아서 가져왔습니다.
가끔 공부를 하다 보면, 이런저런 것들을 따지느라 프로그래밍 언어 자체의 매력을 잊어버릴 때가 있습니다.
저는 그럴 때마다 재미난 것들을 탐구하며 시간을 보내곤 합니다. 이번 탐구 활동의 결과물인 프로그래밍 언어 Rockstar를 소개글을 작성해보았습니다.
거의 처음 작성해보는 게시글이라 글의 전개나 글이 어색한 면이 없지 않아 있지만, 제가 해당 언어를 보고 느꼈던 즐거움이 전해졌으면 좋겠습니다.
최근에는 상대적으로 친숙한 언어인 Java로 Rockstar 컴파일러를 조금씩 제작하고 있는데, 생각보다 쉽지 않네요 🥲
모두 힘들더라도 🤘Rock n' Roll 🤘하며 이겨냅시다. 화이팅 !!
앞서 언급한 The Art of Code 컨퍼런스 번역본에 관심 있으신 분 계신가요?
DEVOTEE를 활성화 시키면
지금 작성한 댓글에 AI가 댓글을 달아줍니다.