많은 프로그래밍 언어의 문장이 세미콜론으로 끝나는 이유는 무엇입니까?


130

세미콜론이 다른 기호 대신 줄 종결 자로 선택된 이유가 있습니까?

저는이 결정의 역사를 알고 싶습니다. 그리고 그 대답이 미래의 결정에 영향을 줄 수있는 통찰력으로 이어지기를 바랍니다.


6
얼랭과 프롤로그는 풀 스톱을 사용합니다.
Dave Clarke

13
얼마나 많은 프로그래밍 언어를 알고 있는지 궁금합니다. 세미콜론을 사용하지 않는 언어가 많이 있습니다.
knivil

50
대답은 "세미콜론의 ASCII 값은 80 문자 펀치 카드의 마지막 문자로 사용될 때 특히 내구성이 있습니다"와 같은 것으로 밝혀 질 것입니다.
Ryan Thompson

22
귀하의 질문은 충분하지 않습니다. 진짜 질문은 "왜 어떤 상징인가?"
Konrad Rudolph

5
쿼티 키보드의 홈 열에 있기 때문에?
wim

답변:


132

영어에서 세미콜론은 문장 목록에서 항목을 구분하는 데 사용됩니다 (예 :

그녀는 세 남자를 보았다 : Jamie, 뉴질랜드 출신. 우유 배달원의 아들 존; 그리고 건전한 남자 조지.

프로그래밍 할 때 많은 문장을 분리하고 완전 정지를 사용하면 소수점을 쉽게 혼동 할 수 있습니다. 세미콜론을 사용하면 일반적인 영어 문장 부호에 가깝게 유지하면서 개별 프로그램 문장을 분리하는 방법을 쉽게 파싱 할 수 있습니다.

추가 편집
메모리가 비싸고 처리 속도가 느리고 첫 번째 프로그래밍 언어가 고안된 초기에는 처리를 위해 프로그램을 별도의 명령문으로 분할해야했습니다. 일부 언어에서는 캐리지 리턴이 명령문 분리 문자로 작동 할 수 있도록 각 명령문을 줄에 배치해야했습니다. 다른 언어는 텍스트 레이아웃에 더 자유로운 형식을 허용하므로 특정 구분 문자가 필요했습니다. 이 문자는 세미콜론으로 선택되었습니다. 영어에서 사용하는 것과 유사하기 때문에 (이것은 가정이 아니어야합니다. 당시에는 없었습니다.) 다른 구두점과 충돌하지 않았기 때문입니다. 수학 또는 기타 구문 목적으로 필요한 마크 및 기호.

다시 편집
일부 종료 문자가 필요하면 언어 텍스트 구문 분석 요구 사항으로 돌아갑니다. 초기 컴파일러는 어셈블리 언어로 작성되거나 경우에 따라 직접 제작 된 이진 기계 명령어로 작성되었습니다. 명령문의 끝을 식별하고 처리중인 텍스트 청크를 구분하는 특수 문자를 사용하면 처리가 훨씬 쉬워집니다. 위에서 말했듯이 다른 언어는 캐리지 리턴 또는 괄호를 사용했습니다. Algol, Pascal, Ada, BCPL, B, C, PL / M 및 기타 언어 군은 세미콜론을 사용합니다. 이 특정 인물을 처음 사용한 사람에 관해서는, 나는 역사상 기억하기에 충분하지 않습니다. 선택과 채택은 다음과 같이 완벽합니다.

  • 그것의 사용은 일반적인 영어 구두점에서의 사용을 반영합니다.
  • 다른 문자 (예 : 완전 정지)는 이미 공통으로 사용되므로 혼동 될 수 있습니다 (완전 정지는 소수점으로도 사용됨).
  • 눈에 띄는 문장 부호 문자는 자유 형식 코드 레이아웃을 허용합니다.
  • 파생 언어 나 그 이후의 언어에서 비슷한 구분 문자를 사용하면 이전 언어를 사용한 모든 프로그래머가 친숙하게 사용할 수 있습니다.

마지막으로, 나는 이런 식으로 사용 된 첫 번째 언어를 설계 할 때 세미콜론을 사용하여 진술을 끝내기로 결정하는 데 소비 한 것보다 이러한 답변과 의견에 더 많은 시간을 소비했다고 생각합니다.


19
완전히 정확하지는 않습니다. 세미콜론은 문장을 블록으로 분리합니다. 각 블록은 문장을 사용해야하지만 세미콜론을 사용하여 두 문장 사이에 강한 연결이 있음을 나타냅니다. 쉼표와 완전 정지 사이의 절반이므로 실제로 정지 점이지만 한 문장을 다음 문장에 연결합니다. 위의 문장은 "그녀는 세 명의 남자를 보았습니다. Jamie : 뉴질랜드 출신 인 John, 우유업자의 아들, George : 건전한 남자." 세미콜론 사용은 쉼표로 대체 될 수 있습니다. 주제를 제외하지만 요점은 본질적으로 동일합니다. 그것은 진술을 나눕니다.
alex.p

40
@ alex.p는 문장을 혼동시킬 때 실제로 세미콜론을 사용할 수있는 쉼표 대신 사용됩니다.
Ryathal

13
세미콜론에 대한 중요 정보 : theoatmeal.com/comics/semicolon
Ed James

7
@ alex.p : Ian의 사용이 잘못되었다고 말하는 같지만 세미콜론을 사용하는 방법에 대한 그의 설명이 불완전하다고 말할 수도 있습니다. 당신이 그가 틀렸다고 말하면, 당신은 틀렸어요. 그의 세미콜론 사용은 전적으로 관습 적이며, 나는 당신이 제시 한 예보다 훨씬 더 일반적이라고 생각합니다. 당신이 단순히 그가 철저한 설명을하지 않는다고 말하면, 그것이 왜 언급 할 가치가 있는지 잘 모르겠습니다.
iconoclast

17
@Ian "이것은 가정이되어야하는데, 당시에는 없었습니다."당신은 (올바르게) 세미콜론을 사용할 수있는 완벽한 기회를 놓쳤습니다. :)
Travis Christian

