Zėŋōfōbìå

30 novembre 2009

F# e C# nello stesso progetto DDD

Filed under: architettura, C#, F#, informatica, Pattern — Tag:, — Zeno @ 11:37

Ho postato una domanda su StackOverflow su come pensare una soluzione che incorpori parti in C# e parti in F#.

Mi chiedo, in sostanza, se abbia senso pensare all’utilizzo di F# in una architettura DDD.

I studied few functional languages, mostly for academical purposes. Nevertheless, when I have to project a client-server application I always start adopting a Domain Driven Design, strictly oop.

A complex solution written in a .Net framework could get advantages using more than a language and sometimes more than a paradigm. Mixing C or C++ with LUA or Python is a common practice, sometimes embedding prolog can be very interesting. I never tried to mix OOP and functional paradigm.

F# is a newer functional and object oriented language, I see that’s it’s technically very easy to mix C# with F# libraries in the same solution. But I wonder if it makes any sense: I use Linq to satisfy many of my functional requirements.

When and how, do you think it’s a good idea to mix these two languages together? I wonder if exists a set of patterns that tries that.

Do you actually use F# in a C# project?

Annunci

5 commenti »

  1. Hello Zeno: bel post! ^^

    Da quello che ho visto e sentito mischiare i due linguaggi ha senso.

    Personalmente non ne faccio una questione di “mischiare e basta” ma di scopi.

    F# è un linguaggio funzionale (in senso più stretto di un C# 3/4) ed è innegabile che dal punto di vista algoritmico sia estremamente comodo usarlo.

    Per capirci: F# ha le unità di misure e permette il calcolo dimensionale.

    Tradurre da algoritmo su carta a algoritmo su F# apparentemente è molto vantaggioso.

    Ergo, per porzioni di codice dove l’affidabilità algoritmica è essenziale, una punta di F# pare sia una cosa buona.

    Tutto ciò fermo restando che si deve tenere i due linguaggi e le relative prozioni di codice visivamente separate e documentate.

    Ciau! ^^

    PS: non uso F# perchè non ne sento il bisogno. Però è un bel linguaggio e ho letto un po’ di cose… :D

    Commento di jp — 3 dicembre 2009 @ 8:35

  2. Ciao JP, sentivo la tua mancanza! :-)
    Interessante.
    Su Stackoverflow mi propongono il parsing, che pare essere molto bello fatto con F#.
    Qualcuno propone addirittura, in una architettura MVC di scrivere i modelli in F#, ma a me pare una forzatura (hai visto come sono diplomatico? ;)
    Ho provato a scrivere una solution con due project, uno C# e uno F# e l’integrazione, tecnicamente è banale.

    Tu parli di scopi, ma io estenderei il concetto a “pattern”. I pattern non sono solo degli scopi (ne hanno uno) ma anche un’implementazione possibile.
    Mi chiedo se esistano dei pattern multiparadigma…
    Sarebbe interessante, no?
    :-)

    ps: nemmeno io uso F#, ci faccio un po’ di giochini, giusto per provare il linguaggio e confrontarlo con haskell, per esempio…

    Commento di Fabrizio — 3 dicembre 2009 @ 11:51

  3. LOL Zeno, son qui. Ultimamemente ho 2k cose da fare e 3k impegni “familiari” ma ci sono eh. :D

    Sì, effettivamente forse è meglio parlare anche di un “pattern d’uso”, fermo restando che sono dell’idea che meno dipendenze (anche a livello di linguaggio) ha un progetto, meglio è.

    Come formulazione, pattern multiparadigma, direi che è nuova e interessante (ottima idea, Zeno! ^^) ma non so se avrà successo. Un pattern di quel genere lo vedrei subito pe ri due linguaggi di cui parli: C# per le GUI e F# per l’implementazione di algoritmi fortemente parallelizzati. O ancora meglio, un linguaggio di scripting basato su F# dentro C#.

    Tuttavia, come dicevo, non credo avrà molto successo anche perchè, sempre rimanendo in chiave MS, C# sta diventando progressivamente sempre più un linguaggio funzionale e include sempre più fuzionalità avanzate specifiche/specializzate tipo le Parallel Extension…

    Ciau! ^^

    Commento di jp — 7 dicembre 2009 @ 11:57

  4. Ciao JP!
    Quindi mi stai dicendo: la parte funzionale che può essere inclusa in un patter è già stata portata in C# e si chiama Linq ?

    F# è probabilmente la migliore occasione che un linguaggio funzionale abbia avuto negli ultimi anni di emergere nel mondo industriale. Ma forse è troppo difficile da usare, per chi abbia imparato come primo linguaggio il C. ;-) Chissà.

    Pensare a F# come un linguaggio di scripting interno a C# mi suona strano, ma è interessante. Sarebbe meglio Lua, per gli scopi di scripting, no? Oppure Python, o Boo, che mi piace un casino. Ora con il supporto dei linguaggi dinamici sarà anche più facile…

    Commento di Fabrizio — 8 dicembre 2009 @ 16:53

  5. Sì, di fatto sì. Linq + Parallel Extensions sono una soluzione validissima e diventerà probabilmente un must. In pratica una piccola dose di feature funzionali per il programmatore imperativo-medio. :D

    Quanto a Lua, beh, il Sig. Lua ha attualmente un “grant” ufficiale di MS per Lua.net… Lua è davvero super. Raramente vedo cose così ben pensate, compatte e potenti…

    Ciau! ^^

    Commento di jp — 8 dicembre 2009 @ 17:06


RSS feed for comments on this post. TrackBack URI

Rispondi

Effettua il login con uno di questi metodi per inviare il tuo commento:

Logo WordPress.com

Stai commentando usando il tuo account WordPress.com. Chiudi sessione / Modifica )

Foto Twitter

Stai commentando usando il tuo account Twitter. Chiudi sessione / Modifica )

Foto di Facebook

Stai commentando usando il tuo account Facebook. Chiudi sessione / Modifica )

Google+ photo

Stai commentando usando il tuo account Google+. Chiudi sessione / Modifica )

Connessione a %s...

Crea un sito o un blog gratuitamente presso WordPress.com.

%d blogger hanno fatto clic su Mi Piace per questo: