TL;DR
Programming language is a more abstract concept, are the rules specified governing how a code should behave to produce computer programs. The language is not a program that executes.
Compiler is what embodies the programming language, is what applies these rules and transforms what a human understands in the code that the machine understands and is able to execute. It is a transformation program. Usually it is a program that runs on the console via the command line.
IDE is a tool (a software) that helps the entire software development process by integrating other tools and facilitating their use. Its main function is the text editor.
Nowadays it is very common for people, especially when they are starting to program, not to understand very well all aspects of what involves the process of software development, all theory of computation, and the role of each tool in this process. IDE is not the programming language.
IDE
How people start as computer users where the normal is to use a Microsoft Word for example, and it does everything it needs in terms of editing text, when it will program and have it install the Visual Studio, the Eclipse, the Android Studio or some other IDE she thinks that is the programming language.
The IDE (Integreted Development Environment) is the integrated development environment (note that it is masculine), that is, it is the program that integrates the various tools necessary for software development helping the whole process to become easier.
Its main function is to help the programmer edit the code that will be used to create your program.
Another very important thing that all Ides do is to call the compiler, or interpreter, within certain parameters to generate and/or run the created program if it contains no errors.
It also helps:
- debug programs while running with various facilities;
- manage projects and your settings
- run tests, assemble the deploy or even do so;
- do static analysis;
- versioning;
- access database;
- generate codes automatically for certain coding standards such as screens and reports;
- provide easy access to documentation;
- various aids during the process of editing the code.
This can vary from IDE to IDE and how it is configured. As the name says, these tools are usually integrated. Of course some are there by default, but many of them rely on an external program to perform the task. The language compiler itself is usually something external.
An IDE can support multiple languages (having specific tools to support certain language usage).
Compiler
The compiler is the program that analyzes and generates the executable of what is being created. It takes human-understandable text - what the programmer wrote - and turns it into machine-understandable code, binary code that it has instructions of what the processor should perform (there are cases of intermediate code).
Obviously it is not a magical, special program. It is just a data processor like so many others. It reads texts and transforms them. In a way, it’s a relatively simple program. Of course there is complexity in interpreting the entire grammar of a language and each has its degree of complexity.
During this process syntactic and semantic errors are checked, optimizations can be done, and a new generation of target code is performed.
In some cases it is possible to interpret this code instead of the traditional compilation process, although the interpretation involves an internal compilation process.
The compiler must understand the rules that a particular programming language was built, and must ensure that all of them were followed by transforming the written code by obeying these rules.
In general the compiler is a console program, but there are cases that they are libraries that can be used in conjunction with other programs.
There are compilers that support several languages, although there is usually a certain separation (in general there is a single compiler platform but different compilers).
Understand How is a compiler made?.
Programming language
To programming language is this set of rules. It is what defines the syntax and semantics to be obeyed. Just like every natural language, but in this case it is a more limited language, more logical and with a specific purpose.
These languages can be C, C++, C#, Java, BASIC, COBOL, Fortran, Pascal, Go, D, PHP, Javascript, Python, Ruby, Perl, Lua, Lisp, Haskell, etc.
There are so many because each has a strong point, besides better meeting a specific type of problem, meets the tastes of different people. There are cases that it is not the language itself that makes it viable for a problem but rather the infrastructure that has been built around it.
This set of rules is defined by a grammar and probably a formal specification, although some more specific cases the compiler implementation is what defines how the language behaves. In general this occurs in non-standard languages that only have one compiler for it.
Understand How a programming language is developed?.
It is common for compilers not to follow the 100% specification, usually due to failure, or even more, by adding capabilities that the specification does not determine. Evidently this is the exception, otherwise it would start to turn into another language.
Not all languages are programming languages.
Where you program?
You use the IDE to facilitate development work, but it is only a facilitator and cannot be confused with the programming language. Any problem you are having with the code you are writing is a problem with the language and not with the IDE. Making a comparison with other languages, if you do not know how to write a word in Portuguese or how to build a sentence can not say that this is a difficulty you are having with Word, it is a difficulty with Portuguese.
A problem with the IDE occurs during the general development process, when something fails or the difficulty encountered is in the IDE you have a problem with it. Comparing again, when you are unable to do a paragraph in Word, it is a difficulty with Word.
When any of the tools used fail or you encounter difficulty in isolation you have a problem with it specifically. This may be up to the compiler, but rarely is a compiler problem itself.
Most of the flaws or difficulties a person encounters during the process are during the build process, but because the code has some problem, not because the IDE or compiler is not working. So the problem is with the programming language.
And no, the bug is not in the IDE or compiler. The bug is in your written code. It is easier to hit the lottery than a person beginner in programming find a bug, mainly in the compiler, preventing the correct use of the language.
An IDE can use different compilers, not only for different languages, but also for the same language. The language is unique (although it may have dialects), the compilers do not, and IDE even less. The fact that most people use a particular IDE for a language does not make it part of the language.
A IDE is totally unnecessary to use a programming language (well, there may be some esoteric language that requires it). The compiler is absolutely necessary, although in some cases it is more of an interpreter.
Examples of compilers and Ides
C/C++
Compilers like the GCC support languages such as C, C++, Objective C, Fortran, Java (it’s very rare for someone to use it for her) and others. Note that GCC is only one of the existing compilers for the C and C++ languages. It works on all platforms mainstream and several others. Understand by platform, the architecture of the processor or operating system. In some it may require a differentiated distribution, as is the case of Windows. In this operating system we usually use the Mingw, but in the background the compiler is GCC. Some also use the distribution Cygwin, but rarely.
The C and C++ languages are standardized and have several compilers that meet their specifications. Among them the Clang, Visual C++ (Note that it does not call Visual Studio C++ which would be the IDE for this language, despite the name, the compiler works in command line and has nothing visual, this part is in the IDE) and Intel C++ Compiler, only to name the best known and active.
Code::Blocks is one of the most widely used "independent" Ides. Anyone using the Qt library uses Qt Creator. Some people like the Codelite, C++Builder, or Xcode. Clion begins to have adherents.
These are languages where there are plenty of Ides and all the important ones that allow the use of various languages offer some level of support to them at some level. Unfortunately there are some very bad indicated in courses (Dev C++, cof cof).
Java
Java is another language that has several compilers. The best known is the made available by Oracle. Some run a little off the grid and there are controversies whether it should be called the Java compiler, until Microsoft already had one. Another well known is the compiler for Android that has features of its own. In addition to Eclipse and Android Studio, already cited, the Netbeans is widely used with this language or C/C++. Intellij is another.
C#
C# has the old compiler, the which is now a compilation platform, and the compiler of Mono. Visual Studio is the most used IDE for this language, but there are others like Sharpdevelop or Monodevelop. Today is the Visual Studio Code is widely used, for other languages as well.
BASIC
BASIC has several dialects, each with its own compiler. But dialect may be different enough to consider as different languages. Visual BASIC is probably the best known of them, and it usually runs together with Visual Studio.
Javascript
Javascript is usually interpreted or compiled at the time of its use. In general this is done in the browser and each has its own compiler. IE/Edge, Chrome/Opera, Safari, etc.. Most of the Ides cited support the JS well, another is the Webstorm.
PHP
PHP is an interpreted language. There is an official platform of it that can be complemented or distributed in different forms. It is rare for a different distribution and mainly a separate implementation from the official one to have any kind of traction on the market. There are a huge amount of Ides for PHP, but it is rare to have one stand out more than others.
Other
Python and mainly Ruby have compiler options, but they are not very successful either. Several Ides are available, including extensions to the Ides mentioned above, as they were made to support several languages.
There is at least one case of language and IDE getting confused, even if they are different things, Delphi.
I could go on quoting several other languages with their compilers and Ides, but I think this gives a good basis for more specific questions later.
Ides online
I don’t know if you can call it a real IDE, but there are several that can be used for quick codes like ideone, repl it., .NET Fiddle, Compiler Explorer, etc..
Completion
It is important to understand these differences in order to develop better.
And it’s important to know this to use the tags correct and better describe the problem. Do not say that your problem is in the IDE when it is actually in your code written in a certain language (use the tag the language and not the IDE you are using). Using an IDE usually does nothing in these cases. Only when it is some problem that can only occur in its use.
It is more important to inform the compiler when the language usually has several.
+1. Will help many new people ;)
– Wallace Maxters
This is the intention @Wallacemaxters I would even post direct with response, but I think there are a lot of people here on the site that can give a good answer (including better than one of mine).
– Jéf Bueno
+1. It was a great question :D
– gato
Related: http://meta.pt.stackoverflow.com/q/4617/101
– Maniero