F 샤프(프로그래밍 언어)
F Sharp (programming language)![]() F# 로고마르크 | |
패러다임 | 다중 패러다임: 기능, 필수, 객체 지향, 메타프로그래밍, 반사, 동시 |
---|---|
가족 | ML |
설계자 | Don Syme, Microsoft Research |
개발자 | 마이크로소프트, F# 소프트웨어 재단 |
첫 등장 | 2005; | 전( 버전 1.0
안정적 해제 | 6[1].0 / 2021년 10월 19일; |
타이핑 규율 | 정적, 강력, 유추적 |
OS | 교차 플랫폼: .NET, .NET Framework, Mono |
면허증 | MIT 라이선스[2][3] |
파일 이름 확장명 | .fs, .fsi, .fsx, .fsxcript |
웹사이트 | fsharp |
영향을 받은 | |
C#, Erlang, Haskell,[4] ML, OCaml,[5][6] Python, Scala | |
영향받은 | |
C#,[7] Elm, F*, LiveScript | |
|
F#(Pronned F sharp)은 기능적 우선, 일반적 목적, 강하게 타이핑된 멀티패러다임 프로그래밍 언어로 기능적, 명령적, 객체지향적 프로그래밍 방식을 포괄한다.F#는 에서 교차 플랫폼 CLI 언어로 가장 많이 사용된다.NET, 그러나 자바스크립트와[8] 그래픽 처리 장치(GPU) 코드도 생성할 수 있다.[9]
F#은 F# Software Foundation,[10] Microsoft 및 개방형 기부자에 의해 개발된다.F#용 오픈 소스 크로스 플랫폼 컴파일러는 F# 소프트웨어 재단에서 이용할 수 있다.[11]F#는 Visual Studio와[12] JetBrains Rider에서 완전히 지원되는 언어다.[13]F#를 지원하는 플러그인은 Visual Studio Code를 위한 Ionide 확장, Vim과 Emacs와 같은 다른 편집자를 위한 통합 등 널리 사용되는 많은 편집자를 위해 존재한다.
F#는 ML 언어 계열의 멤버로, 로부터 유래되었다.프로그래밍 언어 OCaml의 핵심에 대한 NET Framework 구현.[5][6]C#, Python, Haskell, Scala,[4] Erlang의 영향도 받았다.
역사
버전
이 언어는 발전하는 과정에서 다음과 같은 몇 가지 버전을 거쳤다.
버전 | 언어 사양 | 날짜 | 플랫폼 | 런타임 |
---|---|---|---|---|
F# 1.x | 2005년[14] 5월 | 창문들 | .NET 1.0 - 3.5 | |
F# 2.0 | 2010년 8월 | 2010년[15] 4월 | Linux, macOS, Windows | .NET 2.0 - 4.0, Mono |
F# 3.0 | 2012년 11월 | 2012년[16] 8월 | Linux, macOS, Windows; 자바스크립트,[8]GPU[9] | .NET 2.0 - 4.5, Mono |
F# 3.1 | 2013년 11월 | 2013년[17] 10월 | Linux, macOS, Windows; 자바스크립트,[8]GPU[9] | .NET 2.0 - 4.5, Mono |
F# 4.0 | 2016년 1월 | 2015년[18] 7월 | ||
F# 4.1 | 2018년 5월 | 2017년[19] 3월 | Linux, macOS, Windows | .NET 3.5 - 4.6.2, .NET Core, Mono |
F# 4.5 | 2018년[20] 8월 | Linux, macOS, Windows | .NET 4.5 - 4.7.2,[21] .NET Core SDK 2.1.400[22] | |
F# 4.6 | 2019년[23] 3월 | Linux, macOS, Windows | .NET 4.5 - 4.7.2,[24] .NET Core SDK 2.2.300[25] | |
F# 4.7 | 2019년[26] 9월 | Linux, macOS, Windows | .NET 4.5 - 4.8.[27]NET Core SDK 3.0.100[28] | |
F# 5.0 | 2020년[29] 11월 | Linux, macOS, Windows | .NET SDK 5.0.100[30] | |
F# 6.0 | 2021년[31] 11월 | Linux, macOS, Windows | .NET SDK 6.0.100[32] |
언어 진화
F#는 개방형 개발 및 엔지니어링 프로세스를 사용한다.언어 진화 과정은 마이크로소프트 리서치의 돈 시메(Don Syme)가 F# 소프트웨어 재단과 함께 언어 디자인을 위한 자비로운 삶의 독재자(BDFL)로 관리한다.이전 버전의 F# 언어는 마이크로소프트와 마이크로소프트 리서치에 의해 폐쇄적인 개발 과정을 사용하여 설계되었다.
F#는 영국 케임브리지의 마이크로소프트 리서치에서 유래한다.이 언어는 원래 돈 시므가 설계하고 실행한 것인데 [5]fsharp 팀원들에 따르면 fsharp는 fun을 위한 것이라고 한다.[33]앤드류 케네디는 측정 단위 설계에 기여했다.[5]Visual F# Tools for Visual Studio는 마이크로소프트에 의해 개발되었다.[5]F# 소프트웨어 재단은 마이크로소프트 Visual F# Tools 팀이 제공하는 오픈 소스 컴파일러 구현을 통합하여 F#[10] 오픈 소스 컴파일러와 도구를 개발했다.
추가된 기능 | |
---|---|
F# 1.0 |
|
F# 2.0 |
|
F# 3.0[34] |
|
F# 3.1[35] |
|
F# 4.0[36] |
|
F# 4.1[37] |
|
F# 4.5[29] |
|
F# 4.6 |
|
F# 4.7[38] |
|
F# 5.0[39] |
|
F# 6.0[40] |
|
언어 개요
기능 프로그래밍
객체 지향적 기능을 C#에서 지원하면서도 F#는 기능 프로그래밍 언어에서만 일반적으로 발견되는 다수의 기능을 가진 강하게 타이핑된 기능 우선 언어다.이러한 특징들을 함께 사용하면 F# 프로그램이 완전한 기능적 스타일로 작성될 수 있으며 기능적 스타일과 객체 지향적 스타일을 혼합할 수 있다.
기능적 기능의 예는 다음과 같다.
- 모든 것은 표현이다.
- 유형 추론(힌들리-밀너 유형 추론 사용)
- 의미론을 캡처하는 익명 함수(즉, 폐쇄)
- 불변 변수 및 객체
- 게으른 평가 지원
- 고차함수
- 내포함수
- 커링
- 패턴 매칭
- 대수 데이터 유형
- 투플스
- 모나드 패턴 지원(계산 식이라고 함)
F#는 열정적인 평가를 사용하는 표현 기반 언어로서, 어떤 경우에는 게으른 평가를 하기도 한다.다음을 포함한 F#의 모든 진술if
표현.try
식과 루프는 정적 유형을 가진 합성식이다.[42]값을 반환하지 않는 함수 및 표현식의 반환 형식은unit
. F#는 다음을 사용한다.let
이름에 바인딩 값을 나타내는 키워드.[42]예를 들면 다음과 같다.
하게 하다 x = 3 + 4
가치를 속박하다7
이름 그대로x
.
새로운 유형은 다음을 사용하여 정의된다.type
키워드기능 프로그래밍의 경우, F#는 튜플, 기록, 차별적 결합, 목록, 옵션 및 결과 유형을 제공한다.[42]튜플은 n 값의 집합을 나타내며 여기서 n ≥ 0이다.n 값은 tuple의 arity라고 불린다.3-투플은 다음과 같이 표현될 것이다.(A, B, C)
여기서 A, B, C는 아마도 다른 유형의 값이다.튜플은 설계 시간에 값의 개수를 알고 실행 중에 일정하게 유지되는 경우에만 값을 저장하는 데 사용할 수 있다.
레코드는 데이터 구성원의 이름을 지정하는 유형이다.레코드 정의의 예는 다음과 같다.
타자를 치다 R = { 이름 : 끈을 매다 나이 : 인트로 }
레코드는 다음과 같이 생성될 수 있다.let r = { Name="AB"; Age=42 }
. Thewith
키워드는 다음과 같이 레코드의 복사본을 만드는 데 사용된다.{ r with Name="CD" }
, 복사하여 새 레코드를 만든다.r
그리고 그 가치의 변화Name
필드(마지막 예제에서 만든 레코드의 이름이 지정됨)r
).
타자를 치다 A = 유니언케이스X 의 끈을 매다 유니언케이스y 의 인트로
조합 유형의 값은 조합 사례 중 하나에 해당할 수 있다.각 조합 사례에 의해 전달되는 값의 유형은 각 사례의 정의에 포함된다.
목록 유형은 다음 중 하나를 사용하여 표시되는 불변의 연결 목록이다.head::tail
표기법 ()::
as the consister operator) 또는 속기:[item1; item2; item3]
. 빈 리스트가 쓰여 있다.[]
옵션 유형은 선택권이 있는 차별적인 조합 유형이다.Some(x)
또는None
. F# 유형은 일반적일 수 있으며 일반으로 구현될 수 있다.NET 유형.
F#는 람다 기능과 폐쇄를 지원한다.[42]F#의 모든 함수는 퍼스트 클래스 값이며 불변의 값이다.[42]함수는 커리어를 할 수 있다.1등급 값이므로 함수는 다른 함수에 대한 주장으로 전달될 수 있다.다른 기능 프로그래밍 언어와 마찬가지로 F#는 를 이용한 기능 구성(컴퓨터 과학)을 허용한다.>>
그리고<<
교환원
F#는 시퀀스를 정의하는 시퀀스 식을[43] 제공한다.seq { ... }
리스트를 작성하다[ ... ]
또는 배열[ ... ]
값을 생성하는 코드를 통해.예를 들어,
Seq. { 을 위해 b 에 0 .. 25 하다 만일 b < 15 그때 양보하다 b*b }
0부터 25까지의 숫자의 범위에서 숫자를 걸러냄으로써 0부터 14까지의 숫자의 정사각형 순서를 형성한다.시퀀스는 생성자 - 온디맨드 방식으로 생성(즉, 느리게 평가)되는 반면 목록과 배열은 열심히 평가된다.
F#는 패턴 일치를 사용하여 이름에 값을 바인딩한다.패턴 매칭은 차별적인 조합에 접근할 때도 사용된다. 조합은 패턴 규칙과 일치하는 값이며, 일치에 성공하면 규칙이 선택된다.F#는 또한 확장 가능한 패턴 매칭의 한 형태로 액티브 패턴을 지원한다.[44]예를 들어, 형식에 일치하는 여러 방법이 있을 때 사용된다.[42]
F#는 계산식이라 불리는 합성 계산을 정의하기 위한 일반적인 구문을 지원한다.시퀀스 식, 비동기식 계산 및 쿼리는 특정한 종류의 계산식이다.계산 표현식은 모나드 패턴의 구현이다.[43]
명령 프로그래밍
필수 프로그래밍에 대한 F# 지원:
for
루프를 돌다while
루프를 돌다- 어레이, 으로 생성됨
[ ... ]
구문 - 해시 테이블로 생성됨
dict [ ... ]
구문 또는System.Collections.Generic.Dictionary<_,_>
타자를 치다
값과 레코드 필드는 또한 다음과 같이 라벨을 표시할 수 있다.mutable
. 예:
// 초기 값 '1'로 'x' 정의 하게 하다 변이할 수 있는 x = 1 // 'x' 값을 '3'으로 변경 x <- 3
또한 F#는 에 정의된 것과 같은 모든 CLI 유형 및 개체에 대한 액세스를 지원한다.System.Collections.Generic
명령적 데이터 구조를 정의하는 네임스페이스.
객체 지향 프로그래밍
다른 CLI(Common Language Infrastructure) 언어와 마찬가지로 F#도 객체 지향 프로그래밍을 통해 CLI 유형을 사용할 수 있다.[42]표현식의 객체 지향 프로그래밍에 대한 F# 지원은 다음을 포함한다.
- 점 표기(예:
x.Name
- 객체 표현식(예:
{ new obj() with member x.ToString() = "hello" }
- 객체 구성(예:
new Form()
- 유형 테스트(예:
x :? string
- 유형 강제(예:
x :?> string
- 명명된 인수(예:
x.Method(someArgument=1)
- 명명된 세터(예:
new Form(Text="Hello")
- 선택적 인수(예:
x.Method(OptionalArgument=1)
패턴에서 객체 지향 프로그래밍에 대한 지원은 다음을 포함한다
- 유형 테스트(예:
:? string as s
- 개체 유형에[44] 대해 정의할 수 있는 활성 패턴
F# 객체 유형 정의는 클래스, 구조체, 인터페이스, 열거형 또는 C#에 있는 정의 양식에 해당하는 대리자 유형 정의일 수 있다.예를 들어, 여기 이름과 나이를 듣고 두 가지 속성을 선언하는 시공자가 있는 클래스가 있다.
/// 단순 객체 유형 정의 타자를 치다 사람(이름을 붙이다 : 끈을 매다, 나이를 먹다 : 인트로) = 회원 x.이름 = 이름을 붙이다 회원 x.나이 = 나이를 먹다
비동기 프로그래밍
F#는 비동기 워크플로우를 통한 비동기 프로그래밍을 지원한다.[45]비동기 워크플로우는 내부 명령 시퀀스로 정의된다.async{ ... }
, 에서와 같이
하게 하다 비동기식의 = 비동기식의 { 하게 하다 리큐 = 웹 요청.만들다(url) 놔! 반응하다 = 리큐.GetResponseAsync() 사용하다 물줄기가 흐르다 = 반응하다.GetResponseStream() 사용하다 스트림리더 = 새로운 시스템.IO.스트림리프레더(물줄기가 흐르다) 돌아오다 스트림리더.ReadToEnd() }
그let!
오른쪽의 표현(반응을 나타냄)은 비동기적으로 수행되어야 하지만 결과가 가능할 때만 흐름이 계속되어야 함을 나타낸다.즉, 코드 블록의 관점에서는, 응답을 얻는 것이 차단 통화인 것처럼, 반면에 시스템의 관점에서는, 스레드가 차단되지 않고, 이것에 필요한 결과가 나오지 않는 동안 다른 흐름을 처리하는 데 사용될 수 있다.
비동기 블록은 다음을 사용하여 호출할 수 있다.Async.RunSynchronously
기능을 하다를 사용하여 여러 개의 비동기 블록을 병렬로 실행할 수 있음Async.Parallel
의 목록을 가지고 있는 기능async
객체(예:asynctask
비동기 개체)이며 다른 비동기 개체를 생성하여 목록의 태스크를 병렬로 실행하십시오.다음 명령을 사용하여 결과 개체를 호출함Async.RunSynchronously
.[45]F#의 제어 역전은 이 패턴을 따른다.[45]
병렬 프로그래밍
병렬 프로그래밍은 를 통해 부분적으로 지원된다.Async.Parallel
,Async.Start
비동기 블록을 병렬로 실행하는 기타 작업.
또한 를 통해 병렬 프로그래밍이 지원됨Array.Parallel
F# 표준 라이브러리의 기능 프로그래밍 운영자, 직접 사용System.Threading.Tasks
의 직접적인 사용인 작업 프로그래밍 모델NET 스레드 풀 및 .NET 스레드 및 F# 코드를 GPU[9] 코드와 같은 대체 병렬 실행 엔진으로 동적 변환을 통해.
측정 단위
F# 유형 시스템은 수치 확인을 위한 측정 단위를 지원한다.[46]측정 단위 형상은 사용자 코드의 최소 유형 주석을 요구하기 위해 F# 유형 추론과 통합된다.[47]
메타프로그래밍
F#는 메타프로그래밍을 통해 사용자 정의 구문을 커스터마이징하여 F# 언어, 특히 계산식을 통해 사용자 정의 도메인 고유 언어를 포함시킬 수 있도록 한다.[42]
F#에는 인용문이라고 하는 런타임 메타 프로그래밍을 위한 기능이 포함되어 있다.[48]인용 표현식은 F# 표현식의 추상 구문 트리 표현을 평가한다.이와 유사하게, 정의에는 다음과 같은 라벨이 부착되어 있다.[<ReflectedDefinition>]
속성은 견적서 형태로도 접근할 수 있다.F# 인용문은 F# 코드를 자바스크립트와[8] GPU[9] 코드로 컴파일하는 것을 포함하여 다양한 목적으로 사용된다.(견적은 프로그램의 다른 부분에서 사용하기 위한 데이터로서 F# 코드 표현식을 나타내며, 구문론적으로 정확한 F# 코드를 요구한다.)
정보가 풍부한 프로그래밍
F# 3.0은 F# 타입 제공자라 불리는 정적으로 확장 가능한 타입 생성을 통해 컴파일 시간 메타 프로그래밍의 형태를 도입했다.[49]F# 형식 제공자는 컴파일 시간에 온디맨드 컴파일러에 형식 정보를 제공하는 구성요소로 F# 컴파일러와 도구를 확장할 수 있도록 허용한다.F# 유형 제공자는 Freebase 지식 그래프를 포함하여 확장 가능한 방법으로 연결된 정보 출처에 대한 강력한 유형 액세스를 제공하는 데 사용되어 왔다.[50]
F# 3.0에서 F# 인용과 계산 식 기능을 결합하여 LINQ 쿼리를 구현한다.[51]예를 들면 다음과 같다.
// OData 유형 공급자를 사용하여 Northwind 데이터베이스에 액세스하는 데 사용할 수 있는 유형을 만드십시오. 개방된 마이크로소프트FSHarp.Data.TypeProviders 타자를 치다 노스윈드 = OData 서비스<"http://services.odata.org/Northwind/Northwind.svc"> 하게 하다 db = 노스윈드.GetDataContext() // 쿼리 표현식. 하게 하다 쿼리1 = 질의하다 { 을 위해 고객 에 db.고객들. 하다 선발하다 고객 }
유형 제공자, 쿼리 및 강력 유형 기능 프로그래밍의 결합을 정보 리치 프로그래밍이라고 한다.[52]
에이전트 프로그래밍
F#는 경량 비동기 에이전트의 인메모리 구현을 통해 Actor 프로그래밍 모델의 변형을 지원한다.예를 들어, 다음 코드는 에이전트를 정의하고 2개의 메시지를 게시한다.
하게 하다 반격하다 = 사서함프로세서.시작(재미있다 받은 편지함. -> 하게 하다 읊다 고리를 틀다 n = 비동기식의 { 하다 인쇄하다 "n = %d, 대기 중...." n 놔! 음스그 = 받은 편지함..받다() 돌아오다! 고리를 틀다(n+음스그) } 고리를 틀다 0)
개발 도구
- 마이크로소프트의 Visual F# 도구가 설치된 Visual Studio는 F# 프로젝트를 생성, 실행 및 디버그하는 데 사용할 수 있다.Visual F# 도구는 작성된 대로 F# 코드를 실행할 수 있는 Visual Studio 호스트 읽기-평가-프린트 루프(REPL) 대화형 콘솔을 포함한다.비주얼스튜디오(Visual Studio for Mac)도 F# 프로젝트를 전폭적으로 지원한다.
- Visual Studio Code는 Ionide 확장을 통한 F#에 대한 완전한 지원을 포함하고 있다.
- F#는 어떤 텍스트 편집기로도 개발할 수 있다.Emacs와 같은 편집자에게 구체적인 지원이 존재한다.
- 제트브레인 라이더는 릴리즈 2019.1을 시작으로 F# 코드 개발에 최적화됐다.[53]
- LINQPad는 버전 2.x부터 F#를 지원해왔다.
응용 영역
F#는 범용 프로그래밍 언어다.
웹 프로그래밍
SAFE Stack은 웹 애플리케이션을 개발하기 위한 엔드 투 엔드 F# 스택이다.ASP를 사용한다.서버 쪽은 NET Core, 클라이언트 쪽은 Fable.[54]
대안적인 엔드투엔드 F# 옵션은 WebSharper 프레임워크이다.[55]
교차 플랫폼 앱 개발
F#는 자마린용 Visual Studio Tools와 함께 iOS 및 Android용 앱을 개발할 수 있다.Fantastic 도서관은 보다 편안한 기능적 인터페이스를 제공한다.
해석 프로그래밍
그 중에서도 F#는 페이스북의 정량적 금융 프로그래밍,[56] 에너지 거래 및 포트폴리오 최적화,[57] 머신러닝,[58] 비즈니스 인텔리전스[59], 소셜 게임 등에 사용된다.[60]
2010년대에 F#는 C#의 최적화된 대안으로 자리 잡았다.F#의 스크립팅 능력과 모든 마이크로소프트 제품과의 언어간 호환성은 개발자들 사이에서 인기를 끌었다.[61]
스크립팅
F#는 주로 데스크톱 읽기-평가-인쇄 루프(REPL) 스크립팅을 위해 스크립팅 언어로 사용할 수 있다.[62]
오픈소스 커뮤니티
F# 오픈 소스 커뮤니티에는 F# 소프트웨어 재단과[10] GitHub의 F# 오픈 소스 그룹이 포함된다.[11]인기 있는 오픈 소스 F# 프로젝트는 다음을 포함한다.
- 바벨을 기반으로 한 F# to Javascript 트랜스필러인 Fable.
- 의 대체 패키지 매니저인 Paket.NET는 여전히 NuGet 리포지토리를 사용할 수 있지만 중앙 집중화된 버전 관리를 가지고 있다.
- F# 친근한 빌드 시스템인 PAKE.
- ASP용 기능 지향 미들웨어 기린.NET Core.
- 경량 웹 서버 및 웹 개발 라이브러리인 Suave.
호환성.
F#는 펑터, 오브젝트, 폴리모픽 변형 또는 기타 추가 없이 OCaml의 큰 서브셋으로 작성된 프로그램을 직접 컴파일할 수 있는 레거시 "ML 호환성 모드"를 특징으로 한다.
예
몇 가지 작은 샘플은 다음과 같다.
// 샘플 hello world 프로그램에 대한 코멘트 입니다. 인쇄하다 "헬로 월드!"
이름과 나이, 그리고 두 가지 불변의 속성을 가진 생성자가 있는 사용자 클래스.
// 형식 정의에 대한 설명 문서화. 타자를 치다 사람(이름을 붙이다 : 끈을 매다, 나이를 먹다 : 인트로) = 회원 x.이름 = 이름을 붙이다 회원 x.나이 = 나이를 먹다 /// 클래스 인스턴스화 하게 하다 스미스 씨 = 사람("스미스", 42)
기능 언어의 구문을 입증하는 데 자주 사용되는 간단한 예는 비 음의 32비트 정수에 대한 요인함수(여기서 F#:
/// 패턴 일치 식 사용 하게 하다 읊다 요인의 n = 짝을 맞추다 n 와 함께 0 -> 1 _ -> n * 요인의 (n - 1) /// 단일 인수 함수의 경우 통사당(패턴 매칭 함수)이 있다. 하게 하다 읊다 요인의 = 기능을 하다 0 -> 1 n -> n * 요인의 (n - 1) /// 폴드 및 레인지 오퍼레이터 사용 하게 하다 요인의 n = [1..n] > Seq.접다 (*) 1
반복 예제:
/// 'for' 루프를 사용한 반복 하게 하다 인쇄 목록 lst = 을 위해 x 에 lst 하다 인쇄하다 "%d" x /// 고차 함수를 사용한 반복 하게 하다 printList2 lst = 리스트.반복하다 (인쇄하다 "%d") lst /// 재귀 함수와 패턴 매칭을 사용한 반복 하게 하다 읊다 printList3 lst = 짝을 맞추다 lst 와 함께 [] -> () h :: t -> 인쇄하다 "%d" h printList3 t
피보나치 예제:
/// 피보나치 수식 하게 하다 섬유질하다 n = 하게 하다 읊다 g n f0 f1 = 짝을 맞추다 n 와 함께 0 -> f0 1 -> f1 _ -> g (n - 1) f1 (f0 + f1) g n 0 1 /// 또 다른 접근 방식 - 피보나치 수의 게으른 무한 시퀀스 하게 하다 피브섹 = Seq.펼치다 (재미있다 (a,b) -> 일부(a+b, (b, a+b))) (0,1) // 짝수 섬유 인쇄 [1 .. 10] > 리스트.지도를 그리다 섬유질하다 > 리스트.여과하다 (재미있다 n -> (n % 2) = 0) > 인쇄 목록 // 목록 식을 사용하는 경우에도 동일함 [ 을 위해 i 에 1..10 하다 하게 하다 r = 섬유질하다 i 만일 r % 2 = 0 그때 양보하다 r ] > 인쇄 목록
샘플 Windows Forms 프로그램:
// Windows Forms 라이브러리 열기 개방된 시스템.Windows.양식 // 창을 만들고 몇 가지 속성을 설정하십시오. 하게 하다 형체를 이루다 = 새로운 형태(볼 수 있다=진실의, 맨 위로 이동=진실의, 텍스트="Welcome to F#") // 양식에 일부 텍스트를 표시하는 레이블 작성 하게 하다 라벨을 붙이다 = 하게 하다 x = 3 + (4 * 5) 새로운 라벨(텍스트 = $"{x}") // 양식에 레이블 추가 형체를 이루다.컨트롤.추가하다(라벨을 붙이다) // 마지막으로 양식 실행 [<시스템.STAThread>] 적용.달리다(형체를 이루다)
비동기 병렬 프로그래밍 샘플(병렬 CPU 및 I/O 작업):
/// 간단한 소수점 검출기 하게 하다 이스프라임 (n:인트로) = 하게 하다 묶인 = 인트로 (sqrt (둥둥 뜨다 n)) Seq. {2 .. 묶인} > Seq.전부 (재미있다 x -> n % x <> 0) // 비동기 워크플로우를 사용하고 있음 하게 하다 primAsync n = 비동기식의 { 돌아오다 (n, 이스프라임 n) } /// 여러 개의 스레드를 사용하여 m에서 n 사이의 프리타임 반환 하게 하다 프라임즈 m n = Seq. {m .. n} > Seq.지도를 그리다 primAsync > 비동기.평행 > 비동기.동기식으로 실행 > 배열.여과하다 코를 납작하게 만들다 > 배열.지도를 그리다 fst // 테스트 실행 프라임즈 1000000 1002000 > 배열.반복하다 (인쇄하다 "%d")
참고 항목
메모들
- ^ https://devblogs.microsoft.com/dotnet/announcing-net-6/.
- ^ "F# Software Foundation's License". GitHub. 14 October 2021.
- ^ "Microsoft's F# License". GitHub. 16 October 2021.
- ^ a b Syme, Granicz & Cisternino(2007:2)
- ^ a b c d e "F# Historical Acknowledgements". Retrieved 2012-11-24.
- ^ a b Syme, Don (2006). "Leveraging .NET Meta-programming Components from F#".
[F#] is rooted in the Core ML design, and in particular has a core language largely compatible with that of OCaml
- ^ 비동기용의
- ^ a b c d e f g h i j The F# Software Foundation. "Using F# for Web Applications". Retrieved 2020-07-30.
- ^ a b c d e f g h i j k The F# Software Foundation. "Using F# for GPU Programming". Archived from the original on 2019-12-25. Retrieved 2019-12-25.
- ^ a b c The F# Software Foundation. "The F# Software Foundation". Retrieved 2012-11-24.
- ^ a b The F# Software Foundation. "F# Compiler (open source edition) @ github". Retrieved 2012-11-24.
- ^ "Develop with Visual F# in Visual Studio". Retrieved 2020-07-30.
- ^ "F#". Retrieved 2020-07-30.
- ^ Syme, Don. "F# 1.0.8 released". Microsoft. Retrieved September 7, 2014.
- ^ Syme, Don. "F# 2.0 released as part of Visual Studio 2010". Microsoft. Retrieved September 7, 2014.
- ^ Zander, Jason. "Visual Studio 2012 and .NET Framework 4.5 released to the web". Microsoft. Retrieved September 7, 2014.
- ^ "Visual Studio 2013 released to web". Microsoft. Retrieved September 7, 2014.
- ^ "Announcing the RTM of Visual F# 4.0". Microsoft. Retrieved September 15, 2015.
- ^ "Announcing F# 4.1 and the Visual F# Tools for Visual Studio 2017". Retrieved 2017-03-08.
- ^ "Announcing F# 4.5". Microsoft. 14 August 2018. Retrieved August 14, 2018.
- ^ "FSharp.Core 4.5.0".
- ^ "Download .NET Core 2.1 (Linux, macOS, and Windows)". Microsoft. Retrieved May 13, 2021.
- ^ "Announcing F# 4.6". Microsoft. 29 March 2019. Retrieved March 29, 2019.
- ^ "FSharp.Core 4.6.0".
- ^ "Download .NET Core 2.2 (Linux, macOS, and Windows)". Microsoft. Retrieved May 13, 2021.
- ^ "Announcing F# 4.7". Microsoft. 23 September 2019. Retrieved September 23, 2019.
- ^ "FSharp.Core 4.7.0".
- ^ "Download .NET Core 3.0 (Linux, macOS, and Windows)". Microsoft. Retrieved May 13, 2021.
- ^ a b "Announcing F# 5". November 10, 2020.
- ^ "Download .NET 5.0 (Linux, macOS, and Windows)". Microsoft. Retrieved May 13, 2021.
- ^ "F# 6 is officially here!". November 9, 2021.
- ^ "Download .NET 6.0 (Linux, macOS, and Windows)". Microsoft. Retrieved November 14, 2021.
- ^ Edwards, Kathryn (23 December 2008). "The A-Z of programming languages: F#". networkworld.com. IDG. Retrieved 8 August 2016.
- ^ McNamara, Brian. "More About F# 3.0 Language Features". Microsoft. Retrieved September 7, 2014.
- ^ McNamara, Brian. "Announcing a pre-release of F# 3.1". Microsoft. Retrieved September 7, 2014.
- ^ "Announcing the RTM of Visual F# 4.0". Retrieved 2017-03-08.
- ^ "Announcing F# 4.1 and the Visual F# Tools for Visual Studio 2017". Retrieved 2017-03-08.
- ^ "Announcing F# 4.7". 23 September 2019.
- ^ "Announcing F# 5". 10 November 2020.
- ^ "What's new in F# 6 - F# Guide".
- ^ "F Sharp Programming/Computation Expressions - Wikibooks, open books for an open world". en.wikibooks.org. Retrieved 2022-01-21.
- ^ a b c d e f g h "F# Language Overview" (PDF). Retrieved 2007-12-14.
- ^ a b "Some Details on F# Computation Expressions". Retrieved 2007-12-14.
- ^ a b "Pattern Matching in F# Part 2 : Active Patterns". Retrieved 2012-11-24.
- ^ a b c "Introducing F# Asynchronous Workflows". Retrieved 2007-12-14.
- ^ "Units of Measure (F#)". Retrieved 2012-11-24.
- ^ "Units of Measure in F#: Part One, Introducing Units". Retrieved 2012-11-24.
- ^ "Code Quotations (F#)". Retrieved 2012-11-24.
- ^ "Type Providers". Retrieved 2012-11-24.
- ^ "New Tech Report from Microsoft Research: Strongly-Typed Language Support for Internet-Scale Information Sources". Retrieved 2012-11-24.
- ^ "Query Expressions (F#)". Retrieved 2012-11-24.
- ^ "F# 3.0 – LINQ + Type Providers= Information Rich Programming". Retrieved 2012-11-24.
- ^ Alexander Kurakin. "Rider 2019.1 Kicks off its Early Access Program!".
- ^ "Fable: JavaScript you can be proud of!". fable.io. Retrieved 2017-12-09.
- ^ Intellifactory. "WebSharper home". Retrieved 2012-11-24.
- ^ "Microsoft Case Studies:Microsoft Visual Studio 2012 - Financial Services Firm". Microsoft. Retrieved 2012-11-25.
- ^ "F# for Energy Trading and Portfolio Optimization". Retrieved 2012-11-25.
- ^ "Microsoft Case Study: Grange Insurance". Microsoft. Retrieved 2012-11-25.
- ^ Trelford, Phil (2007). "Learning with F#". Proceedings of the 4th ACM SIGPLAN workshop on Commercial users of functional programming - CUFP '07. Cufp '07. pp. 1–2. doi:10.1145/1362702.1362709. ISBN 9781450378444. S2CID 24018363. Retrieved 2012-11-25.
- ^ "F# Job in Facebook Social Gaming". Retrieved 2012-11-25.
- ^ "F# Developer Testimonials". Retrieved May 25, 2021.
- ^ "Scripting in F#". Retrieved 2020-01-17.
참조
- Syme, Don; Granicz, Adam; Cisternino, Antonio (2007), Expert F#, Apress
- Harrop, Jon (2010), Visual F# 2010 for Technical Computing, Flying Frog Consultancy
- Pickering, Robert (2007), Foundations of F#, Apress
- Smith, Chris (2009), Programming F#, O'Reilly
- Petricek, Tomas (2009), Real World Functional Programming With Examples in F# and C#, Manning Publications
- Hansen, Michael; Rischel, Hans (2013), Functional Programming Using F#, Cambridge University Press
- Astborg, Johan (2013), F# for Quantitative Finance, Packt Publishing
- Lundin, Mikael (2015), Testing with F#, Packt Publishing
외부 링크
![]() | Wikibooks는 F Sharp Programming을 주제로 한 책을 가지고 있다. |