Detta papper presenterar ett program transformation som tillåter språk med polymorphic typing (t.ex. ML) skall genomföras med oboxade, flerordiga data representationer, effektivare än de konventionella boxade representationer. Transformationen introducerar tvång mellan olika representationer, baserat på en skrivande härledning. En prototyp MIL-kompilator som använder denna omvandling visar viktiga uppfarter. Det är vanligt att statiskt typade program kan sammanställas mer effektivt än dynamiskt typade program. Ett antal körtidsprovningar blir till exempel onödiga. I den här artikeln studerar vi några sammanställningsmetoder som bygger på tillgången till maskinskrivningsinformation vid kompileringstidpunkten. Dessa tekniker är kopplade till da,ta representation problem: hur hög nivå objekt manipuleras av språket kartläggs på maskinnivå objekt, Statisk typning och data representation Det finns många sätt på vilka att veta typ information vid kompilering-tid kan hjälpa till att välja bättre representationer för data. Först och främst behöver en kompilator veta storleken (krävd mängd minne) på alla objekt som manipuleras av programmet, för att allokera tillräckligt med utrymme för variabel valu,es och mellanliggande resultat, och för att flytta rätt antal bitar från en Iokation till en annan när man utför bindningar eller uppdrag. Utan statisk typning måste en standardstorlek (vanligtvis ett ord) antas för alla objekt i programmet, och alla representerar toner måste passa i denna storlek. Objekt som inte passar naturligt i ett ord, till exempel * Författarens adress: INRIA Rocquencourt, projet Formel, B.P. Le Chesnay, Frankrike. E-post: Xavier.Leroy@inria. f r. Tillstånd att kopiera utan avgift af eller en del av detta material beviljas under förutsättning att kopiorna inte görs eller distribueras för direkt kommersiell fördel, att meddelandet om upphovsrätt till ACM och titeln på publikationen och dess datum visas, och att meddelande ges om att kopiering sker genom tillstånd från Dte Association for Computing Machinery. För att kopiera på annat sätt, eller för att återpublicera, krävs en avgift och/eller ett särskilt tillstånd. poster och 64-bitars flyttalstal, måste boxas (tilldelas i högen och hanteras genom en pekare). Med statiskt skrivande kan objekt som tillhör olika typer ha olika storlekar, så länge alla objekt av samma typ har samma storlek. Kompilatorn drar slutsatsen att ett objekt är stort från sin typ, och vet därför hur man fördelar en variabel av den typen, eller flyttar ett värde av den typen. Detta gör det möjligt att ha otilldelade objekt större än ett ord: otilldelade 64-bitars flyttalstal, och otilldelade poster, i synnerhet. Formen,er är avgörande för numeriskt intensiva program. De senare är avgörande för språk baserade på A-calculus, såsom ML, där funktioner har endast ett argument och ett resultat, och fungerar med flera argument eller flera resultat kodas som funktioner som tar eller returnerar poster. En kompilator kan också oss, estatisk skrivinformation för att ange vilken registerklass som är bäst lämpad för ett visst objekt. De flesta arkitekturer skiljer mellan flyttalsregistren och allmänna register; flyttalsregistren kan endast utföras mellan flyttalsregistren. När ett objekt är statiskt känt för att ha typ flyter, är det möjligt att hålla detta objekt i ett flyttal register, i stället för ett allmänt register, så att beräkning på detta objekt inte kräver register flyttar. Det typiska exemplet på denna typ-baserade målinriktning är användningen av olika anropskonventioner för funktioner av olika typer: en funktion med resultat typ flytförmåga kan sammanställas för att returnera sitt resultat i ett givet flyttal register, redo att användas av anroparen; en funktion som returnerar ett objekt av typ int kommer att använda ett givet heltal register istället. Statisk typning garanterar att den som ringer och den som ringer kommer överens om typ av argument och resultat, och därmed om var de befinner sig.
Det är nära relaterat till "unboxing" REF för funktionella språk.
Unboxed objects and polymorphic typing
{'venue': "POPL '92", 'journal': None, 'mag_field_of_study': ['Computer Science']}