1 पॉइंट द्वारा GN⁺ 2024-11-11 | 1 टिप्पणियां | WhatsApp पर शेयर करें
  • F# 9 क्यों महत्वपूर्ण है: F# 9 कई व्यापक सुधार लाता है, जो प्रोग्राम को अधिक सुरक्षित, अधिक resilient और बेहतर performance वाला बनाते हैं

Nullable reference types

  • F# को null से बचने के लिए डिज़ाइन किया गया था, लेकिन C# में लिखी गई .NET libraries के साथ interface करते समय null मिल सकता है
  • अब F# ऐसे reference types को type-safe तरीके से संभाल सकता है जिनमें null एक वैध मान हो
  • उदाहरण:
    • let notAValue: string | null = null
    • let len (str: string | null) = match str with | null -> -1 | NonNull s -> s.Length

Discriminated Union की .Is* properties

  • Discriminated Union में अब हर case के लिए automatically generated properties होती हैं
  • इससे यह जाँचा जा सकता है कि कोई value किसी विशेष case की है या नहीं
  • उदाहरण के लिए person.contact.IsEmail की तरह लिखा जा सकता है

Partial active patterns अब unit option की जगह bool लौटा सकते हैं

  • पहले partial active patterns match होने पर Some () और नहीं होने पर None लौटाते थे
  • अब वे bool भी लौटा सकते हैं

Argument दिए जाने पर built-in properties की तुलना में extension methods को प्राथमिकता

  • अब F# उन extension methods को resolve करता है जिनका नाम type की built-in property जैसा ही हो
  • यह कुछ .NET libraries में दिखने वाले pattern के अनुरूप है

Empty body वाले Computation Expression का support

  • अब F# empty Computation Expression को support करता है
  • उदाहरण: let xs = seq { }
  • इससे builder की Zero method call होती है

Hash directives अब string के अलावा अन्य arguments भी स्वीकार करते हैं

  • Compiler के लिए hash directives पहले केवल quotes में दिए गए string arguments ही स्वीकार करते थे
  • अब वे किसी भी type के arguments ले सकते हैं
  • उदाहरण: #nowarn 0070

fsi में #help directive का विस्तार

  • F# Interactive का #help directive अब दिए गए object या function के लिए documentation दिखाता है
  • इसे quotes के बिना pass किया जा सकता है
  • उदाहरण: #help List.map;;

Warning disable करने के लिए #nowarn में FS prefix का support

  • पहले #nowarn "FS0057" लिखने पर invalid warning number का message मिलता था
  • अब prefix होने पर भी warning number स्वीकार किया जाता है

Non-recursive functions या let से bind की गई values पर TailCall attribute इस्तेमाल करने पर warning

  • अब F# warning देता है अगर [<TailCall>] attribute गलत जगह इस्तेमाल किया गया हो
  • इसका code पर असर नहीं पड़ता, लेकिन यह पढ़ने वाले को भ्रमित कर सकता है

Attribute target application

  • Compiler अब let values, functions, union case declarations, implicit constructors, structs और classes पर AttributeTargets को सही तरह लागू करता है
  • इससे ऐसे bugs रोके जा सकते हैं जैसे Xunit tests में unit argument जोड़ना भूल जाना

Standard library updates

Collections के लिए Random functions

  • List, Array, Seq modules में random sampling और shuffle के लिए नए functions जोड़े गए हैं
  • implicit, thread-safe shared Random instance इस्तेमाल करने वाले versions
  • Random instance को argument के रूप में लेने वाले versions
  • custom randomizer function लेने वाले versions
  • Shuffle, Choice, Choices, Sample functions उपलब्ध हैं

CustomOperationAttribute का parameterless constructor

  • इससे Computation Expression builders के लिए custom operations बनाना आसान हो जाता है
  • अब नाम को explicitly देने की ज़रूरत नहीं होती (ज़्यादातर मामलों में नाम method name से मेल खाता है)

F# List और Set के लिए C# collection expressions का support

  • C# से F# List और Set इस्तेमाल करते समय उन्हें collection expressions से initialize किया जा सकता है
  • उदाहरण: FSharpSet<int> mySet = [ 1, 2, 3 ];

Developer productivity improvements

Parser recovery

  • Parser recovery में लगातार सुधार किए गए हैं
  • इससे code edit करते समय, भले ही वह हर समय syntactically सही न हो, tools काम करते रहते हैं

Diagnostics

  • F# 9 में कई नए या बेहतर diagnostic messages हैं
  • जैसे ambiguous override methods, abstract members के उपयोग, duplicate fields वाले unions आदि

Real visibility

  • F# में assemblies generate करने के तरीके में एक समस्या है, जहाँ private members IL में internal के रूप में लिखे जाते हैं
  • अब --realsig+ compiler flag से इस behavior को ठीक किया जा सकता है

Performance improvements

Optimized equality checks

  • Equality checks अब तेज़ हैं और memory allocation कम करती हैं

Struct Discriminated Union में field sharing

  • अगर struct DU के कई cases में एक ही नाम और type के fields हों, तो वे एक ही memory location साझा कर सकते हैं
  • इससे struct की memory footprint कम होती है

