powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Многоязыковое метапрограммирование
25 сообщений из 111, страница 1 из 5
Многоязыковое метапрограммирование
    #35817856
Печонкин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Собственно говоря вопрос.

Есть идея писать на некоем мета(макро)языке, а в результате, легким движением руки, получать генерированный код уже под конкретный ЯП.

Т.е. имеем на входе (пример)

Код: plaintext
1.
2.
3.
4.
5.
IF(AND(EQ(a,b), LT(c,d)),
  SET(
   LIST(e,  5 ), SQRT(f)
  )
)

А потом бац, запускаем нечто, и получаем на выходе или Delphi код

Код: plaintext
1.
2.
 if  a = b  and  c < d  then 
  e[ 5 ].AsFloat := sqrt(f)    

или Java код

Код: plaintext
1.
2.
 if  ((a == b) && (c < d)) 
  e.getItem( 5 ).setValue(Math.sqrt(f));

C++ код

Код: plaintext
1.
((a == b) && (c < d)) ?  e[ 5 ]->Value = sqr(f);

ну и так далее, вопрос только в том, как шаблоны описывать (нивелирующие вопросы
конечного языка).

А теперь вопрос. Как сделать такое - не вопрос, но не хочется изобретать велосипед.
Потому интересно, есть ли уже готовые решения (какие кодогенерирующие шаблоны для Lisp-а?
M4 макросы и т.д.).
...
Рейтинг: 0 / 0
Многоязыковое метапрограммирование
    #35817867
Фотография SQL_Lamer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Печонкин,

А на кой?
Все равно универсального не получится ничего.
Слишком объемная задача.
Ты под с++ попробуй напиши хотя - бы.
...
Рейтинг: 0 / 0
Многоязыковое метапрограммирование
    #35817910
Печонкин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SQL_LamerПечонкин,

А на кой?
Зачем нужна кроссплатформенность? Слегка идиотский вопрос.

SQL_LamerВсе равно универсального не получится ничего.
Слишком объемная задача.
Получится (если захотеть). И не слишком.

SQL_LamerТы под с++ попробуй напиши хотя - бы.
Уже написано, теперь вопрос как это автоматически переводить на другие языки.

Про "компиляцию" аля Adobe Alchemy не надо рассказывать.
...
Рейтинг: 0 / 0
Многоязыковое метапрограммирование
    #35817914
Фотография SQL_Lamer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ПечонкинЗачем нужна кроссплатформенность? Слегка идиотский вопрос.
При чем тут кроссплатформенность?

ПечонкинПолучится (если захотеть). И не слишком.
Ну как скажешь.

ПечонкинУже написано, теперь вопрос как это автоматически переводить на другие языки.

Так а что написано - то?
С++ кодогенератор, или что?
Закеж пример.
...
Рейтинг: 0 / 0
Многоязыковое метапрограммирование
    #35817918
Печонкин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SQL_LamerПечонкинЗачем нужна кроссплатформенность? Слегка идиотский вопрос.
При чем тут кроссплатформенность?

Почитай вот это http://en.wikipedia.org/wiki/Cross-platform
и вот это http://en.wikipedia.org/wiki/Computer_platform

поймешь при чем. На русской википедии можешь не читать, там ламеры понаписали бред.
...
Рейтинг: 0 / 0
Многоязыковое метапрограммирование
    #35817920
Фотография SQL_Lamer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Печонкин,