70

많은 언어들이 C 이후에 모델링 된 구문을 사용합니다 ( B 이후에 모델링되었습니다 -thanks @Crollster). 주석에서 볼 수 있듯이, 그러한 언어의 긴 사슬이 있습니다 ... B는 PL / I에서 영감을 얻었으며 ALGOL ;은 분리 기호로 사용했습니다 .

C에서는 명령문 종결자가이므로 ;이러한 언어가 적합합니다.

가능성이 있기 때문에 영어의 사용의 -이 C에서 문 종료로 선정 된 이유에 대해서는 "상호 의존적 문을 나타 내기 위해" .

C는 또한 문자 집합에 사용 가능한 메모리의 양이 제한되어있는 PDP-11에서 발명되었으므로 언어의 발명가는 이러한 제약 내에서 작동해야했습니다.


8
전신 'B'에 의해 사용되는 C는 세미콜론을 사용하는 규칙을 이어
Crollster

8
B는 이전 버전 인 'PL / I'에서 사용 된 세미콜론 사용 규칙을 따랐습니다.
Skomski

15
@Skomski-무엇을 따랐습니까? 나는 마지막 거북이가 들어 오기를 기다리고 있습니다.)
Oded

26
-1; 얘들 아, 우리 모두 큰 영향력을 가진 ALGOL을 잊었습니까? 그것은 당신이 언급하는 다른 모든 것 앞에 문장 분리 자로 세미콜론을 가지고있었습니다. (나는 그것이 다른 곳에서 아이디어를 취했는지 모르겠다)
hugomg

13
@Oded- 거북이 라고 생각합니다 . * 8 ')
Mark Booth

54

FORTRAN은 캐리지 리턴을 사용하여 명령문을 설명했습니다. COBOL 사용 기간. LISP는 모든 것을 괄호에 의존하여 아무것도 사용하지 않았습니다. ALGOL은 세미콜론을 사용하여 명령문을 구분하는 첫 번째 언어입니다. PASCAL은 세미콜론을 사용하여 명령문을 구분하여 ALGOL의 리드를 따랐습니다.

PL / I는 세미콜론을 사용하여 명령문을 종료했습니다. 차이가 있으며 PASCAL에서 쉽게 볼 수 있습니다. Ada는 ALGOL이 아닌 PL / I의 한 가지 항목을 이끌었습니다.

컴퓨터 과학 커뮤니티는 명령문 구분 기호 또는 종결 자로 사용되는 세미콜론을 유용한 표기법으로 빠르게 받아들였으며, 내가 아는 한 이후의 모든 블록 구조 언어는 ALGOL의 리드를 따르고 세미콜론을 사용하여 명령문을 분리하거나 종료했습니다.

BCPL은 수년 전에 세미콜론 캐리지 리턴을 명령문 구분 기호 / 종료 자로 사용한다고 들었지만 언어를 직접 사용한 적이 없으며이를 확인할 수 없습니다. 어느 시점에서 BCPL 자손으로부터 분리 또는 종료 명령문에 캐리지 리턴을 사용하지 않았습니다. BCPL은 B, B는 C, C는 C ++, Java, D, PASCAL 및 Ada보다 훨씬 덜 고려 된 것들을 낳았습니다.


