과학 프로그래밍 언어가 왜 그렇게 이상합니까? [닫은]


9

과학과 공학에 사용되는 프로그래밍 언어는 범용 언어에 비해 일관되게 이상 합니다. 내 머리 꼭대기에서 몇 가지 예 :

  • Matlab에서 각 기능은 별도의 파일에 배치해야합니다
  • R에서 <-는 거의 모든 다른 언어에서 =와 반대로 어설 션 연산자입니다.
  • Matlab, R, Julia 등은 모두 1- 색인
  • Matlab은 표준 # 또는 //가 아닌 주석에 %를 사용합니다.

물론, 이러한 언어는 모두 몇 가지 디자인 기능이 실제로 그들을 쉽게 같은 자연 행렬 표기법 과학적 애플리케이션에 사용할 수 있도록합니다. 그럼에도 불구하고, 언어 디자이너가 다른 언어의 99 %가하는 일을 방금 선택했다면 쉽게 이해할 수 없었고 쉽게 피할 수 없었던 기괴한 선택을 모두 설명 할 수 없게 만들었습니다. 공급 업체가 잠긴 이유가 있습니까? 더 넓은 소프트웨어 개발 커뮤니티와의 연락이 부족합니까? 다른 것?

글을 읽고 만족스러운 설명을 찾지 못했습니다. R은 과학적인 언어로 설계되었다해서 그것이 의미하지 않는 = 대신 - 완전히 규칙 및 사용을 <무시.


6
짧은 대답 : 프로그래머가 아닌 과학자를 위해 만들어 졌기 때문입니다.
Bart van Ingen Schenau

19
짧은 대답 : 당신이 정상이라고 생각하는 모든 언어는 공통 조상의 영향을 받았기 때문에 C.
Ross Patterson

3
난 당신이 찾기 위해 투쟁 것 같아요 어떤 언어에서 규칙을. 그것은 그들의 유산에 달려 있습니다.
Robbie Dee

6
그 어떤 것도 이상하지 않습니다. 그냥 다릅니다 . 특정 언어의 특정 작성자가 사용하는 것을 제외하고 다른 구문보다 하나의 구문을 선택할 특별한 이유가 없기 때문입니다.
Jan Hudec

8
99 %가 잘못되었습니다. C와 그 파생어 만 알고 있다면 그렇게 생각할 수 있지만 C 언어가 아닌 언어의 50 % 이상이 할당, 색인 및 / 또는 주석에 다른 것을 사용합니다.
david.pfx

답변:


21
  • 다른 규칙이 있습니다. 수학, 논리 및 IT의 응용 과학 및 규칙의 규칙. 첫 번째는 훨씬 나이가 많습니다.
  • 과학 언어는 THEIR 사용자의 삶을보다 편리하게 만들어줍니다. 사용자는 과학자로서, 새로운 것을 배울 필요없이 때때로 어떤 알고리즘을 실현하거나 이론을 확인할 수 있습니다. 따라서 과학자를위한 언어는 비 IT 표준으로 구성되어야합니다. IT 직원을위한 것은 아닙니다. 그들은 다른 표준에 따르며 목표 청각 때문에 좋습니다. 올바른 SW UI와 언어는 SW UI이므로 코더가 아닌 사용자의 요구에 따라 수행해야합니다.
  • 우리의 IT 표준은 산업 표준입니다. IT는 산업입니다. 과학은 산업이 아닙니다. 과학자들은 그것을 자랑스럽게 생각합니다. 그리고 그들은 우리의 관행에서 마지 못해 자신의 행동으로 무엇이든 가져갈 것입니다. 그리고 그들은 표준을 전혀 좋아하지 않습니다. 그리고 아무도 외국 표준을 좋아하지 않습니다. 따라서 누군가가 IT 표준을 찾는 과학적 언어를 만들면 목표 청각의 혐오 때문에 객관적으로 더 편리하더라도 잘 팔리지 않을 것입니다.

IT 표준에 따라서 만 판단하더라도 ... 미안합니다. 무슨 표준을 의미합니까? APL 또는 SNOBOL로 프로그램을 작성하려고 했습니까? 이 두 언어는 IMHO, 적절한 필드 (카운팅 및 문자열)에서 가장 강력합니다. 그러나 구문은 매우 이상하고 효과적입니다. APL 코드를 읽는 데 며칠이 걸릴 수 있습니다. 다른 한편으로, 이러한 라인은 SW의 심각한 부분입니다. 눈물을 흘리면서 Mathlab으로 돌아갑니다.

"="에 관해서는, 많은 사람들이 평등이 아니라 할당에 익숙해 져서 어려움을 겪고 있습니다. BTW, 파스칼에서 그것은 평등이며 할당은 ": ="입니다.

그리고 당신은 정말로 평등을위한 ==가 더 자연 스럽다고 생각합니까? 반대로, =와 ==을 혼합하는 것은 C 프로그래밍에서 가장 일반적인 오류이며, 자동 제어 기능을 갖춘 최신 IDE에서도 매우 자주 발생합니다.

