Aby zrozumieć „inline” trzeba zrozumieć historię i jak wyglądało życie 20 (i 30) lat temu.
Pisaliśmy kod na komputerach, które miały mało pamięci, więc kompilator nie był w stanie przetworzyć całego kodu tworzącego program za jednym razem. Kompilator działał również bardzo wolno, więc nie trzeba było ponownie kompilować kodu, który się nie zmienił - przejęcie 24 godzin (na komputerze kosztującym więcej niż samochód wyższej klasy) w celu rekompilacji całego kodu było normalne dla kilku projektów I pracował.
Dlatego każdy plik kodu został osobno skompilowany w pliki obiektowe. Każdy plik obiektowy zaczynał się listą wszystkich zawartych w nim funkcji wraz z „adresem” funkcji. Plik obiektowy zawierał także listę wszystkich funkcji, które wywołał w innych plikach obiektowych wraz z lokalizacją wywołania.
Łącznik najpierw przeczytać wszystkie pliki obiektów i zbudować listę wszystkich funkcji one eksportowane wraz z plikiem byli i nie ma adresu. Następnie ponownie odczytałby wszystkie pliki obiektowe, wyprowadzając je do pliku programu, jednocześnie aktualizując wszystkie wywołania funkcji „zewnętrznej” o adres funkcji.
Linker nie zmienił ani nie zoptymalizował kodu maszynowego wygenerowanego przez kompilator w żaden inny sposób niż w celu poprawienia odniesień do wywołań funkcji zewnętrznych. Linker był częścią systemu operacyjnego i wyprzedza większość kompilatorów. Kiedy ludzie pisali nowy kompilator, potrzebowali go do pracy z bieżącymi linkerami i do możliwości łączenia się z bieżącymi plikami obiektowymi, w przeciwnym razie wywołanie systemowe nie byłoby możliwe.
Kompilator widział tylko kod w kompilowanym pliku „.c” lub „.cpp” wraz ze wszystkimi dołączonymi plikami nagłówkowymi. Nie mógł więc dokonać żadnej optymalizacji opartej na kodzie w innych plikach „.c” lub „.cpp”.
Słowo kluczowe „inline” pozwoliło na zdefiniowanie treści funkcji (metody) w pliku nagłówkowym, umożliwiając kompilatorowi korzystanie z kodu funkcji podczas kompilacji kodu, który ją wywołuje. Na przykład powiedzieć, że miał klasę zbiórki określony w pylników plik .cpp, ta klasa będzie miała „isEmpty” metodę, która zawierała jedną linię kodu, nie byłoby wielkim przyspieszenie wynikowego programu, jeśli zamiast wywołania funkcji , wywołanie funkcji zastąpiono tej jednej linii.
Słowo kluczowe „inline” było wówczas postrzegane jako „tani i łatwy” sposób na enkapsulację danych przy jednoczesnym uniknięciu kosztów wywołań funkcji, bez których wielu programistów miałoby dostęp do prywatnych pól obiektu. (Makra, w których znacznie gorszy sposób „wstawiania” kodu jest powszechny w tym czasie).
Obecnie „linkery” zajmują się optymalizacją kodu i zwykle są pisane przez jakiś zespół jako kompilator. Kompilator często po prostu sprawdza kod jest poprawny i „okłady”, pozostawiając większość zadanie tworzenia kodu maszynowego do łącznika.