-
Notifications
You must be signed in to change notification settings - Fork 1
Analyse intro
Moscow ML er en letvægts implementation af SML, der inkluderer det fulde SML-sprog samt SML-moduler og det meste af standard biblioteket i SML. Det bruger Caml Light til oversættelse til bytekode i bagenden af oversætteren, som sjældent bliver opdateret eller vedligeholdt pga. et begrænset fællesskab. Derfor vil det være en fordel at oversætte Moscow ML til et andet, mere brugt sprog, som har et stort og solidt fællesskab bag oversætteren, der sørger for vedligeholdelse og optimeringer.
JS er et letvægt, objektorienteret skriptsprog \ref{web:mozilla_js_description} JS kan afvikles i mange forskellige miljøer og på mange forskellige platforme. JS bruges meget ofte i forbindelse med HTML på hjemmesider, men er også populært i andre sammenhænge \ref{web:mozilla_js_uses_outside_web} med bl.a. node.js til netværksapplikationer samt på CouchDB Apache\ref{web:mozilla_js_description}, og kan desuden bruges på tværs af mange platforme som mobiler, tablets, computere og servere. JS har, grundet dets store udbredelse, et stort og solidt fællesskab, hvorfor en oversættelse af Moscow ML til JS vil kunne udnytte JS' optimerede og velholdte oversætter. Ved oversættelse af Moscow ML til JS kan man udnytte Moscow MLs typestærke, funktionelle sprog i bl.a. disse miljøer, hvilket gør visse opgaver nemmere at udføre. Allerede det at bruge et typestærkt sprog kan øge sikkerheden (i form af korrekthed) i et program\ref{web:version2_torben_mogensen}.
En udfordring ved JS er, at det pga. sin store udbredelse og sine mange miljøer og platforme også har en stor variation af evalueringer af programmer, som derfor kan opføre sig forskelligt på forskellige platforme. %TODO ref til relevant litteratur. Dette kan for så vidt muligt undgåes ved brug af en mere striks og afgrænset del af JS-sproget. %(evt. flyttes til design) JS har forsimplede datatyper ift. Moscow ML, hvor JS f.eks. bruger datatypen \texttt{Numbers} til at beskrive samtlige tal, mens Moscow ML bruger både \texttt{int}, \texttt{real}, \texttt{word} (foruden ydderligere datatyper baseret på disse). Det betyder at forskellige behandlinger er nødvendige for hvert tal-datatype ved oversættelsen til JS, og dette forekommer også ved andre datatyper. JS er et fortolket sprog, hvilket gør, at køretiden kan blive højere i nogle sammenhænge, sammenlignet med Caml Light-bytekoden fra Moscow ML oversætteren. %TODO Mangler evt. flere udfordringer ved at bruge JS.
Vi vil fokusere på at lave en så omfattende oversætter muligt, altså fokusere på at oversætteren kan håndtere så meget Moscow ML (til JS), som muligt inden for projektets tidsafgrænsning. Derfor vil vi ikke fokusere på, at oversætteren er optimal ift. hastighed eller hukommelsesforbrug, ej heller at oversættelsen er optimal i disse rammer. Vi vil forsøge at holde den oversatte JS-kode pæn og overskuelig, men det er ikke et centralt fokus for dette projekt. Det betyder at vi ikke vil holde det op mod f.eks. JSLint-standarden, men stadig vil forsøge at beholde variablenavne og strukturen fra Moscow ML-koden. Evt. kan et formateringsprogram (f.eks. ) efterfølgende benyttes på JS-koden, så den bliver indenteret og opstillet pænere. Vi vil ikke fokusere på at kunne kalde standardfunktioner i JS fra Moscow ML-koden.