Recently i have encountered two words describing transformation process of one language to another language - "translation" and "synthesis". I have some tips but i am not sure what is the difference. For example we say that C++ is "translated" into assembler (string is translated into another string), but VHDL (three levels of abstraction: Behavioral, RTL and Logical) is synthesized from Behavioral into RTL, from RTL into Logical etc (Gate description is still represented as string, so basically, it is still string translated into string, isn't it?).

Can anybody explain or refer me to exact difference of these concepts?

closed as too broad by gnat, durron597, user22815, user40980, enderland Aug 26 '15 at 13:50

Please edit the question to limit it to a specific problem with enough detail to identify an adequate answer. Avoid asking multiple distinct questions at once. See the How to Ask page for help clarifying this question. If this question can be reworded to fit the rules in the help center, please edit the question.


tl;dr: different words for the same thing in different communities / circumstances.

The process of translating a program from one language A into another language B (or even the same language) is called compilation, and the program which performs this process is called a compiler.

Note: some people only use the term compilation if B is perceived as lower-level than A. Some people are even more strict and only call it compilation if B is some sort of binary machine language.

However, there are some specialized terms that are used in some circumstances.

If A == B, the process is sometimes called optimization, obfuscation, minimization, or pretty-printing, depending on what the goal of the process is.

If A is perceived to be lower-level than B, it is sometimes called decompilation. (And if A is some form of binary machine code and B is an assembly language, it is called disassembly).

If A is an assembly language and B is some form of binary machine code, it is called assembly.

If A and B are roughly on the same level of abstraction, and especially if the resulting B program is intended to be human-readable and idiomatic, it is called translation or source-to-source translation.

If A is some sort of macro or template language, it might be called expansion.

The term synthesis is specific to electronics engineering and refers to synthesizing an electronic system from a mathematical model, as opposed to the more traditional approach of engineering a system first and later modeling it mathematically. (I think the term is also used in Model-Driven Development in analogy to electronics.)

Not the answer you're looking for? Browse other questions tagged or ask your own question.