ПО, ЭВМ и АСУ из Таможенного Союза

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » ПО, ЭВМ и АСУ из Таможенного Союза » Рефал » Связь Рефал-а и современного функционального программирования


Связь Рефал-а и современного функционального программирования

Сообщений 1 страница 15 из 15

1

С.Т. написал(а):

Пример в тему:

Можно как-то увязать Рефал с функциональным программированием?
У меня крутится в уме идея того, чтобы программа сама писала программы.
Более конкретно: чтобы по нескольким конкретным правилам,
сформулированным человеком,
специальная программа написала программу,
то есть алгоритм, реализующий решение задачи.

Ведь многие задачи похожи,
а значит похожи алгоритмы.
Например, в области комбинаторики,
решение какой-то игры: Сапер, морской бой, карточная игра (девятка, блэкджек, покер),
шашки, шахматы, Wordle, пасьянс, сокобан, 2048, шарики (пять в ряд).

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

0

2

Не очень понял смысл «современного» в заголовке.

Формально, любой транслятор языка высокого уровня подходит под требования, по сформулированным на исходном языке правилам «пишет» программу на ассемблере (или Си). Вы, наверное, хотите как можно более высокоуровневый язык. Рефал, насколько понял, как раз для упрощения компиляторов и создавался. Полистайте книгу В.Ф. Турчина, там сотня страниц, а смысл языка укладывается в две. Вот здесь можно скачать компилятор из той книги для Windows.

0

3

С.Т. написал(а):

Не очень понял смысл «современного» в заголовке.

Слово "современного" уже Лис дописал.

Хотелось бы написать метаязык или метапрограмму.
Такое впечатление, что человек сам должен продумывать и написать
основные вехи программы.
Так как сам компьютер не сможет самостоятельно ничего понять,
у него нет инициативы.
Но якобы может существовать такая программа,
которая бы писала алгоритм по основным правилам,
масштабируя задачу на любое количество.
То есть расширяя не только количество,
но и качество,
ведь программа есмь качество.

Конечно, нужно, чтобы я привёл какие-то конкретные примеры,
но пока что я топчусь,
пытаясь выдавить из себя философию программирования.
А вдавание в конкретный язык программирования
зачастую приводит к отрицанию философии (мешает философии).
То есть я пока что наивные какие-то мысли питаю
в надежде, что мне что-то откроется.

0

4

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

Можно пойти с двух сторон:
1) Программист напишет программу,
которая напишет программу для решения конкретной задачи.
2) Программист напишет программу для решения конкретной задачи,
и затем начнёт упрощать программу так,
чтобы понять, как написать программу,
которая напишет программу для решения конкретной задачи.

После написания нескольких программ,
которые пишут программу для решения конкретной задачи (для нескольких разных задач),
возможно, что появится понимание как написать программу
с общими принципами для этих задач.
И потом уже будет всё проще и проще писать программу,
которая напишет программу для решения новой конкретной задачи.

0

5

Если хотите философию, то Искусственный Интеллект, который что-то там творит - это Философский Камень 22-го века, ИМХО (не путать с IMHO). В оригинале (по Аристотелю) Квинта Эссенция проявятся, в частности, как человеческий разум. В итоге разум оказался способен превратить свинец в золото, а водород в гелий. И вроде был перспективный стартап, где ИИ якобы писал программы, но на деле оказалась кучка индусов. То есть повышать уровень абстракции возможно, но ничего нового кусок железа создать не способен.

0

6

С.Т. написал(а):

Искусственный Интеллект... - это Философский Камень 22-го века

Не один он такой. Ещё есть "вечная жизнь", "массированная атомарная сборка (наноманипуляторами)", "глобальная промышленная революция (роботизация)", "получение энергии солнца, запуск поясов спутников с базы на Меркурии", "полёты к соседним звёздам", "управляемая термоядерная реакция", "следующий уровень устройства социума".

0

7

С.Т. написал(а):

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

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

В данном случае ИИ - это набор программ,
разработанных при помощи ЕИ (Естественного Интеллекта),
то есть при помощи мыслительной деятельности человека.
Но этот набор программ имеет иерархическую структуру (минимум два уровня),
а не просто программы, выполняющие разные указания программиста.

Признаюсь, что в моей философии аукается наивная философия Алана Тьюринга.
Однако я считаю своим долгом любую сложную философию и методологию программирования
разжевать и показать "на пальцах"
,
чтобы всё это понял любой учащийся средней общеобразовательной школы.

В статье описаны некоторые идеи метапрограммирования:
Метапрограммирование

0

8

Например, программист написал программу на функциональном ЯП Haskell.
Где ему взять программу,
которая преобразует программу, написанную на Хаскелл,
в программу, написанную на Си?

0

9

Сделал пару тем
Метапрограммирование
чтобы компьютер программировал сам себя
совершенно уверен, что об этих идеях все программисты читают в книжках и загораются чтобы вдоххновить соседей.
Теперь будет куда такие сообщения переносить.

NuShaman написал(а):

Например, программист написал программу на функциональном ЯП Haskell.
Где ему взять программу,
которая преобразует программу, написанную на Хаскелл,
в программу, написанную на Си?

Ему (гипотетическому программисту из цитаты) такую программу надо написать. Для этого надо знать Си (чего не наблюдается), знать Хаскель, и знать теорию транспиляции (то есть анализа текстов, построения модели, преобразования модели и синтеза целевого кода).

