모든 목적에 맞는 "유니버설"프로그래밍 언어가없는 이유는 무엇입니까? [닫은]


57

기존의 모든 프로그래밍 언어의 최고의 기능을 결합하여 범용 프로그래밍 언어에 맞지 않는 이유는 무엇입니까?


23
'최고'라는 용어는 주관적이므로 절대적으로 인정되는 최고를 절대 얻지 못할 것입니다. 물론 모든 플랫폼에서 광범위한 개발에 적합한 언어는 꽤 있습니다. C ++과 Java가 주요 두 가지입니다.
GrandmasterB

5
@GrandmasterB 당신은 C #을 잊었습니다
Daniel Little

15
거기에, 그것은 'C'라고 불립니다
Martin Beckett

9
종은 (우리의 개성 덕분에) 동의 할 수있는 타고난 능력을 가지고 우리는, 그러므로 우리는 것입니다 결코 보편적으로 필요한 사항에 동의하지 않으며, 따라서이 것 결코 하나가 될 수 없습니다 (인간에 의해 만들어진 적어도 하나!)

9
보편적 인 프로그래밍 언어? 몇 년 전에 모두가 전환 한 보편적 인 인간 언어 와 유사 합니까?
Kyralessa

답변:


116

같은 이유로 당신은 닭을 개척 하기 위해 스위스 군용 칼 을 사용하지 않습니다 ...

http://upload.wikimedia.org/wikipedia/commons/thumb/4/48/My_swiss_army_knife.JPG/800px-My_swiss_army_knife.JPG

스위스 군용 칼에는 일반적으로 날뿐만 아니라 드라이버와 같은 다양한 도구가 있으며 오프너 및 기타 여러 도구가 있습니다. 이 부착물은 피벗 포인트 메커니즘을 통해 나이프 손잡이 안에 보관됩니다 ...

나이프의 디자인과 유연성으로 인해 전 세계적으로 인정을 받았습니다 ...


26
같은 이유로 당신은 드래그 레이스에 미니 밴을 가져 오지 않습니다. 같은 이유로 당신은 결투에 물 권총을 가져 오지 않습니다.
Chris

19
@Chris 만약 물 권총 결투라면?
Rusty

44
같은 이유로 당신은 죽음이 온라인에있을 때 시칠리아 사람과 함께 가지 않습니다.
Rusty

6
집을 짓는 데 필요한 모든 일을 해낸 스위스 군용 칼이 있다면 그 중 어느 것이 좋을까요?
Brad Mace

4
이 대답은 끔찍한 비유입니다. 아마도 당신이 쓴다면 : 프랑스어는 영어와는 다른 표현의 충실도를 허용하기 때문에 비유를 더 좋아했을 것입니다. 그러나 컴퓨터 언어는 '사물'도 아니고 인간 언어도 아닙니다. 정답은 : 우리는 모른다. 인간이 논리를 표현하는 방법과이 시점에 도달하는 방법에 대한 통찰력이 더 필요합니다. 또한 일부 언어는 '메타 언어'이며 다른 DSL을 표현할 수 있습니다. 질문에 이것들을 포함시켜야합니까?
Dibbeke

80

때문에

  1. 아무도 모든 레거시 코드를 다시 작성하고 싶지 않습니다.
  2. 모든 목적에 동의하는 것은 어렵다
  3. 포괄적 인 목적 목록을 작성하면이를 구축하기 전에 변경됩니다.
  4. 새로운 목적으로 인해 누군가 완전히 다른 언어를 시작할 것입니다.
  5. 마이크로 소프트
  6. 사과
  7. 오픈 소스
  8. 모든 바벨 피쉬로 무엇을할까요?
  9. SQL을 보편적으로 만들지 못했습니다.

당신은 짧게 멈췄습니다. 나는 그 하-하-독-의심 한 "Top 10"목록 중 하나를 기대하고있었습니다.
Jeffrey Hantin

4
적어도 "바벨 피쉬 저장"캠페인을 막기 위해 +1. 지독한 히피족.
Rusty

2
바벨 피쉬는 초밥을 만드세요!
Muad'Dib

1
점 1과 관련하여, 기존의 모든 코드는 결국 다시 작성해야 할 것 중 하나 어쨌든 코드 / 라이브러리의 최신 유행을 사용하거나 지원 비용의 말도 안되는 금액없이 효과적으로 실행할 수 없습니다.
Michael

38

프로그래밍에서 가지고있는 것은 매우 큰 문제 영역입니다. 이 영역은 매우 다양한 방향으로 다양합니다.

