문제

여기에 일종의 이상한 질문이 있습니다. 나는 공식적인 방법을 사용하여 프로그램을 배우는 것에 관한 책을 쓰는 과정에 있으며, 프로그래밍 경험을 가진 사람들을 대상으로 할 것입니다. 아이디어는 그들에게 고품질 프로그래머가되도록 가르치는 것입니다.

기본 표기법은 Dijkstra의 것입니다. 프로그래밍 징계, 동시성 및 통신 확장과 함께.

EWD와 달리 학생들이 결국 실제 실행 가능한 프로그램을 작성하기를 원합니다. 그것은 어떤 시점에서 EWD 표기법에서 다른 언어로 번역되는 것을 의미합니다. 공식 프로그래밍을 처음 시작했을 때 나는 C를 대상으로했지만 많은 배관을 쓰고 포인터를 처리하는 모든 복잡성이 있습니다. Ruby는 체계 또는 LISP와 마찬가지로 명백한 대상입니다. 그러나 다양한 기능 언어도 있습니다. 특히 동시성에 관심이 있기 때문에 Erlang은 가능성처럼 보입니다.

마지막으로, 내 질문은 다음과 같습니다. 독자들에게 공식적으로 개발 된 프로그램을 목표로하는 언어는 무엇입니까?

도움이 되었습니까?

해결책

백인,

나는 항상 Dijkstra의 걸작을 루프와 어레이에 의해 중앙 단계에 차지하는 프로그래밍 모델과 관련시켰다. Dijkstra (예 : 가장 약한 전제 조건을 컴퓨팅하는)에 가까이 고착하고 있다면 기능적 언어가 크게 적합하지 않다고 생각합니다. 루프 및 어레이로 명령적인 프로그래밍을 잘 지원하는 인기있는 언어 중 Python은 아마도 가장 많은 수하물을 제공 할 수 있습니다.

이것은 기능적 언어가 공식적인 방법에 적합하지 않다고 말하는 것은 아닙니다 .-- 매우 적합합니다. 그러나 스타일은 dijkstra와는 상당히 다릅니다. 선호되는 방법은 계산 증명을 강조합니다. Richard Bird와 Phil Wadler의 Suku (무거운 가운) 또는 교과서를 해결하는 것에 관한 Richard Bird의 논문을 참조하십시오.

동시성의 경우 동시성 모델 (및 어떤 공식적인 방법)가 믿고있는 방법에 따라 다릅니다. John Reppy의 동시 ML은 아름다운 메시지 통과 모델입니다. Erlang은 또한 멋진 깨끗한 제한 모델을 가지고 있습니다. 반면에, 잠금 장치와 중요한 섹션으로 프로그래밍하는 것은 매우 어려워서 그러한 상황에서 공식적인 방법에 더 많은 이점이있을 수 있습니다.

배경 연구에 관심이있는 두 가지 다른 말 :

  • 실제로 Dijkstra의 방법을 실제 시스템에 적용한 유일한 프로그래머는 Modula-3에서 일하고있는 Greg Nelson이었습니다. (Greg와 Mark Manasse는 Trestle Window 시스템을 함께 썼습니다.) Modula-3은 디지털이 Fecklessness와 무능함을 통해 죽을 수있는 아주 좋은 언어였습니다. Greg는 Dijkstra의 미적분학으로 확장 된 멋진 Toplas 종이를 가지고있었습니다.

  • Gerard Holzmann의 모델링 언어 회전 Dijkstra의 지체 언어를 직접 기반으로하며 동시성도 지원합니다. 그 목적은 프로그래밍이 아닌 모델 점검이며 몇 가지 특유의 특성이 있지만 공식적인 방법과 강력한 연결이 있으며, 어설 션을 모델링 할 수있어서 정말 좋습니다. 공식적인 방법에 관심이있는 사람은 누구나 확인하고 싶을 것입니다.

(편집 : 여기에 대한 링크가 있습니다 그렉 넬슨 종이 또는 그중 하나. - CRM)

다른 팁

당신의 것이 무엇인지 분명히 무시합니다 가장 좋아하는 프로그램 작성 언어 답, 두 가지 유용한 답변을 볼 수 있습니다.

한편으로, 당신은 중간 프로그래머로 추정되는 방법에 대한 방법을 보여 주려고 노력하고 있습니다. 단일 언어를 선택하고 책 언어로 축복하면 그 언어를 선호하지 않는 잠재적 인 독자를 소외시킬 수 있습니다. 방법을 시연하기 때문에 요점을 간결하게 설명하는 언어로 스 니펫을 사용하는 사치가 있습니다. 예를 들어, RIIA를 입증하는 데 사용할 수있는 유일한 언어는 아마도 C ++이지만,이 동일한 언어는 소스 분석을 수행하는 방법을 보여주는 데 매우 좋지 않습니다. 체계는 소스 분석에 이상적이지만 강력한 타이핑의 이점 (및 약점)을 탐색 할 수있는 많은 옵션을 제공하지 않습니다. 많은 언어를 사용하십시오.

