doc/developer.texi: document the use of other languages than C
This commit is contained in:
@@ -56,9 +56,9 @@ and should try to fix issues their commit causes.
|
|||||||
@anchor{Coding Rules}
|
@anchor{Coding Rules}
|
||||||
@chapter Coding Rules
|
@chapter Coding Rules
|
||||||
|
|
||||||
@section C language features
|
@section Language
|
||||||
|
|
||||||
FFmpeg is programmed in the ISO C99 language, extended with:
|
FFmpeg is mainly programmed in the ISO C99 language, extended with:
|
||||||
@itemize @bullet
|
@itemize @bullet
|
||||||
@item
|
@item
|
||||||
Atomic operations from C11 @file{stdatomic.h}. They are emulated on
|
Atomic operations from C11 @file{stdatomic.h}. They are emulated on
|
||||||
@@ -83,6 +83,40 @@ complex numbers;
|
|||||||
mixed statements and declarations.
|
mixed statements and declarations.
|
||||||
@end itemize
|
@end itemize
|
||||||
|
|
||||||
|
@subsection SIMD/DSP
|
||||||
|
@anchor{SIMD/DSP}
|
||||||
|
|
||||||
|
As modern compilers are unable to generate efficient SIMD or other
|
||||||
|
performance-critical DSP code from plain C, handwritten assembly is used.
|
||||||
|
Usually such code is isolated in a separate function. Then the standard approach
|
||||||
|
is writing multiple versions of this function – a plain C one that works
|
||||||
|
everywhere and may also be useful for debugging, and potentially multiple
|
||||||
|
architecture-specific optimized implementations. Initialization code then
|
||||||
|
chooses the best available version at runtime and loads it into a function
|
||||||
|
pointer; the function in question is then always called through this pointer.
|
||||||
|
|
||||||
|
The specific syntax used for writing assembly is:
|
||||||
|
@itemize @bullet
|
||||||
|
@item
|
||||||
|
NASM on x86;
|
||||||
|
|
||||||
|
@item
|
||||||
|
GAS on ARM.
|
||||||
|
@end itemize
|
||||||
|
|
||||||
|
@subsection Other languages
|
||||||
|
|
||||||
|
Other languages than C may be used in special cases:
|
||||||
|
@itemize @bullet
|
||||||
|
@item
|
||||||
|
Compiler intrinsics or inline assembly when the code in question cannot be
|
||||||
|
written in the standard way described in the @ref{SIMD/DSP} section. This
|
||||||
|
typically applies to code that needs to be inlined.
|
||||||
|
|
||||||
|
@item
|
||||||
|
Objective-C where required for interacting with macOS-specific interfaces.
|
||||||
|
@end itemize
|
||||||
|
|
||||||
@section Code formatting conventions
|
@section Code formatting conventions
|
||||||
|
|
||||||
There are the following guidelines regarding the indentation in files:
|
There are the following guidelines regarding the indentation in files:
|
||||||
|
Reference in New Issue
Block a user