이것이 임베디드 비행 컨트롤러가 C로 작성되고 웹 사이트가 PHP, Java, Rails, .NET 등으로 작성되는 이유입니다.

임베디드 비행 컨트롤러의 경우 작동 할 약 128k의 메모리가 있습니다. 내 코드에서 처리되지 않은 예외가 발생하면 비행기가 추락하고 200 명이 사망하고 $ 1B의 조정에 따라 소송을 제기해야합니다. 고객에게 1 천만 달러를 잃어버린 지상 항공기를 수리하기 위해 세계 공항. 매우 타이트하고 잘못 될 수있는 움직이는 부분이 적은 언어로 작업해야합니다.

내 웹 응용 프로그램의 경우 몇 GB의 메모리가 작동하지만 네트워크 속도는 제한적입니다 (매일 더 적은 수준으로 제한되지만 웹 최대 제한). 나는 많은 기능을 제공하고 가능한 한 빨리 전송 될 수있는 출력을 생성하는 언어를 살펴볼 것이다. 사이트가 다운 되더라도 신경 쓰지 않습니다. 판매액 (100 달러)을 잃고 폭파 된 유스 케이스를 패치해야 할 것입니다.

웹 사이트는 15 년 넘게 C로 작성되지 않았으며 (아무도 cgi 스크립트를 사용합니까?) 비행 컨트롤러가 C ++을 살펴보기 시작했지만 매우 제한적인 방법으로 알고 있습니다.


3
실제로 돈을 버는 대부분의 사이트는 상당한 다운 타임이 발생하면 100 달러 이상을 잃게됩니다. 그것이 삶이나 죽음의 상황과 비교할 수 있다고 제안하는 것은 아니지만 여전히 위험을 약간 넘어서는 것입니다.
Aaronaught

3
당신은 flakey Facebook이 어떤 것인지 전혀 모른다. 그들은 최근에 37 분마다 푸시 코드를 게시했습니다. 그들의 사이트는 끊임없이 어떤 식 으로든 질식되며 백 로그에 백만 장의 티켓이 있습니다. 요점은 아무도 죽지 않을 웹을 사용한다는 것입니다. 판매량이 적을 수도 있지만 실제로는 별다른 위험이 없습니다. 직면 한 대부분의 문제는 전체 기반이 아닌 소수의 고객에게만 영향을 미칩니다
Bill Leeper

24
  1. 차고 (또는 부모의 차고)로 가십시오.
  2. 도구 상자를여십시오.
  3. 둘 이상의 도구가 표시되면 질문에 어떻게 적용되는지 생각해보십시오.

도구 상자가 없거나 중공 핸들에 드라이버 비트가있는 작은 망치 중 하나만있는 경우 큰 동정심을 나타냅니다.

진심으로. 자동차 판매점에 가면 정비공은 그의 도구 상자에 하나의 모든 도구를 가지고 있습니까? 그 (또는 그녀)는 다양한 자동차 수리 작업을 수행하도록 특별히 설계된 전문가 급 도구를 갖춘 전문가입니다.

마찬가지로 전문 소프트웨어 개발자는 자신의 거래를 수행 할 수있는 충분한 도구를 보유해야합니다. 도구 상자를 열고 필립스 스크류 드라이버에 해당하는 소프트웨어 만 보는 경우 전문가가 될 수 없습니다.

오픈 엔드 렌치, 박스 엔드 렌치, 래칫 렌치 또는 조절 가능한 렌치로 볼트를 돌릴 수 있습니다. 미끄러운 조인트 플라이어를 사용하여 볼트를 꼬집어 돌릴 수도 있습니다. 그러나 썰매 망치로 볼트를 돌리는 것은 매우 어렵습니다.


그것은 "부모의 차고"를 포함하기위한 것입니다. 차고가 없기 때문에 정말 명확합니다.
Dan Rosenstark

5
더 나은 비유는 언어가 개별 도구가 아닌 도구 상자와 유사하다는 것입니다.
Tom Hawtin-tackline

4
상자에 20 개의 다른 도구가있을 수 있습니다. 그러나 나는 당신이 그것들을 설명하기 위해 하나의 언어 만 필요하다고 확신합니다.
ThomasX

2
요즘 툴박스는 해당 언어에 사용 가능한 라이브러리와 비슷합니다.
Michael

18

다른 사람에 대한 대답의 다른 종류는 - 사실이 생각하는 잠재적 인 하지 아마도 엄격하게 디자인 언어는 생각 될 수 있지만 언어가하는 "보편적 인"하나, 기능 및 다른 언어의 패러다임을 가능하게하는.

의 brettmjohnson의 비유 를 사용하기 위해 각 프로그래밍 언어가 상자 안에있는 도구 (또는 스위스 군용 칼)라는 아이디어는 모든 사람들이 만드는 가정이지만 실제로는 잘못된 가정입니다.

프로그래밍 언어가 툴박스라면?

원하는 언어로 기능을 추가 및 제거 할 수 있고 필요한 도구가 포함 된 도구 상자가 있으면 다른 용도로 사용하더라도 어떻게됩니까?

이 개념은 이미 부분적으로 존재합니다. 예를 들어, Nemerle 과 같은 언어 를 사용하면 언어에 구문추가 할 수 있으므로 "언어 X의 최상의 기능"을 가져와 Nemerle (또는 자신의 언어)에 추가 할 수 있습니다. 이것은 반드시 항상 자신의 매크로를 작성한다는 것을 의미하지는 않습니다-각 언어 (또는 패러다임)가 표준 라이브러리의 매크로 내부에서 정의 될 수 있습니다-당신이 할 수있는 import Haskell; import Prolog;것처럼 두 언어를 마치 마치 당신의 언어?

그렇다면 다른 언어 / 패러다임의 기능을 서로 어떻게 사용할 수 있을까요? 대답 할 수는 없지만 .Net 및 JVM과 같은 프레임 워크는 일부 솔루션을 제공합니다. 언어는 컴파일 방식으로 인해 적어도 부분적으로 호환됩니다. 예를 들어 C #으로 작성된 코드를 가져와 불만없이 F #에서 사용할 수 있습니다.

오늘날 솔루션의 '문제'는 이러한 언어를 함께 사용하려면 언어를 별도의 프로젝트로 작성해야하므로 서로 참조 할 수 없으며 단방향 참조 만 가능하다는 것입니다. 언어 장벽은 각 프로젝트가 다른 프로젝트가 액세스하기 전에 모든 파일을 공통 중간 언어로 개별적으로 컴파일한다는 것입니다.

