프로그래밍 언어 이론 연구 및 공개 과제


32

같은 몇 가지 일반적인 토론의 정신 하나, 나는에 의견을 수집 할 목적으로이 스레드를 개방하고있어 프로그래밍 언어에 대한 연구에서 오픈 도전과 뜨거운 주제는 무엇인지 . 이 논의가 미래의 프로그래밍 언어 연구에 관한 의견을 표명하기를 바랍니다.

이런 종류의 토론은 나 자신처럼 PL에 관심이있는 신입생 연구원과 이미 다소 참여한 사람들에게 도움이 될 것이라고 믿습니다.


7
커뮤니티 위키?
Suresh Venkat

2
"TCS의 프론티어 (Frontiers of TCS)"질문의 텍스트를 인용하거나 요약하면이 질문과 대답하는 사람들이 실제로 개선 될 것이라고 생각합니다. 이 질문에 대한 예상 답변 범위는 명확하지 않지만 다른 질문은 예상 한 내용에 대해 더 정확합니다.
Vijay D

얼마 전에 stackoverflow에 대해이 질문을했을 때 ... 나는 downvotes를 얻었고 내 질문은 닫혔습니다!
Rorschach

답변:


23

PL 이론의 전반적인 목표는 프로그래밍 언어와 언어가 사용되는 기술 생태계를 개선하여 대규모 프로그래밍 비용을 낮추는 것입니다.

다음은 PL 연구 분야에 대한 높은 수준의 다소 모호한 설명으로 지속적인 관심을 받았으며 아마도 계속 그렇게 할 것입니다.

  • 대부분의 프로그래밍 언어 연구는 순차적 계산의 맥락에서 이루어졌으며, 이제는 가장 현대적인 프로그래밍 언어 (예 : 고차 함수, (부분) 유형 유추, 패턴 일치)에서 사용할 수있는 핵심 기능에 대해 논쟁의 여지가 있습니다. , ADT, 파라 메트릭 다형성) 및 잘 이해된다. 동시 계산과 병렬 계산을위한 프로그래밍 언어 기능에 대한 합의는 아직 없습니다.

  • 이전의 요점과 관련하여, 타이핑 시스템의 연구 분야는 대부분의 활동이 순차적 계산에 관한 것임을 보았습니다. 동시 및 병렬 계산을 제한하는 다루기 쉽고 유용한 타이핑 분야를 찾기 위해이 작업을 일반화 할 수 있습니까?

  • 이전 시점의 특별한 경우로서, Curry-Howard 서신은 구조 증명 이론과 기능 프로그래밍과 관련되어 있으며, 컴퓨터 과학과 수학의 기초 간의 지속적인 기술 이전을 이끌어냅니다. 동시 계산과 병렬 계산으로 확장 할 수있는 많은 힌트가 있습니다.

  • 최근 몇 년 동안 Isabelle 및 Coq와 같은 대화 형 교정 어시스턴트를 통해 프로그램의 사양 및 검증이 크게 발전했지만이 기술은 여전히 ​​일상적인 프로그래밍에서 대규모로 사용할 수 없습니다. 이 상황을 개선하기 위해해야 ​​할 일이 여전히 많습니다.

  • 새로운 형태의 계산을위한 프로그래밍 언어 및 검증 기술. 나는
    여기에서 특히 양자 계산과 생물학적으로 영감을 얻은 계산 메커니즘에 대해 생각하고 있습니다 (예 : here 참조) .

  • 통일. 프로그래밍 언어, 유형, 검증에 대한 많은 접근 방식이 있으며 때로는 그들 사이에 겹치는 부분이 많으며 발견되기를 기다리는 더 추상적 인 접근 방식이 있다고 생각합니다. 특히, 생물학적으로 영감을받은 계산 메커니즘은 우리를 계속 압도 할 것입니다.

PL 연구의 한 가지 문제는 제안 된 솔루션이 작동하는지 여부를 즉시 말할 수있는 P / NP 질문과 같이 명백한 열린 문제가 없다는 것입니다.


1
양자 컴퓨팅과 양자 프로그래밍 언어를 추가 할 수 있다면, 양자 컴퓨팅이 일어나지 않더라도이 프로그래밍 모델에서 일부 프로그래밍 개념이 어떻게 전달 될 수 있는지에 대한 연구는 다른 언어, 자연어 프로그래밍, 퍼지 프로그래밍, 물리적 계산 및 물리적 프로그래밍 (분자 수준을 넘어 물질에 직접 프로그래밍)
Nikos M.