2
세미콜론이나 줄 바꿈이 최근에 다시 등장한다는 점에 유의해야합니다. Javascript, Lua, Go 및 Haskell은 구문 상 유효한 경우 개행에서 암시 적 세미콜론을 갖습니다. 물론 개행 문자를 구분 기호로 유지하는 일부 언어도 있습니다. 쉘과 파이썬이 여기에 떠 오릅니다.
Jan Hudec

2
"상당히 +1 파스칼과 에이다보다 더 잘 생각 - 아웃"
아 디트

2
Algol 60 의 전구체 인 Algol 58 은 세미콜론을 사용했다. 당시에는 입력 장치가 매우 제한되어 있기 때문에 언어의 출판 형식과 실제 입력 형식이 구분되는 경우가 많았습니다 (대문자 만 등). 이분법은 실제로 FORTRAN에는 해당되지 않지만 다른 언어의 수.
Dan Halbert

5
@kevincline : 보잉 777이 일반적으로 사용되고 있다고 생각하십니까? 비행기를 비행하는 항공 전자 소프트웨어의 모든 라인은 Ada로 작성됩니다.
John R. Strohm 2016 년

2
@kevincline Skype : 델파이 (파스칼)로 작성되었습니다. 마이크로 소프트는 인수 후이를 변경하려고했지만 성공적으로 이식 할 수 없었으므로 이제 델파이 라이센스를 구매하고 있습니다. 미국에서 TV를 본 적이 있습니까? 이 스테이션은 델파이로 작성된 WideOrbit의 소프트웨어에서 실행됩니다. 그들은 큰 마진으로 시장의 선두 주자입니다. 테마 파크에 가본 적이 있습니까? 발권 시스템이 델파이로 작성되었을 가능성이 높습니다. 파스칼은 도처에 있습니다. 그것은 단지 많은 사람들이 경쟁자들이 알지 못하도록 조용히 유지하려고하는 강력한 경쟁 우위를 제공한다는 것입니다.
메이슨 휠러

14

왜 다른 상징이 아닌가?

일부 언어는 다른 기호를 사용했습니다. 예를 들어, 이전 버전의 BASIC은 대신 콜론을 사용했습니다.

그러나 몇 가지 예외를 무시하면 두 가지 주된 이유가 있다고 생각합니다. 첫 번째는 단순히 모호하지 않은 것을 찾고 있다는 것입니다. 일반적인 구문 분석기에서 현재 명령문 구문 분석을 계속할 수없는 심각한 오류가 발생하는 경우 일반적으로 명령문 종결 자로 건너 뛰고 구문 분석기를 다시 시작하여 구문 분석기를 다시 동기화하려고합니다. 다음 진술의 시작. 이를 위해 코드의 다른 곳에서는 일반적으로 발생하지 않는 것을 원하고 세미콜론은 다른 의미가 거의없는 기호이므로 이러한 목적에 맞게 쉽게 사용할 수 있습니다.

두 번째 이유는 다소 비슷하지만 사람들이 코드를 읽고 사용하는 것을 목표로합니다. 다시 말하지만, 실제로 사용하는 기호는 중요하지 않습니다. 가능한 경우 독자가 특정 목적을 위해 익숙한 기호를 사용하여 얻을 수있는 가독성에는 상당한 이점이 있습니다. 그렇다고 C가 하나의 완벽한 구문이고 다른 모든 것들이 노예로 따라야한다는 것을 의미하지는 않지만, 유사하게 유사한 언어가 다음과 같이함으로써 모호하게 유사한 언어가 많이 얻음 (그리고 거의 잃지 않음)을 알고 있습니다. 가능한 동일한 구문입니다.

이것은 거의 다른 프로그램을 디자인하는 것과 매우 흡사합니다. 일종의 창을 사용하는 프로그램을 작성하면 대상 플랫폼의 기본 기능을 사용하려고합니다. 구현하는 많은 결정은 대부분 임의적이며 기능의 큰 손실없이 다르게 수행 될 수 있습니다. 그러나 기능의 실질적인 이득 없이 결정을 변경하면 유용한 작업을 수행하지 않고도 사용자를 혼란스럽게합니다. "언어에서 문장을 종료 (또는 분리)해야하는 것은 무엇입니까?"에도 동일한 기본 원칙이 적용됩니다. "스크롤 막대의 모양"또는 "트리 컨트롤의 작동 방식" 이 모든 경우에있어서, 결정은 대부분 임의적이며, 균일 성은 그 자체로 실질적인 이점을 제공한다.

