30 पॉइंट द्वारा xguru 2024-06-17 | 3 टिप्पणियां | WhatsApp पर शेयर करें
  • "The missing Standard Library for TypeScript"
  • जटिल synchronous/asynchronous प्रोग्राम को आसानी से बनाने के लिए डिज़ाइन की गई
  • कोड को और अधिक Composable, Reusable, Testable बनाती है
  • Maximum Type-Safety (error handling सहित)
  • विभिन्न लाइब्रेरी प्रदान करती है
  • clustering & workflow प्रदान करती है (alpha version)
  • व्यापक compatibility
    • Node, Deno, Bun, Cloudflare Workers, Chrome
    • React, Solid.JS, Vite, Next.JS, Tauri
  • मुख्य विशेषताएँ
    • concurrency: Fiber-आधारित concurrency model के ज़रिए अत्यधिक scalable और ultra-low-latency applications लागू किए जा सकते हैं
    • composability: छोटे और reusable components का उपयोग करके maintain करना आसान, पढ़ने में सरल और flexible software बनाया जा सकता है
    • resource safety: प्रोग्राम fail होने पर भी resources के acquisition और release को सुरक्षित रूप से manage किया जा सकता है
    • type safety: type inference और type safety पर ज़ोर होने के कारण TypeScript type system का अधिकतम लाभ लिया जा सकता है
    • error handling: built-in error handling features का उपयोग करके structured और reliable तरीके से errors handle किए जा सकते हैं
    • asynchronicity: कोड synchronous हो या asynchronous, उसे एक जैसा दिखने वाले तरीके से लिखा जा सकता है
    • observability: complete tracing के ज़रिए प्रोग्राम के execution को आसानी से debug और monitor किया जा सकता है

Effect क्यों?

  • programming कठिन है
  • libraries और apps बनाते समय complexity को manage करने के लिए कई tools का उपयोग किया जाता है
  • Effect TypeScript programming के लिए एक नया सोचने का तरीका प्रस्तुत करता है
  • Effect ecosystem के tools के माध्यम से बेहतर applications और libraries बनाई जा सकती हैं
  • इससे TypeScript language और type system को बेहतर समझा जा सकता है, और programs को अधिक reliable तथा maintain करना आसान बनाया जा सकता है

Effect pattern

  • सामान्य TypeScript code में यह माना जाता है कि function या तो सफल होगा या exception throw करेगा
    • उदाहरण: divide function 0 से divide करने पर exception throw करता है
  • केवल types देखकर यह नहीं जाना जा सकता कि यह function exception throw कर सकता है
  • जब codebase में सैकड़ों या हज़ारों functions हों, तो यह समस्या और बड़ी हो जाती है
  • exception handling भूलना आसान है, और इसे manage करना कठिन हो जाता है
  • TypeScript compiler bugs, domain errors और सामान्य complexity के खिलाफ पहली defense line है

Effect pattern लागू करना

  • Effect की मुख्य insight यह है कि type system का उपयोग केवल success value ही नहीं, बल्कि errors और "context" को track करने के लिए भी किया जा सकता है
    • उदाहरण: divide function का Effect version exception throw नहीं करता, बल्कि error को caller तक पहुंचाता है
  • यह errors और success values को manage करने की functionality देता है
  • context tracking के ज़रिए सभी arguments पास किए बिना भी function को अतिरिक्त जानकारी दी जा सकती है
    • उदाहरण: test के दौरान external service के real implementation को mock object से बदला जा सकता है
import { Effect } from "effect"  
   
const divide = (a: number, b: number): Effect.Effect<number, Error, never> =>  
  b === 0  
    ? Effect.fail(new Error("Cannot divide by zero"))  
    : Effect.succeed(a / b)  

Effect ecosystem

  • Effect की अनोखी insight और अन्य tools के संयोजन से एक समृद्ध library ecosystem बना है, जिससे जटिल applications को आसानी से बनाया जा सकता है
  • जो चीज़ें पहले असंभव लगती थीं, वे अब सामान्य हो गई हैं
  • Effect ecosystem तेज़ी से बढ़ रहा है, और इसे Effect के GitHub पर देखा जा सकता है

पहिया फिर से न बनाएं

  • TypeScript application code में अक्सर वही समस्याएँ बार-बार हल की जाती हैं
  • external services, file system और database के साथ interaction हर application developer की सामान्य समस्या है
  • Effect इन समस्याओं के लिए standardized solutions देने वाला एक समृद्ध library ecosystem प्रदान करता है
  • कई dependencies install करने की ज़रूरत के बिना, Effect एक साथ कई समस्याओं का समाधान करता है

व्यावहारिक समस्या समाधान

  • Effect Scala और Haskell से प्रेरित है
  • लेकिन Effect का लक्ष्य एक practical toolkit देना है, ताकि TypeScript applications और libraries बनाते समय सामने आने वाली रोज़मर्रा की समस्याओं को हल किया जा सके

मज़े के साथ सीखना

  • Effect सीखना मज़ेदार है
  • कई developers production में Effect का उपयोग करके वास्तविक समस्याएँ हल कर रहे हैं
  • आप पहले Effect ecosystem के कुछ हिस्सों को आज़मा सकते हैं और फिर धीरे-धीरे अधिक tools का उपयोग कर सकते हैं
  • शुरुआत में Effect की concepts अपरिचित लग सकती हैं, लेकिन documentation पढ़कर और core concepts को समझने में समय देने से बाद में advanced tools का उपयोग करने में मदद मिलती है
  • Effect community हमेशा सीखने और आगे बढ़ने में मदद के लिए तैयार रहती है। Discord या GitHub देखें

3 टिप्पणियां

 
firea32 2024-06-24

लगता है कि इसमें Rust के मुख्य सिद्धांतों जैसी ही दिशा है।

 
toaonly 2024-06-17

थोड़ा और इस्तेमाल करने पर ही ठीक से पता चलेगा, लेकिन fp-ts की तुलना में इसे इस्तेमाल करना कहीं ज़्यादा सहज लग रहा है।

 
seunggi 2024-06-17

fp-ts ने 3.0 का development न करने और effect में शामिल होने का फैसला किया है.

अगर आप fp-ts इस्तेमाल करते हैं, तो effect पर विचार करना अच्छा रहेगा.

https://x.com/MichaelArnaldi/status/1626975031048773635
https://effect.website/docs/other/fp-ts