A low-level language is a programming language that provides little or no abstraction of programming concepts, and is very close to writing actual machine instructions. Two good examples of low-level languages are assembly and machine code.
Programs written in low-level languages can be crafted to run very fast and with a very small memory footprint. Low-level languages are considered more difficult to use, however, because they require a deeper knowledge of the computer's inner workings.
Languages such as C and C++ are considered "lower-level" — they provide a minimal amount of abstraction at the smallest possible cost to performance and efficiency. These abstractions, such as classes, lambda functions and macros, allow programmers to use complex functionality without writing overly complex code. For this reason, lower-level languages are frequently used in projects where abstractions are necessary to keep code highly readable and maintainable, but where maximum performance is still paramount (for example in many operating systems and high-frame rate computer games).