필자는 프로그래밍하기 전에 대부분의 사람들이 익숙해 져서 거의 모든 사람들이 그것에 대해 생각하는 방식으로 많은 언어에서 똑같은 일이 발생한다고 덧붙였다. 왜 모두가 "+"를 사용하여 더하기를 나타내거나 "-"를 사용하여 빼기를 나타 냅니까? 심볼의 모양은 중요하지 않지만 각 심볼에 동일한 의미를 적용하는 데 동의하는 모든 사람은 매우 중요합니다.


"대부분 임의적 인"부분에 동의 할 수는 없지만 매우 좋은 점 (+1)입니다. 더 직관적 인 것들과 덜 직관적 인 것들이 확실히 있다고 생각합니다. Windows에서 X를 사용하여 창을 닫을 때 기존의 상징이 일부 모호하게 연결되어있을 수 있습니다. 그리고 OS X의 색상 사용에는 확실한 상징성이 있습니다. (내가 사용한 것을 기억하지 못하기 때문에 M $ Windows가 X Windows에서 X를 도난 당했을 때를 무시하고 있습니다.)
iconoclast

3
@Brandon : GUI 디자인의 모든 부분이 임의적 이라고 말할 의도는 없었습니다. 아마도 "가장"대신 "일부"라고 말했을 것입니다. "창 닫기"아이콘의 특정 모양을 정의한 것은 X가 아니며 개별 창 관리자에 달려 있습니다.
Jerry Coffin

내가 기억할 수 있도록, 원래의 Dartmouth BASIC은 캐리지 리턴만을 사용하여 명령문을 종료했습니다 (즉, 라인 당 하나의 명령문). 나는 THINK 콜론으로 구분 한 줄에 여러 개의 문, 마이크로 소프트 확장했다.
John R. Strohm

7

세미콜론은 원래 Algol 60 에서 종결자가 아닌 명령문 분리 자로 제안되었습니다 .

Algol 60 이전에는 유일하게 존재하는 고급 프로그래밍 언어 인 Fortran은 각 문장이 별도의 줄에 있어야했습니다. do-loops와 같이 여러 줄에 걸친 문장은 이상한 것으로 간주되어 'statement blocks'로 간주되었습니다.

Algol 60의 설계자들은 진술이 계층 구조 (if-then-else, do-loops, case statement 등)를 필요로하며 서로 중첩 될 수 있음을 깨달았습니다. 따라서 각 진술이 별도의 줄에 있다는 생각은 더 이상 의미가 없었습니다. 형태 S1의 진술의 순차적 인 구성; S2; ...; 선택적으로 시작 - 괄호로 묶인 Sn을 복합 문장 이라고 하며 Algol 60에 의해 구상 된 문장의 계층 적 구조에 맞습니다. 따라서 세미콜론은 분명히 종결자가 아닌 문장 구분 기호 입니다.

이것은 실제로 문제를 일으켰다. Algol 60은 또한 아무 것도 쓰지 않는 "빈 문장"을 가지고있었습니다. 따라서 세미콜론이 마치 S1을 종료하는 것처럼 나타나는 곳에 " begin S1; end "를 쓸 수 있습니다. 그러나 Algol 60 컴파일러는 이것을 S1과 그 뒤에 나오는 보이지 않는 빈 명령문 사이의 분리 자로 취급했습니다. 이 미묘한 부분은 실제 프로그래머에게는 약간이었습니다. Assembly와 Fortran과 같은 행 지향 언어에 익숙해 졌으므로 세미콜론은 문장의 종결 자로 생각했습니다. 프로그램이 작성 될 때 일반적으로 세미콜론은 다음과 같이 명령문 끝에 넣습니다.

    a [i] : = 0;
    나는 : = i + 1

세미콜론은 실제로 첫 번째 문장의 종결 자처럼 보였습니다. 프로그래머가 세미콜론을 종결 자로 처리하면 다음과 같은 구문으로 구문 오류가 발생합니다.

    i> 0이면
      a [i] : = 0;
    그밖에
      a [i] : = 1;

세미콜론이 "if"를 종료하고 "else"가 매달려 있기 때문입니다. 프로그래머들은 완전히 혼란 스러웠다.

따라서 라인 지향 Fortran의 후속 제품인 PL / I는 세미콜론을 구분 기호 아닌 명령문 종결 자로 설정하기로 결정했습니다 . 프로그래머는 그 선택에 만족했습니다. 대부분의 프로그래밍 언어가 뒤 따랐다. (파스칼은 이러한 추세에 저항했지만 후계자 인 아다는 포기했다.)

