В продолжение
темыАвтор: Shmj
Дата: 19.11.21
.
На примере C# и .Net, но подходит для 99% ЯП.
На заре любил изучать системные библиотеки .Net-платформы через Reflector (исходники тогда не публиковали). Прикол в том, что сама .Net платформа тоже написана на самой же себе — т.е. все под .Net.
Но это полуправда. На самом деле в корне каждой функциональности — некая внешняя функция, которая вызывается через модификатор
extern. И в корне любой значимой функциональности — будь то работа с вводом-выводом, сетью, экраном — всегда эти функции extern — функции без тела, реализация которых находится во внешней библиотеке (которую уже не просмотришь Reflector-ом) и в ракурсе C#-языка (если ничего другого не знать) — являющаяся чистой магией.
И тогда философская мысль посетила меня — а что бы мог делать C#, если бы убрать этот один единственный модификатор extern? А ничего, по сути. Т.е. он бы не потерял вычислительных способностей, остался бы Тьюринг-полным. Все фичи бы работали — и лямбды, и даже деревья выражений. Но нельзя было бы сделать абсолютно ничего полезного — ни на консоль вывести, ни в файл записать, ни по сети отправить.
Т.е. 1 модификатор, который не влияет на вычислительную полноту — полностью обнуляет весь язык!!!
В принципе то же самое и для 99% других языков. Даже если нет магического модификатора — то есть магические функции, которые нельзя реализовать средствами самого языка
Без этой магии все теряет смысл.
Но! Есть взрослые языки, в которой такой магии нет. Вроде бы таких 3 штуки — это Assembler, C и C++. Можно абсолютно без использования неких магических библиотек сделать абсолютно все с системой!
Так, аналогичным образом пришлось написать небольшую прогу для контроллера на C. И там тоже была эта магия — системные библиотеки. Но! Они были с открытым кодом и написаны на само C. И тоже посмотрел что там в основе — на чем все зиждется на примере портов ввода-вывода и таймера. Оказалось что это всего лишь фиксированный адрес в памяти — для портов нужно было записать/считать значение по этому адресу а для таймера — записать указатель на функцию по константному адресу.
Есть ли еще полноценные языки, или только эти 3 штуки?