이 장벽을 제거하기위한 디딤돌은 다른 언어 (예 : C # 및 F #)의 코드가 동일한 프로젝트 내에서 컴파일 될 수 있도록하는 것입니다. 이론적으로 각 파일을 개별적으로 (또는 부분 유형 또는 순환 참조가있는 경우 그룹으로) 컴파일 한 다음 이미 컴파일 된 (CIL) 객체에 액세스 할 수있는 다른 언어의 파일을 컴파일 할 수 있습니다. 그래도 컴파일 순서를 엄격하게 정의해야하지만 F #의 경우 컴파일 순서가 이미 필요합니다.

어쨌든, 나는 "범용 언어가있을 수있다"는 말은 아닙니다. 나는 현재 존재하는 언어들 사이에 훨씬 더 나은 상호 운용성이있을 것을 제안하고있다. 실제로 언어와 라이브러리, 도구 등을 구현하는 작업이 엄청 나기 때문에 머지 않아 크게 개선되지는 않을 것입니다.


4
전 세계가 PC가 아닙니다. 이 행성에있는 대부분의 프로세서는 총 메모리 공간이 64K 바이트 미만입니다. 이 프로세서에서 사용할 수있는 언어는이 포럼에서 가장 많이 사용되는 언어와 비교하여 범용 언어가 강화 된 어셈블리 언어가 될 것입니다. 저는 이것이 "C"라고 생각합니다.
uɐɪ

10

일부 언어의 최고 기능은 다른 언어의 최고 기능과 충돌합니다.

예를 들어, 타입 인식 리플렉션은 정말 좋은 기능이지만 느슨하게 입력 된 언어에서는 그다지 가치가 없지만 느슨한 타이핑은 때로는 큰 이점이 될 수 있습니다.

한 언어 내에서도 항상 최상의 기능을 모두 사용할 수는 없습니다.


이 기능은 예를 들어 필수품 / 비활성화 accordind 활성화 된 경우 만 : 당신은 유형을 알고 반사를 활성화하고 느슨한 타입 언어 능력 등 ... 해제 할 수
killown

2
여러 언어의 기능을 하나의 언어로 결합하여 무엇이든 할 수 있다면 많은 중복, 혼란, 다양한 기능 조합을 사용하는 여러 가지 방법으로 인한 버그 및 많은 기능을 얻을 수 있습니다. 이 라인에서 사용중인 패러다임을 지정하는 노력을 낭비합니다.

killown은 옳지 만 언어를 매우 구성 할 수있게하여 문제를 해결하면 페니 닉이 설명하는대로 언어를 사용하기가 어렵습니다. 나는 어떤 경우에는 위험하더라도 사물을 허용하는 유연한 언어를 좋아하지만, 일부 개념을 결합해야 할 구성 수준은 솔루션을 폐기하고 저수준 C 또는 다른 것으로 작성하는 것보다 복잡하게 만듭니다. .
Bill

1
상충되는 기능에 대해 +1
Frank Shearar

문제는 언어 기능이 충돌하는 것이 아니라 많은 언어가 특정 수준의 오버 헤드를 부과하지만 특정 작업을 단순화 할 수있는 기능을 포함하는 기본 프레임 워크를 가정한다고 생각합니다. 언어에는 일반적으로 특정 '일반적인 사용 패턴'이 있습니다. 프레임 워크에 포함해야 할 기능과 채택해야 할 코딩 패턴의 선택에는 트레이드 오프가 포함됩니다. 특징과 패턴의 다른 조합이 다른 응용에 더 좋습니다.
supercat

7

"모든 거래의 잭-없음의 주인." 떠오른다.

일부 프로그램에는 속도가 필요하고 다른 프로그램에는 많은 양의 메모리가 필요하거나 디스크에 빠르게 액세스 할 수 있습니다. 어떤 언어는 능숙하지만 다른 언어에는 좋지 않습니다. 전혀 좋은 언어를 얻지 못할 것 같습니다.

따라서 어떤 언어로든 거의 모든 프로그램을 작성할 수는 있지만 그 문제를 해결하기 위해 작성할 수있는 "최고의"프로그램은 아닙니다.


4

있습니다. 없음 도구는 모든 것에 최선이지만, 많은 프로그래밍 언어와 같은 몇 가지 도구가 제공 하는 모든 목적으로하지 않도록 최선의 모든.

작업에 가장 적합한 도구를 선택할 수 있지만 모든 목적으로 사용할 수있는 프로그래밍 언어가 있으며 선택할 수 있습니다. 나는 그것을 권장하지 않지만 가능합니다.


4

"일반화 / 전문화 역설"이라고 불리는 무언가 때문에 아마도 다른 이름을 가지고 있으며 실제로 역설이 아닙니다.

프로그래밍 언어가 일반화 될수록 무언가를 달성하는 데 더 많은 코드가 필요합니다. 언어가 더 전문화되면 할 수있는 언어가 줄어 듭니다.


2
일반화 된 언어로 특수 라이브러리를 가질 수 있다는 점을 제외하고는 귀하에게 동의합니다.
dan_waterworth

@dan : 동의하지만 언어가 라이브러리 작성자에게 기능을 제공하는 데 중점을 둔 경우에만 가능합니다. 내가 가장 좋아하는 두 언어는 D와 Python입니다. 둘 다 상당히 일반적인 언어이지만 (특히 D) 라이브러리 작성자를위한 많은 기능이 있으므로 특수한 내용을 처리하기 위해 자체 라이브러리를 만들 수 있습니다. 나는 경멸 MATLAB과 R. 같은 슈퍼 도메인 특정 언어
dsimcha

4

언어는 사람들이 생각하는 방식을 형성합니다. 이것은 자연어에 해당됩니다. 어린이가 "하나, 둘, 다수"라는 숫자를 가진 하나의 언어 만 알고 있다면, 어린이 수학을 가르치는 것은 어렵다 ... (죄송합니다, 링크가 없습니다) 영어로 우리는 마치 장소가 된 것처럼 다른 시간에 대해 이야기합니다. 따라서 시간 여행의 개념은 상상할 수 있습니다. 다른 언어로는 시간 여행이라는 개념이 결코 화자들에게 일어나지 않을 것 입니다.

프로그래밍 언어에서도 마찬가지입니다.

따라서 우리가 단일 프로그래밍 언어를 가지고 있다면 모든 사람은 모든 계산 작업에 대해 정확히 동일하게 생각할 것입니다. 따라서 우리는 대안을 모색하지 않을 것이며, 무언가를하는 가장 좋은 방법은 알려지지 않을 것입니다.

우리가 범용 언어에 가장 가까운 것은 C입니다. C는 기본 하드웨어 개념 (실제 하드웨어에서 실제로 수행되는 방식)과 매우 밀접하게 매핑되며 모든 * 언어의 프로그램은 C로 변환 가능합니다 (CFront가 어셈블러에 C 컴파일러를 사용한 방법 참조) 작업) C의 문제는 기본적으로 위에서 언급 한 변환이 C 프로그래머의 관점에서 의미가 없다는 것입니다.

