ทำไมต้อง F#?
(batsov.com)- F# เป็น ภาษาเชิงฟังก์ชันตระกูล ML ที่มุ่งเป้าไปยัง .NET และพัฒนาโดย Microsoft โดยเมื่อเทียบกับ C# ซึ่งเน้นเชิงวัตถุเป็นหลักแล้ว F# จะมุ่งเน้นไปที่กระบวนทัศน์การเขียนโปรแกรมเชิงฟังก์ชัน
- บทความนี้สรุปคุณลักษณะของภาษา F#, ecosystem, สถานะของเอกสารประกอบ, เครื่องมือพัฒนา, กรณีการใช้งาน, สถานะของชุมชน และการเปรียบเทียบ F# vs. OCaml
F# คืออะไร?
- F# เป็นภาษาการเขียนโปรแกรมอเนกประสงค์ ที่ออกแบบมาเพื่อให้เขียนโค้ดได้กระชับ แข็งแรง และมีประสิทธิภาพ
- ออกแบบมาเพื่อให้สามารถ โฟกัสกับการแก้ปัญหาได้โดยตรง โดยไม่ต้องกังวลกับไวยากรณ์ที่ซับซ้อน
- เป็นโอเพนซอร์ส ข้ามแพลตฟอร์ม และเข้ากันได้ดีกับ .NET
-
คุณสมบัติ
- ไวยากรณ์ที่เบาและ immutable by default
- type inference และ generalization
- first-class function, ชนิดข้อมูลที่ทรงพลัง, pattern matching
- รองรับ asynchronous programming (Async)
- เป็นภาษาต้นกำเนิดของ pipeline operator (
|>) อันโด่งดัง
-
ตัวอย่างโค้ดแบบง่าย
open System let names = [ "Peter"; "Julia"; "Xi" ] let getGreeting name = $"Hello, {name}" names |> List.map getGreeting |> List.iter (printfn "%s") - F# เริ่มต้นจากภาษาที่ Don Syme พัฒนาขึ้นที่ Microsoft Research ในปี 2005
- เริ่มจาก โครงการวิจัยที่พกพา OCaml มายังแพลตฟอร์ม .NET (Caml.NET)
- หลังจากนั้นได้ถูกรวมเป็นผลิตภัณฑ์อย่างเป็นทางการตั้งแต่ปี 2010 และในปี 2024 ก็มีการออก F# 9.0
- ณ ปี 2025 ภาษานี้ได้กลายเป็นภาษาที่เติบโตเต็มที่ในวาระครบรอบ 20 ปี
- เหตุผลหลักที่ทำให้ลองทดลองใช้ F#
- เพื่อตรวจสอบว่า .NET พัฒนาไปเป็นโอเพนซอร์สและข้ามแพลตฟอร์มแล้วจริง
- เพื่อเปรียบเทียบข้อดีข้อเสียกับ OCaml
- เพราะมีเสียงประเมินเชิงบวกต่อ tooling อย่าง Rider, Ionide เป็นต้น
- เพราะสนใจในการสำรวจภาษาใหม่แบบเรียบง่าย
F# ในฐานะภาษา
- F# เป็น ภาษาเชิงฟังก์ชันตระกูล ML และมีไวยากรณ์ที่คุ้นเคยสำหรับผู้ใช้ OCaml
- นักพัฒนาที่เคยใช้ Haskell หรือ Lisp มาก่อนก็สามารถปรับตัวได้ไม่ยาก
- ใช้โครงสร้างไวยากรณ์ที่อิงช่องว่าง จึงเหมือน Python ตรงที่ การเยื้องมีความสำคัญทางไวยากรณ์
- ออกแบบมาให้แม้แต่มือใหม่ก็เรียนรู้ไวยากรณ์พื้นฐานได้อย่างรวดเร็ว
-
สรุปคุณลักษณะของภาษา
- การนิยามและการนำฟังก์ชันไปใช้ สามารถเขียนได้อย่างกระชับและเป็นธรรมชาติ
- เงื่อนไข ลูป tuple และการจัดการ list ใช้งานได้อย่างสะอาดในสไตล์เชิงฟังก์ชัน
- ใช้ record, discriminated union, pattern matching เพื่อจัดการโครงสร้างข้อมูลที่ซับซ้อนได้อย่างกระชับ
- ผ่าน pipeline operator(
|>) ทำให้สามารถ จัดโครงสร้างการไหลของข้อมูลให้เห็นชัดเจนราวกับการต่อฟังก์ชันเข้าด้วยกัน - F# เหมาะมากกับการเขียน ad-hoc script โดยเขียนเป็นไฟล์
.fsxแล้วรันได้ทันทีด้วยdotnet fsi - ยังมีสภาพแวดล้อม REPL ให้ใช้งาน จึงเหมาะกับ exploratory programming
-
ไวยากรณ์ที่เป็นมิตรกับผู้ใช้
- มีคุณสมบัติไวยากรณ์เชิงปฏิบัติ เช่น คอมเมนต์แบบบรรทัดเดียวและหลายบรรทัด, ตัวแปร
mutable, list slice - ด้วยความเข้ากันได้สูงกับ C# จึงใช้งาน .NET API ได้ง่าย
- รองรับ operator overloading กับหลายชนิดข้อมูลได้อย่างเป็นธรรมชาติ
- สามารถพิมพ์ค่าของชนิดต่าง ๆ ได้สะดวกด้วย
printfnจึงมีประโยชน์ต่อการดีบักและการทำ logging
- มีคุณสมบัติไวยากรณ์เชิงปฏิบัติ เช่น คอมเมนต์แบบบรรทัดเดียวและหลายบรรทัด, ตัวแปร
-
ผู้บุกเบิกด้าน asynchronous programming
- ต้นกำเนิดของแพตเทิร์น
async/awaitคือ F# 2.0 ซึ่งภายหลังส่งอิทธิพลต่อหลายภาษา เช่น C# และ JavaScript - F# มีโครงสร้างที่ช่วยให้เขียน asynchronous programming ได้ อย่างเป็นธรรมชาติโดยไม่ต้องใช้ callback
- แม้ลำดับของโค้ดจะอ่านได้เหมือน synchronous แต่การทำงานจริงเป็นแบบ asynchronous
- ต้นกำเนิดของแพตเทิร์น
-
การลงทุนของ Microsoft และพัฒนาการของภาษา
- Microsoft เคยจัดสรรบุคลากรให้ F# อย่างจำกัดมาเป็นเวลานาน แต่ ในปี 2022 ได้ตั้งทีมเฉพาะที่กรุงปรากและเริ่มลงทุนอย่างจริงจัง
- จากการออก F# 8.0 และ 9.0 ทำให้เห็นว่า ทั้งภาษาและ tooling กำลังพัฒนาเร็วขึ้นมาก
- เมื่อความสนใจภายใน Microsoft เพิ่มขึ้น ก็ทำให้มีความคาดหวังต่อ ศักยภาพการเติบโตในอนาคต ได้เช่นกัน
F# เป็นภาษาที่เรียนรู้ง่าย แต่ก็มี type system ที่ทรงพลังและกระบวนทัศน์การเขียนโปรแกรมเชิงฟังก์ชันที่ครบถ้วน โดยเฉพาะอย่างยิ่ง เป็นตัวเลือกที่น่าสนใจมากสำหรับนักพัฒนาที่อยากนำแนวทางเชิงฟังก์ชันมาใช้ในโปรเจกต์บน .NET
ระบบนิเวศ (Ecosystem)
- จากการใช้งาน F# มาในช่วงเวลาที่ค่อนข้างสั้น พบว่า ไลบรารีหรือเฟรมเวิร์กที่ทำมาเพื่อ F# โดยเฉพาะยังมีไม่มากนัก
- ผู้ใช้ส่วนใหญ่มักพึ่งพา API พื้นฐานของ .NET และไลบรารีภายนอกที่ออกแบบโดยยึด C# เป็นหลัก
- นี่เป็นปรากฏการณ์ที่พบได้บ่อยใน ภาษาโฮสต์ (hosted language) อย่าง Scala, Clojure, Groovy
-
ไลบรารีหลักสำหรับงานเว็บ
- Giraffe: เว็บเฟรมเวิร์กน้ำหนักเบาบน ASP.NET Core ที่มุ่งสู่สไตล์เชิงฟังก์ชัน
- Suave: เฟรมเวิร์กเว็บเซิร์ฟเวอร์แบบเรียบง่ายในสไตล์ combinator สำหรับ routing และการประกอบงาน
- Saturn: เฟรมเวิร์กสไตล์ MVC ที่สร้างบน Giraffe ได้แรงบันดาลใจจาก Ruby on Rails และ Phoenix
- Bolero: เฟรมเวิร์กสำหรับพัฒนาแอปฝั่งไคลเอนต์บน WebAssembly และ Blazor
- Fable: ทรานส์ไพล์ F# ไปเป็น JavaScript เพื่อเชื่อมต่อกับ ecosystem ของ JS อย่าง React, Node.js เป็นต้น
- Elmish: UI framework ที่อิงแพตเทิร์น MVU(Model-View-Update) และมักใช้ร่วมกับ Fable
- SAFE Stack: สแตกสำหรับพัฒนาเว็บเชิงฟังก์ชันแบบ end-to-end โดยผสาน Saturn, Fable, Elmish, Azure เป็นต้น
-
ไลบรารีหลักสำหรับ data science
- Deedle: ไลบรารีวิเคราะห์และจัดการข้อมูลสไตล์ pandas
- DiffSharp: ไลบรารีเชิงคณิตศาสตร์ที่ให้ความสามารถด้าน machine learning และ automatic differentiation
- FsLab: ชุดเครื่องมือ data science แบบรวมศูนย์ที่มีทั้ง visualization และเครื่องมือวิเคราะห์สถิติ
สถานะของเอกสารประกอบ
- เอกสารทางการโดยรวม จัดระเบียบได้ดีและมีคุณภาพสูง
- บางส่วนอยู่ใน Microsoft Docs และบางส่วนกระจายอยู่ใน F# Software Foundation
- แม้โครงสร้างเอกสารอาจดูค่อนข้างกระจัดกระจายอยู่บ้าง แต่ style guide ของภาษา, เอกสารการออกแบบ, และ API ของ standard library มีประโยชน์มาก
-
ลิงก์เอกสารที่แนะนำ
-
แหล่งเรียนรู้จากชุมชน
- F# for Fun and Profit: รวมบทสอนและบทความเชิงเรียงความ (ค่อนข้างเก่าแต่ยังใช้ได้อยู่)
เครื่องมือพัฒนา (Dev Tooling)
- ระบบนิเวศของเครื่องมือพัฒนา F# ในอดีต ถูกปรับให้เหมาะกับ Visual Studio เป็นหลัก และรองรับ editor อื่นค่อนข้างน้อย
- โชคดีที่ในช่วง 10 ปีที่ผ่านมา สภาพแวดล้อมด้านเครื่องมือดีขึ้นมาก
-
จุดเปลี่ยนทางเทคนิค: FSharp.Compiler.Service(FCS)
- FCS เป็นไลบรารีเดียวที่รวมทั้งคอมไพเลอร์ F#, ฟีเจอร์สนับสนุน editor และ scripting engine ทำให้สามารถใช้งาน F# ได้ใน editor และสภาพแวดล้อม tooling ที่หลากหลาย
- ด้วยเหตุนี้ VS Code, เครื่องมือสร้างเอกสาร, และ backend ทางเลือกต่าง ๆ จึงรองรับ F# ได้ และช่วยขยาย ecosystem
- ตัวอย่างเด่นคือ Ionide ที่ให้การรองรับ F# อย่างครบถ้วนใน VS Code และ มียอดดาวน์โหลดมากกว่า 1 ล้านครั้ง
-
editor ที่ได้ลองใช้
- Emacs (
fsharp-mode): ให้ความสามารถพื้นฐาน, ไม่รองรับ TreeSitter, มีกิจกรรมการพัฒนาไม่มาก - Zed: การรองรับ F# ยังจำกัด
- Helix: มีการรองรับพื้นฐาน
- VS Code (ปลั๊กอิน Ionide): เป็นหนึ่งในสภาพแวดล้อมที่สมบูรณ์ที่สุด
- JetBrains Rider: แม้เป็น IDE เชิงพาณิชย์ แต่รองรับ F# ได้ทรงพลังมาก
ฟีเจอร์ส่วนใหญ่ทำงานบนพื้นฐานของ F# language server(
fsautocomplete) ดังนั้น editor ใดก็ตามที่รองรับ LSP ได้ดี ก็ใช้งานได้ทั้งหมด - Emacs (
-
จุดที่น่าเสียดาย
fsharp-modeอิงกับ codebase เก่าและพัฒนาได้ช้า- Zed ยังขาดฟีเจอร์
- VS Code มีบางฟังก์ชัน (เช่น ขยาย/ย่อ selection) ที่ทำงานได้ไม่ดี
- ผู้ใช้บางคนก็รู้สึกว่า VS Code ใช้งานไม่สะดวกเพราะปัญหาเรื่อง keybinding/โมเดลแบบ modal
-
code formatter และ linter
- Fantomas: code formatter ทางการของ F# ที่ผู้ใช้และทีมส่วนใหญ่ใช้งานอยู่
- FSharpLint: เคยได้รับความนิยม แต่ตอนนี้แทบหยุดพัฒนาไปแล้ว
- อย่างไรก็ตาม ด้วย คอมไพเลอร์ที่ทรงพลัง ทำให้การพึ่งพา linter ต่ำ
-
เครื่องมืออื่น ๆ
กรณีการใช้งาน (Use Cases)
- ด้วย ecosystem ที่กว้างขวางของ .NET ทำให้ F# มีศักยภาพในการใช้งานได้หลากหลายด้าน
- โดยเฉพาะด้วยความสามารถของ Type Providers จึงเหมาะมากกับ งานวิเคราะห์และจัดการข้อมูล
- เหมาะกับการพัฒนา backend service และแอปพลิเคชันแบบ full stack และบางเครื่องมือก็ทำให้ พัฒนา frontend ได้ด้วย
-
ขอบเขตการใช้งานหลัก
- การวิเคราะห์ข้อมูล: ใช้ type provider ของ F# เพื่อจัดการข้อมูลแบบ static type ได้
- บริการ backend: ใช้ F# ร่วมกับเว็บเฟรมเวิร์กที่แข็งแกร่งของ .NET ได้
- แอป frontend: ผ่าน Fable และ Elmish จึงพัฒนา UI ที่เชื่อมกับ ecosystem ของ JS ได้
- ตั้งแต่
Fable 4เป็นต้นไป ยังสามารถทรานส์ไพล์ไปยังภาษาอย่าง TypeScript, Rust, Python ได้ด้วย
- ตั้งแต่
-
ตัวอย่าง Fable (คำสั่งทรานส์ไพล์แบบง่าย)
- JavaScript:
dotnet fable - TypeScript:
dotnet fable --lang typescript - Python:
dotnet fable --lang python
- JavaScript:
สถานการณ์ของชุมชน
- โดยรวมแล้วชุมชนมีขนาดไม่ใหญ่ และ อาจเล็กกว่า OCaml ด้วยซ้ำ
- Reddit และ Discord เป็นพื้นที่สื่อสารที่คึกคักที่สุด
- มีชุมชน Slack เช่นกัน แต่เข้าถึงได้ยากเพราะระบบเชิญอัตโนมัติมีปัญหา
- บทบาทของ Microsoft ภายในชุมชนยังไม่ชัดเจน และชุมชนค่อนข้างขับเคลื่อนกันเอง
-
แหล่งข้อมูลหลักที่ชุมชนดูแลอยู่
- Amplifying F#: ช่วยขยายการรับรู้เกี่ยวกับ F# และกระตุ้นการมีส่วนร่วมของภาคธุรกิจ
- F# for Fun and Profit: คลังบทสอนและบทความเชิงเรียงความ
- F# Lab: ชุดเครื่องมือชุมชน F# สำหรับ data science
- F# Weekly: จดหมายข่าวสรุปข่าวสาร F# ล่าสุด
ความนิยมและความเป็นจริง (The Popularity Contest)
- F# ไม่ได้อยู่ในอันดับสูงของตัวชี้วัดความนิยมส่วนใหญ่ (TIOBE, StackOverflow, ประกาศรับสมัครงาน ฯลฯ)
- แต่นี่ก็เป็นความจริงที่ ภาษาเชิงฟังก์ชันส่วนใหญ่ต้องเผชิญ และไม่ใช่ปัญหาเฉพาะของ F#
- แม้ยังไม่ใช่กระแสหลัก แต่ก็ยังมีฐานผู้ใช้ระดับใกล้เคียงกับภาษาเชิงฟังก์ชันอื่นอย่าง Clojure, OCaml, Emacs Lisp
-
ทำไมต้องใช้ F#?
- นอกเหนือจาก โอกาสในการหางาน แล้ว เหตุผลในการเลือกภาษาโปรแกรมก็มีได้หลากหลาย
- เพื่อความสนุก (มีคนพูดกันว่า F ใน F# หมายถึง “Fun”)
- เพื่อเรียนรู้กระบวนทัศน์และแนวคิดใหม่ ๆ
- เพื่อฝึกคิดในแบบที่ต่างออกไปจากวิธีคิดที่คุ้นเคย
- นอกเหนือจาก โอกาสในการหางาน แล้ว เหตุผลในการเลือกภาษาโปรแกรมก็มีได้หลากหลาย
-
แหล่งข้อมูลที่เกี่ยวข้อง
เปรียบเทียบ F# vs OCaml
เป้าหมายแรกเริ่มของ F# คือการนำข้อดีของ OCaml มาสู่ .NET และนำข้อดีของ .NET กลับไปสู่ OCaml
– Don Syme, ผู้สร้าง F#
- F# ถูกพัฒนาขึ้นโดยได้รับแรงบันดาลใจจาก OCaml และในช่วงแรกมีความคล้ายกันมากถึงขั้นรองรับนามสกุลไฟล์
.ml,.mliด้วย - เมื่อเวลาผ่านไป มันก็ค่อย ๆ พัฒนาเป็นภาษาอิสระของตัวเอง และตอนนี้ทั้งสองภาษาก็กำลังเติบโตไปคนละทิศทาง
-
ข้อดีของ F#
- อยู่บนแพลตฟอร์ม .NET
- ใช้งานไลบรารีจำนวนมหาศาลได้
- มีการสนับสนุนจาก Microsoft
- เป็นมิตรกับผู้เริ่มต้น
- มีไวยากรณ์ที่คุ้นเคยสำหรับผู้ที่เคยใช้ภาษาเชิงวัตถุ (เช่น C#)
- ข้อความ error จากคอมไพเลอร์ค่อนข้างชัดเจน
- ประสบการณ์การดีบักตรงไปตรงมามากกว่า
- รองรับ asynchronous programming ได้แข็งแกร่ง
- มีฟีเจอร์ที่ OCaml ไม่มี
- anonymous record
- active pattern
- computational expressions
- sequence comprehension
- type providers
- units of measure
- อยู่บนแพลตฟอร์ม .NET
-
ข้อเสียของ F#
- อยู่บนแพลตฟอร์ม .NET
- การออกแบบภาษามีการประนีประนอมหลายจุดเพื่อรองรับการทำงานร่วมกับ
.NET(เช่น การยอมให้มีnull)
- การออกแบบภาษามีการประนีประนอมหลายจุดเพื่อรองรับการทำงานร่วมกับ
- เป็นของ Microsoft
- แต่ละคนมีระดับความชอบต่อ Microsoft ต่างกัน
- ทรัพยากรที่จัดสรรให้ F# ค่อนข้างน้อย
- ในระยะยาวยังไม่แน่ชัดว่า MS จะสนับสนุน F# มากน้อยแค่ไหน
- ปัญหาเกี่ยวกับชื่อ
- คนที่ไม่ชอบ naming convention แบบ
PascalCase,camelCaseอาจรู้สึกไม่สะดวก - ชื่อ F# อาจสร้างปัญหาในการค้นหาหรือการตั้งชื่อไฟล์ (จึงมักเขียนเป็น FSharp ด้วย)
- คนที่ไม่ชอบ naming convention แบบ
- ขาดฟีเจอร์ขั้นสูงบางอย่างที่ OCaml มี
- first-class module, functor
- รองรับ GADT ได้ไม่ดีนัก
- ไม่มีมาสคอต และไม่มีกล้องอูฐด้วย
- อยู่บนแพลตฟอร์ม .NET
-
จุดร่วมและการเปรียบเทียบกัน
- ทั้งสองภาษาสามารถ target ไปยัง JavaScript runtime ได้
- F#: Fable
- OCaml: js_of_ocaml, Melange
- ตอนนี้ Fable ดูมีความสุกงอมมากกว่า แต่ยังต้องการประสบการณ์ใช้งานจริงเพิ่มเติม
- ทั้งคู่เป็นภาษาที่ทรงพลังแต่เฉพาะกลุ่ม และมีโอกาสต่ำที่จะกลายเป็นภาษายอดนิยมในวงกว้างในเร็ว ๆ นี้
- F# มีความเป็นภาคปฏิบัติที่ค่อย ๆ แทรกเข้าไปใน codebase C# เดิมได้
- ข้อเสียอย่างหนึ่งคือ โปรเจกต์ F# ยังใช้ไฟล์โปรเจกต์แบบ XML และต้องกำหนดลำดับการคอมไพล์ด้วยตนเอง
- เมื่อเทียบกับระบบ build ของ OCaml อย่าง
Duneแล้ว อาจรู้สึกยุ่งยากกว่า
- เมื่อเทียบกับระบบ build ของ OCaml อย่าง
- หากมีจุดประสงค์เพื่อการเรียนรู้หรือศึกษารูปแบบของภาษา OCaml อาจเหมาะกว่า
- แต่ถ้าต้องการสร้างเว็บเซอร์วิสหรือ backend เชิงปฏิบัติ F# อาจเป็นตัวเลือกที่ดีกว่า
- โดยเฉพาะในฐานะภาษาที่ผสานกับ
.NETได้ดีและยังคงสไตล์เชิงฟังก์ชันไว้ F# คือเครื่องมือที่ทรงพลังมาก
- ทั้งสองภาษาสามารถ target ไปยัง JavaScript runtime ได้
ความรู้สึกส่งท้าย
- ผู้เขียนรู้สึกว่า F# เป็นภาษา ที่สนุกและใช้งานได้จริงมากกว่าที่คิดไว้มาก
- เขาบอกว่าให้ความรู้สึกคล้ายตอนที่ได้เจอ Clojure ครั้งแรกในอดีต
- โดยเฉพาะเมื่อนึกถึงว่า Clojure เคยเป็น Lisp ที่ใช้งานได้จริงที่สุด เพราะทำงานร่วมกับ Java ได้ยอดเยี่ยม
- หาก .NET เป็นโอเพนซอร์สและพกพาได้ตั้งแต่แรก
- ClojureCLR อาจได้รับความนิยมมากกว่าปัจจุบัน
- และ ชุมชนกับ ecosystem ของ F# ก็น่าจะเติบโตมากกว่านี้ เช่นกัน
- การที่ F# ไม่ได้เป็นโอเพนซอร์สจนถึงปี 2010 ก็เป็นสิ่งที่ ขัดขวางการยอมรับในช่วงแรก
"ความผิดพลาดครั้งใหญ่ที่สุดคือทั้ง .NET และ F# ไม่ได้เป็นโอเพนซอร์สในช่วงแรก และนั่นทำให้พลาดโอกาสไปมากมาย" – Don Syme
- แม้ OCaml จะไม่ได้เรียนรู้ยาก แต่ สำหรับคนที่เพิ่งเริ่มกับภาษาตระกูล ML, F# อาจง่ายกว่า
- อุปสรรคในการไปถึงขั้น production ก็ต่ำกว่า
- โดยเฉพาะ นักพัฒนาที่มีประสบการณ์กับ .NET ควรลองสัมผัส F# อย่างยิ่ง
- F# ไม่ได้เป็นเพียงภาษาที่ยอดเยี่ยมในตัวเองเท่านั้น แต่ยังเปิดโอกาสให้ใช้ ecosystem อันแข็งแกร่งของ .NET ได้ด้วย
- ผ่านเครื่องมืออย่าง Fable สามารถทรานส์ไพล์โค้ด F# ไปเป็น JavaScript, Dart, Rust, Python เป็นต้นได้
- ในชุมชน F# มีคำพูดว่า "F ใน F# หมายถึง Fun(ความสนุก)"
- ผู้เขียนเองก็รู้สึกจากการได้ลองใช้จริงว่าคำนี้เป็นเรื่องจริง และย้ำว่า มันไม่เพียงสนุก แต่ยังใช้งานได้จริงอีกด้วย
- ท้ายที่สุดยังกล่าวถึงความเสถียรและความน่าเชื่อถือของ F# ด้วยคำว่า "ถ้าคอมไพล์ผ่าน ส่วนใหญ่ก็มักจะทำงานได้ดี"
In sane type systems we trust!
1 ความคิดเห็น
ความคิดเห็นบน Hacker News
F# เป็นภาษาฟังก์ชันนัลที่ดีที่สุดตอนเขียนแอป Ruby on Rails ขึ้นมาใหม่
เคยลอง F# แต่ยังใหม่กับ ecosystem ของ .NET
บริษัทของเราเปลี่ยนจาก C# มาเป็น F# เมื่อ 6 ปีก่อน
เหตุผลที่การยอมรับ F# ชะงักงันคือระบบ build ที่ไม่ดี
เรียน F# ในปี 2013 และสนุกมาก
F# เป็นกรณีหายากที่ผู้ใช้ทุกคนพึงพอใจมาก
เมื่อ C# ได้รับความสามารถหลายอย่างของ F# ข้อดีของ F# ก็ลดลง
มี SaaS ที่ทำกำไรได้และเขียนด้วย F# ทั้งหมด
F# เป็นภาษาที่ยอดเยี่ยม
F# สวยงาม แต่ใช้อย่างคล่องแคล่วยาก