Компьютерный форум
Правила
Вернуться   Компьютерный форум > Форум программистов > Языки программирования > Вопросы начинающих программистов
Перезагрузить страницу Выбор языка для программ, анализирующих и меняющих свой же собственный код.
Ответ
 
Опции темы Опции просмотра
  (#1 (permalink)) Старый
Исмаил Прокопенко Исмаил Прокопенко вне форума
Member
 
Сообщений: 23
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 30.07.2016
По умолчанию Выбор языка для программ, анализирующих и меняющих свой же собственный код. - 30.07.2016, 01:05

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

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

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

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

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

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

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

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

Ну потому что на нем пишут не исходник, а "исходник исходника" если можно так выразиться.
Ответить с цитированием
  (#2 (permalink)) Старый
Исмаил Прокопенко Исмаил Прокопенко вне форума
Member
 
Сообщений: 23
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 30.07.2016
По умолчанию 30.07.2016, 23:34

Никто не в курсе что ли?
Ответить с цитированием
  (#3 (permalink)) Старый
beroal beroal вне форума
Member
 
Сообщений: 108
Сказал(а) спасибо: 3
Поблагодарили 4 раз(а) в 4 сообщениях
Регистрация: 13.12.2002
По умолчанию 31.07.2016, 20:03

Сначала немного теории. Текст на формальном языке преобразуется в абстрактное синтаксическое дерево (abstract syntax tree, AST) с помощью парсера, обратно с помощью принтера. Языковые инструменты (интерпретаторы, компиляторы) обрабатывают AST.

Вам нужен язык программирования (ЯП), который может обрабатывать AST. AST — это дерево, то есть граф. То есть в принципе это можно делать на любом ЯП. Но есть ЯП, которые, по-моему, подходят лучше среднего ЯП. Это языки, которые имеют алгебраические типы данных (а именно, суммы типов и произведения типов) и сопоставление по образцу (pattern matching), которое предназначено для работы с этими типами данных. AST — это значение алгебраического типа данных. Такой ЯП обычно называется «функциональный ЯП со статической системой типов». Логические ЯП (Пролог) имеют похожие средства и динамическую систему типов.
Ответить с цитированием
  (#4 (permalink)) Старый
Исмаил Прокопенко Исмаил Прокопенко вне форума
Member
 
Сообщений: 23
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 30.07.2016
По умолчанию 31.07.2016, 21:21

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

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

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

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

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

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


P.S. Прошу прощения за корявые объяснения и невнятные примеры.
Просто рождается новая парадигма в программировании.
А, как известно, все нове рождается в муках
Ответить с цитированием
  (#5 (permalink)) Старый
beroal beroal вне форума
Member
 
Сообщений: 108
Сказал(а) спасибо: 3
Поблагодарили 4 раз(а) в 4 сообщениях
Регистрация: 13.12.2002
По умолчанию 31.07.2016, 21:36

Цитата:
Сообщение от Исмаил Прокопенко Посмотреть сообщение
Что реализовать на нем программу, которая кроме основной задачи могла бы ещё анализировать свой код и при необходимости менять его, без "костылей" не получится.
В принципе, программа на одном ЯП может анализировать программу на другом ЯП.
Ответить с цитированием
Ads.
  (#6 (permalink)) Старый
Исмаил Прокопенко Исмаил Прокопенко вне форума
Member
 
Сообщений: 23
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 30.07.2016
По умолчанию 01.08.2016, 00:27

Цитата:
Сообщение от beroal Посмотреть сообщение
В принципе, программа на одном ЯП может анализировать программу на другом ЯП.
Если программа может детально анализировать код другой программы, то это фактически парсер, составная часть компилятора
Ответить с цитированием
  (#7 (permalink)) Старый
CrazyPOVT CrazyPOVT вне форума
Member
 
Аватар для CrazyPOVT
 
Сообщений: 921
Сказал(а) спасибо: 3
Поблагодарили 92 раз(а) в 85 сообщениях
Регистрация: 05.11.2011
Адрес: Кумертау
По умолчанию 01.08.2016, 06:45

Помнится, когда-то на бейсике zx-спектрума так извращался.


Лужу, паяю, ЭВМ починяю!
Ответить с цитированием
  (#8 (permalink)) Старый
Исмаил Прокопенко Исмаил Прокопенко вне форума
Member
 
Сообщений: 23
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 30.07.2016
По умолчанию 01.08.2016, 22:03

Цитата:
Сообщение от CrazyPOVT Посмотреть сообщение
Помнится, когда-то на бейсике zx-спектрума так извращался.
И?
К чему это Вас привело?
Чего Вы добились в жизни?

P.S. бесик zx-спектрум - это наше фсё! Сам с него начинал.
У него был уникальный оператор VAL$, который позволял заставить интерпретатор воспринимать любую строку как код.
Использовал его для написания самомодифицирующихся программ
Ответить с цитированием
  (#9 (permalink)) Старый
CrazyPOVT CrazyPOVT вне форума
Member
 
Аватар для CrazyPOVT
 
Сообщений: 921
Сказал(а) спасибо: 3
Поблагодарили 92 раз(а) в 85 сообщениях
Регистрация: 05.11.2011
Адрес: Кумертау
По умолчанию 02.08.2016, 07:52

Да, в жизни это не пригодилось, но тогда это сильно повышало ЧСВ.


Лужу, паяю, ЭВМ починяю!
Ответить с цитированием
  (#10 (permalink)) Старый
Исмаил Прокопенко Исмаил Прокопенко вне форума
Member
 
Сообщений: 23
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 30.07.2016
По умолчанию 02.08.2016, 21:18

Мне на стек овер флов ру посоветовали присмотреться в языку Nemerle.
Кто-нибудь на нем кодил?
На нем реально сделать то, что мне нужно?
Ответить с цитированием
  (#11 (permalink)) Старый
Исмаил Прокопенко Исмаил Прокопенко вне форума
Member
 
Сообщений: 23
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 30.07.2016
По умолчанию 11.08.2016, 21:02

И тишина..
всем пофиг что ли?

Или все кто умные уже давно там?
В Америке?
Ответить с цитированием
Ads
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Программирование и выбор языка. Графика? Artsiom Вопросы начинающих программистов 1 15.07.2012 22:52
Вебинар «Как создать свой собственный AppStore?» cyberguru Новости 0 11.11.2011 15:23
Программа, доказывающая то, что я свой собственный дедушка! Помогите! daw Prolog 2 14.05.2010 00:54
На чем остановить свой выбор? mehmed 87 Процессоры 4 19.08.2009 14:44
Не могу зайти на свой собственный сайт. Constantin Техническая поддержка 28 17.03.2009 20:04
Выбор языка программирования Rivers Вопросы начинающих программистов 5 28.10.2008 15:51
На какой оперционной системе остановить свой выбор? ksenon Любые вопросы от новичков 8 22.08.2008 10:46
Как создать собственный сабж DrDiesel7373 Visual C++ 7 26.06.2008 18:47
Выбор среды/языка для изучения графического интерфейса Windows timur_132 Вопросы начинающих программистов 12 07.11.2007 15:47
Выбор языка программирования для сравнения целочисленных переменных tvy Вопросы начинающих программистов 2 26.09.2005 20:34
Собственный свой класс в Stream petrick C++ Builder 5 23.11.2004 17:07
Выбор языка программирования для новичка Anonymous Вопросы начинающих программистов 2 18.08.2003 20:15



Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
Нardforum.ru - компьютерный форум и программирование, форум программистов