"Lambdas"는 항상 C에서 가능했습니다. 전체 프로젝트 / 파일에 대한 코드 확산을 포함하여 구문이 해제되었으므로 선호되는 솔루션이 아닙니다. 캡처 불가능 / 업 밸류 / 등 버전으로 함수를 다른 곳에 정의하고 함수에 포인터를 전달하십시오. ( qsort () 참조 ) 캡처 된 값과 함께 람다를 사용하기 위해 작성해야하는 코드의 양과 복잡성이 크게 증가합니다. 람다는 언어의 일부인 언어와 달리 기본적으로 모든 곳에서 사용됩니다.

C와 C ++의 주된 차이점은 C ++에게 당신을 위해 물건 을 처리하도록 요청하는 방법입니다 . 그러나 더 이상 단 한 줄의 코드만으로도 실제로 요청하는 양을 더 이상 볼 수 없습니다. 대답은 다음과 같습니다. (이 모든 다른 코드에 따라 다름)

일부 프로그래밍 언어는 특정 작업에 적합하지만 전 세계에서 사용중인 대부분의 현재 프로그램이 해당 언어로 프로그래밍 된 경우에는 의미가 없습니다. 즉, 언어를 사용하여 해당 프로그램을 시작하여 구현할 수 있다면 주어진 것은 아닙니다.


2
"다른 언어에서는 시간 여행이라는 생각이 화자들에게 결코 일어나지 않을 것입니다." 인용이 필요했습니다. Sapir-Whorf 가설은 결코 강력한 형태로 특별히 널리 받아 들여지지 않습니다.
Muhammad Alkarouri

4

보편적 언어를 사용하는 기술적 장점에 대한 불가능? 그건 말도 안돼 넌 할 수있어모든 기반을 다루는 보편적 인 언어가 있습니다. 문제는 대부분 역사적입니다. 다른 언어는 다른 일을하고 다른 공동체에서 사용되도록 고안되었습니다. 그들 중 많은 사람들이 붙어있었습니다. 그 환경 설정 (vi! emacs! 대기, 나는 Java! C #, 대기, Microsoft, 오픈 소스 등을 의미합니다. 등)과 역사적 사고의 일반적인 삽입에 추가하십시오 ... 작은 나라에서 자연 언어를보십시오. 이 주제가 얼마나 미친 지 알기 위해 일부 유럽 국가와 같은 대중. 일부 도시에는 자부심과 기쁨이 있습니다. 국가와 프로그래밍 공동체는 다르지 않으며 프로그래밍 공동체가 더 합리적이지 않습니다. 만약 그렇다면, 우리는 모두 유니버설에서 '어딘가'라는 에스페란토와 프로그램을 말할 것입니다 ...


1
문제는 그것보다 더 깊다. 사용할 수있는 옵션이 많을수록 해당 언어에서 작동하는 암시 적 방식 대신 명시 적으로 지정해야합니다. Java를 C #과 비교하는 대신 Java를 Prolog와 비교하면 문제가 더 분명해집니다. 한 언어로 두 기능을 모두 갖추려면 복합 언어의 구문이 복잡해집니다. 보다 합리적인 선택은 구문을 최소로 줄이고 모든 기능을 메타 프로그래밍 라이브러리로 구현하는 것입니다. 핵심은 일부 작업에 대한 수준이 낮지는 않지만 기본적으로 Lisp의 기능입니다.
Steve314

4

"모든 기능을 결합하여"더 나은 언어를 만들 수 있다고 생각하는 것은 실수입니다.

부풀어 오르고 복잡하며 읽을 수없는 혼란으로 끝날 가능성이 큽니다.

좋은 언어 디자인은 선택과 절충이 필요합니다. 아마도 최고의 / 가장 혁신적이고 가장 성공적인 언어는 새로운 것을 추가하는 것보다 무언가를 꺼내고 더 나은 대안을 제공하는 언어 입니다. 예 :

  • 구조화 된 프로그래밍 언어 (C, Pascal)- "goto"를 꺼내고 프로 시저 및 구조화 된 루프 등으로 대체합니다.
  • Java- "수동 메모리 관리"를 수행하고 GC / 관리 메모리로 대체
  • Haskell / Clojure- "제어되지 않은 가변 상태"를 취합니다.
  • 리스프 (Lisp)-대부분의 "언어 구문"을 취하고, 유연한 s-expression의 homoiconic 트리로 대체

이 위에는 Bob Martin 아저씨가 전한 훌륭한 이야기가 있습니다- 마지막 프로그래밍 언어


"구조화 된 프로그래밍 언어 (C, Pascal)-"goto "를 꺼내고 프로 시저 및 구조화 된 루프 등으로 대체합니다." 죄송합니다. C :이 goto있습니다. 그러나 나는 나머지 답변을 좋아합니다. C가하는 가장 중요한 일은 메모리의 모든 위치와 시간에 어떤 레지스터가 있는지 정확히 신경 쓰지 않고 프로그램 카운터를 숨 깁니다 (정확한 주소의 관점에서 다시. 거의 조립 수준의 정밀도로 이동).
Wyatt8740

0

최고의 기능을 모두 갖춘 도구는 없습니다. 예를 들어, Javascript 및 Scheme의 좋은 기능은 작다는 것입니다. 따라서 기능을 포장하기 시작하면 이미이 기능을 잃어 버렸습니다.

Still Cobra 는 다른 언어의 모든 멋진 기능을 제공하는 방향으로 유망합니다. :-)