1에서 인덱싱하는 방법은 유일한 것입니다. 당신이 어렸을 때, 당신은 당신이 세었던시와 노래를 배웠습니다 : 하나, 둘, 셋 ... 그리고 0,1,2가 아닙니다 ... 학교 수학에서 우리는 계산이 1에서 시작한다는 것을 연구했습니다. 자연 / 계산 숫자에 속하지 않습니다. 함수의 정의에 의해서만 자연스럽지 않은 인덱스가 온다. 결국 0은 조상이 손가락을 든 후 수천 년 동안 발명되었습니다.

0- 시작은 실현하기가 더 쉬웠으며 C 출현 후 즉시 IT 실무에 들어갔다. 그러나 첫 번째 언어 인 포트란에서는 1- 인덱싱이 사용됩니다. 산업화 이전 시대의 다른 언어와 동일합니다.

그리고 네, 0 기반 계산의 자연성에 관한 Dyjkstra의 기사를 읽었습니다. 그리고 그의 주장에 전적으로 동의하지 않습니다. 음악가들에게도 당연하다. 그리고 C 및 Java 컴파일러를 만드는 0 명의 애호가조차도 STARTING FROM 1!


1
": ="할당 및 1 기반 인덱싱은 Smalltalk에서도 사용됩니다.
Rory Hunter

1
나는 0 기반 인덱싱이 구현의 용이성 때문이라고 생각하지 않습니다 (FORTRAN은 이것을 거의 반증합니다). cs.utexas.edu/users/EWD/transcriptions/EWD08xx/EWD831.html 은 0 기반 색인 생성을 선호 할 수있는 몇 가지 이유를 제시하지만 선택은 상당히 임의적입니다.
jk.

2
FORTRAN에는 1 기반 색인이 있습니다. PASCAL은 임의 기반 인덱싱을 허용했습니다. 인덱스 범위가 예를 들어 -42 ~ +57 인 배열을 선언 할 수 있습니다. ( 유용한 예는 en.wikipedia.org/wiki/… 를 참조하십시오 .)
John R. Strohm

1
@ 강 누스 나는 현대 언어를 C와 비교하고 의도적으로 읽기가 어렵다고 생각하는 것은 실수라고 생각합니다. 저급 언어에 대한 고급 대안으로 설계되었습니다.
Robbie Dee

1
FORTH는 스택 기반 언어입니다. HP 계산기를 생각하십시오. 매우 작고 빠르지 만 뚫을 수없는 코드를 작성하는 것은 어려웠습니다. FORTH에서는 변수를 거의 사용하지 않고 스택에 물건을 밀어 넣고 스택에 작용하는 연산자를 사용합니다.
로봇 고트

16

1에서 인덱싱하는 것은 이상하지 않습니다. 프로그래머를 제외하고 는 완전히 정상적이며 예상 됩니다 .C에 의한 0 기반 카운팅 (프로세서 아키텍처의 속성에서 조절됨)을 기대하기 때문입니다.

주석은 다른 언어로 많은 방법으로 표시됩니다. 표준적인 방법 은 없습니다 . 모든 언어는 아직 가져 오지 않은 기호 나 그림을 선택합니다.

할당은 프로그래머를 제외하고 는 이상하고 이해할 수없는 개념입니다 . 대부분의 사람들은 그것의 여부를 덜 신경 수 없었다 =거나 :=또는 <-, 그들이 이해하는 투쟁 의 의미를 (그리고 그들을 위해, 더 나은 사실에 없는 사용 =이 그 임무를 강조하기 때문에 평등하지 않다, - 비 - 프로그래머에 대한 가장 일반적인 장애물 코드 이해).

요컨대, 전문 프로그래머 이외의 사람들을위한 프로그래밍 언어는 다르게 사용하는 사람들이 그 방식을 원하기 때문에 다르게 보입니다.


4
1에서 인덱싱하는 것이 이상하지 않다는 것에 동의하지 않습니다. 0- 인덱싱은 적어도 수학에서 1- 인덱싱만큼 일반적이며 Matlab 또는 S / R이 출현하기 전에 수년간 프로그래밍의 표준이었습니다.
haroba

9
@Aqwis 아, 그래, 난 이미 아기가 0, 1, 2를 세는 것을 봅니다 ... 가장 자연스러운 방법입니다.
Gangnus

4
아기는 코드를 쓰지 않습니다. 제로 인덱싱을 사용해야하는 좋은 이유가 있습니다 (Dijkstra 참조).
haroba

1
@Aqwis 자신의 단어에 대한 답변. 이상하고 그렇지 않은 것. 어린 시절과 수학 (자연수는 0을 포함하지 않음)으로 설정 한 것은 어느 쪽에서도 이상 할 수 없습니다. 그리고 그것에 모순되는 것은 이상합니다. 그리고 당신이 다른 것에 익숙해 졌다는 것은 관련이 없습니다. 이 언어들은 단순히 당신이나 나를 위해 만들어진 것이 아닙니다.
Gangnus

