1 / 17

Type analyse i FunCalc / CoreCalc

Type analyse i FunCalc / CoreCalc. Baggrund og kontekst Formål Designovervejelser → løsning /arkitektur Strategi for implementering og afprøvning Resultater Anvendelighed og perspektiv. Baggrund og Kontekst. CoreCalc (regnearks-funktionalitet)

gazit
Télécharger la présentation

Type analyse i FunCalc / CoreCalc

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Type analyse i FunCalc / CoreCalc Baggrund og kontekst Formål Designovervejelser → løsning /arkitektur Strategi for implementering og afprøvning Resultater Anvendelighed og perspektiv

  2. Baggrund og Kontekst CoreCalc (regnearks-funktionalitet) FunCalc (funktioner defineret i regneark) Simpel intuitiv brugerflade Do. beregningsmodel Anvendelse fra enkle oversigter til komplekse simuleringer og analyser. Regnearks-definerede funktioner kompileres på køretid. Ukendt input type => boxing / unboxing

  3. Formål Hypotese: Bedre kendskab til typer for udtryk i formler => boxing / unboxing kan minimeres. Gennemfør typeanalyse: Regneark er dynamisk typede som fx Scheme, og modsat fx Standard ML og Haskell som er statisk typede. Implementer typeanalyse, baseret på unification og substitution. Udfør målinger baseret på nyt typesystem.

  4. FunCalc Type Lattice E = Error N = NumberPrimitive T = TextPrimitive A = ArrayPrimitive F = FunctionPrimitive E|N|T|F|A Value E|N|F|A E|T|F|A E|N|T|A E|N|T|F N|T|F|A E|N|F E|N|A E|F|A N|F|A E|T|F E|T|A E|N|T N|T|F N|T|A T|F|A E|N E|F N|F E|A N|A F|A E|T T|F N|T T|A Number Function Array Text E N T F A Error None

  5. FunCalc Types <<interface>> IEquatable<Typ> Typ Equals Adjust Subst Union • Signature • resType • argTypes[] • TypeUnion • typs (List) • TypePrimitive • NumberPrimitive • TextPrimitive • Error • TypeArrayPrimitive • Typ elemType • TypefunctionPrimitive • Signature Number Text TypeArray - Array TypeFunction - Function Value

  6. Designovervejelser Forsøg at udnytte det bedste fra både den statiske og dynamiske typeanalyse Afvis ikke input, hvis det giver mening at fortsætte. Håndtering af type(r) ved non-strict funktion. CLR: Håndtering af Value type vs. Reference type. Sameksistens med eksisterende kode. Typenotation for indbyggede funktioner. Soft types, wrapper/worker transformation

  7. Løsning / Arkitektur Typenotation indbyggede typer: (NN)N svarende til N * N → N. Unify (Required Type) Soft types, wrapper/worker transformation Compile: Ansvaret for at aflevere en værdi af brugbar type, uddelegeres til de enkelte udtryk baseret på resultatet af type analysen.

  8. Mapning til CIL kodegenerering Type Analyse Compile Error ErrorValue.type Number NumberPrimitive NumberValue.type Text TextPrimitive TextValue.type FunctionValue.type Function (signature) Array (element type) ArrayValue.type Union Value.type

  9. Strategi for implementering if(this.name.Equals("INTEGRATE") || this.name.Equals("RECIP") || this.name.Equals("TRIAREA") || this.name.Equals("NONSTRICT") || this.name.Equals("XCOSX") || this.name.Equals("BULLETPV") || this.name.Equals("FINDEND") || this.name.Equals("GOALSEEK") ) newCG = true; else newCG = false; Type analysen implementeres i fuldt omfang og erstatter det eksisterende type system. Compile til CLR indført gradvist i eksisterende arkitektur, styret af simpel boolean:

  10. Resultater En generel køretids forbedring på godt 20%. Forbedring på op til 65% i funktion med hyppig rekursion og kald af andre regnearks-funktioner. Forenklet kode. Anvist mulighed for anden anvendelse (dokumentation, support ved dannelse af funktion, kontrol af gyldig anvendelse) Kan danne basis for optimeret memory udnyttelse. Yderligere køretidsforbedring opnået på apply funktion (næste slide)

  11. Apply funktion (original) CIL FunctionValue SdfInfo Call Site Descriptor

  12. Apply funktion (benchmark) CIL FunctionValue SdfInfo Call Site Descriptor

  13. Apply funktion (typebestemt) CIL FunctionValue Call Site Descriptor SdfInfo

  14. Optimering af Apply funktion Løsning: Via typeanalyse infereres signatur som værende: Number → Number, denne fikseres i CIL kode, og funktion loades fra delegater: LoadDelegate Call (korrekt signatur) Er afprøvet (3% yderligere tidsgevinst på INTEGRATE) Afprøvet på goalseek funktion, resultat: 5 gennemløb af goalseek for xcosx funktion forbedret fra 15.800 ns til 7.200 ns, dvs. en forbedring på 54%. Problematik: Funktion ikke kendt på compilerings tidspunkt, men signatur kræves hard-coded i CIL kode. Næste trin: goalseek for partial applied function, hvis fx bulletpv specialiseres med fast nominel rente og antal terminer.

  15. Goalseek funktion (typebestemt) CIL Call Site Descriptor

  16. ECMA 335, Partition I (method calls).

  17. Anvendelighed og perspektiv Store tidsgevinster påvist. Gennemfør implementering af typer i kompilering af funktioner. Forsøg med andre anvendelser (memory allokering, bruger support under indtastning, dokumentation). Tættere sammenhæng mellem CLR typer og FunCalc typer. Forsøg med polymorfe typer.

More Related