0

그러한 언어를 만들면 또 다른 새로운 언어가되기 때문입니다. 팬 기반이 크더라도 다른 모든 언어는 계속 존재합니다.

이후 많은 새로운 언어가 발명되었지만 C는 여전히 존재합니다.

파이썬은 보편적 인 언어라고 말할 수 있지만 루비도 있습니다.

많은 언어가 존재하는 이유는 많은 프로그래머가 있고 일부는 새로운 언어를 만들고 싶어하기 때문입니다.

모든 사람이 동의하는 단일 범용 언어가없는 이유는 모든 결정을 내리는 일부 기관에서 기술로 프로그래밍하는 것이 아니기 때문입니다. 누구나 원하는 것을 자유롭게 할 수 있습니다.

좋은 일입니다.


또한 소프트웨어 엔지니어링이 수백 년이되지 않았으며 존재하는 다른 모든 종류의 엔지니어링과 비교할 때 매우 미숙하다는 사실의 장점이 아니라 나쁘지 않다고 주장합니다.
Michael

0

지금까지 작성된 모든 내용으로 인해 새로운 이론적 근거를 많이 추가하기는 어렵지만 몇 가지만 다루겠습니다.

  • 진화 (Evolution) : 자원과 틈새 시장에 대한 경쟁이 도입되고, 변형되고, 생존하기위한 것은 생물학적 시스템 만이 아니다. 경쟁은 좋으며 사물을 발전시킵니다.

  • 성숙도 : 우리는 아마도 한 세기도되지 않은 시간 동안 컴퓨터 언어를 만들어 왔습니다. 아직 모든 질문을 알지 못하기 때문에 아직 답을 얻을 수 없습니다.

  • 별개의 기원 : 이것에 대한 올바른 단어는 확실하지 않지만 세계에는 많은 지역에서 시작된 많은 글쓰기 시스템이 있습니다. 점토판으로 조각해야한다는 요구에 의해 부분적으로 지시 된 설형 문자에 대해 생각해보십시오. 산스크리트어, 그리스어, 히브리어, 로마자, 아랍어 알파벳을 생각하십시오. 상형 문자, 많은 동아시아 국가에서 공유되는 6000 개 이상의 기호로 아름다운 글씨를 쓰는 중국식 방법. 키릴 자모, 카타카나, 히 리가 나와 같은 음성 기반의 현대 혼합 알파벳을 생각해보십시오. 나는 언어학자가 아니기 때문에 부정확 함을 너무 가혹하게 화나게하지는 않지만, 전 세계 문화가 무언가를 필요로 할 때, 그것을 만들어 내고 필요에 따라 스스로 만들 것입니다. 전 세계적으로 많은 의사 소통이 있었을 때 컴퓨터 언어가 등장했습니다. 강력한 아이디어 리더십을 가진 곳에서 나왔습니다. 그러나 프로그래밍 언어는 다양한 문화 (일부 기업 문화)에 서비스를 제공하므로이를 만든 사람들을 반영합니다. 컴퓨터 언어에는 디자인과 사용을 구체화 한 문화적 유산이 있습니다. OS 커널 문화권에서 C 및 C ++는 기본 코드 생성, 하드웨어 추상화 계층 생성을위한 하드웨어와의 밀접한 / 효율적인 결합 및 크기에 따라 설치 가능한 크기를 허용하므로 Java (또는 다른 방식)에서 곧 폐기 될 것 같지 않습니다.

  • 디자인 디자인 : 프로그래밍 언어는 다양한 조직 패러다임을 사용합니다. COBOL과 Ada는 많은 계층 구조를 가진 국방부의 일부인위원회에서 왔습니다. C, C ++, Java 등을 올바르게 기억한다면 많은 디자이너가 한 명 또는 소수의 디자이너로부터 온 것입니다. 프레드 브룩스 (Fred Brooks)는 그의 논문 인 디자인 디자인 (http://www.youtube.com/watch?v=pC-DlX-PaF4)에서위원회 결과와 비전 기반 접근 방식을 비교합니다. 오늘 다빈치 또는 보편적 프로그래밍 언어를 정의하기위한위원회를 선택하기 위해 앉았다면, 어떤 방법으로 설계해야하는지 누가 알겠습니까?


0

어쩌면이 모든 것에 약간 다른 경사가있을 수 있습니다.

언어 란 무엇입니까? 엄청나게 간단하게, 어휘, 구문 및 의미론입니다.

프로그래밍 언어로 가장 먼저하는 일은 무엇입니까?
클래스, 변수, 메소드를 정의하여 어휘와 의미를 확장합니다.

왜? 이제는 이전에는 말할 수 없었던 것을 말할 수 있습니다.
좋든 싫든 새로운 특수 목적 언어를 만들었습니다.

IMHO, 범용 언어로 찾아야 할 것은 특수 언어를 쉽게 만들 수 있다는 것입니다.


0

swiss-army-knife 주장을 제외하고는 ( 도메인이 있습니다. 도메인 고유의 언어보다 우수한 광역 언어를 설계하는 것이 더 어렵지만) 그런 언어가 둘 다가 아니라는 의미는 아닙니다 가능한 최상의 아이디어), "최상의 기능을 결합하는"문제가 있습니다 :

  • 언어 기능의 경우 "최고"는 주관적이거나 최소한 (간헐적으로) 논쟁의 여지가 있습니다.
  • 일부 기능은 호환되지 않습니다. 한 언어의 좋은 기능이 다른 언어의 좋은 기능과 결합되면 폭발 할 수 있습니다.
  • 아직 새로운 기능이 나오지 않았습니다.