Integer range optimization

  • Compiler अब start..finish और start..step..finish expressions के और अधिक instances के लिए optimized code generate करता है
  • पहले optimization केवल तब होती थी जब type int/int32 हो और step constant 1 या -1 हो
  • अब सभी integer types और अन्य step values भी optimize होते हैं

List/Array comprehension में for x in xs -> ... optimization

  • List और Array comprehensions में for x in xs -> ... को optimize किया गया है
  • खासकर Array में 10x तक speedup और allocation size में लगभग 1/3 से 1/4 तक कमी

Tooling improvements

Visual Studio में Live Buffer

  • पहले यह opt-in feature था, लेकिन अब default रूप से enabled है
  • IDE का background compiler अब live file buffer के साथ काम करता है
  • Changes लागू करने के लिए file को disk पर save करना ज़रूरी नहीं है

Unnecessary parentheses हटाने के लिए analyzer और code fix

  • कभी-कभी clarity के लिए extra parentheses इस्तेमाल होते हैं, लेकिन कई बार वे सिर्फ़ noise होते हैं
  • अब Visual Studio parentheses हटाने के लिए code fix देता है

Visual Studio में F# के लिए custom visualizer support

  • Visual Studio के debugger visualizers अब F# projects में भी काम करते हैं

Pipeline के बीच में signature tooltip दिखाना

  • पहले ऐसी स्थिति में signature help नहीं मिलती थी, जहाँ pipeline के बीच मौजूद function पर complex curried parameters (जैसे lambda) पहले से लागू हों
  • अब अगले parameter के लिए signature tooltip दिखाई जाती है

1 टिप्पणियां

 
GN⁺ 2024-11-11
Hacker News टिप्पणियाँ
  • F# कॉलेज के दिनों में पहली बार जानने के बाद से मेरी पसंदीदा भाषा रही है। इसमें C# से आगे की कई सुविधाएँ हैं, और C# भी इन्हें अपना रहा है, लेकिन compatibility समस्याओं के कारण कठिनाई होती है। F# अब भी एक शानदार भाषा है, .NET ecosystem के साथ compatible है, और कम boilerplate के साथ C# के बराबर performance दे सकती है

  • F# Microsoft के Excel के बाद जारी किए गए सबसे बेहतरीन उत्पादों में से एक है, और इसने .NET को एक व्यावहारिक platform में बदल दिया

  • मैंने F# आधारित Phosphor project में बड़ा निवेश किया था, लेकिन अंततः उसे Typescript और Rust में पूरी तरह rewrite करना पड़ा। Fable library के जरिए अलग-अलग technologies के बीच type safety बनाए रखने की कोशिश की, लेकिन libraries के बीच interoperability और dependency management कठिन था। मेरा मानना है कि F# तभी उपयुक्त है जब पारंपरिक frontend/backend विभाजन हो

    • इस समय हम अंदरूनी तौर पर जिन technologies का उपयोग करते हैं, उनमें सबसे दिलचस्प Effect library और Moonbit हैं। Moonbit, MS/.NET dependency के बिना F# का एक आधुनिक संस्करण है, और AI-केंद्रित दुनिया के लिए उपयुक्त भाषा बनने की उम्मीद है
  • एक cryptography class में, जहाँ .NET इस्तेमाल करने वाली भाषाओं में से चुन सकते थे, F# में लिखा मेरा assignment दूसरों की तुलना में पढ़ने में आसान था। डेटा साइंस का लगभग 100% काम Python में होने के कारण F# का अधिक उपयोग नहीं कर पाता

  • F# में काम करना याद आता है, लेकिन मैं इसके updates पर लगातार नज़र रखता हूँ। community के छोटे आकार और Microsoft की उदासीनता के बावजूद tools काफ़ी अच्छे थे। सबसे बड़ी समस्या code test coverage की सटीकता थी

  • मैंने हाल ही में F# आज़माया, और Python से आने वाले व्यक्ति के रूप में REPL इस्तेमाल कर पाना मुझे पसंद आया। सर्दियों में एक छोटा web backend project बनाकर भाषा और ecosystem को बेहतर समझना चाहता हूँ। http हिस्से के लिए Oxpecker के बारे में अच्छी बातें सुनी हैं

  • मैं F# की versioning पद्धति को लेकर उत्सुक हूँ। quality improvements तो बहुत हैं, लेकिन major version change की ज़रूरत नहीं लगती। सोच रहा हूँ कि क्या इसका कारण .NET9 के साथ version number मिलाना है

  • जानना चाहता हूँ कि Windows पर GUI apps बनाने के लिए C# के विकल्प के रूप में F# की स्थिति कैसी है, और क्या इसके लिए F# इस्तेमाल करने वाली कंपनियाँ हैं

  • मैंने F# कभी इस्तेमाल नहीं किया, लेकिन एक ऐसी साइट मिली जो अच्छा resource लगती है: fsharpforfunandprofit.com

  • Linux/MacOS पर F# की स्थिति कैसी है, यह जानने की उत्सुकता है। क्या यह सिर्फ Windows के लिए है, या फिर पूरी तरह supported भाषा जैसा महसूस होता है?