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.

(more…)

Annunci

7 settembre 2009

Jon Skeet: MoreLINQ now at 1.0 beta

Filed under: C#, informatica — Tag: — Zeno @ 16:46

Jon Skeet pensa che LINQ to Object abbia bisogno di qualche aggiunta. Come dargli torto? :-)

La Beta 1 contiene un insieme interessante di estensioni a IEnumerable, di chiaro interesse.
(more…)

11 agosto 2009

C# e paradigma funzionale

Filed under: C#, Haskell, informatica — Tag:, — Zeno @ 11:25

Ho trovato un bell’articolo pratico su come implementare alcune funzioni di ordine superiore che si incontrano sempre nei linguaggi funzionali. In particolare faccio riferimento alle implementazioni di Haskell: Curry, Zip, ZipWith.

Ho aggiunto Map, Filter, FoldR e FoldL e qualche test case.

(more…)

5 agosto 2009

ItalianInflector

Filed under: C#, informatica — Tag: — Zeno @ 9:44

Ho esteso l’ottima libreria uNhAddIns per avere l’inflector in italiano.
In questo modo è possibile, dato un sostantivo singolare, ottenerne il plurale.

Segue la patch per la versione 696 di unhaddins:
(more…)

27 luglio 2009

Inizializzare gli array in C# 3

Filed under: C#, informatica — Tag: — Zeno @ 15:11

Supponiamo di avere la necessità di allocare un certo numero di oggetti in un array, ovviamente l’approccio standard è di usare un ciclo for:

Whatever[] whateverVector=new Whatever[1000];
for(int i=0;i < 1000;i++)
  whateverVector&#91;i&#93;=new Whatever(i);
&#91;/sourcecode&#93;

Esiste anche un modo diverso, più lento ma per certi versi più elegante, che usa la list comprehension di C#3: LINQ
&#91;sourcecode language='csharp'&#93;
Whatever&#91;&#93; whateverVector= Enumerable.Repeat(0, 1000).Select(i => new Whatever(i)).ToArray();

17 luglio 2009

AOP e Cache

Filed under: C#, informatica — Tag:, — Zeno @ 14:11

Certe volte accedere ad un dato è costoso, vuoi perché non è disponibile localmente, vuoi perché deve essere calcolato. In alcuni casi disporre di una cache locale può migliorare in modo significativo la velocità del programma. Con i linguaggi che dispongono delle dictionary viene comodo usarle per costruire una semplice cache locale: la chiave è il parametro della funzione, il valore è il suo risultato.
(more…)

6 aprile 2009

Remote debug e principio di indeterminazione

Filed under: C#, informatica — Tag:, , — Zeno @ 10:42

Su una macchina, e una soltanto, il nostro codice si scassa inevitabilmente.
L’applicativo funziona ovunque, su tutte le macchine che abbiamo provato. Non va benissimo, è ancora in fase di sviluppo, ma una macchina di un tecnico sembra refrattaria. O meglio, intollerante. L’applicativo parte correttamente, fa quello che deve fare, poi, dopo pochi secondi cade. Pesantemente.

Ma come? E’ codice .net 2.0, su un XP, tutto safe, come fa a scassarsi senza dare errori?

(more…)

24 gennaio 2009

Reflection in C: enum

Filed under: C#, informatica, Linguaggi — Tag:, , — Zeno @ 10:58

Comincio a descrivere un metodo e una libreria che sto riscrivendo che permette di ottenere funzionalità di reflection in C.
Ho trovato interessante la tecnica X-Macro, descritta da JP nel suo articolo di Blog e ho deciso di adottarla in questa nuova versione.
Nella mia versione precedente, descritta al NNLD 08, utilizzavo un preprocessore scritto in awk, uno script esterno all’ambiente di sviluppo, che eseguiva un parsing del codice riconoscendo keyword utili a costruire files c autogenerati utili a fornire metodi di reflection.
Al termine della presentazione Massimiliano Mantione mi ha suggerito di utilizzare, per ottenere gli stessi risultati senza uscire dall’ambiente di sviluppo, il preprocessore C.
Questo che segue è una possibile soluzione.

(more…)

Linguaggi

Filed under: C#, informatica, Linguaggi — Tag: — Zeno @ 8:12

Ogni mese, dal giugno 2001, l’azienda TIOBE, specializzata in qualità del software, misura la diffusione, la popolarità e le tendenze dei linguaggi di programmazione, analizzando le domande e le offerte su diversi motori di ricerca.  Ecco i risultati.

tratto da  TIOBE:

Position
Jan 2009
Position
Jan 2008
Delta in Position Programming Language Ratings
Jan 2009
Delta
Jan 2008
Status
1 1 Java 19.022% -1.83% A
2 2 C 15.931% +2.01% A
3 5 C++ 10.116% +1.39% A
4 3 (Visual) Basic 9.161% -1.80% A
5 4 PHP 8.882% -0.31% A
6 8 C# 5.609% +0.75% A
7 6 Python 4.731% -0.81% A
8 7 Perl 4.303% -0.94% A
9 10 JavaScript 3.360% +0.16% A
10 9 Delphi 3.303% -0.03% A
11 11 Ruby 3.149% +0.80% A
12 14 D 1.022% -0.15% A
13 12 PL/SQL 1.006% -0.22% A
14 13 SAS 0.797% -0.41% A
15 18 Pascal 0.661% +0.21% B
16 20 Logo 0.632% +0.25% B
17 15 COBOL 0.579% -0.35% B
18 28 ABAP 0.537% +0.34% B
19 17 FoxPro/xBase 0.477% -0.03% B
20 21 ActionScript 0.455% +0.11% B

Un programmatore su 5 scrive in Java.

Uno su 4 in C o C++.

C# è meno del 6%.

(more…)

20 gennaio 2009

Contract Checking

Filed under: C#, DbC, informatica — Tag:, — Zeno @ 18:03

Guardando il webcast di PDC2008 relativo al Contract Checking and Automated Test Generatione with Pex mi sono chiariti una serie di aspetti relativi al DbC. Intanto pare proprio che la libreria Code Contract Library di cui parlavo nell’articolo Design By Contract verrà inclusa nella versione 4 di .NET 4.0 come core component. Poi viene spiegato che una ragione per usare questa tecnica è che fornendo maggiori informazioni sulla “semantica” del programma (vedi gli axioms del C++0x) si può aiutare il compilatore a fare scelte performanti, ma anche  generare in automatico dei test case. In particolare viene proposto Pex.

L’uso dei Contract serve quindi per:

  • run time checking
  • static checking
  • documentation generation

Il webcast specifica bene il significato di alcuni “contract”:

Requires

  • Ciò che deve essere vero all’entrata di un metodo

Ensures:

  • Ciò che deve essere vero all’uscita del metodo
  • Può specificare un comportamento quando viene lanciata un’eccezione

Invariants:

  • Ciò che deve essere vero per tutti i metodi della classe (inclusi i tipi derivati)

Interessante il fatto che impostando un contratto su un metodo virtuale della classe, anche gli override lo ereditano.

Come per gli Assert del C, la release non viene appesantita dai contracts.

Older Posts »

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