요컨대, 언어 디자인은 그보다 더 어렵고 복잡합니다. 그러나 Scala를 살펴볼 수도 있습니다 .



-2

보편적 인 프로그래밍 언어가 있습니다. 이것을 "기계 언어"라고하며 다른 컴퓨터 언어의 모든 것은 기계 언어로 실행됩니다.

그것은 어떻게 생겼습니까? 0-9의 문자열과 AF.

그러나 사용하기에는 나쁜 년입니다. 따라서 Alan은 기계 언어로 번역 될 수있는 언어를 발명했으며 Alan이 원하는 것에 더 적합합니다. Bill은 Bill이 원하는 것을 다른 언어로 발명했습니다. 오래지 않아 Cobol과 Fortran, Lisp 및 Java가 있습니다. 그들 모두는 기계어의 단순화 된 버전이며, 특정 종류의 프로그램을 작성하기는 쉽지만 다른 유형의 프로그램을 작성하는 것은 어렵거나 불가능합니다. 하나는 회계에 좋고 다른 하나는 우주 왕복선을 제어하는 ​​데 좋습니다.


6
기계어는 보편적이지 않습니다. 근처에도 안. 기계마다 고유 한 언어가 있습니다.
hasen

3
또한 0-9 및 AF의 문자열이 아닙니다. 1과 0입니다.
David Conrad

@hasen @David @Andy는 모든 언어가 한 관점에서 다른 언어로 작성된 도메인 별 언어라는 것을 제안하는 것이 합리적이지 않습니까?
Armand

나는 0-9와 AF라고 말했다. 왜냐하면 키 펀치 기계에서 멀티 펀치 코드를 사용해야한다는 것을 알아야했기 때문입니다. 한 번에 청크의 크기에 따라 숫자로 가져 가면 0-1 또는 0-15 또는 0-255처럼 보입니다. 그리고 한센이 옳습니다. 기계의 모든 유형에는 고유 한 언어가 있습니다. 오늘날 거의 모든 PC는 80386 코드를 수용합니다. 내 전화도! 그러나 아이 패드는 그렇지 않다.
Andy Canfield