[참고 사항 추가 : 프로그래밍 언어 비교에 관한 Wikipedia 기사 에는 다양한 프로그래밍 언어에서 세미콜론을 처리하는 방법을 요약 한 훌륭한 표가 있습니다.]


6

이것은 순수한 추측 작업이지만 ASCII 값으로 제한된 표준 QWERTY 키보드를 보면 종료 / 분리의 자연 문자는.!?, :; 운송비가 반환됩니다. 그 중!? :은 여러 키를 가져 오기 위해 즉시 실격 처리되어야하며 명령문 종료는 매우 일반적인 것입니다. 마침표는 소수점과 쉽게 혼동되어 초기 컴퓨터의 공간이 제한되어 있으면 터미네이터로 불필요하게 복잡해지기 때문에 실격 처리됩니다. 코드 줄이 화면의 한 줄에 표시 될 수있는 것보다 길면 캐리지 리턴이 실격되므로 줄을 가로로 스크롤해야 할 경우 프로그램을 읽기가 더 어려워집니다. 또는 다음 줄에 연속을 작성하기 위해 추가 문자가 필요하므로 다시 복잡성이 추가됩니다. 이 나뭇잎, 그리고; 옵션의 옵션은 다음에 비해 글쓰기에서 훨씬 더 자주 사용됩니다. 따라서 세미콜론은 입력하기 쉽고, 의미가 제한적인 캐릭터에 의미를 추가하기 때문에 혼동이 적고, 특수한 경우가 실제로 사용되지 않기 때문에 복잡하지 않기 때문에 선택됩니다.

세미콜론은 게으름과 단순성에 기반한 최고의 캐릭터이기 때문에 선택되었습니다.


여기에 좋은 지적이 있습니다. 나는 "... 선택"(증명하기 어려운)을 "... 세미콜론은 게으름과 단순성에 기초한 최고의 캐릭터 였기 때문에 이겼다"라고 다시 말하고 싶습니다
gnat

2
거의. 명령문 종결 자 / 분리 자로 사용되는 세미콜론은 ALGOL (1958)에서 시작하여 ASCII보다 우선합니다 (작업 시작 1960, 첫 번째 릴리스 1963, 주 릴리스 1967, 마지막 업데이트 1986).
John R. Strohm

@ JohnR.Strohm 그것은 저에게 뉴스이지만,이 모든 것이 저에게 거의 고대 역사입니다
Ryathal

6
이것은 대단한 이론이지만 현실은 현대 키보드 입력이 70 년대에 나타날 때까지 키 펀치에 세미콜론에 도달하기 위해 Shift 키가 필요하다는 것입니다. (위키 기사 하단에는 몇 가지 좋은 사진이 있습니다 : en.wikipedia.org/wiki/Keypunch ) 그것은 자연 영어 규칙, 특히 동시에 인기있는 유행에 기반한 것 같습니다. (LISP를 제외한 ALGOL, FORTRAN, COBOL 및 SQL, 50 년대 후반의 모든 언어를 포함 할 것입니다.) ALGOL의 세미콜론은 사용되는 많은 영어 표기법 중 하나 일 뿐이며, 이후 BASIC은 나중에 더 확장되었습니다.
SilverbackNet

@SilverbackNet은 "순수한 추측 작업"이 아마도 대답의 기초가되어서는 안되는 이유입니다.
user1717828

6

대체로 임의의 선택입니다. 일부 언어는 다른 선택을했습니다. COBOL은 .문자 가 포함 된 명령문을 종료합니다 . FORTRAN, BASIC 및 Python은 일반적으로 줄 바꾸기 (여러 줄 문의 특수 구문 사용)로 명령문을 종료합니다. 그리고 Lisp는 문장을 괄호로 묶습니다.

;구분 기호 / 종료 자로 인기가 높은 주된 이유 는 오늘날 인기있는 대부분의 언어가 ALGOL을 기반으로 하기 때문에 해당 규칙을 사용했기 때문입니다.

다른 상징 대신에?

다른 상징을 선택할 수 있습니까?

ASCII 문자 # $ @ [] ^ _`{|} ~가 ISO 646 과 같은 초기 문자 인코딩에 항상있는 것은 아닙니다 .

문자 ()*+-/<=>는 일반적으로 수학 연산자로 사용되며 명령문 종결 자로 사용되는 경우 구문 분석 모호성을 생성합니다.

