Вот есть некий полноценный Тьюринг-полный ЯП. На нем можно реализовать любой из возможных алгоритмов.
Однако же в этом языке нет возможности доступа к API операционной системы ни в каком виде. Т.е. вообще никак.
В память записать можно, действия с данными выполнить можно. А вот как-то сообщить пользователю нет — т.к. нет доступа ни к клаве, ни к экрану, ни к динамику, ни к файлам — вообще ни к чему.
Вроде язык тьюринг- полный — но бесполезный.
Возьмем JavaScript, для примера, который исполняется в песочнице браузера. Мы не можем прочесть произвольный файл на диске — но у нас есть возможность манипулировать HTML-разметкой окна браузера, доступ к хранилищу браузера, возможность делать сетевые запросы.
С т.з. языка — это просто некие внешние функции. Просто функции. И они вообще никак ни на что не влияют с точки зрения вычислимости.
Однако же без этих магических функций польза языка становится равной нулю.
Так вот. В языке обязательно должна быть поддержка этих внешних функций, иначе его польза будет равной нулю — хотя там все будет с алгоритмической т.з. — сделать на нем ничего нельзя будет.
В тех или иных платформах/языках данные функции могут быть реализованы лишь частично.
Как это называется? Как называются возможности языка с т.з. реализации доступа к системе?
Здравствуйте, Muxa, Вы писали:
M>Система ввода-вывода. M>А можно пример языка без таких функций? А то кроме шейдерных языков ничего в голову не приходит.
Таких языков не делают, т.к. нет смысла.
В теории это не обязательно функции — может быть просто область памяти, которая связана, к примеру, с дисплеем. Все что туда запишите — отобразится на экране попиксельно.
Но если брать не теорию а практику. Взять тот же C# — в самом низу там функции с модификатором extern. Без реализации — просто название функциии во внешней dll, которая уже умеет работать с железом. Сам C# напрямую ничего не умеет без этих магических функций с extern — даже на консоль вывести не умеет.
Убери из C# это слово extern — и все — он станет абсолютно бесполезным, хотя нисколько не потеряет Тьюринг-полноту.
Т.е., получается, базовое слово в C# — это именно extern. Оно позволяет вызывать функции, созданные на взрослых ЯП, которые уже умеют работать с железом напрямую.
Здравствуйте, Qbit86, Вы писали:
Q>Есть шуточное название для подобного — «Pac-Man complete». Язык будет Pac-Man complete, если на нём можно реализовать игру Пакман.
Вот в том то и дело — все понимают, а выразить в точных терминах не могут. Только пошутить об это можно.
Здравствуйте, Shmj, Вы писали:
S>Такой вопрос возник.
S>Вот есть некий полноценный Тьюринг-полный ЯП. На нем можно реализовать любой из возможных алгоритмов.
Тюринг-полнота — гораздо слабже, чем возможность реализовать любой из возможных алгоритмов. Там всего лишь о вычислимых, более того, на Тьюринг-машине.
S>Как это называется? Как называются возможности языка с т.з. реализации доступа к системе?
Ввод-вывод?
Здравствуйте, Muxa, Вы писали:
M>Система ввода-вывода. M>А можно пример языка без таких функций? А то кроме шейдерных языков ничего в голову не приходит.
к файлам там вроде тоже есть какой-то ограниченный доступ.
в общем пока что получается список утилитарных узко-специализированных языков для решения задач в конкретных областях.
какой-нибудь vhdl или язык доказательства теорем тоже вполне могут быть тем что ищет ТС.
Здравствуйте, Muxa, Вы писали:
S>>ОК, я думал про фс. Ну тогда xslt. Он вроде ТП. M>к файлам там вроде тоже есть какой-то ограниченный доступ. M>в общем пока что получается список утилитарных узко-специализированных языков для решения задач в конкретных областях. M>какой-нибудь vhdl или язык доказательства теорем тоже вполне могут быть тем что ищет ТС.
Здравствуйте, Shmj, Вы писали:
S>>Стандартные библиотеки это называется. S>Если язык взрослый и можно работать с железом не через внешние библиотеки а напрямую — то никакие библиотеки не нужны.
Здравствуйте, Sharov, Вы писали:
S>>Если язык взрослый и можно работать с железом не через внешние библиотеки а напрямую — то никакие библиотеки не нужны. S>Пример языка можно? Зачем io встраивать в язык?
Ассемблер и ассемблерные вставки на C/C++. То есть никаких системных библиотек — прямой доступ к прерываниям, системной памяти и т.д.
На этих взрослых языках пишут базу — работу с системой. А остальные детские языки уже в том или ином виде вызывают эти системные библиотеки, которые нельзя написать на них самих никаким образом, не смотря на то, что они Тьюринг-полные и вообще фишек в них гораздо больше, чем во взрослых языках.
И самая заноза — нет ни одного термина, которым бы можно было обосновать полноценность языка в данном ракурсе.
Здравствуйте, Shmj, Вы писали:
S>>>Если язык взрослый и можно работать с железом не через внешние библиотеки а напрямую — то никакие библиотеки не нужны. S>>Пример языка можно? Зачем io встраивать в язык? S>Ассемблер и ассемблерные вставки на C/C++. То есть никаких системных библиотек — прямой доступ к прерываниям, системной памяти и т.д.
Ок, справедливо, про слона забыл.
S>На этих взрослых языках пишут базу — работу с системой. А остальные детские языки уже в том или ином виде вызывают эти системные библиотеки, которые нельзя написать на них самих никаким образом.
Что значит взрослые языка? Си, кмк, более чем взрослый, однако и там это не встроено в сам язык, а через
библиотеки. А ассемблер -- и как там с типизацией, как с производительностью у программистов?
Зачем еще что-то нужно кроме ассемблера? Т.е. по факту предлагается скрестить ОС(прерывания, api) и компилятор. Зачем?
Наверное, что-то такое пытались делать. Едва ли этот язык будет удобен для чего-нибудь кроме написания ядер ОС.
Здравствуйте, Sharov, Вы писали:
S>Что значит взрослые языка?
Это те, библиотеки для которых можно написать на них самих.
Если язык нуждается в библиотеках, которые не возможно написать на нем самом — значит это не полноценный ЯП.
S>Си, кмк, более чем взрослый, однако и там это не встроено в сам язык, а через S>библиотеки.
Но эти библиотеки можно написать и самому на там же C.
S>Зачем еще что-то нужно кроме ассемблера? Т.е. по факту предлагается скрестить ОС(прерывания, api) и компилятор. Зачем? S>Наверное, что-то такое пытались делать. Едва ли этот язык будет удобен для чего-нибудь кроме написания ядер ОС.