вот тебе первый попавший кусок кода на первом попавшем языке, и объясни, как ты эту свою "кроссплатформенность" будешь осуществлять(можно очень примерно) ;)

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
80.
81.
82.
83.
84.
85.
86.
87.
88.
89.
90.
91.
92.
93.
94.
95.
96.
97.
98.
99.
100.
101.
102.
103.
104.
105.
106.
107.
/// <summary>
    /// The wrapper class for User32.dll
    /// </summary>
    public static class User32DLL
    {
        /// <summary>
        /// The GetDesktopWindow function returns a handle to the desktop window. The desktop window covers the entire screen. The desktop window is the area on top of which other windows are painted. 
        /// </summary>
        /// <returns>The return value is a handle to the desktop window. </returns>
        [DllImport("User32.dll", CharSet = CharSet.Unicode, SetLastError = true)]
        public static extern IntPtr GetDesktopWindow();


        /// <summary>
        /// Retrieves a handle to the current window station for the calling process.
        /// </summary>
        /// <returns>If the function succeeds, the return value is a handle to the window station.
        /// If the function fails, the return value is NULL.</returns>
        [DllImport("User32.dll", CharSet = CharSet.Unicode, SetLastError = true)]
        public static extern IntPtr GetProcessWindowStation();


        /// <summary>
        /// Retrieves a handle to the desktop assigned to the specified thread.
        /// </summary>
        /// <param name="dwThread">[in] Handle to the thread for which to return the desktop handle.</param>
        /// <returns>If the function succeeds, the return value is a handle to the desktop associated with the specified thread. You do not need to call the CloseDesktop function to close the returned handle.
        /// If the function fails, the return value is NULL.</returns>
        [DllImport("User32.dll", CharSet = CharSet.Unicode, SetLastError = true)]
        public static extern IntPtr GetThreadDesktop(uint dwThread);


        /// <summary>
        /// Opens the specified window station.
        /// </summary>
        /// <param name="lpszWinSta">Pointer to a null-terminated string specifying the name of the window station to be opened. Window station names are case-insensitive.
        /// This window station must belong to the current session.
        /// </param>
        /// <param name="fInherit">[in] If this value is TRUE, processes created by this process will inherit the handle. Otherwise, the processes do not inherit this handle. 
        /// </param>
        /// <param name="dwDesiredAccess">[in] Access to the window station</param>
        /// <returns>If the function succeeds, the return value is the handle to the specified window station.
        /// If the function fails, the return value is NULL.</returns>
        [DllImport("User32.dll", CharSet = CharSet.Unicode, SetLastError = true)]
        public static extern IntPtr OpenWindowStation(string lpszWinSta
            , bool fInherit
            , WindowStationAccessRight dwDesiredAccess
            );


        /// <summary>
        /// Assigns the specified window station to the calling process. This enables the process to access objects in the window station such as desktops, the clipboard, and global atoms. All subsequent operations on the window station use the access rights granted to hWinSta.
        /// </summary>
        /// <param name="hWinSta">[in] Handle to the window station to be assigned to the calling process</param>
        /// <returns>If the function succeeds, the return value is nonzero.
        /// If the function fails, the return value is zero. </returns>
        [DllImport("User32.dll", CharSet = CharSet.Unicode, SetLastError = true)]
        public static extern IntPtr SetProcessWindowStation(IntPtr hWinSta);


        /// <summary>
        /// Closes an open window station handle.
        /// </summary>
        /// <param name="hWinSta">[in] Handle to the window station to be closed.</param>
        /// <returns>If the function succeeds, the return value is nonzero.
        /// If the function fails, the return value is zero. </returns>
        [DllImport("User32.dll", CharSet = CharSet.Unicode, SetLastError = true)]
        public static extern IntPtr CloseWindowStation(IntPtr hWinSta);


        /// <summary>
        /// Opens the specified desktop object.
        /// </summary>
        /// <param name="lpszDesktop">[in] Pointer to null-terminated string specifying the name of the desktop to be opened. Desktop names are case-insensitive.
        /// This desktop must belong to the current window station.</param>
        /// <param name="dwFlags">[in] This parameter can be zero or DF_ALLOWOTHERACCOUNTHOOK=0x0001</param>
        /// <param name="fInherit">[in] If this value is TRUE, processes created by this process will inherit the handle. Otherwise, the processes do not inherit this handle. </param>
        /// <param name="dwDesiredAccess">[in] Access to the desktop. For a list of access rights</param>
        /// <returns>If the function succeeds, the return value is a handle to the opened desktop. When you are finished using the handle, call the CloseDesktop function to close it.
        /// If the function fails, the return value is NULL.
        /// </returns>
        [DllImport("User32.dll", CharSet = CharSet.Unicode, SetLastError = true)]
        public static extern IntPtr OpenDesktop(string lpszDesktop
            , OpenDesktopFlag dwFlags
            , bool fInherit
            , DesktopAccessRight dwDesiredAccess
            );


        /// <summary>
        /// Closes an open handle to a desktop object.
        /// </summary>
        /// <param name="hDesktop">[in] Handle to the desktop to be closed.</param>
        /// <returns>If the function succeeds, the return value is nonzero.
        /// If the function fails, the return value is zero. </returns>
        [DllImport("User32.dll", CharSet = CharSet.Unicode, SetLastError = true)]
        public static extern IntPtr CloseDesktop(IntPtr hDesktop);

        /// <summary>
        /// Assigns the specified desktop to the calling thread. All subsequent operations on the desktop use the access rights granted to the desktop.
        /// </summary>
        /// <param name="hDesktop">[in] Handle to the desktop to be assigned to the calling thread.</param>
        /// <returns>If the function succeeds, the return value is nonzero.
        /// If the function fails, the return value is zero. </returns>
        [DllImport("User32.dll", CharSet = CharSet.Unicode, SetLastError = true)]
        public static extern bool SetThreadDesktop(IntPtr hDesktop);
    }
...
Рейтинг: 0 / 0
Многоязыковое метапрограммирование
    #35817921