Вывод о незнании Си я делаю из того, что в языке Солуни не реализованы массивы. В то время как в Си они есть.
Если бы массивы в Солуни были, можно было бы ещё говорить, что есть понимание этой части языка Си. Но его нет.

Хотелось бы ещё сказать, что раз топикстартер планирует вдохновлять других людей на создание своих языков,
то просто реализовать массивы в Солуни будет недостаточно. Вон, Павиа, реализовал строки и массивы в языке ПОП, но топикстартеру это не помогло никак.
Для того, чтобы другие тоже смогли делать массивы, надо свой опыт описать словами, развёрнуто и понятно. Поработать над лёгкостью понимания написанных текстов другими людьми.

Отредактировано Лис (2022-12-03 03:22:39)

0

10

NuShaman написал(а):

Например, программист написал программу на функциональном ЯП Haskell.
Где ему взять программу,
которая преобразует программу, написанную на Хаскелл,
в программу, написанную на Си?

Эта программа называется Glasgow Haskel Compiler. Вот тут пишут, что в новых версиях с этим появились какие-то нюансы, потому что компилятор развивается и это стало не надо.

0

11

С.Т. написал(а):

Вот тут пишут

Спасибо за ссылку.
Как я понял, раньше компилятор выдавал код на Си.
А сейчас такой опции нет.
Но он по-прежнему выдает исполняемый файл.

И значит, если продизассемблировать исполняемый файл,
перевести все регистры Intel-кода
в названия переменных,
заменить конструкции Ассемблера на конструкции языка Си,
можно получить исходный код на Си.

Ну и при желании можно реализовать перевод в код любого ЯП.
Таким образом это является интересной задачей.
И тогда можно строить мост между простыми лексическими предложениями,
которые говорит человек-программист при постановке задачи,
и функциональным программированием, например, Хаскелл.
С этим у меня сейчас большие затруднения.

0

12

NuShaman написал(а):

Как я понял, раньше компилятор выдавал код на Си.
А сейчас такой опции нет.

Примерно так. Раньше он выдавал программу на Си, поскольку не умел генерировать машинный код. Теперь умеет, потому опция отключена по умолчанию. Если собрать транслятор определённым образом, тогда опять сможет. Вероятно, придётся взять не самую свежую версию - я не вникал в детали. Генерация исходников Си необходима, что бы на новой аппаратной платформе развернуть транслятор. Вот транслятор Рефала в Си, достаточно простой.

NuShaman написал(а):

И значит, если продизассемблировать исполняемый файл,
перевести все регистры Intel-кода
в названия переменных,
заменить конструкции Ассемблера на конструкции языка Си,
можно получить исходный код на Си.

Гипотетически такое возможно, но практически эта задача существенно сложнее трансляции с языка высокого уровня (абстракций) в нижний.

NuShaman написал(а):

Ну и при желании можно реализовать перевод в код любого ЯП.

Это называется «тезис Чёрча-Тьюринга». Поскольку тема о Рефале и нормальные алгорифмы Марковы так же считаются способом формализации алгоритма, как машина Тьюринга и лямбда Чёрча, наверное, можно говорить о тезиче Чёрча-Тьюринга-Маркова.

NuShaman написал(а):

И тогда можно строить мост между простыми лексическими предложениями,
которые говорит человек-программист при постановке задачи,
и функциональным программированием, например, Хаскелл.
С этим у меня сейчас большие затруднения.

Боюсь, что загвоздка не в ФП как таковом, а в Хаскелле. Насколько понимаю теорию, наблюдаемый результат работы программы (ради него она и запускается) является побочным эффектом алгоритма. Хаскелль борется за чистоту функций, то есть побочного эффекта быть не должно. :) Есть же другие ФЯ: LISP, OCaml (F#), Rust.

0

13

Rust не ФЯ

Rust is an imperative language, but it follows many functional programming paradigms.

Отредактировано Лис (2022-12-06 09:46:57)

0

14

Лис написал(а):

Rust не ФЯ

    Rust is an imperative language, but it follows many functional programming paradigms.

Цитата неизвестного автора может доказать всё, что угодно, да. Поисковик выдал источник: https://rust-unofficial.github.io/patte … index.html unofficial - не официальное.  :rolleyes: Другие авторы пишут осторожнее: multi-paradigm.

Вот простейшая функция, возвращающая значение, в «императивном» Rust:

Код:
fn five() -> i32 {
    5
}

Вот она же в мультипарадигменном Си++, что вырос из императивного («кроссплатформенного ассемблера») Си:

Код:
int32_t five() {
    return 5; // императивная конструкция: верни значение
}

Вот она в мультипарадигменном OCaml:

Код:
let five = 5

А вот на несовременном функциональном Рефале-5 и его диалекте FLAC

Код:
five {
  = 5;
}

five = 5;

Вот императивный Pascal, который в этой части притворялся функциональным, пока программистам не потребовалось усиленно копировать тела функций, тогда и появилось глобальное состояние:

Код:
function Five() : integer;
begin
  Result := 5;
end;

Во всех функциональных нотациях у функции, как и в школьной математике, просто есть значение. И если в Rust сверху этой основы навернули мутабельность и прочие императивные штуки, так это потому что их судьба Haskell-я не устраивает и надо уже переписать ядро Linux на Rust, со всеми вытекающими :)

Отредактировано С.Т. (2022-12-07 06:35:05)

0

15

Русский язык или еврейский?
Впрочем вопрос тривиальный.

0


Вы здесь » ПО, ЭВМ и АСУ из Таможенного Союза » Рефал » Связь Рефал-а и современного функционального программирования