1
@phresnel 답변의 역으로 ​​: 1부터 색인이 정상입니다. 프로그래머를 제외하고 C
Robbie Dee가

5

세 가지 문제가 있습니다.

  1. 당신은 특정 전통과 특정 선택에 대한 정당한 이유를 알지 못합니다.
  2. 구문에 너무 중점을두고 의미에 대해서는 거의 강조하지 않습니다.
  3. 엔지니어와 과학자는 언어 설계에 경험이 없으므로 의심스러운 구문으로 이어집니다.

이제 특정 요점으로 :

  • Matlab을 모르므로 파일 구성의 요구 사항에 대해서는 언급 할 수 없습니다. Java는 공용 클래스 당 하나의 파일을 사용하기를 원합니다.

  • R에서는 =대입 연산자로도 사용할 수 있습니다. 여러 할당 연산자가 필요 <-하고 <<-범위 지정 개념을 처리해야합니다 ( <<-함수 내부에 새 심볼을 만드는 대신 외부 범위의 심볼에 할당). 화살표는 다른 방향으로도 사용될 수 있으므로 잠재적으로 더 깨끗한 코드를 만들 수 있습니다 complex_calculation() -> x.

  • 1 기반 인덱싱은 수학의 표준으로 Matlab과 R의 사용자가 C보다 더 편합니다. Julia는 더 나은 학습 곡선을 얻기 위해 Matlab을 따릅니다.

  • %주석은 TeX / LaTeX에서도 사용됩니다. 이것은 #유닉스 스크립팅 언어와 그 자손의 협약입니다.

또한“실제”프로그래밍 언어에는 많은 이상한 부분이 있다는 것을 무시하십시오. 왜 Scheme을 사용하지 =않습니까? 대신 :

(define foo 5)

다른 전통에서 *캐럿 ^x이 더 일반적 일 때 C 가 역 참조에 사용 하는 이유는 무엇 입니까?


"나는 Matlab을 모르기 때문에 파일 구성의 요구 사항에 대해서는 언급 할 수 없습니다. Java는 공개 클래스 당 하나의 파일을 사용하기를 원합니다." 언어가 프로젝트를 여러 파일로 나누기를 기대하는 것이 합리적이라고 생각합니다. 그러나 클래스는 일반적으로 비교적 많은 양의 코드입니다. 기능이 필요하지 않습니다. Matlab은 모든 기능에 대해 별도의 파일을 작성함으로써 작은 기능을 만들지 말고 큰 모 놀리 식 기능을 향상시킵니다.
haroba

1
나는 p.3을 제외한 모든 것에 거의 동의한다. 과학자들은 언어를 만들지 않고 주문합니다. 이들은 클라이언트, 사용자이지만 제작자는 아닙니다. 누군가 있다면 이미 IT 전문가입니다. 그리고 모든 언어의 구문에 의문의 여지가 있지만 모든 작업에 이상적인 사람은 없습니다.
Gangnus

Matlab은 필요에 따라 함수 / 파일을 적시에 컴파일합니다. 그것은 프로그램의 실제 개념이 아니며 단지 많은 기능을 가지고 있습니다. foo ()를 호출하는 함수를 실행하는 경우 foo.m이라는 파일의 경로를 검색하고 컴파일하여 실행합니다. 어떤 파일 세트를 사용하려고하는지 Matlab에 미리 알려줄 필요가 없습니다.
Simon B

1

다른 언어에 대한 노출에 달려 있다고 생각합니다. 내 머리 꼭대기에서 :

  • C / C ++에는 별도의 소스 파일이 있습니다 (.c / .cpp & .h)
  • -> 문자는 C #에서 람다 식에 사용됩니다.
  • 이전 버전의 VB는 1을 기본 색인으로 사용했습니다 (옵션 기반으로 변경할 수는 있지만)

1
C 및 C ++에서는 하나의 파일에서 원하는만큼의 함수를 정의 할 수 있습니다.
haroba

모듈이 여러 파일로 분할되는 것은 드문 일이 아니라는 점을 지적하고 있습니다. 원하는 경우 .NET 언어를 사용하여 모든 기능을 별도의 파일에 넣을 있습니다. 부분 클래스 구조.
Robbie Dee

1
물론 모듈이 여러 파일로 분할되는 것은 드문 일이 아니며 많은 경우에 바람직합니다. 그러나 Matlab에서는 모든 단일 함수 를 자체 파일에 넣어야 합니다. 즉, 수천 개의 함수가있는 경우 수천 개의 파일 이 필요 합니다 .
haroba

3
HTML의 주석은 다음과 같습니다 <!-- ... -->. 퍼센트 부호는 URL 인코딩에 사용 http://example.com/()됩니다 http://example.com/%28%29.
amon

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