Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to combine different programming languages

I'm not asking about WHEN to link different programming langauges.

This is quite a general question but I'm personally working on Linux.

What I want to understand is the process by which different programming languages can be combined, I found a good article on combining C/C++/Fortran: http://www-h.eng.cam.ac.uk/help/tpl/languages/mixinglanguages.html.

From what I understand most compilers perform two stages:

  1. Translating the language files into object files which contain machine code but still contain some symbols (possibly function names?)

  2. Linking the object files together, only at this stage the Linker checks that the functions in the object files are callable.

I think that the problem with combining different languages is name mangling which means that the names of the functions are changed when they are turned into object code.

The questions are:

  1. Can't you somehow discover the mangled function names beforehand and than specify them explicitly in the programming language or better off, isn't there a software that already does that?

  2. I don't understand completely how dynamic libraries are linked but can different languages interact by the same method that programs interact with dynamic libraries?

p.s The main intent is to call functions written in another language.

like image 446
fiftyeight Avatar asked Jul 20 '11 19:07

fiftyeight


People also ask

Can you combine languages?

A mixed language is a language that arises among a bilingual group combining aspects of two or more languages but not clearly deriving primarily from any single language.

What programming languages work well together?

Interviewers are giving more attention to an engineer who has good experience with multiple languages, e.g. C++ and Java go quite well together, as do Python and Java. I personally like software engineers who have strong experience in either C++ or Java and can write scripts in Groovy, Perl, or Python.

How do you transition from one programming language to another?

An experienced programmer should be able to take-up just about any programming language, in addition to any reasonable programming tool. If you want to move to a new language, just read a book or two in your own time, practice it at home, and then send in a resume just like everyone else.


1 Answers

The issue with linking different object files together generally comes down to subroutine calling conventions. Basically, when you make a call to a routine located in another object file, your compiler will have to know what that other object file will name its routine internally, how to pass all its parameters, and what (if any) setup and cleanup code the routine will require. All this stuff is generally grouped together under the heading of calling conventions.

Each compiler has its own calling conventions it likes to use for subroutines. Note I said "compiler", not language. The C calling convention in Linux is different than the C calling convention on Windows.

So when you mix languages, you need some way to tell the compiler for either the calling or the called subroutine to use the other language's calling convention. C's convention is a popular one to use as sort of a "lingua franca", as just about every platform has a C compiler. However some platforms (eg: Windows) have multiple popular calling conventions.

So now we ask the question you asked in the comments:

Is there a common way to "tell the compiler to use the other language's calling convention"?

And the answer is, "No, not really". Some languages do have defined ways of using specific other language's calling conventions. For example, C++ allows you to to put extern "C" on declarations to tell the compiler that the declaration(s) in question use the C calling convention. Ada accomplishes the same thing with pragma Convention (X,...), where X is the convention name. C, Fortran, and Cobol are defined by the language, but anything else supported (eg: Windows' Stdcall) is implementation defined.

However, if you have a pair of languages whose compiler writers never thought of each other, then you have no choice but to tell both to use some third convention that they both know about (usually C's). For example, to get standard C++ and Ada to interoperate, you'd have the server code export its routines using the C convention, and tell the client code that the routines it is calling are using the C convention.

like image 158
T.E.D. Avatar answered Oct 18 '22 16:10

T.E.D.