Multipel sändning ger ökad expressiv kraft över enstaka sändning genom att styra metoden uppslagning med hjälp av värdena för alla argument i stället för bara mottagaren. Befintliga språk med flera sändningar uppmuntrar dock inte dataabstraktion-orienterad programmering stil som uppmuntras av traditionella singel-dispatching språk; istället befintliga flera-dispatching språk tenderar att främja en funktionsorienterad programmering stil som organiseras runt generiska funktioner. Vi föreslår en alternativ vy av flera sändningar som är avsedd att främja en data-abstraktion-orienterad programmering stil. Istället för att betrakta en multimetod som "utanför" av alla objekt, ser vi en multimetod som "inside" de objekt för vilka multimetoden gäller (på vilka den skickar). Eftersom föremålen är nära förbundna med de multimetoder som genomför deras verksamhet, kan ett föremåls inre inkapslades genom att endast vara åtkomliga för de nära förbundna multimetoderna. Vi utforskar denna objektorienterade syn på multimetoder inom ramen för ett nytt programmeringsspråk som heter Cecil. I de flesta objektorienterade språk skickas ett meddelande till en framstående mottagare objekt, och körtiden "typ" av mottagaren bestämmer den metod som åberopas av meddelandet. Andra argument i meddelandet vidarebefordras till den åberopade metoden men deltar inte i metoduppslagning. Denna stil av objekt-orienterat språk kallas ett enda-dispatching språk, eftersom metoden lookup (alias. Sändning) utförs endast med avseende på argumentet om en mottagare. En enda sändning fungerar bra för många typer av meddelanden, särskilt de där det första argumentet är mer "intressant" att de andra, i den meningen att det första argumentet ensam avgör vilken kod som ska köras för att genomföra operationen. Men för vissa typer av meddelanden kan flera argument vara "intressanta", utan någon tydlig anledning att föredra ett argument framför ett annat. Till exempel, för de flesta standard binära aritmetiska meddelanden såsom +, båda argument är lika intressant, och att skicka på bara en är onaturligt. Om detta problem var begränsat till fördefinierade abstraktioner som tal och aritmetik, då kanske det kunde förbises som en irriterande komplikation av aritmetik, lösas en gång för alla av systemimplementatorerna och ignoreras från och med då. Asymmetrin i enstaka sändningar komplicerar emellertid andra typer av meddelanden. Till exempel: • De flesta datatyper definierar en jämlikhetstestande binär operation, och många typer av objekt definierar beställningsrelationer. Samma problem uppstår som med de vanliga aritmetiska meddelandena. • ParDo(c1, c2, block) meddelandet tar två samlingar och en stängningsblock och itererar genom de två samlingarna parallellt. Ingen av samlingen är viktigare än den andra, men på enstaka språk måste programmeraren gynna den ena samlingen framför den andra när man väljer den första implementeringen av pairDo.
Cecil REF är det första språk som författarna känner till för att integrera en prototypinspirerad objektmodell med flera sändningar.
Object-Oriented Multi-Methods in Cecil
{'venue': 'ECOOP', 'journal': None, 'mag_field_of_study': ['Computer Science']}