product = a * b *  // If '*' were a statement terminator,
c * d *            // Are there two factors, or four?

비슷한 문제가 'and에 적용 "되며 일반적으로 문자열 구분 기호로 사용됩니다. ,, 함수 인수를 구분하는 데 주로 사용되며 .,는 일반적으로 소수점 (또는와 같은 구문에서 구분 기호)으로 사용됩니다 some_struct.some_field.

그 나뭇잎 !%&:;?.

선택 !하거나 ?기술적 인 어려움을 유발하지는 않지만 영어의 의미는 프로그램에 잘못된 분위기를 줄 것입니다.

print(x)?  # Yes, you should.
           # It's an IMPERATIVE language; stop questioning my commands.
print(x)!  # OK!  You don't have to shout!

&있기 때문에, 성명 분리 (안 종료)와 같은 더 현명한 선택이 될 것입니다

do_thing_a() &
do_thing_b()

점 A를 할 수있는 명령으로 읽을 수 다음과 것은 B. 그러나 대부분의 언어를 할 &연산자는 논리 또는 비트 단위로 사용 AND 대신.

%기호 같은 문장에서 혼란이 발생할 수 있습니다 interest_rate = 2.99%(에 변수를 설정합니다 2.99대신 예상의를 0.0299). 물론, 잘 알려진 수학적 의미는 %C를 나머지 연산자로 사용하는 것을 막지 못했습니다.

그래서 그 나뭇잎 :;.

: 는 현명한 선택이며, 실제로 대부분의 BASIC 방언에서 인라인 문장 ​​구분 기호로 사용됩니다.

그러나 ;영어 문법이 있습니다. 문장 내에서 절을 분리하는 데 사용할 수 있습니다.


3

헤드 라인 질문에 대답하기보다는 암시적인 질문에 초점을 두는 것이 좋습니다.

저는이 결정의 역사를 알고 싶습니다. 그리고 그 대답이 프로그래밍 언어의 설계와 구현에서 미래의 결정에 영향을 줄 수있는 통찰력으로 이어지기를 바랍니다.

프로그래밍 언어 설계 및 구현 히스토리에 대해 배우고 프로세스에 대한 통찰력을 얻으려면 프로그래밍 언어 컨퍼런스 히스토리의 진행이 시작하기에 좋은 장소입니다. (프로세스에 액세스하려면 ACM 멤버십이 필요하다고 생각합니다.)

많은 프로그래밍 언어의 문장이 세미콜론으로 끝나는 이유는 무엇입니까? 세미콜론이 다른 기호 대신 줄 종결 자로 선택된 이유가 있습니까?

HOPL 절차를 읽음으로써 대답하고자하는 예시 질문으로 헤드 라인 질문을하면서, 나는 다음과 같은 점을 제안하고자합니다. 어떻게 든 고장 / 결함. 그들의 새로운 언어는 한편으로이 결함을 고치기 위해 고안되었습니다. 반면에 언어 디자이너는 자신이 좋아하는 다른 언어의 디자인 요소를 복사하거나 문제가없는 요소는 변경하지 않습니다.

특히 마지막 부분은 중요합니다. 세미콜론을 터미네이터로 사용한 최초의 프로그래밍 언어를 찾고 다른 많은 프로그래밍 언어가 왜 그것을 복사 했는지 알아 보는 대신 복사 하지 않은 언어를 살펴보면 더 많은 것을 배우게 될 것입니다 그것. 스몰 토크는 시뮬에서 많은 영감을했다 예를 들어, 그것은 짓 하지구문과 특히 세미콜론을 명령문 종결 자로 사용하는 문구를 복사하십시오. 터미네이터 (실제로 분리 자)를 완전히 멈추고 세미콜론을 사용합니다. 반대로, 세미콜론을 명령문 종결 자로 사용한 첫 번째 언어는이를 이전 언어에서 사용 된 언어와 다르게 변경했을 수 있습니다. 명령문 종료 기의 전체 개념을 도입 한 것이 첫 번째 언어 였거나 다른 언어와는 독립적으로 수행 된 것이었고 현재는 시간이 지남에 따라 세미콜론이 사용되었을 수도 있습니다. (다른 응답자는 세미콜론이 좋은 선택 인 이유에 대한 개조 된 가정을 제안하기보다는 세미콜론을 도입 한 사람의 인용문을 발굴 할 수 없었기 때문에 후자가 여기에 해당한다고 생각합니다.) 포인트, 언어 디자이너가 왜 복사 / 보관했는지가 아니라 왜 언어가 바뀌 었는지 살펴보면 더 많은 내용을 배우게 될 것입니다. 사람들이 물건을 바꿀 때 그들은 일반적으로 변화를 원하거나 설명해야하지만“왜 우리가 바꾸어야합니까? 그게 끝났어!”


