Високий рівень проти низького - це не чорно-біла річ, а суцільна шкала. Терміни використовуються для опису наближеності мови програмування до апаратного забезпечення; чим вище рівень, тим сильніше відбирає обладнання.
Очевидно, що найнижчий рівень - це двійковий машинний код - це точне подання завантаження ОС та подання до центрального процесора. Збірка - це перший рівень абстракції, побудований на ній: замість двійкового коду пишеться мнемоїка, читаються людиною символічні коди, що представляють собою бінарні машинні інструкції. Це те, що люди використовували для програмування систем до UNIX.
C - наступний крок в ланцюзі абстрагування, об'єднання загальних зразків у конструкції управління потоком та абстрагування конкретних машин інструкцій у платформо-агностичний синтаксис, і ця остання абстракція була одним з головних факторів, які зробили UNIX революційним та дуже успішним, оскільки це означало, що той самий код може бути скомпільований для будь-якої платформи без великих змін.
C ++ додає ще один шар абстракцій: додає класи (абстрагування vtables та контексту, що переходять у синтаксис OOP), new
іdelete
(поєднання розподілу пам'яті та ініціалізація змінних в єдину конструкцію), перевірка типу компіляції в часі, шаблони (безпечний для компіляції час-час метапрограмування) та купа зручних синтаксисів часу компіляції, таких як простори імен, перевантаження функцій та операторів тощо.
Python робить ще один великий крок від обладнання. C ++ як і раніше надає програмісту повний контроль над розподілом пам’яті та дозволяє безпосередньо маніпулювати оперативною пам’яттю; Python піклується про управління пам'яттю для вас. Крім того, замість того, щоб компілювати ваш код до загальнонаціональних інструкцій машини, він запускає його проти віртуальної машини; це несе покарання за продуктивність (що іноді може бути здоровим, але зазвичай це не про що турбує), але воно також дозволяє робити акуратні речі, які будуть складними в C ++ і важко важко в C, наприклад, маніпулювання функціями та класами під час бігу час, отримання назв довільних об'єктів під час виконання, інстанціювання класів за іменем під час виконання, виправлення мавп тощо та ін.
Отже, коли люди ділять мови на "високий" та "низький рівень", вони десь малюють довільну лінію, і ця лінія не завжди однакова. У 1970 р. Лінія проходила між складанням і С (вирішальним фактором є відмова від машинних інструкцій щодо платформи); у 1987 році він, можливо, був десь між C і C ++; сьогодні це може бути між C ++ і Java (визначальним фактором є автоматичне управління пам'яттю).
Короткий короткий огляд: високий рівень-ності - це ковзаюча шкала, а для трьох мов ви згадуєте це C <C ++ <Python.