1
@NikosM. QC는 큰 문제이며 많은 조사를했다는 데 동의합니다. 이 논문 은 양자 역학의 기초와 프로그래밍 언어 이론 사이의 놀라운 연관성을 보여줍니다.
Martin Berger

좋은 질문은 이런 종류의 공식적인 관계를 다룰 수 있습니다.
Nikos M.

11

프로그래밍 언어 연구를 제한하는 몇 가지 가정을 나열하겠습니다. 이들은 프로그래밍 언어의 핵심 요소라고 생각하거나 대안을 탐색하는 것이 "더 이상 언어 디자인을 프로그래밍하지 않을 것"이기 때문에 이탈하기가 어렵습니다. 각 가정마다 제한 효과를 나열합니다.

  1. 프로그램은 구문 구조입니다.

    • 실제 프로그래머는 iPad를 사용하여 소스 코드를 구성하지 않습니다. 그리고 그들이하더라도 Emacs, Eclipse, NetBeans, XCode 등만큼 효율적이지 못했습니다.
    • 프로그램을 구성하는 대체 방법에 대한 연구는 언어 디자인을 프로그래밍하는 것이 아니라 그래픽 사용자 인터페이스 디자인 또는 교육입니다 (스크래치 참조).
  2. 부분적으로 작성된 프로그램을 실행할 수 없습니다.

    • 최소한 실행이 누락 된 부분에 도달하면 런타임 오류가 발생합니다.
    • 완료되지 않은 프로그램을 실행하면 무엇이 좋을까요?
  3. 프로그램은 컴퓨터에 지침을 제공하는 것입니다.

    • 프로그래밍 언어 디자인은 법을 작성하고 구성하는 방법에 대해 아무 말도하지 않습니다. 제휴.
    • 박테리아는 프로그램을 작성하지 않습니다.
  4. 프로그래밍은 열성적이며 평범한 사람들이 할 수 없습니다.

    • 평범한 사람들은 구문, 개념, 도구를 모르므로 프로그램을 작성할 수 없습니다.
    • 우리가 평범한 사람들이 프로그램을 작성할 수있게하려고하더라도 사소한 것만 쓸 수 있습니다.

나는 계속할 수 있다고 생각합니다.


2
제임스 : 훌륭합니다. 저는 숙모에게 알릴 것입니다. 마틴 : 이것은 정확히 내가 말하는 종류의 것입니다. PL 커뮤니티가 확실하게 확립되지 않았기 때문에 PL 커뮤니티가 심각하게 받아들이지 않기 때문에 비 텍스트 프로그래밍이 확실하게 확립되지 않았습니다. 그러나 사람이 화면에 단어를 입력하도록 만들어지지 않았다는 것은 나에게 명백한 것 같습니다. 우리는 물건을 던지고 블루 베리를 따는 데 능숙합니다.
Andrej Bauer

1
@AndrejBauer 과학적인 주장으로, "그것은 나에게 명백하다"는 개선을 넘어선 것이 아니다. 프로그래밍 언어가 최근에 쓰인 글쓰기 시스템의 역사를 살펴보면, 그 역사적 궤적은 로그 작성과는 거리가 멀었습니다. 어쩌면 문자열을 파싱하는 능력이 블루 베리보다 더 관련이 있습니다. 알파벳 쓰기는 수천 년 동안 발전해 왔기 때문에 쉽게 수정 가능한 방대한 버그가 포함되어 있지는 않습니다. 즉, ASCII 기반 선형 문자열보다 더 잘 할 수 있다고 생각합니다. 우리가하기 전에 시간이 걸릴 것 같아요.
Martin Berger

1
내 대답의 요점은 "상자 밖에서 생각하는 것"입니다. PL 연구에서 숨겨진 가정을 조사하고 이들이 PL 연구의 잠재력을 어떻게 제한하는지 확인합니다.
Andrej Bauer

4
@AndrejBauer, POPL로 범위를 제한하는 것은 실수라고 생각합니다. 이런 종류의 작업은 OOPSLA, ICSE 또는 CHI에서 수행됩니다. POPL은 새로운 공식적인 접근 방식이 없다면 관심이 없지만 POPL은 전체 PL 커뮤니티가 아닙니다.
Sam Tobin-Hochstadt 2016 년