반면에, 당신은 주로 프로그래밍 방법에 달려 있기 때문에 실제 언어가 전혀 필요하지는 않습니다. 잘 정의 된 표기법은 훌륭하며 독자가 한 언어 나 다른 언어의 피상적 인 세부 사항보다는 당신이 만드는 요점에 집중하도록 강요합니다.

나는 LISP와 계획에서 자랐고 둘 다 사랑합니다. 나는 그들이 처음부터 배울 수있는 훌륭한 언어라고 생각합니다. 그러나 프로그래밍 경험을 가진 사람이 그 언어에 걸릴 것이라고 확신하지 못합니다. 타이틀에 계획된 책을 위해 아마존에서 많은 히트 곡을 얻지 못할 것입니다. :)

C#은 배우기가 매우 쉬운 언어이며 동시성과 같은 주제로 매우 빠르게 다이빙하는 데 필요한 모든 기본 사항이 있습니다. OO 및 웹 개념을 타겟팅 할 수 있기 때문에 더 많은 적용 가능성이 있습니다. 그것은 또한 상당히 인기가 있으며 회사의 책에 대한 비용을 지불하는 회사가 항상 판매에 좋은 책을 지불하게 할 것입니다 ( "Be a Kick Ass C# 프로그래머"는 "현대 LISP의 동시성"보다 비용 상환 시트에 훨씬 더 나아갑니다).

F#은 흥미로운 언어입니다. 그것은 LISP 또는 체계의 기능적 아름다움을 얻었으며 (잘 아니라 거의) OOP 주제에 뛰어 들고, 물건을 향상시키려는 경우 UI 물건에 대한 .NET 프레임 워크에 연결할 수있는 능력을 제공합니다. 그러나 지금은 모호합니다.

나는 루비와 대화 할 수 없으므로 개인적으로 총알을 물고 C#과 함께 갈 것입니다.

솔직히, 나는 이것에 대해 루비를 추천 할 수 없습니다. 상업 세계에서 매일 프로그램 할 때 C 또는 Java보다 훨씬 더 좋아합니다. 그러나 그것의 의미론은 너무 잘못 정의되어 C만큼 절반을 신뢰하지 않지만, 나는 성명서에 대해 논쟁하고 K & R을 대체 한 훨씬 더 두꺼운 하얀 책을 컨설팅하는 데 몇 시간을 소비 할 수 있지만, 나는 결말 컴파일러가 있다면 (예, 나는 몽상가이지만 여기서 나와 함께 일한다는 것을 알고 있다면) 다른 쪽에서 나오는 것이 무엇인지 알고 있습니다.

루비는 여러면에서 훌륭하지만 공식적인 일이라면 트웨인은 결코 만나지 않을 것입니다.

나는 Haskell에게 직접 투표하는 경향이 있습니다. 내가 돌아올 때마다 나는 그 언어 정의에서 모든 것이 얼마나 감지하는지 놀랐습니다. (1 년 정도 만에 틀림없이 Haskell 98의 모서리의 절반을 탐험하지 않았을 것입니다.)

그리고 나는 또한 Dikjstra 대 기능적인 것도 이해한다. 돌아가서 그의 논문을 읽습니다 그는 명령적인 세계에 있습니다. 나는 그가 실제로 그곳에서 잘못된 길을 갔는지 여부를 말할 자격이 없습니다. 아마도 나는 그의 글이 그의 생각만큼이나 그의 글이 얼마나 좋은지에 압도 당했을 것입니다. 그러나 그것은 그를 기쁘게하는 것 같았으므로 사용하는 것은 어떻습니까? Algol 60?

좋은 생각입니다. 나는 체계가 최소한의 필수 요소로 다른 추상화를 실천할 수 있기 때문에 좋은 선택이라고 생각합니다. 또한 체계에서 PVS와 같은 검증 시스템으로 번역하는 것도 쉽습니다.http://pvs.csl.sri.com/)

건배

나는 당신이 당신의 책에 사용하는 언어 또는 코드를 검토하는 능숙한 사람에 대한 경험을 가지고 있어야한다고 생각합니다.

개인적으로, 나는 그것에 익숙하기 때문에 Common LISP를 사용할 것입니다. 모든 개념을 구현하는 것은 훌륭한 언어입니다. 다른 옵션은 Erlang, Haskell, Ruby 또는 Python, 아마도 일부 ML 방언 일 수 있습니다. 나는 C 가족 (C# 및 Java 포함)에 대해 편견을 가지고 있으며, 개념에 대한 더 낮은 수준의 사고에 붙어있는 것 같습니다.

공식적인 방법을 가르치기 위해 완벽한 개발자를 사용하는 대학이 상당히 많습니다 (면책 조항 : 저는이 제품과 연결되어 있습니다). 사양, 데이터 개선 및 알고리즘을 표현하기위한 언어를 중심으로 구축되었습니다. 검증을위한 자동 정리 속담과 C ++, C# 및 Java를 생성 할 수있는 코드 생성기가 있습니다. PD의 디자인은 "프로그래밍 분야의 징계"에서 매우 영감을 받았지만, 우리는 대형 시스템에 비현실적인 표기법을 발견했기 때문에 표기법은 Dijktra와 다소 분기되었습니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top