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?

| improve this 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.)

| improve this answer | | | | |

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