2
@DominicMulligan : 물론, 이것들은 모두 매우 환영받는 아이디어입니다. 내 의견으로는 프로그래밍이 무엇인지에 대한 인식을 바꾸려고합니다. 따라서 이론적 아이디어가 실제로 잘 활용 될 수 있다면 ( "일반적인"프로그래머가 일상 생활에서이를 사용할 것이라는 것을 의미합니다), 우리는 이겼습니다.
Andrej Bauer

0

내가 궁금했던 한 가지 문제가 있습니다. 나는 그것이 열린 도전으로 자격이되는지 전혀 모른다.

수학적 지식은 시간이 지남에 따라 꾸준히 성장하고 있습니다. 이론적 토대, 개념, 표기법 및 증거는 수세기에 걸쳐 발전해 왔습니다. 수학자들은 어떤 시점에서든 체계적이고 공식적인 방식으로 전체 일관성을 반드시 확인하지 않고 집계를 관리했습니다 (수행하려는 시도가 있었음).

우리는 프로그래밍 언어와 프로그램 라이브러리가 시간이 지남에 따라 비슷하게 집계되고 진화 할 것으로 기대해야합니다. 컴퓨터가 일관성과 관련하여보다 공식적이고 요구가 많을 수 있기 때문에 프로그래밍 결과와 라이브러리의 집계를 관리하여 모든 사람이 일관되고 효과적으로 사용할 수 있도록하는 도구의 종류 새로운 프로그래밍 언어마다 라이브러리를 다시 작성해야합니까? 프로그래밍 매체로서의 고유 한 특성보다는 의도 된 응용 프로그램에 적합한 라이브러리를 가지고 있기 때문에 언어를 선택해야하는 이유는 무엇입니까?

다른 주제에서, 다음 질문에서 아이디어를 찾을 수 있습니다. 프로그래밍 언어가 자연어와 같이되고 있습니까? 나는이 아이디어가 많은 이론적 컴퓨터 과학자들에게는 호소력이 없을 수도 있지만, 다른 문제를 보거나 다른 관점에서 보면 여전히 유용 할 수 있다는 것을 알고있다. 나는 게시 된 많은 아이디어에 동의하지는 않지만 토론을위한 것입니다.


일관성이 과대 평가되었습니다.
Andrej Bauer

1
나는 이것에 대해 약간의 동의는 없지만 겸손한 제안을 볼 수 있습니다. 그럼에도 불구하고, 적어도 나에게 이유에 대해 몇 가지 설명을하는 것이 더 도움이 될 수 있습니다. 내가 불분명 한 경우, 수학이 일관성이 없을 수 있다고 말하려는 의도는 없었고, 단지 일관된 수단으로 (필수적으로) 집계되지 않았다고 만했다 (역사들이 더 잘 말할 것). CS의 관점에서 볼 때, 집계의 어려움과 관련하여 잘못되었을 수 있습니다 (나는 이것에 대한 기술적 작업을 한 적이 없습니다). 나는 단지 사용자 경험과 일반적으로 듣는 관점에 대해서만 TCS가 생산하는 언어에 간접적으로 해 롭습니다.
babou

1
글쎄요, 대부분의 견해는 일관성이 전혀 아이디어가 아니라는 사실에 관한 것입니다. 반면 실제로 대부분의 소프트웨어는 "일관되게"일관성이 있습니다. 그러나 우리는 그것을 사용하고 유용하다고 생각합니다. 그렇다면 이론가들은 왜 실제로는 달성 할 수없고 너무 이상적인 개념에 집착 하는가? 덜 사소한 방식으로 일관성을 정량화하는 것이 더 좋을 것 같습니다.
Andrej Bauer

@AndrejBauer-답장을 보내 주셔서 감사합니다. 내가 쓴 것에 적용 된 귀하의 진술에 약간 놀랐습니다. 어떤 형태의 절대적 일관성을 지원하는 것은 아니지만 진화하는 상황에서 집계가 가능하고 의미있게 만드는 실행 가능한 접근 방식을 원합니다. 당신이 말한대로 대부분 일관성이 있습니다. 목적을 위해 일관성이 무엇을 의미하는지 찾는 것이 아이디어의 일부였으며, 사소하거나 다른 답변을 제안하지 않았습니다. 나는 절대로 집착 한 이론가가 아니었고, 당신의 대답에서 우리가 당혹 스러울 수있는 곳을 보지 못했습니다.
babou

1
난 그냥 "순수한 이론가"에 대해 뛰고 있다고 생각합니다. 저를 무시하십시오.
Andrej Bauer

0

지난 세기 동안 응용 및 이론적 측면에서 프로그래밍 언어에서 엄청난 혁신과 폭발이 있었지만, 이것은 "진화 적 폭발"과 유사하게 컴퓨팅 역사상 단일 / 일회성 사건이라는 경우가 있습니다. (또한 cs.se에서 "왜 그렇게 많은 프로그래밍 언어가 있습니까?" 를 참조하십시오.) 그러므로 미래는 이와 관련하여 과거와 같지 않을 것입니다. 그러나 현재 개발 / 개발중인 장거리 트렌드가 몇 가지 있습니다.

  • 프로그래밍 / 소프트웨어 복잡성 및 관리 / 최소화 / 완화 / 감소 방법은 항상 언어 설계에 영향을 미쳤으며 현재는 매우 크고 복잡한 소프트웨어 시스템으로 인해 훨씬 ​​더 중요한 주제입니다. 그것은 OOP 설계 이론 의 주요 측면 이었지만 지금은 매우 복잡한 OOP 시스템을 가지고 있습니다! 그것에 집중 한 숙고는 Brooks의 Mythical man-month 와 같은 분야의 고전을 이끌어 냈으며 , 여러 가지면에서 여전히 매우 유효한 시각이며, 아마도 기록되었을 때보 다 훨씬 관련성이 있습니다.

  • 병행. 더 큰 병렬 처리 (예 : 멀티 코어 등)로 하드웨어가 이동하고 클럭 속도 증가는 더 이상 성능을 향상시키기에 충분하지 않습니다. 이러한 변화는 2000 년대 중반에 일어 났으며 언어 연구 / 디자인에 큰 영향을 미치고 있습니다. 병렬화는 항상 주제 였지만 새로운 최우선 / 긴급 성을 가지고 있으며, 병렬화가 지나치게 복잡하고 프로그래밍이 어려울 수 있다는 광범위한 사고 / 합의가 있으며, 아마도 다른 이론적 접근법이이 중 일부를 완화시킬 수 있습니다. 이것에 대한 좋은 참고 : 병렬 컴퓨팅 연구의 풍경 : 버클리의 관점

  • 데이터 마이닝 / 빅 데이터 . 이들은 프로그래밍 언어 디자인에 영향을 미칩니다. 또한 데이터베이스 아키텍처의 새로운 방향은 프로그래밍 언어에 영향을주고 있습니다.

  • 수퍼 컴퓨팅 은 언어 디자인에 큰 영향을 미치며, 병렬 처리 및 데이터 마이닝 / 빅 데이터 (예 : MapReduce 와 같은 새로운 언어) 와도 겹칩니다 .

  • 비주얼 / 데이터 흐름 프로그래밍 . 이러한 유형의 "언어"가 증가했습니다 (비주얼 프로그래밍은 여러 가지면에서 프로그래밍을 실제로 "언어"에서 분리하는 것입니다). 또한 병렬 처리를 통한 강력한 교차 수분.

  • AI . 이것은 장거리 와일드 카드에 관한 것으로 지금은 컴퓨터 언어와 프로그래밍에 어떤 영향을 미칠지 아직 명확하지 않지만 아마도 매우 중요 할 것입니다. 과거에는 [다른 형태로] 프롤로그 와 같은 전체 언어가 사용되었습니다 . 눈에 띄는 결과를 어떻게 적용 할 수 있는지에 대한 초기 표시는 유전자 알고리즘 / 유전자 프로그래밍 입니다.

" Beyond Java by Tate "의 "프로그래밍 언어의 미래"라인에 도움이 될만한 참고 자료 그는 아마도 논란의 여지가 있지만 Java (현재 가장 정교하고 포괄적 인 프로그래밍 언어 중 하나)가 시대를 시작하기 시작했으며 새로운 언어 / 접근법의 초기 징후가 장기적으로 등장 할 것이라는 점을 숙고하고있다.

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