@hasenj와 광범위하게 다른 특성. 6502를 프로그래밍하는 데 필요한 사고 방식은 x86을 프로그래밍하는 것과 RISC 칩과는 다릅니다. 보편적 인 것과는 거리가 멀다.

-2

으니까,

UNIVERSAL 컴퓨터가 없습니다.

UNIVERSAL 플랫폼이 아닙니다.

유니버설 프로그래머가 아닙니다.

유니버설 클라이언트조차도 아닙니다.

:피

그래서 우리는 단순히 다른 것을 위해 다른 것을 필요로합니다. ;)


-2

여기서 대부분의 답변은 각 문제에 가장 적합한 도구를 사용하는 데 중점을 둡니다. 나는 이것이 충분한 이유라고 생각하지 않습니다.

대기업을 살펴보면 특정 프로젝트에 대해 더 나은 언어가 있더라도 일반적으로 회사는 단일 또는 소수의 언어와 기술을 사용하는 경향이 있습니다.

이는 표준화 개선, 손쉬운 지원, 코드 공유 등으로 인한 이점이 특정 언어의 부가 가치보다 (대부분) 더 크기 때문에 이루어집니다.


1
나는 4 개 미만의 다른 언어를 사용하는 괜찮은 기업 프로젝트를 본 적이 없습니다. 그리고 저는 부적합한 도구를 선택함으로써 그 "이점"을 믿지 않습니다. 절대 작동하지 않습니다.
SK-logic

-3

나는 "연필로 조각상을 조각하지 않기 때문에"모든 대답에 요점이 없다고 생각합니다.

TRULY는 모든 새로운 프로젝트 전에 언어를 선택합니까?

진실은 우리가 몇 프로그래밍 언어를 필요로하고, 프로그래밍 세계는 그런 식으로 더 잘 될 것입니다 : 사람들이 제작에 초점을 맞출 것이다 스크립트 언어를 더 나은 대신 예를 들어 파이썬 / 루비 / 펄 / younameit에 분산된다.

C #은 Windows에 프로그래밍되어 있으며 (모노가 있습니다. 모노가있는 사람은 매일 모노 앱에서 C #을 실행합니까?) 사용자가 Windows7 / 8을 구매하게하여 Microsoft에 돈을 버는 것입니다.
다른 회사들도 똑같이하고, 오픈 소스는 더 잘 알고, 천재도 마찬가지입니다. 그리고 우리는 닮은 언어를 많이 가지고 있습니다. 그것은 인류의 자기 중심적 성격 일뿐입니다.


동의 함-우리는 대부분 높은 수준의 "안전한"언어, 낮은 수준의 "안전하지 않은"시스템 프로그래밍 언어, 모든 어셈블리 언어 (CPU 당 하나, 불가피하지만 숨겨져 있음)와 특별한 목적 (도메인 특정) 만 필요합니다. 언어 (예 : SQL). 실제 문제는 누구나 언어가 "더 이상 사용되지 않는"언어를 선언하는 것이 불가능하다는 것입니다 (언어 디자이너가 언어를 사용하려고 할 때 (예 : Python 2 vs. Python 3)). 해마다 새로운 언어가 많고 오래된 언어를 버리지 않으면 결국 프로그래머가 사용하는 언어보다 더 많은 언어가 사용됩니다. ;-)
Brendan

-5

우리는이 질문에 답하기 위해 경제학을 조사해야합니다. 하나의 언어만으로 사업 비용을 절감했다면, 우리는 그것을 가질 것입니다. 그들은 그것을 표준화하고 모든 사람들이 그것을 사용하도록 요구합니다. 다른 언어는 먼지가 많은 학문적 건물과 야생의 열광적 인 지하실에서 풀려납니다. 이것은 일어나지 않았으므로 보편적 인 프로그래밍 언어에서 인센티브가 없어야합니다. 그렇지 않으면 자연스럽게 진화했을 것입니다.


1
"저축 된 돈"은 (회계사가 최선을 다하지만) 수명주기 동안 모호하고 성가신 개념입니다. 기계도 하나의 스패너 크기에 표준화하지 못한 것처럼, 전체 툴킷을 신경 쓰지, 소프트웨어 공학 도구 (언어) 또는 프로세서 / OS / 환경을 선택하는 많은 기준이 있기 때문에 표준화에 실패했다
앤드류
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.