F #에 대화 형 모드가 있지만 C #이없는 이유는 무엇입니까?


32

F #은 대화식 REPL과 함께 제공됩니다. C #은 일종의 것이 없으며 실제로 전체 프로젝트를 설정하지 않고는 놀기 어렵습니다 (LINQpad가 작동하고 powershell을 통해 수행 할 수도 있음).

F #에서 대화 형 콘솔을 사용할 수 있지만 C #에서는 구현하기가 어려운 언어에 근본적으로 다른 점이 있습니까?


몇 년이 지난 후에도 사람들은 여전히이 질문에 왔습니다. 이제 많은 옵션이 있습니다. 모든 최신 Windows 시스템에 사전 설치된 powershell을 사용하여 .Net 프레임 워크를 사용할 수 있습니다. 또는 LINQpad를 사용 하여 임의의 C # 코드를 프로토 타입 할 수 있습니다 . 또는 ScriptC 를 사용 하거나 Complify.net 또는 Jsil 과 같은 온라인 jsfiddle 유형 환경을 사용할 수 있습니다 . 많은 옵션.


4
C # 에는 REPL이 있습니다. 그것은 즉시 창 이라고 불리우며 꽤 오랫동안 사용되었습니다. 새로운 언어 기능이 지원하지 않기 때문에 C # 3.0부터 눈에 띄는 한계가 있지만 그럼에도 불구하고 본격적인 REPL입니다.
Allon Guralnek


2012 년경 Roslyn 데모 릴리스에서 VS2010에 대한 REPL이 포함 된 프로젝트를 기억합니다.
James

@DanielHakimi :이 의견에 감사드립니다. 이것은 VS2015에 포함 된 단서가 없었으며 디버깅하는 동안 즉시 창을 사용할 수 있다고 생각했습니다. VS2015에는 이제 View- > Other Windows-> C # Interactive를 통해 액세스 할 수 있는 C # Interactive 도구 창이 포함되어 있으며 디버깅 환경과 분리 된 완전한 Roslyn 기반 REPL 인 것 같습니다.
Lou

답변:


56

F #에서 대화 형 콘솔을 사용할 수 있지만 C #에서는 구현하기가 어려운 언어에 근본적으로 다른 점이 있습니까?

예.

F #은 ML 프로그래밍 언어의 자손으로, Lisp 및 Scheme과 같은 언어의 영향을 많이 받았습니다. 이 언어들은 처음부터 3 가지 멋진 속성을 갖도록 설계되었습니다.

첫째, 그 언어는 정말이없는 문에게 당신이 C #으로 그들을 생각하는 방식. 오히려 거의 모든 것이 가치 를 갖는 표현 이므로 거의 모든 상황에서 가치 평가 및 인쇄 메커니즘이 의미가 있습니다.

둘째, 이러한 언어는 부작용으로 프로그래밍하는 것을 권장하지 않으므로 전역 상태를 망칠 걱정없이 평가를 수행 할 수 있습니다.

셋째, 해당 언어로 수행하는 대부분의 작업은 "최상위 수준"입니다. 일반적으로 "클래스"또는 "네임 스페이스"또는 기타 컨텍스트가 없습니다.

반대로 C #은 부작용을 일으키는 명령문으로 프로그래밍 제어 흐름을 강조하며 이러한 명령문은 항상 네임 스페이스, 클래스, 메서드 등 여러 개의 중첩 된 컨테이너에 있습니다.

따라서 C #에서 REPL 을 사용하기가 어렵지만 불가능 하지는 않습니다 . 우리는 일반적인 문맥 밖에서 나타나는 문장과 표현에 대한 의미가 무엇인지, 그리고 이름 바인딩을 바꾸는 돌연변이에 대한 의미가 무엇인지 알아 내야합니다.

F #에 대화 형 모드가 있지만 C #이없는 이유는 무엇입니까?

F # 팀은 REPL 루프를 갖는 것이 우선 순위 시나리오라고 판단했기 때문입니다. C # 팀은 역사적으로 그렇지 않았습니다. 예산에 맞는 최우선 순위 기능이 아닌 한 기능은 구현되지 않습니다. 지금까지 C # REPL은 목록의 최상위에 없었습니다.

Roslyn 프로젝트에는 C # REPL이 있습니다 (결과적으로 VB REPL도 있지만 아직 준비되지 않았습니다). 미리보기 릴리스를 다운로드하여 원하는 방식을 확인할 수 있습니다.

http://www.microsoft.com/en-us/download/details.aspx?id=27746


7
파이썬에는 훌륭한 REPL이 있으며 명령문, 부작용 및 네임 스페이스가 있습니다. Javascript, Bash 등도 마찬가지입니다. 기준을 위반하는 많은 언어는 REPL이 좋습니다.
Lie Ryan

2
에릭을 다시 환영합니다! 더 많은 답변을 드리겠습니다.
SolutionYogi

16
@LieRyan 당신이 요점을 놓친 것 같아요. 대화식 REPL 루프에 대한 유일한 "기준"은 누군가 앉아서 앉았다는 것입니다. F #에서는 우선 순위가 높고 상대적으로 쉬웠으며, C #에서는 우선 순위가 낮고 상대적으로 어렵 기 때문에 F #은 일찍 시작했지만 C #은 그렇지 않았습니다.
KutuluMike

흥미 롭군 VS2010 (4 개의 C #, 4 개의 VB.NET, 2 개의 J # 및 2 개의 C ++ / CLI)이 출시되기 전에 .NET 프레임 워크 용으로 많은 컴파일러를 구축 한 경험에 따르면 새로운 컴파일러가 새로운 .NET 언어가 만들어졌습니다. 필자는 향후 .NET 컴파일러 및 컴파일러 개정판을 개발할 방향 인 것처럼 보일 때 서비스로서의 컴파일러 시나리오를 활성화하는 방법에 대해 많은 생각을 가지고 Roslyn-esque 스타일로 구축되었다고 확신합니다. 나에게 F #이 태어난 시대는 필연적으로 컴파일러가 작성되는 방식에 중요한 역할을 한 것 같습니다.
Allon Guralnek

좋은 대답입니다. Python vs C # : {} 구문 언어는 REPL에 적합하게 구부러지지 않으며 들여 쓰기 기반 언어는 여기에서 크게 발전했습니다. 들여 쓰기 구문이 {} 구문보다 낫습니다. REPL 및 코드의 가독성을 위해. 들여 쓰기를 {}로 대체하는 C # 메타 구문이없는 한 REPL 환경은 F # 또는 Python처럼 매끄럽지 않습니다.
citykid


2

나는 그것이 대부분 역사적인 것이라고 믿습니다. REPL 환경은 항상 기능적 언어, ML 계열 언어가 포함되어 있으며 F #은 이러한 전통에 충실합니다. 대화 형 환경은 기능적 배경에서 오는 사용자가 당연한 것으로 생각하는 기능이며, 그러한 기능이 없으면 VS 및 확장 기능으로 F #이 불리하다는 점을 명심하십시오.

반면에 OOP 커뮤니티에서는 그러한 기능이 일반적이지 않았습니다.

그러나 C, Java 또는 C #을 포함한 많은 비 기능 언어에 사용 가능한 REPL이 있습니다. 또한 본격적인 REPL과는 거리가 멀지 만 VS의 자동 기능은 C #으로 가능하다는 것을 보여줍니다.


1
이것은 내가 본 가장 타당한 설명입니다. 처음에는 포트란 (Fortran)과 리스프 (Lisp)가 있었으며 리스프 (Lisps)는 repls가있었습니다. Lisp begat ... 글쎄, 당신은 아이디어를 얻는다. Lisp 계보 언어에는 repls가 있었고 Fortran 계보에는 없습니다.
Aaron

@Aaron LISP는 1959 년이지만 REPL은 1973 년 LISP 시스템에 기인합니다. 특히 PASCAL과 스몰 토크.
Sprague

1

C #은 주로 객체 지향적이라고 생각합니다. 가장 간단한 코드를 작성하려면 코드를 여러 클래스로 나누어야합니다. REPL을 사용하려면 많은 코드를 작성해야합니다.

주로 작동하는 F #에는이 문제가 없으며 복잡한 코드도 간단하게 쉽게 작성하여 나중에 객체로 변환 할 수 있습니다.

여러 줄에 걸쳐있는 클래스를 작성하는 것보다 단일 함수 행을 작성하는 것이 더 쉽습니다.


1
REPL 문에서 외부 파일에 정의 된 함수 / 클래스를 사용하는 것을 막을 수있는 것은 없습니다. OOP가 더 장황하다는 사실은 REPL 기능 자체를 방해하지 않습니다.
scrwtp

1
파이썬은 객체 지향적이고 구문 적으로 중요한 줄 바꿈을 특징으로하는 적절한 REPL을 가지고 있습니다. 스칼라는 정적으로 유형이 지정되고 컴파일되며 객체 지향적이며 REPL이 있습니다. REPL은 기존 클래스 가져 오기 및 일부 메소드 호출과 같은 짧은 작업에 가장 유용합니다. 언어의 자세한 표현은 문제가되지 않습니다. 예를 들어 SQL은 매우 장황하지만 모든 SQL 데이터베이스에는 REPL ( '쿼리 도구')이 제공됩니다.
9000
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.