Migrering af Delphi Pascal programmer |
Da jeg i starten af 1999 begyndte at interessere mig for Java blev jeg ret hurtigt klar over at her var en værdig afløser for Pascal, som indtil da var mit foretrukne programmeringssprog. På det tidspunkt havde jeg omkring 100.000 linier Delphi Pascal hobbykode og derfor et vist migreringsproblem. Jeg valgte at skrive en Pascal parser i JavaCC, og bruge den til migreringen. Resultatet hed Pas2Java. Alle modulerne blev konverteret og jeg anvendte desuden programmet til at migrere et større matematisk bibliotek, "Numerical Recipes in Pascal". I dag er mine Java-baserede hobby-moduler vokset til knap 500.000 linier.
I efteråret 2010 deltog jeg i Martin Fowler og Neal Ford's Domain Specific Languages tutorial på JAOO 2010, og det inspirerede mig til at omskrive systemet til en arkitektur baseret på en mere eksplicit Semantic Model. Dette var relativt nemt med JavaCC og introduktionen af JTB, og resultatet har oversteget mine i forvejen høje forventninger. Det omskrevne system fik det lidt kryptiske navn Pas3Java
Hvad har det så betydet? Nu kan jeg meget nemmere tilføje mere ambitiøse transformationer, som f.eks. udtræk af lokale rutiner og emulering af VAR formelle parametre. Hvor dette før medførte meget krøllede konstruktioner i hvad der i al væsentlighed er en 1-pass process, kan jeg nu skille parsing, semantisk analyse og kodegenerering i tre uafhængige kode-komplekser. Dette giver f.eks. mulighed for at lave en optimering, så VAR parametre, der ikke er nødvendige, fordi den lokale variabel slet ikke skrives i rutinen, kan ignoreres - med pænere kode som resultat.
Dette er en skitse til en præsentation af Pas3Java, med en liste over konstruktioner, og hvordan de håndteres.
|