В unix все действия в gui интерфейсе фактически вызывают какую-то команду консоли?
Где-то наткнулся на иностранном сайте про это. Читал через транслейтер, он плохо перевел, но впринципе понял о чем там написано. Так вот это правда? Просто я пример знаю подобный. В программе Maya - это программа для 3D графики, есть встроенный язык сценариев mel , ядро этой программы посути только эти команды и принимает. То есть когда в интерфейсе что-то делаешь, используя интерактивные инструменты например создаешь модель, передвигаешь или редактируешь ее, то это оказывается просто команды с параметрами. Можно открыть редактор скриптов и там будет список что именно делалось, но в текстовом виде. Можно даже скопировать текст и запустить скрипт заново и он повторит последовательность. Даже сам графический интерфейс написан на mel и его тоже можно менять. Вот, а в linux ? Можно ли так же? Или все таки gui программа и консольный вариант это разные веши и можно было бы только сказать, что они используют один api?
Вы немного перепутали понятия. mel в майке это самый настоящий интерпретируемый ЯП, аналогично lua\js\python и еще тьмы языков.
Касательно линуксов то и тут все просто. Сама программа может иметь разные "слои", если утрировать:
1) сама программа может быть на любом языке, возьмем к примеру ifconfig.
2) вокруг программы могут быть скриптовые обвертки на других языках или таких же. К примеру скрипт /etc/sysconfig/network-scripts/ifcfg-Auto_eth1 который грубо говоря запускает ifconfig с заданными параметрами.
3) оболочка также может быть написана на чем угодно и ,к примеру, может тупо генерировать /etc/sysconfig/network-scripts/ifcfg-Auto_eth1 или напрямую запускать ifconfig с нужными параметрами. Но никто не запрещает реализовать аналогичный функционал как в ifconfig и быть полностью самостоятельной.
Выше сказанное просто пример причем несовсем корректный и написан просто для примера как это может быть.
В windows программах ситуация полностью аналогичная только там с\вместо прослойки со скриптами может использоваться реестр\конфиги\wmi и т.д.
Поэтому дать однозначный ответ да\нет дать нельзя, все зависит от функционала программы и то как его реализовали.
Спасибо за пример. А про майку я не перепутал. Дело в том, что в майе интерпритатор mel и вообще сам язык - это непосредственная часть архитектуры. К примеру в окне сфера. Берем инструмент перемещения, кликаем на сферу, она выделилась, перемещаем за манипулятор, она переехала в другое место. Что происходит под капотом. Даже не совсем под капотом, потому, что некоторые действия видны пользователю: та часть программы, которая gui обслуживает в ответ на действия пользователя дергает ядро только не за майский api, а через mel. В окне редактора скриптов будет написано что-то типо:
Select sphere1;
Move -relative 0 0 3.535642
То есть ядро майи всегда (наверное всегда) принимает действия пользователя через команды, по ним и их параметрам определяет, что нужно делать, а дальше внутренние механизмы уже все делают. То есть многое вынесено наружу и в это можно вмешиваться. И когда программой пользуешься там в редакторе скриптов всегда целый список действий есть, хоть и через инструменты пользуешься, а получается как будто написано на mel было.
Sasha_88: Они просто пользуются своим же api вот и все) Таких примеров миллионы. Как аналогичный пример двиг quake который написан на С и в нем написан самопальный язык quakec на котором и сделана сама игра(точнее логика). Т.е. как раз тоже самое что и в майе происходит, весь основной функционал низкоуровневый а остальная часть реализована поверх уже в mel.
Просто я глядя на майю ожидал видеть в консоли линукса
расшифровку действий о событиях в графическом интерфейсе, а ее нет. Она отображает информацию только когда с ней непосредственно взаимодействуешь. С движками я согласен. Хотя наверное в консоли все не напишешь, особенно если открыть два проводника с разными папками, то что написать в консоли? В каком мы каталоге? Ну в любом случае можно сказать, что линукс- это конструктор?
Sasha_88: консолей(терминалов) может быть любое количество. Для событий обычно используется "шина"(d-bus). Программы как правило не запускаются в консоли и доступ к ней получить можно не всегда. Большая часть графических приложений написана на с\с++\qtc++ и не пользуется никакими консольными утилитами. Реже python. В общем вы не увидите то что хотите т.к. в подавляющем большинстве это вполне самостоятельные программы да и даже там где используются консольные утилиты полноценно подсмотреть врядли выйдет.
Linux конструктор только в том смысле что можно взять любую часть\аспект системы и переделать почти как угодно, естественно при наличии необходимых знания и ЯП.
В линуксе, гуишные программы могут в принципе использовать exec консольных команд вместо "API", поскольку удобных консольных команд, которые работают достаточно стабильно из версии в версию, по сравнению с Win много.
Но обычно все-таки используют просто вызов системных функций напрямую - так и быстрее и надежнее.