Domanda

Una caratteristica che mi manca dai linguaggi funzionali è l'idea che gli operatori siano solo funzioni, quindi l'aggiunta di un operatore personalizzato è spesso semplice come aggiungere una funzione. Molti linguaggi procedurali consentono sovraccarichi dell'operatore, quindi in qualche modo gli operatori sono ancora funzioni (questo è molto vero in D dove l'operatore viene passato come stringa in un parametro modello).

Sembra che dove sia consentito il sovraccarico dell'operatore, è spesso banale aggiungere ulteriori operatori personalizzati. ho trovato Questo post sul blog, il che sostiene che gli operatori personalizzati non lavorano bene con la notazione dell'infisso a causa delle regole di precedenza, ma l'autore fornisce diverse soluzioni a questo problema.

Mi sono guardato intorno e non sono riuscito a trovare alcuna linguaggio procedurale che supporti gli operatori personalizzati nella lingua. Ci sono hack (come macro in C ++), ma non è quasi lo stesso del supporto linguistico.

Poiché questa funzione è piuttosto banale da implementare, perché non è più comune?

Capisco che può portare a un codice brutto, ma ciò non ha impedito ai progettisti di lingue in passato di aggiungere funzionalità utili che possono essere facilmente abusate (macro, operatore ternario, puntatori non sicuri).

Casi d'uso effettivi:

  • Implementare gli operatori mancanti (ad esempio Lua non ha operatori bitwise)
  • Mimic d'S ~ (Concatenazione dell'array)
  • DSLS
  • Uso | Come zucchero di sintassi in stile tubatura UNIX (usando coroutine/generatori)

Sono anche interessato alle lingue che fare Consenti agli operatori personalizzati, ma sono più interessato perché È stato escluso. Ho pensato di fare un linguaggio di scripting per aggiungere operatori definiti dall'utente, ma mi sono fermato quando mi sono reso conto che non l'ho visto da nessuna parte, quindi c'è probabilmente una buona ragione per cui i progettisti di lingue più intelligenti di me non l'hanno permesso.

Nessuna soluzione corretta

Autorizzato sotto: CC-BY-SA insieme a attribuzione
scroll top