같은 몇 가지 일반적인 토론의 정신 이 하나, 나는에 의견을 수집 할 목적으로이 스레드를 개방하고있어 프로그래밍 언어에 대한 연구에서 오픈 도전과 뜨거운 주제는 무엇인지 . 이 논의가 미래의 프로그래밍 언어 연구에 관한 의견을 표명하기를 바랍니다.
이런 종류의 토론은 나 자신처럼 PL에 관심이있는 신입생 연구원과 이미 다소 참여한 사람들에게 도움이 될 것이라고 믿습니다.
같은 몇 가지 일반적인 토론의 정신 이 하나, 나는에 의견을 수집 할 목적으로이 스레드를 개방하고있어 프로그래밍 언어에 대한 연구에서 오픈 도전과 뜨거운 주제는 무엇인지 . 이 논의가 미래의 프로그래밍 언어 연구에 관한 의견을 표명하기를 바랍니다.
이런 종류의 토론은 나 자신처럼 PL에 관심이있는 신입생 연구원과 이미 다소 참여한 사람들에게 도움이 될 것이라고 믿습니다.
답변:
PL 이론의 전반적인 목표는 프로그래밍 언어와 언어가 사용되는 기술 생태계를 개선하여 대규모 프로그래밍 비용을 낮추는 것입니다.
다음은 PL 연구 분야에 대한 높은 수준의 다소 모호한 설명으로 지속적인 관심을 받았으며 아마도 계속 그렇게 할 것입니다.
대부분의 프로그래밍 언어 연구는 순차적 계산의 맥락에서 이루어졌으며, 이제는 가장 현대적인 프로그래밍 언어 (예 : 고차 함수, (부분) 유형 유추, 패턴 일치)에서 사용할 수있는 핵심 기능에 대해 논쟁의 여지가 있습니다. , ADT, 파라 메트릭 다형성) 및 잘 이해된다. 동시 계산과 병렬 계산을위한 프로그래밍 언어 기능에 대한 합의는 아직 없습니다.
이전의 요점과 관련하여, 타이핑 시스템의 연구 분야는 대부분의 활동이 순차적 계산에 관한 것임을 보았습니다. 동시 및 병렬 계산을 제한하는 다루기 쉽고 유용한 타이핑 분야를 찾기 위해이 작업을 일반화 할 수 있습니까?
이전 시점의 특별한 경우로서, Curry-Howard 서신은 구조 증명 이론과 기능 프로그래밍과 관련되어 있으며, 컴퓨터 과학과 수학의 기초 간의 지속적인 기술 이전을 이끌어냅니다. 동시 계산과 병렬 계산으로 확장 할 수있는 많은 힌트가 있습니다.
최근 몇 년 동안 Isabelle 및 Coq와 같은 대화 형 교정 어시스턴트를 통해 프로그램의 사양 및 검증이 크게 발전했지만이 기술은 여전히 일상적인 프로그래밍에서 대규모로 사용할 수 없습니다. 이 상황을 개선하기 위해해야 할 일이 여전히 많습니다.
새로운 형태의 계산을위한 프로그래밍 언어 및 검증 기술. 나는
여기에서 특히 양자 계산과 생물학적으로 영감을 얻은 계산 메커니즘에 대해 생각하고 있습니다 (예 : here 참조) .
통일. 프로그래밍 언어, 유형, 검증에 대한 많은 접근 방식이 있으며 때로는 그들 사이에 겹치는 부분이 많으며 발견되기를 기다리는 더 추상적 인 접근 방식이 있다고 생각합니다. 특히, 생물학적으로 영감을받은 계산 메커니즘은 우리를 계속 압도 할 것입니다.
PL 연구의 한 가지 문제는 제안 된 솔루션이 작동하는지 여부를 즉시 말할 수있는 P / NP 질문과 같이 명백한 열린 문제가 없다는 것입니다.
프로그래밍 언어 연구를 제한하는 몇 가지 가정을 나열하겠습니다. 이들은 프로그래밍 언어의 핵심 요소라고 생각하거나 대안을 탐색하는 것이 "더 이상 언어 디자인을 프로그래밍하지 않을 것"이기 때문에 이탈하기가 어렵습니다. 각 가정마다 제한 효과를 나열합니다.
프로그램은 구문 구조입니다.
부분적으로 작성된 프로그램을 실행할 수 없습니다.
프로그램은 컴퓨터에 지침을 제공하는 것입니다.
프로그래밍은 열성적이며 평범한 사람들이 할 수 없습니다.
나는 계속할 수 있다고 생각합니다.
내가 궁금했던 한 가지 문제가 있습니다. 나는 그것이 열린 도전으로 자격이되는지 전혀 모른다.
수학적 지식은 시간이 지남에 따라 꾸준히 성장하고 있습니다. 이론적 토대, 개념, 표기법 및 증거는 수세기에 걸쳐 발전해 왔습니다. 수학자들은 어떤 시점에서든 체계적이고 공식적인 방식으로 전체 일관성을 반드시 확인하지 않고 집계를 관리했습니다 (수행하려는 시도가 있었음).
우리는 프로그래밍 언어와 프로그램 라이브러리가 시간이 지남에 따라 비슷하게 집계되고 진화 할 것으로 기대해야합니다. 컴퓨터가 일관성과 관련하여보다 공식적이고 요구가 많을 수 있기 때문에 프로그래밍 결과와 라이브러리의 집계를 관리하여 모든 사람이 일관되고 효과적으로 사용할 수 있도록하는 도구의 종류 새로운 프로그래밍 언어마다 라이브러리를 다시 작성해야합니까? 프로그래밍 매체로서의 고유 한 특성보다는 의도 된 응용 프로그램에 적합한 라이브러리를 가지고 있기 때문에 언어를 선택해야하는 이유는 무엇입니까?
다른 주제에서, 다음 질문에서 아이디어를 찾을 수 있습니다. 프로그래밍 언어가 자연어와 같이되고 있습니까? 나는이 아이디어가 많은 이론적 컴퓨터 과학자들에게는 호소력이 없을 수도 있지만, 다른 문제를 보거나 다른 관점에서 보면 여전히 유용 할 수 있다는 것을 알고있다. 나는 게시 된 많은 아이디어에 동의하지는 않지만 토론을위한 것입니다.
지난 세기 동안 응용 및 이론적 측면에서 프로그래밍 언어에서 엄청난 혁신과 폭발이 있었지만, 이것은 "진화 적 폭발"과 유사하게 컴퓨팅 역사상 단일 / 일회성 사건이라는 경우가 있습니다. (또한 cs.se에서 "왜 그렇게 많은 프로그래밍 언어가 있습니까?" 를 참조하십시오.) 그러므로 미래는 이와 관련하여 과거와 같지 않을 것입니다. 그러나 현재 개발 / 개발중인 장거리 트렌드가 몇 가지 있습니다.
프로그래밍 / 소프트웨어 복잡성 및 관리 / 최소화 / 완화 / 감소 방법은 항상 언어 설계에 영향을 미쳤으며 현재는 매우 크고 복잡한 소프트웨어 시스템으로 인해 훨씬 더 중요한 주제입니다. 그것은 OOP 설계 이론 의 주요 측면 이었지만 지금은 매우 복잡한 OOP 시스템을 가지고 있습니다! 그것에 집중 한 숙고는 Brooks의 Mythical man-month 와 같은 분야의 고전을 이끌어 냈으며 , 여러 가지면에서 여전히 매우 유효한 시각이며, 아마도 기록되었을 때보 다 훨씬 관련성이 있습니다.
병행. 더 큰 병렬 처리 (예 : 멀티 코어 등)로 하드웨어가 이동하고 클럭 속도 증가는 더 이상 성능을 향상시키기에 충분하지 않습니다. 이러한 변화는 2000 년대 중반에 일어 났으며 언어 연구 / 디자인에 큰 영향을 미치고 있습니다. 병렬화는 항상 주제 였지만 새로운 최우선 / 긴급 성을 가지고 있으며, 병렬화가 지나치게 복잡하고 프로그래밍이 어려울 수 있다는 광범위한 사고 / 합의가 있으며, 아마도 다른 이론적 접근법이이 중 일부를 완화시킬 수 있습니다. 이것에 대한 좋은 참고 : 병렬 컴퓨팅 연구의 풍경 : 버클리의 관점
데이터 마이닝 / 빅 데이터 . 이들은 프로그래밍 언어 디자인에 영향을 미칩니다. 또한 데이터베이스 아키텍처의 새로운 방향은 프로그래밍 언어에 영향을주고 있습니다.
수퍼 컴퓨팅 은 언어 디자인에 큰 영향을 미치며, 병렬 처리 및 데이터 마이닝 / 빅 데이터 (예 : MapReduce 와 같은 새로운 언어) 와도 겹칩니다 .
비주얼 / 데이터 흐름 프로그래밍 . 이러한 유형의 "언어"가 증가했습니다 (비주얼 프로그래밍은 여러 가지면에서 프로그래밍을 실제로 "언어"에서 분리하는 것입니다). 또한 병렬 처리를 통한 강력한 교차 수분.
AI . 이것은 장거리 와일드 카드에 관한 것으로 지금은 컴퓨터 언어와 프로그래밍에 어떤 영향을 미칠지 아직 명확하지 않지만 아마도 매우 중요 할 것입니다. 과거에는 [다른 형태로] 프롤로그 와 같은 전체 언어가 사용되었습니다 . 눈에 띄는 결과를 어떻게 적용 할 수 있는지에 대한 초기 표시는 유전자 알고리즘 / 유전자 프로그래밍 입니다.
" Beyond Java by Tate "의 "프로그래밍 언어의 미래"라인에 도움이 될만한 참고 자료 그는 아마도 논란의 여지가 있지만 Java (현재 가장 정교하고 포괄적 인 프로그래밍 언어 중 하나)가 시대를 시작하기 시작했으며 새로운 언어 / 접근법의 초기 징후가 장기적으로 등장 할 것이라는 점을 숙고하고있다.