Фотография SQL_Lamer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ПечонкинSQL_LamerПечонкинЗачем нужна кроссплатформенность? Слегка идиотский вопрос.
При чем тут кроссплатформенность?

Почитай вот это http://en.wikipedia.org/wiki/Cross-platform
и вот это http://en.wikipedia.org/wiki/Computer_platform

поймешь при чем. На русской википедии можешь не читать, там ламеры понаписали бред.

Вот по твоей ссылке и написано:
In computing, cross-platform (also known as multi-platform) is a term used to refer to computer software or computing methods and concepts that are implemented and inter-operate on multiple computer platforms.

Так я и спрашиваю, при чем тут кодогенерация?
...
Рейтинг: 0 / 0
Многоязыковое метапрограммирование
    #35817922
Печонкин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Элементарно.

Код: plaintext
1.
2.
3.
4.
5.
CLASS(User32DLL,
  METHOD(GetDesktopWindow, ARG(), RESULT(IntPtr), DLL("User32.dll")),
  METHOD(GetThreadDesktop, ARG((uint, dwThread)), RESULT(IntPtr), DLL("User32.dll")),
  ...
)

Дальше банально и тупо.
...
Рейтинг: 0 / 0
Многоязыковое метапрограммирование
    #35817923
Фотография SQL_Lamer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ПечонкинЭлементарно.

Код: plaintext
1.
2.
3.
4.
5.
CLASS(User32DLL,
  METHOD(GetDesktopWindow, ARG(), RESULT(IntPtr), DLL("User32.dll")),
  METHOD(GetThreadDesktop, ARG((uint, dwThread)), RESULT(IntPtr), DLL("User32.dll")),
  ...
)

Дальше банально и тупо.

Ну вот ведь в твоей ссылке : ...that are implemented and inter-operate on multiple computer platforms.
Так я и в третий раз спрашиваю, как это будет выглядеть - то под другой осью - то?
Так, как ты написал?
...
Рейтинг: 0 / 0
Многоязыковое метапрограммирование
    #35817924
Печонкин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SQL_LamerТак я и спрашиваю, при чем тут кодогенерация?

Не тупи. Код генерируется из универсального, обобщенного языка под конкретный язык конкретной платформы.

Я в первом посте написал что должно быть (там как раз три платформы, хотя их может быть хоть
два десятка, зависит только от шаблонов, которые будут превращать всякие
EQ, SET, CLASS, METHOD в конкретные конструкции конкретного языка).


Что тут не ясного? Еще раз. Код на универсальном языке, из которого генерируется код для конкретного языка. Конкретный язык - параметр кодогенератора, а сам по себе описывается
отдельно, как набор шаблонов.

Вот сейчас стоит вопрос - есть ли такие шаблоны в природе. Гугл ответа не дал.
...
Рейтинг: 0 / 0
Многоязыковое метапрограммирование
    #35817928
Фотография SQL_Lamer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Печонкин,

Зачем столько агрессии: "не тупи", "идиотский вопрос".
Я ведь по доброму интересуюсь.

"конкретный язык конкретной платформы."
Вот опять наверно туплю :(
С++ - это конкретный язык какой конкретно платформы по твоему?
...
Рейтинг: 0 / 0
Многоязыковое метапрограммирование
    #35817930
Фотография SQL_Lamer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Может я что - то не то под платформой понимаю?
Ты что имеешь в виду то?
...
Рейтинг: 0 / 0
Многоязыковое метапрограммирование
    #35817931
Фотография SQL_Lamer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А под платформой ты видимо понимаешь компилятор\интерпретатор определенного языка o_O
Так что - ли?
...
Рейтинг: 0 / 0
Многоязыковое метапрограммирование
    #35817932
Печенкин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SQL_LamerС++ - это конкретный язык какой конкретно платформы по твоему?
С++ как язык? Вполне возможно. Более того,
GCC от ICC и от MSCC, а уж от BCC или выбкидыш Managed C++ кагбе даже не слегка может отличаться, прикинь. А
платформа - это не обязательно операционка или железка, платформа - это и программное
окружение (банально - .NET это платформа, как и UNIX-ы всякие, со своими причудами,
может иметь кучу несовместимых реализаций C++, что мы и видим на практике).

Странно, что ламеры этого не знают? Наверное нет.
...
Рейтинг: 0 / 0
Многоязыковое метапрограммирование
    #35817933
Фотография SQL_Lamer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ПеченкинSQL_LamerС++ - это конкретный язык какой конкретно платформы по твоему?
С++ как язык? Вполне возможно. Более того,
GCC от ICC и от MSCC, а уж от BCC или выбкидыш Managed C++ кагбе даже не слегка может отличаться, прикинь. А
платформа - это не обязательно операционка или железка, платформа - это и программное
окружение (банально - .NET это платформа, как и UNIX-ы всякие, со своими причудами,
может иметь кучу несовместимых реализаций C++, что мы и видим на практике).

Странно, что ламеры этого не знают? Наверное нет.

Ну вот. Опять агрессия. Добрее надо быть.
Ламеры думают, что нет - это фреймворк, а не платформа.
Таково мнение ламеров на сегодняшний день ;)
...
Рейтинг: 0 / 0
Многоязыковое метапрограммирование
    #35817935