2

가시성에 관한 것입니다.

초기 문장 구분 기호는 '.'입니다. COBOL 및 줄 바꾸기에서와 같이 캐리지 리턴은 FORTRAN입니다.

CR은 여러 줄에 걸쳐 문장을 전달하기가 어렵다는 점에서 한계를 입증했습니다.

완전히 멈 추면 더 흥미로운 문제가 발생했습니다. 영어 텍스트를 읽을 때 뇌가 잠재 정지 수준에서 전체 정지 점을 처리하면 문장이 끝났음을 인식하고 숨을 쉬기 위해 일시 ​​정지 할 수 있지만 실제로는 눈치 채지 못합니다. 그것은 그것을 신호했다. 또한 많은 글꼴에서 '.' 는 단일 픽셀로 렌더링되는 가장 작은 문자입니다. 누락되거나 추가 기간은 COBOL 프로그램에서 가장 일반적인 오류의 원인이되었습니다.

ALGOL은 초기 실수로부터 배우는 것이 특정 종결자를 선택하여 문장이 여러 줄로 흐를 수있게하고 인간 독자가 쉽게 알아볼 수있는 것을 선택했습니다. 세미콜론은 무의식적으로 처리되지 않는 일반적인 영어로 충분히 크고 비정상적입니다.


1

캐리지 리턴 / 개행 이외의 명시적인 명령문 종결자가 필요했기 때문에 선택한 것으로 이해했습니다. 80 줄짜리 화면 시절에 실제로 여러 줄에 걸쳐 한 줄의 코드 줄이 있으면 문 종결 자에 \ r 또는 \ n을 사용할 수 없을 정도로 일반적이었습니다.

세미콜론은 논리 / 수학 설명에 사용되지 않기 때문에 편리했습니다. 따라서, 그들은 진술의 실제 내용과 어느 정도 충돌하지 않습니다.


개인적으로, 80 자 이하로 줄을 유지하기 위해 스타일 요구 사항과 함께 세미콜론을 계속 사용하는 것은 솔직하고 어리석은 생각입니다. 파이썬과 같은 언어는 이해하기 쉽고, 간결한 코드없이 더 쉽게 작성할 수 있음을 광범위하게 보여주었습니다. 또한 80 자보다 긴 행에 문제가있는 경우 더 큰 모니터가 필요합니다.


3
암흑 시대에는 "80 열 스크린"이 없었습니다. 80 열 펀치 카드가 있었고 다른 수의 열을 가진 프린터가있었습니다. (약 130 정도가 일반적이었습니다.) FORTRAN은 카드 끝에서 진술을 종료했지만 계속 카드가 진술을 계속하도록 허용했습니다. 연속 카드에는 카드의 6 열에 펀치 문자가 표시되어 있습니다. (모든 문자가 작동합니다. 지역 컨벤션에 따라 일반적으로 여러 연속 카드에 대해 + 부호 또는 한 자리 숫자가 표시됩니다.)
John R. Strohm

1
파이썬과 같은 언어는 C 초기에 존재했던 컴퓨터에서는 실현 불가능했을 것입니다. 명령문 종료 문자를 사용하면 구문 분석이 더 간단 해지며 수십 년 전에 컴파일러의 메모리 및 CPU로드를 줄이는 것이 매우 중요했습니다. 특히 CPU 시간을 초 단위로 지불 한 컴퓨터에서 특히 그렇습니다.
기가 트론

@Gigatron-나는 파이썬의 상위 레벨 측면이 아니라 진술을 끝내기 위해 캐리지 리턴을 사용 하는 것에 대해서만 언급하고있었습니다 .
가짜 이름

1
@Gigatron은 LISP, 특히 IBM 704의 초기 역사를 살펴보고 싶을 것입니다. 고대인들이 할 수있는 일, 심지어 돌 나이프와 베어 스킨으로 작업하는 것에 놀랄 수도 있습니다.
John R. Strohm

1
@Gigatron : FORTRAN은 동일한 컴퓨터에서 실행되었으며 개행을 사용하여 문을 분리합니다 (여러 줄 문에 대한 특수 구문 사용).
dan04

0

다음은 두 가지 질문입니다. ALGOL이 세미콜론을 얻은 이유와 다른 언어가 왜 세미콜론을 따랐 는가.

첫 번째 질문은 이미 여러 가지 방법으로 답변되었습니다.

