Aubrey Jaffer <email@example.com> wrote:
| Siegfried Gonzi <firstname.lastname@example.org> writes:
| > I have a 30000 lines of code Fortan 77/90 program (radiation
| > transfer). It is clear that this program cannot be re-written in C
| > and then included into Bigloo via external bindings.
| I had a bunch of Pascal code written for an extinct platform. I
| couldn't get the GNU p2c translator to work with the Apollo-Pascal
| extensions. So I wrote a Pascal-to-Scheme translator
| (http://www.swiss.ai.mit.edu/~jaffer/Docupage/pas2scm.html) and
| processed the code through it. The resulting Scheme code is editable
| and maintainable.
| I am unfamiliar with Fortran-90. Fortran-77 should be fairly easy to
| translate to Scheme -- Scheme's support for complex numbers makes it
| friendlier than C.
One would also do well to read Kent Pitman's 1979 Macsyma conference
which goes into quite a bit of detail about an "ANSI Fortran"
(Fortran-77?) to MacLisp translater (used with Macsyma), including
a number of design considerations w.r.t. the "Fortran Virtual Machine"
one needs. [Note: By "virtual machine" here he does *not* mean any
kind of slow "byte code" like JVM -- the translater was into Lisp
macros which generated Lisp code which was then compiled into native
PDP-10 machine code that ran at full speed -- but rather the differences
in semantics between the Fortran and Lisp worlds, e.g., subroutine
calling sequences, data representations, etc.]
Anyone considering a Fortran to Scheme (or Common Lisp) translator
should probably read it.
| Translating my Pascal code to Scheme exposed some referencing-
| past-the-end-of-array bugs; you should probably expect that for
| Fortran-to-Scheme also.
Yup. Pitman also mentioned various issues with aliasing, i.e., the
Fortran EQUIVALENCE statement, COMMON blocks, emulating Fortran
subroutines' "call by reference" (which allows some quite-nasty
dynamic aliasing at run-time), etc.
Rob Warnock, PP-ASEL-IA <email@example.com>
627 26th Avenue <URL:http://rpw3.org/>
San Mateo, CA 94403 (650)572-2607