Полноценные языки программирования - сколько их?
От: Shmj Ниоткуда  
Дата: 19.11.21 12:27
Оценка: -7 :))) :))
В продолжение темы
Автор: 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 штуки?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.