Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 31.07.2016, 15:00   #1
ИсмаилПрокопенко
Пользователь
 
Регистрация: 31.07.2016
Сообщений: 25
По умолчанию Посоветуйте язык, в котором программы могут анализировать и менять свой собственный код

Моя тема близка к ЭТОЙ
Но там я не смог написать - раздел закрыт до сентября.
Поэтому спрошу тут.

Посоветуйте язык программирования сверхвысокого уровня (ЯПСВУ), программа на котором могла бы в COMPILE TIME обрабатывать и изменять свой же собственный код

Приведу простейший и надуманный пример для иллюстрации того, в чем же идея.

К примеру, чтобы язык,к примеру, поддерживал конструкции типа "если вызов метода Tarl::MySleep(int, double) присутствует в коде программы более 3-х раз - то определить тип MyType как long double".

Повторяю. Пример чисто вымышленный и искусственный, и служит чиста для иллюстрации идеи.

Вообщем нужен ЯПСВУ, который "искоропки" имел бы конструкции, которые позволяли бы писать программы, анализирующие и меняющие свой же собственный код во время компиляции (!!! Не в run-time). Т.е. чтобы программа являлась одновременно как бы пользовательским расширением компилятора и языка.

Соответственно, получается, что когда пишешь программу на таком языке, и меняешь ТЕКСТ какой-то её части, то ТЕКСТ других частей программы может при компиляции автоматом измениться {что есть такая штука как "препроцессор" я в курсе - но нужны более серьёзные и радикальные ВСТРОЕННЫЕ в язык средства. Препроцессорных средств (например #IFDEF и макросов с параметрами в языке C++) мне недостаточно. Нужно чтобы язык включал в себя более продвинутые средства парсинга и модификации своего же собственного исходника}.

Т.е. в ЯПСВУ должны быть операторы, операндами которых служат текстовые объекты в самом исходнике.

Почему я назвал такой язык языком СВЕРХ высокого уровня?

Ну потому что на нем пишут не исходник, а "исходник исходника" если можно так выразиться.

Т.е. чтобы исходник на языке представлял собой как бы смесь компилятора+прикладнухи, написанном на одном языке. Причем чтобы в исходнике "был растворен" не весь компилятор, а только его расширение для данной прикладной задачи.


Если совсем по простому, то нужен язык, у которого очень мощный препроцессор, не ограничивающийся имеющимися почти во всех языках банальными "IFDEF" и макросами с параметрами.
Чтобы язык был изначально заточен под описания парсинга исходника в самом же исходнике
ИсмаилПрокопенко вне форума Ответить с цитированием
Старый 31.07.2016, 15:25   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,707
По умолчанию

m4 Но, по-моему, вы не с того края подходитек задаче...
p51x вне форума Ответить с цитированием
Старый 31.07.2016, 16:01   #3
ИсмаилПрокопенко
Пользователь
 
Регистрация: 31.07.2016
Сообщений: 25
По умолчанию

Цитата:
Сообщение от p51x Посмотреть сообщение
m4
m4 это просто макропроцессор.
Он ничего не знает про "классы", "методы" и т.п.
ИсмаилПрокопенко вне форума Ответить с цитированием
Старый 31.07.2016, 16:03   #4
ИсмаилПрокопенко
Пользователь
 
Регистрация: 31.07.2016
Сообщений: 25
По умолчанию

Цитата:
Сообщение от p51x Посмотреть сообщение
вы не с того края подходитек задаче...
А с какого надо?
ИсмаилПрокопенко вне форума Ответить с цитированием
Старый 31.07.2016, 16:21   #5
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,707
По умолчанию

Начните с постановки условий конкретной задачи. Может вам шаблонов хватит, а может и до своего языка доползете... а может и на фиг все это не сдалось в задаче.
p51x вне форума Ответить с цитированием
Старый 31.07.2016, 20:39   #6
ИсмаилПрокопенко
Пользователь
 
Регистрация: 31.07.2016
Сообщений: 25
По умолчанию

Я уже понял, что С++ не подходит.
Что реализовать на нем программу, которая кроме основной задачи могла бы ещё анализировать свой код и при необходимости менять его, без "костылей" не получится.

Нужны специализированные языки.

Кроме предположений "может ЛИСП?" и препроцессора m4 в рунете мне ничего не посоветовали.
Видно это тема очень узкая и экзотическая и ей мало кто интересовался.

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

Ты фактически учишь компилятор находить ошибки, которые никакой компилятор обнаружить не может.

Самый примитивный пример.
Написал в коде метода TLAstTrim.send(), что вызов метода TLAstTrim.send() может встречаться в любом блоке, но только после вызова методов Tysh.reply(int) или Uydf.rev(double), и компилятор возьмет это на контроль.
Средствами С++ такой контроль, как я понимаю, сделать невозможно или крайне геморно


P.S. Прошу прощения за корявые объяснения и невнятные примеры.
Просто рождается новая парадигма в программировании.
А, как известно, все нове рождается в муках
ИсмаилПрокопенко вне форума Ответить с цитированием
Старый 31.07.2016, 20:48   #7
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,707
По умолчанию

Этим занимается статические анализаторы, а пихать все это в основной язык особо смысла нет.
p51x вне форума Ответить с цитированием
Старый 31.07.2016, 23:39   #8
ИсмаилПрокопенко
Пользователь
 
Регистрация: 31.07.2016
Сообщений: 25
По умолчанию

Цитата:
Сообщение от p51x Посмотреть сообщение
Этим занимается статические анализаторы, а пихать все это в основной язык особо смысла нет.
Смысл есть.
Контролировать код прямо во время его написания - в этом есть смысл.

Т.е. написание кода + его (т.е. написания) контроль + его автоматическую генерацию сделать неразрывными действиями. В этом есть смысл.

Т.е. ты пишешь код и сразу же пишешь как его контролировать и как он связан с другим кодом

Последний раз редактировалось ИсмаилПрокопенко; 31.07.2016 в 23:43.
ИсмаилПрокопенко вне форума Ответить с цитированием
Старый 31.07.2016, 23:41   #9
ИсмаилПрокопенко
Пользователь
 
Регистрация: 31.07.2016
Сообщений: 25
По умолчанию

В результате компилятор сможет отлавливать не только самые простые синтаксические ошибки, но и глубоко зарытые логические и семантические ошибки. И ошибки в самой структуре
ИсмаилПрокопенко вне форума Ответить с цитированием
Старый 01.08.2016, 08:59   #10
evg_m
Старожил
 
Регистрация: 20.04.2008
Сообщений: 5,526
По умолчанию

Цитата:
Контролировать код прямо во время его написания - в этом есть смысл.
Цитата:
не только самые простые синтаксические ошибки, но и глубоко зарытые логические и семантические ошибки.
И вы ГОТОВЫ предложить таковые правила контроля ?
Или же готовы предложить правила описания (СИНТАКСИС) таковых правил ?
программа — запись алгоритма на языке понятном транслятору
evg_m вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[РЕШЕНО] Как при помощи модуля CRt реализовать вывод сообщения на экран которое будет периодически менять свой цвет? baton00711 Паскаль, Turbo Pascal, PascalABC.NET 5 21.02.2016 15:20
Отредактировать код программы сортировки слов в строке (язык C++) zhivushko Помощь студентам 0 16.01.2014 23:19
Вебинар «Как создать свой собственный AppStore?» pro-user Общие вопросы по программированию, компьютерный форум 0 11.11.2011 14:34
свой собственный класс MediaPlayer'a nick17 Помощь студентам 2 26.11.2010 13:54
MSN – bing имеет свой собственный PR (Page rank) не доступен для показа. seo-gid Обсуждение статей 0 26.07.2010 17:59