문제

방금 들었습니다 Chris Smith의 팟 캐스트 F#에 대해 이야기합니다. 그는 F#이 당신이 허용하는 언어에 대해 이야기합니다. 다른 방식으로 문제에 접근합니다 C#/vb.net보다, 즉 "당신 주위의 비트를 눌러 데이터 변환을 함께 눌러야한다"는 대신, f#가 선택 언어 (c# 또는 vb와 함께 사용하는 것”(c# 또는 vb .NET)보다 효율적인 방식으로 특정 문제를 해결하기 위해.

이것 내가 생각하게했다 .NET 언어의 관계에 관해서는 다음과 같이 이해하는 방법이 있습니다.

  • C# 및 vb.net이 있습니다 구문 적이지만 실질적으로 다르지는 않습니다, 즉 C# 프로그래머는 "새로운 방식으로 문제에 접근하기 위해"vb.net을 배우지 않을 것입니다.
  • 그러나 C# 또는 vb.net 프로그래머는 "프로그래밍 문제에 접근하기 위해 F#을 배웁니다. 기능적 방식으로"

그러나 Ironpython 그리고 아이언 루비? Chris는 "F#은 Ruby와 Python에서 많은 것을 배웠습니다"라고 언급 했으므로 F#은 Ironruby/Ironpython과 비슷한 관계를 가지고 있으며 C#은 vb.net과 관련이 있다고 생각합니다. 그러나 약간의 인터넷 검색은 나에게 그것을 말해줍니다 Ironruby와 Ironpython은 둘 다 DLR에 구축되었지만 F#은 아닙니다..

F#, Ironruby 및 Ironpython의 관계는 어떻게 가장 잘 이해 될 수 있습니까?

도움이 되었습니까?

해결책

F# 및 Ironpython/Ironruby는 언어 관점과는 별다른 몇 년입니다. F#은 기능적이고 유형이 높은 컴파일 된 언어입니다. Ironruby/Ironpython은 동적으로 입력하고 해석 된 언어입니다.

나는 Ironpython이 추가로 편집을 지원한다고 생각하지만 100% 확실하지 않으며 루비에 대해서는 적습니다.

vb.net과 c#의 관계는 훨씬 가깝습니다.

다른 팁

여러면에서 F# 및 Ruby/Python은 피상적으로 유사합니다. 세 가지 언어를 모두 사용하면 많은 유형으로 코드를 쓰지 않고도 아이디어를 간결하게 표현할 수 있습니다. 그러나 F#은 정적으로 입력 한 언어이고 Ruby와 Python은 동적으로 입력되기 때문에 실제로 Ruby 및 Python과 매우 다릅니다. 관용적 인 F# 코드는 유형을 거의 언급하지 않지만 컴파일러는 컴파일 중에 컴파일러에 의해 유형을 유추하고 모든 유형 오류가 표시됩니다. Ruby와 Python의 경우 잘못된 유형에서 값을 사용하면 런타임에 오류 만 생성됩니다. Ruby와 Python의 역학은 F#보다 메타 프로 그램을 더 잘 잡을 수 있음을 의미합니다 (예 : 런타임에서 유형을 수정할 수 있음). 반면에 F#은 대부분의 작업에 대해 더 성능을 발휘할 것이며 (C#과 비교할 수 있음), 패턴 일치가있는 식별 노조와 같은 많은 훌륭한 기능적 추상화를 제공합니다. 이러한 언어를 잘 배우면 C# 또는 VB.NET에서 문제에 대해 다르게 생각하게 될 것이지만, 접근 방식은 아마도 F#과 Python/Ruby 사이에 크게 다를 것입니다.

나는 F#이 Ruby와 Python에서 결합한 것보다 Ocaml에서 훨씬 더 많은 것을 배웠다고 말하고 있습니다. 유일한 비교는 F#이 Ironpython/Ruby가 Python/Ruby를 .NET에 가져 오는 것과 같은 방식으로 ML을 .NET을 .NET으로 가져 오는 것입니다.

F#은 기능적 접근 방식으로 가장 잘 다루는 특정 문제가있는 "도구"언어에 가깝습니다. F#은 본질적으로 스레드 안전이며 여러 프로세서를 사용하기 위해 응용 프로그램을 스케일링하는 데 도움이되기를 희망합니다. 특정 문제를 처리하기 위해 vb.net 또는 c#에 사용될 구성 요소를 구축하는 데 F#이 사용되는 것을 볼 수 있습니다.

동적 언어와 유사한 F#의 측면이 있습니다. 그러나 Jaredpar의 답변은 실제로 요약합니다. F#은 Ironruby와 Ironpython이 동적 언어 및 C#/VB OO 언어 인 기능 프로그래밍 범주에 있습니다. 그들은 모두 똑같은 일을 할 수 있으며 당신이 그것을 원하는 방식에 달려 있습니다. 각각은 주어진 문제에 대한 장단점이 있습니다.

참고 : 이것은 주로 주제에 대한 내 생각과 관찰의 편집입니다. 저는 낮에는 C# 프로그래머이고 밤에는 파이썬입니다.

예, 나는 말한 것들에 동의하지만, 시간이 지남에 따라 내 생각을 정교하고 공유하는 것처럼 느낍니다.

F#은 기능적 언어입니다. 그것은 당신이 말하기 위해 동사에 더 관심이 있다는 것을 의미합니다. 여전히 정적으로 입력하고 CLR에서 실행되지만 코드를 다르게 구성하고 문제를 다르게 작동합니다. 일반적으로 사람들은 기능 언어가 구조에서 더 수학적이며 공식적으로 증명하기가 더 쉽다고 생각합니다. 물론 그것은 일반적으로 대부분 학업으로 간주됩니다.

C# 및 기타 정적으로 입력 한 OO 언어는 내 비유를 더욱 발전시키기 위해 명사에 더 집중되어 있습니다. 따라서 코드를 구성하고 문제와 관련하여 문제를 해결합니다. 물론 상태를 유지하고 언어로 더 자주 나타나는 경향이있는 대상에 대한 비 결정적 방법에 대한 자연스러운 문제도 있습니다.

물론 F#은 OO 언어에서 빌린 몇 가지 기능과 아이디어를 가지고 있으며 C#에는 기능에서 빌린 아이디어와 기능이 있습니다.

Python과 C#을 비교하는 것은 동적 유형과 정적 유형의 차이에 관한 것입니다 (Python은 C#이 여전히 그렇지 않은 기능적 기능을 제공하지만). 동적 타이핑은 일반적으로 "일반"코드에 사용 된 오타 또는 잘못된 객체로 인해 런타임 오류의 위험을 추가하면서 내성/반사 활동 및 런타임 수정을 처리하기가 훨씬 쉽습니다.

정적 언어에는 일반적으로 동적 언어가 가지고 있지 않은 일부 개발자 오버 헤드가 있습니다. 오버 헤드는 일반적으로 물건을 추상화하기 위해 레이어를 만들고 필요/원하는 추상화와 함께 작동하기 위해 상속 계층과 인터페이스를 만들어야하기 때문입니다. 유형에 대한 종속성을 피하려고 노력하고 있기 때문입니다.

더 큰 팀에서는 통계 언어가 훨씬 쉽게 관리 할 수있는 것 같습니다. 또한 모든 검사 및 도구를 사용하여 리팩토링의 장점을 매우 쉽게 얻을 수 있습니다.

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