두 번째로, ALGOL은 알고리즘 작성을위한 의사 코드 언어 로 매우 널리 사용되었습니다 . 따라서 세미콜론은 곧 다른 언어 사용자에게 자연스럽게되었습니다. 그리고 당연히 그들은 더 어린 언어로 사용되었습니다.


0

나는 틀릴 수도 있지만, 이것은 많은 어셈블러에서 세미콜론이 주석을 시작하는 데 사용되었다는 사실과 관련이 있다고 생각합니다. a 다음의 모든 것은 ;주석이었고 더 이상 명령 자체의 일부가 아닙니다.

그런 다음 통역사에 명령어를 입력 할 때 명령어를 종료해야합니다. 간단한 지시 사항 (예 : 수학 표현식)은 Enter 키를 누르기 만하면 종료 될 수 있으며, 인터프리터에게 표현식을 계산할 준비가되어 결과를 생성했음을 알려줍니다. 그러나 때로는 명령에 여러 줄의 코드를 입력하고 싶었으므로 Enter 키에만 의존하는 대신 특수 문자를 명령의 종결 자로 사용하는 것이 었습니다. 이런 식으로, 사용자는 아직 코드를 인터프리터로 보내지 않았기 때문에 한 번에 더 많은 코드 줄을 입력 할 수 있습니다. 인터프리터는 Enter로 입력 한 행에서 종료 문자를 찾은 경우에만이를 실행하고 결과를 계산합니다.

이제이 두 가지를 함께 결합하면 세미콜론은 종료 문자에 대한 명백한 선택 인 것처럼 보입니다. 명령 부분이 끝나고 주석 부분이 시작되는 위치를 알려주므로 인터프리터가 줄에 닿으면 플러시 될 수 있음을 알 수 있습니다 명령이 방금 끝났기 때문에 지금까지 버퍼링 한 표현식의 모든 줄을 실행하십시오. 이제 주석에 있습니다 (최소한이 줄 끝까지, 다음 줄은 코드에서 시작하기 때문에) 새로운 표현 / 지시를 시작하십시오).

물론 이것은 이것을 세미콜론이라고 가정하고 그것을 지시 종결 자로 재사용한다는이 아이디어를 생각 해낸 사람의 의견에 사용되었습니다. 다른 문자 였으므로 다른 명령어 종결 자로 끝났을 수도 있습니다.

Inb4 : 아니요, 이것은 역사적인 계정이 아닙니다. 이것이 세미콜론이 실제로 생겨난 방법이라는 증거는 없습니다. 그것이 아마 일어날 수 있다고 상상하는 방법입니다.


-1

대부분의 언어는 이미 세미콜론을 사용했는데, 그 목적으로 이미 광범위하게 사용되었고 변경이 불가능했기 때문입니다.

그리고 첫 번째 언어를 선택하면 그 대안이 무엇인지 고려해야합니다. 언어를 디자인 할 때 필요한 문자를 사용할 수 있기를 원하며, 현재 문자 세트는 6 비트로 코딩되었으며, 일부 패턴은 예약되어 있고, 일부 문자는 제대로 정의되지 않은 경우가 많습니다. ISO-646의 국가 변종 - 미국의 변형은 물론 이름 ASCII에서 알고있다 - "일반적인"등의 문자 코드를 재사용 [, #또는 $, 단지 절반 많은 코드 위치가 어디 상황에서 효과를 볼 사용 가능한 문자 및 숫자를 반 이상 보유).

같은 직관적으로 문 구분 기호로 사용 될 수있는 다른 문자가 아마 없었다은 ( .(그리고 렉싱을 도입하거나 구문 분석 및 렉싱 이론이 정교 아직 때 한 번에 어려움을 구문 분석하지 않고 이미 아마 그 기준에 대한 심각한 경쟁자) .지금 실수로 사용하기 때문에 의문의 여지가 없습니다).


-1

세미콜론을 사용하는 또 다른 이유는 세미콜론이 더 자주 필요하지 않거나 사용하지 않는 문자 중 하나이기 때문입니다.

변수 이름이나 무언가로 더 자주 사용한다고 가정하고 세미콜론을 키워드 나 연산자로 사용했다면 컴파일러와의 기호 충돌이 있었을 것이므로 컴파일러가 아닌 기호를 사용하는 것이 중요했습니다 코딩에 자주 사용됩니다.

나는 C 스타일 프로그래밍 언어가 그것을 대중적으로 만들었다 고 생각하고 새로운 프로그래밍 언어의 저자는 바퀴를 재발 명하기를 원하지 않았으며 지금까지 계속 사용했습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.