Существует ли система, в которой выполнение программы и вызов функции унифицированы? - PullRequest
3 голосов
/ 25 апреля 2009

Я хотел бы иметь возможность выполнить одно или несколько следующих действий из оболочки: - вызывать любую функцию из программы не только основной - передать параметры, которые являются не только строками (не только argv) - иметь программу возврата не только int (код возврата из main) - присваивать возвращаемые значения переменным уровня оболочки, чтобы иметь возможность передавать их другим программам

Вы поняли идею. Например, уровень python допускает это для программ на python. А как насчет C ++? Или замена ELF на Linux, которая позволила бы это?

Ответы [ 5 ]

2 голосов
/ 25 апреля 2009

В Windows есть RUNDLL32 для вызова функции DLL, например,

RUNDLL32.EXE USER32.DLL,SwapMouseButton
2 голосов
/ 25 апреля 2009

Не так уж сложно создать приложение, которое позволяет вам вызывать определенные функции по имени из динамических библиотек, таких как библиотеки DLL под Windows, при условии, что эти функции принимают только ограниченный выбор типов параметров, таких как int, float и фиксированные строки .

Однако для большинства программ на C ++ этого недостаточно. Например, предположим, что ваша функция C ++ принимает в качестве параметра s std :: map динамической строки в сокет - как вы собираетесь создать карту, не говоря уже о ее содержимом в вашей оболочке?

Но если вы можете отказаться от C ++, есть одна операционная система языка, которая делает именно то, что вы предлагаете - Smalltalk. Если вы заинтересованы в этой парадигме, взгляните на Squeak , который является свободным программным обеспечением.

2 голосов
/ 25 апреля 2009

Если вы ищете операционную систему, которая делает это - это делает интерпретатор оболочки vxWorks / C.

Но это vxWorks - операционная система реального времени (без графического интерфейса).

1 голос
/ 25 апреля 2009

Вы смотрели на c-repl ?

0 голосов
/ 25 апреля 2009

Система должна быть полностью интерпретирована, верно? И как вы узнали бы сигнатуры функций того, что вызывали?

...