簡體   English   中英

如何使用F#(sharp)?

[英]How will F# (sharp) be used?

我無法放置微軟推出的F#語言的概念和可能性。

F#僅用於聲明函數嗎? 或者通過將F#與普通的C#或VB代碼混合在一起,將應用程序“完全”寫入F#中?

我強烈建議你觀看來自PDC 2008的Luca Bolognese的演講。它不僅非常有趣,而且還展示了令人印象深刻的F#用例:

Luca Bolognese 對Microsoft F#的介紹

我的期望是,F#將被用於一些專門的系統的碎片 -這涉及復雜的線程/數學/金融/模型/等位,其中F#做得很好。 對於大多數其他領域(UI,DAL等),像C#這樣的通用語言似乎(IMO)更受歡迎。

F#的一個優點是(理論上)你可以證明代碼是有效的,而不僅僅是測試它。 線程支持(由於不變性和異步!使用)也很好(盡管PLINQ可能在線程上競爭)。

連接到.NET以允許F#,C#,VB,IronPython,IronRuby等之間的正確集成 - 真正展示了每個的優勢。 今天如果我做了很多COM互操作,我會考慮VB(這將在4.0中隨dynamic ); 對於大多數代碼 - C#。 對於數學等,F#。 整潔。

我已經用了半年了,我認為它將成為一種通用語言。 學習起來相當復雜,因此懷疑它在混合環境中會被過多使用。 經理們希望將成本降至最低。

  • 對我而言,重構速度是F#的最大賣點 用它構建了一個簡單的視頻游戲 ,我已經愛上了語言結構。 起初,處理狀態引擎的想法在函數式語言中似乎不合適,但是記錄,元組和類型推斷使得它變得非常快速。

  • F#具有良好的可讀性 一旦熟悉了F#,如果你允許混合使用多范式編程風格,代碼就變得非常簡潔易讀,但是像所有語言一樣,不知道自己在做什么的人會把它變成一場噩夢。

我的日常工作涉及網絡原型設計,所以我期待看到FSharp.WebTools去哪里,並期待更多支持F#與Microsoft MVC

我在以下幾個方面使用F#:

DLL和庫 幾乎我在空閑時間編寫的所有新代碼都是F#,當我需要快速GUI時,我只能使用C#。

多重加工 在工作中,我一直在慢慢介紹F#。 我有機會通過使用異步工作流和郵箱處理器將一些丑陋的單線程VB.NET轉移到多線程F#來演示它能做些什么。

DSL和解析 在我上一家公司,我使用FsLex / FsYacc將SQL解析為AST 原型代碼的變體使其成為本教程的一部分

腳本 我用.fsx文件完全<3腳本。 它們是一種編寫小腳本的便捷方式,無需編寫完整的可執行文件。 它也很好修改源代碼並再次運行它沒有停機時間。 我已經修改了.fsx文件的默認行為來運行fsi而不是在雙擊時在VS中打開。

當然,用F#編寫整個程序是可行的。 但是,我認為大多數程序都不會這樣。 F#最有可能用於復雜的算法和應用程序邏輯(程序的核心),而C#可能會用於“外部”(GUI等)。 .NET是命令式結構化的,所以在你大量使用庫的地方,C#可能比F#更“自然”。

您的問題暗示所有代碼最終都成為一個應用程序。

但情況並非如此,F#(與C#相比)的優勢之一是,您可以“分解”您最喜歡的IDE並運行一些代碼,而無需所有Solution / Project / class基礎結構。

對於數字運算測試結果,轉換數據,測試新算法(即使我最終在'應用程序'中用C#編碼),對日志文件進行排序,甚至創建一個小實用程序來告訴我有多少C#引用實際上是在一個給定的程序集中使用,如果我決定進一步使用它,F#是漂亮的,快速的,並且可以快速“擴展”到dll。

根據具體情況,您可以考慮兩者。

您可以使用F#構建完整的.NET應用程序或將其連接到其他.NET語言。 它可以使用和向其他.NET語言公開庫。

F#僅用於聲明函數嗎? 或者通過將F#與普通的C#或VB代碼混合在一起,將應用程序“完全”寫入F#中?

我們用F#編寫了整個應用程序超過3年。 許多公司正在用F#擴充現有的代碼庫。

F#最簡單的切入點就是運送F#樣本,展示了如何從F#中使用您所銷售的庫的API。 對於任何公司來說,這都是明智之舉,因為樣品不是關鍵任務,因此技術專業知識和持續維護不是問題。 F#也是一個很好的工具,可以用任何.NET語言編寫現有代碼的測試工具。 同樣,客戶永遠不會獲得該代碼,因此其公司外部的可靠性不是問題。 在實踐中,我們沒有任何問題,在任何地方使用F#並將其運送給客戶,而他們甚至不知道。 這對小公司來說特別有效,因為大規模的生產力改進為我們帶來了巨大的競爭優勢。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM