Articles of linguaggio design

Perché l’inferenza di tipo di F # è così volubile?

Il compilatore F # sembra eseguire l’inferenza di tipo in un modo (abbastanza) rigoroso da cima a fondo, da sinistra a destra. Ciò significa che devi fare cose come mettere tutte le definizioni prima del loro uso, l’ordine di compilazione dei file è significativo e tendi a dover riordinare le cose (tramite |> o cosa […]

A cosa servono le macro C?

Ho scritto un po ‘di C , e posso leggerlo abbastanza bene da avere un’idea generale di quello che sta facendo, ma ogni volta che ho incontrato una macro mi ha buttato completamente. Finisco per dover ricordare che cos’è la macro e sostituirla nella mia testa mentre leggo. Quelli che ho incontrato che erano intuitivi […]

Perché l’ultima parte di un nome di metodo Objective-C accetta un argomento (quando c’è più di una parte)?

In Objective-C, non è ansible dichiarare nomi di metodi in cui l’ultimo componente non accetta un argomento. Ad esempio, il seguente è illegale. -(void)take:(id)theMoney andRun; -(void)take:(id)yourMedicine andDontComplain; Perché l’Objective-C è stato progettato in questo modo? Era solo un artefatto di Smalltalk che nessuno ha visto il bisogno di liberarsene? Questa limitazione ha senso in Smalltalk, […]

Perché C ++ ha bisogno di un file di intestazione separato?

Non ho mai veramente capito perché C ++ abbia bisogno di un file di intestazione separato con le stesse funzioni del file .cpp. Rende molto difficile la creazione e il refactoring delle classi e aggiunge file non necessari al progetto. E poi c’è il problema di dover includere i file header, ma dover controllare esplicitamente […]

Qual è la motivazione alla base dell’inizializzazione della copia e dell’inizializzazione diretta in modo diverso?

Un po ‘correlato a Perché viene chiamato il costruttore di copia anziché il costruttore di conversioni? Esistono due syntax per l’inizializzazione, l’inizializzazione diretta e di copia: A a(b); A a = b; Voglio sapere la motivazione per loro avere un comportamento definito diverso. Per l’inizializzazione della copia, è coinvolta una copia aggiuntiva e non riesco […]

La spiegazione di James Gosling sul perché il byte di Java è firmato

Inizialmente sono stato sorpreso che Java decida di specificare che il byte è firmato, con un intervallo compreso tra -128..127 (incluso). Ho l’impressione che la maggior parte delle rappresentazioni numeriche a 8 bit non siano firmate, con un intervallo di 0..255 (es. IPv4 in notazione decimale punto ). Quindi a James Gosling è stato chiesto […]

Fattori in R: più di un fastidio?

Uno dei tipi di dati di base in R è fattori. Nella mia esperienza i fattori sono fondamentalmente un dolore e non li uso mai. Mi converto sempre in caratteri. Mi sento stranamente come se mi mancasse qualcosa. Esistono alcuni esempi importanti di funzioni che utilizzano fattori come variabili di raggruppamento in cui il tipo […]

Membro ereditario “membro” C #: perché esiste?

In C #, i membri statici di una superclass vengono “ereditati” nell’ambito delle sottoclassi. Per esempio: class A { public static int M() { return 1; } } class B : A {} class C : A { public new static int M() { return 2; } } […] AM(); //returns 1 BM(); //returns 1 […]

Perché C ++ ha bisogno dell’operatore di risoluzione dell’ambito?

(So ​​cosa fa l’operatore di risoluzione scope, e come e quando usarlo.) Perché C ++ ha l’operatore :: , invece di usare il . operatore per questo scopo? Java non ha un operatore separato e funziona correttamente. C’è qualche differenza tra C ++ e Java che significa che C ++ richiede un operatore separato per […]

Perché i campi privati ​​sono privati ​​del tipo, non dell’istanza?

In C # (e in molti altri linguaggi) è perfettamente legittimo accedere a campi privati ​​di altre istanze dello stesso tipo. Per esempio: public class Foo { private bool aBool; public void DoBar(Foo anotherFoo) { if(anotherFoo.aBool) … } } Come specifica C # (paragrafi 3.5.1, 3.5.2) afferma che l’accesso ai campi privati ​​è su un […]