관점을 바꾸세요

3860 단어 computerscience
자신의 런타임을 가져와야 하는 언어를 상상해 봅시다.

내 말을 이해하기 위해 프로그래밍 언어가 작동하는 방식에 대해 조금 검토해 보겠습니다.

계산기로 시작하세요 🧮



ti-89나 값비싼 1980년대 기술 학교에서 요즘 학생들이 사용하는 것이 무엇이든 입력할 때 언어를 입력하는 것입니다. 그 언어에는 렉서(lexer)와 파서(parser), 런타임과 모든 것이 있습니다.

다음을 수행하십시오.

1 + 1


계산기가 1 + 1 를 만나면 다음과 같이 받은 문자열을 토큰으로 변환합니다.

INT(1) PLUS INT(1)


그런 다음 다음과 같은 재귀 하강 파서를 통해 해당 토큰을 실행합니다.

int() {
  return items.pop()
}

expr() {
    left = int()
    op = items.pop()
    right = int()

    return int() + int()
}


마지막으로 expr()를 호출하여 사용자에게 반환합니다.

프로그래밍 언어는 표현식으로 끝납니다.



하루가 끝나면 프로그래밍 언어는 리터럴을 평가한 다음 런타임을 통해 일부 운영 체제 기능을 호출합니다.

따라서 더 "프로그램적인"언어는 다음과 같이 할 수 있습니다.

print(1 + 1)


다음 중 하나로 전송됩니다.

PRINT LEFT_PAREN INT(1) PLUS INT(1) RIGHT_PAREN


다음과 같이 바뀔 것입니다.

root() {
  system.print(expr())
}


우리의 판타지 언어로 돌아가기



기존 프로그래밍 언어에서 런타임은 컴파일러 아래에 숨겨져 있습니다. 사실, 언어의 요점은 런타임을 사용자로부터 추상화하는 것이었습니다.
print() 또는 open() 만 실행할 수 있기 때문에 어떤 시스템 명령이 함수를 인쇄하거나 파일을 여는지 알 필요가 없습니다.

런타임을 일급 시민으로 만들면 어떻게 될까요?



대신에 대체 런타임을 작성하도록 권장하고 지원받았던 언어를 상상해 보겠습니다.

예를 들어, 프로그래밍 언어가 print 라고 말하면 print 의미를 정확히 정의할 수 있습니다.

대신 인쇄물에서 임의의 TTS(텍스트 음성 변환) 코드를 호출할 수 있습니다. 웹에 있는 경우 구성 요소를 반환할 수 있습니다. 또는 임의의 함수를 호출할 수도 있습니다.

관점을 바꾸세요



종종 우리는 소프트웨어를 극도로 불변하는 기반, 즉 언어 런타임에서 실행되는 끊임없이 변화하는 시스템으로 생각합니다. 대부분의 언어의 요점은 모든 사람의 컴퓨터에서 동일하게 실행되는 도구를 제공하는 것입니다.

런타임은 여러 운영 체제와 하드웨어를 추상화하므로 논리가 일정하게 유지된다는 것을 항상 확신할 수 있습니다.

그러나 그렇게 함으로써 우리는 종종 실수로 코드의 논리를 코드가 실행되는 도메인에 연결했습니다. 동일한 "데이터베이스와 통신하는 웹 서버"솔루션을 다시 작성하는 데 수많은 시간이 낭비되었습니다.

대신, 상수 런타임으로 작업하는 대신 상수 코드로 작업하면 어떨까요?

패키지 관리자에서 "웹 서버 코드"를 가져와서 하위 수준 부분이 수행한 작업을 다시 작성하면 어떻게 될까요? 전체를 직접 다시 작성하는 것보다?

CRUD 앱은 언어의 출력을 다시 작성하여 iOS, Android 및 웹에서 작동하도록 다시 작성할 수 있습니다.

워, 워, 워, 정말 불안하지 않습니까?



아마. 보안 혜택이 될 수도 있지만. 개별 사용자에게 런타임의 기능을 제공할 수 있다고 상상해 보십시오.

프로그램을 실행한 사람은 누구나 안전하지 않은 호출을 차단할 수 있습니다. 더 이상chmod 또는 신뢰할 수 없는 프로그램에 대한 네트워크 호출이 없습니다.

이게 무슨의미입니까?



이런 식으로 건물을 짓는 것은 어리석은 일입니다. 이와 같은 언어로 해결할 수 있는 대부분의 문제는 다른 방식으로 해결되었습니다.

운영 체제에는 더 나은 액세스 제어가 있고 모듈화를 통해 자체 의사 런타임을 가질 수 있으며 유용하기에는 너무 이상할 수 있습니다.

그러나 기존 문제를 해결하기 위한 대안적인 방법을 탐색하면 두뇌의 흥미로운 근육을 작동시킬 수 있습니다. 약간의 재미도 있습니다.

좋은 웹페이지 즐겨찾기