A volte mi sento in conflitto quando uso un linguaggio che non è Rebol (di tanto in tanto accade) e mi viene in mente, hm-la vita sarebbe più facile in Rebol se questa cosa funzionasse in questo modo?
Per illustrare la mia istanza corrente, in Rebol si invia un messaggio come segue:
send [email protected] "A Message"
È sempre stato uno dei killer one-liner, molto conciso, elegante. Utilizzando i perfezionamenti, puoi iniziare a creare un messaggio più complesso:
send/subject/attach [email protected] "Hi Foo!" "A Message" %me.jpg
Ancora relativamente conciso, ma cominciando a riempire un po '. Mentre scolpisci il tuo messaggio, inizia a diventare un po 'disordinato:
send/subject/attach/header
[[email protected] [email protected]]
"Hi Folks! – Chris"
"A Message"
make object! [X-User-Agent: join "Rebol " system/version]
Questo è l'attuale modo prescritto per inviare un messaggio di posta elettronica (i feed di riga sono facoltativi qui, ma diventano essenziali non appena i componenti iniziano a essere aggiunti).
Rebol non è niente se non è versatile, possiamo sognare un approccio alternativo usando i dialetti :
send [
; no delimiters required, we can discern recipients
; by the use of the email! datatype:
[email protected] [email protected]
; two string! values indicate the first as the subject
; second as the message
"A Message"
"Hi Folks!"
; a few attachments courtesy of the file! datatype
%me.jpg %you.jpg %the-world.jpg
; and then some set-word!/value headers
X-User-Agent: "Rebol"
]
Commenti sans:
send [
[email protected] [email protected]
"A Message"
"Hi Folks!"
%me.jpg %you.jpg %the-world.jpg
X-User-Agent: "Rebol"
]
Abbastanza spinto, ma i dialetti diventano un po 'complicati quando si iniziano a inserire argomenti condizionali, dati esterni, ulteriore personalizzazione. Possiamo costruirlo in qualche modo proceduralmente:
send collect [
keep [email protected]
if "Monday" = pick system/locale/days now/weekday [
keep [email protected]
]
keep subject ; 'subject defined elsewhere
keep {A Long Message}
keep read %photos/
keep compose [X-User-Agent: (join "Rebol " system/version)]
]
Sembra ragionevole, tranne che perdiamo un po 'di espressività in quanto i metadati impliciti offerti dai tipi di dati sono oscurati dal codice aggiuntivo. Anche solo l'aggiunta di parole non del nostro dominio corrente ( collect
, keep
).
Il che mi porta al mondo basato su oggetti (che sembra coprire il modo in cui le lingue popolari là fuori si avvicinano alle cose). In questo linguaggio X composito, inesistente, recuperiamo parte dell'espressività attraverso l'uso esplicito delle azioni nominate:
message = mailer.new
// pity poor language X, only one string type:
message.addRecipient '[email protected]'
if (today = 'Monday') { // assumed 'today value
message.addRecipient '[email protected]'
}
message.subject = "A Message"
message.body = "Hi Folks!"
message.attach filesystem.read 'photos/'
message.header['X-User-Agent'] = 'Language X'
message.send
// Rebol's SEND function needs a return value with some
// status feedback. For another day...
if (message.isSentOk) {
print "Hooray!"
}
La bellezza è negli occhi di chi guarda: questo approccio non ti lascia dubbi su quale sia la linea, ma contemporaneamente (ai miei occhi) appare pesante. Arriviamo a destinazione proceduralmente, send
accade dopo aver stabilito i dettagli del messaggio. Nei miei momenti di dubbio, mi chiedo se avere send [...]
dichiari l'intento prima di essere pronto.
Potresti facilmente trasferire l'approccio della lingua X a Rebol, o far sì che informi l'approccio adottato da un dialetto:
mailer [
new message
add recipient [email protected]
if today = "Monday" [
add recipient [email protected]
]
subject: "A Message"
body: "Hi Folks!"
attach read %photos/
send
probe status
]
La mia domanda è: L'approccio al linguaggio X ha un approccio / influenza su qualcosa da desiderare, oppure l'uno o l'altro approccio di Rebol conserva abbastanza espressività man mano che aumenta la complessità?
PS: non solo posta-penso a questo riguardo al tag <canvas>
e all'idea di un formato grafico procedurale rispetto all'esplicita <svg>
.