egorych
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SQL_LamerПечонкин,
Зачем столько агрессии: "не тупи", "идиотский вопрос".
Я ведь по доброму интересуюсь. паренёк просто не понимает, что такое плюсы
...
Рейтинг: 0 / 0
Многоязыковое метапрограммирование
    #35817936
Фотография SQL_Lamer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
egorych,
Интерестно, ты мне или ему?
...
Рейтинг: 0 / 0
Многоязыковое метапрограммирование
    #35817937
Печенкин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SQL_LamerНу вот. Опять агрессия. Добрее надо быть.
Ламеры думают, что нет - это фреймворк, а не платформа.
Таково мнение ламеров на сегодняшний день ;)
Я ссылки выше дал. Сходи еще раз прочитай, что такое платформа.

Software platform examples
Operating system platform examples

И так далее. Заодно примешь решение, что такое JVM - фреймворк или нет.

Можешь и поймешь чего, в буквах, да вон "коллеге" (по ламерству?) расскажешь про плюсы.
...
Рейтинг: 0 / 0
Многоязыковое метапрограммирование
    #35817938
Фотография SQL_Lamer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ПеченкинSQL_LamerНу вот. Опять агрессия. Добрее надо быть.
Ламеры думают, что нет - это фреймворк, а не платформа.
Таково мнение ламеров на сегодняшний день ;)
Я ссылки выше дал. Сходи еще раз прочитай, что такое платформа.

Software platform examples
Operating system platform examples

И так далее. Заодно примешь решение, что такое JVM - фреймворк или нет.

Можешь и поймешь чего, в буквах, да вон "коллеге" (по ламерству?) расскажешь про плюсы.

Опять оскорбления.
Ладно.
Будет релиз - дай знать :)
...
Рейтинг: 0 / 0
Многоязыковое метапрограммирование
    #35818030
belugin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это все уже есть. Например, у PyPy, yhc есь бекенды для генерации C и JavaScript
...
Рейтинг: 0 / 0
Многоязыковое метапрограммирование
    #35818085
Фотография Denis.
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Печенкин - типичный хам.
...
Рейтинг: 0 / 0
Многоязыковое метапрограммирование
    #35818192
Печенкин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Denis.Печенкин - типичный хам.

Лучше быть типичным хамом, чем типичным тормозом.
...
Рейтинг: 0 / 0
Многоязыковое метапрограммирование
    #35818197
Фотография SQL_Lamer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Печенкин,
У меня чисто ламерский вопрос возник к гениальному автору.
Положим, я в с++ ни бум - бум.
Зато я получил в распоряжение этот твой чудный метаязык.
Могу я на плюсах забацать, ну скажем, банальный блокнот?

И второй, еще более ламерский вопрос:
Положим, я кул хакер с++, для чего мне писать на метасуперпуперязыке, чтобы в результате получить те же исходники на плюсах?

зы. Поменьше экспрессии, пжалста ;)
...
Рейтинг: 0 / 0
Многоязыковое метапрограммирование
    #35818205
Печонкин
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
beluginЭто все уже есть. Например, у PyPy, yhc есь бекенды для генерации C и JavaScript

Уже намного ближе, но не совсем то. Питон и хаскель как таковые не интересуют, больше
интересен макро язык в чистом виде, вроде m4 или какой Lisp, позволяющие определять
собственные языковые макро-конструкции .

Впрочем, спасибо за наводку, кое-что там действительно заинтересовало.
...
Рейтинг: 0 / 0
Многоязыковое метапрограммирование
    #35818206
Фотография SQL_Lamer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ПечонкинbeluginЭто все уже есть. Например, у PyPy, yhc есь бекенды для генерации C и JavaScript

Уже намного ближе, но не совсем то. Питон и хаскель как таковые не интересуют, больше
интересен макро язык в чистом виде, вроде m4 или какой Lisp, позволяющие определять
собственные языковые макро-конструкции .

Впрочем, спасибо за наводку, кое-что там действительно заинтересовало.

Лисп не макроязык.
Посмотри википедию - ты ее так любишь ;)
...
Рейтинг: 0 / 0
25 сообщений из 111, страница 1 из 5
Форумы / Программирование [игнор отключен] [закрыт для гостей] / Многоязыковое метапрограммирование
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]