Нечаянные вычислители
От: kochetkov.vladimir Россия https://kochetkov.github.io
Дата: 11.03.17 21:45
Оценка: 96 (7) :)))
Под "нечаянными вычислителями" я подразумеваю ситуации, когда разработчики языка или рантайма хотели как лучше, а получилось нечто, с побочными эффектами в виде способности решать вычислительные задачи там, где этого изначально не предполагалось. Навскиду вспомнились:

Тьюринг-полнота:

систем типов Scala, Haskell, Rust;
ассемблерной инструкции mov;
дженериков Java;
C-препроцессора (с рядом оговорок).

Возможность решения NP-полной задачи 3-SAT с помощью механизма разрешения перегрузок в C#.

---

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

UPD: в комментах на фейсбуке подсказали ещё пару ссылок: https://www.gwern.net/Turing-complete и http://beza1e1.tuxen.de/articles/accidentally_turing_complete.html Что касается полноты по Тьюрингу языков или их составных частей:

XSLT/XQuery;
Sed Script;
механизм обработки ошибок MMU;
шаблоны C++;
HTML5+CSS3;
SQL;
правила перезаписи URL mod_rewrite;
язык шаблонов MediaWiki
SSI;
правила перезаписи sendmail;
язык формул в Excel.

UPD: формат релокаций в ELF-файлах также полон по Тьюрингу.
UPD: Nikov на FB подсказывает, что ещё и система типов TypeScript полна по Тьюрингу.
... << RSDN@Home 1.0.0 alpha 5 rev. 0>>

[Интервью] .NET Security — это просто
Автор: kochetkov.vladimir
Дата: 07.11.17
Отредактировано 25.03.2017 22:25 kochetkov.vladimir . Предыдущая версия . Еще …
Отредактировано 12.03.2017 12:29 kochetkov.vladimir . Предыдущая версия .
Отредактировано 11.03.2017 23:50 kochetkov.vladimir . Предыдущая версия .
Отредактировано 11.03.2017 23:49 kochetkov.vladimir . Предыдущая версия .
Отредактировано 11.03.2017 21:50 kochetkov.vladimir . Предыдущая версия .
Re: Нечаянные вычислители
От: Code Digger Грузия  
Дата: 12.03.17 13:15
Оценка: 8 (1)
Здравствуйте, kochetkov.vladimir, Вы писали:

KV>Под "нечаянными вычислителями" я подразумеваю ситуации, когда разработчики языка или рантайма хотели как лучше, а получилось нечто, с побочными эффектами в виде способности решать вычислительные задачи там, где этого изначально не предполагалось. Навскиду вспомнились:


https://accidentallyquadratic.tumblr.com/ — вот это точно "нечаянные вычисления"! :D
Re[2]: Нечаянные вычислители
От: _NN_ www.nemerleweb.com
Дата: 13.03.17 11:47
Оценка:
Здравствуйте, Code Digger, Вы писали:

CD>https://accidentallyquadratic.tumblr.com/ — вот это точно "нечаянные вычисления"! :D


Как тут не вспомнить Экспоненциальный алгоритм для обновлений
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re: Нечаянные вычислители
От: Кодт Россия  
Дата: 13.03.17 20:06
Оценка:
Здравствуйте, kochetkov.vladimir, Вы писали:

KV>правила перезаписи URL mod_rewrite;


Ну, кстати, это не такой уж нечаянный исполнитель. Расширение нормальных алгоритмов Маркова регулярными выражениями.
Перекуём баги на фичи!
Re[2]: Нечаянные вычислители
От: kochetkov.vladimir Россия https://kochetkov.github.io
Дата: 13.03.17 20:20
Оценка:
Здравствуйте, Кодт, Вы писали:
К>Здравствуйте, kochetkov.vladimir, Вы писали:

KV>>правила перезаписи URL mod_rewrite;

К>Ну, кстати, это не такой уж нечаянный исполнитель. Расширение нормальных алгоритмов Маркова регулярными выражениями.

Наоборот же Но да, не вполне нечаянный. И всё же избыточный, IMO.

[Интервью] .NET Security — это просто
Автор: kochetkov.vladimir
Дата: 07.11.17
Re[3]: Нечаянные вычислители
От: Кодт Россия  
Дата: 14.03.17 11:12
Оценка: 23 (1)
Здравствуйте, kochetkov.vladimir, Вы писали:

К>>Ну, кстати, это не такой уж нечаянный исполнитель. Расширение нормальных алгоритмов Маркова регулярными выражениями.

KV>Наоборот же Но да, не вполне нечаянный. И всё же избыточный, IMO.

В смысле наоборот?
Регекспы синтаксически выразительнее шаблонов сопоставления у нормальных алгоритмов. Во всяком случае, нормальный алгоритм в код на перле оттранслировать легко и просто, а вот наоборот — попляшешь.

# инкременты десятичного числа

$_ = "297_____"; # _ - суффикс инкремента (в данном случае делаем пять раз)

print "START : '$_'\n";
while(  # таблица подстановок
        s/0_/1/  ||
        s/1_/2/  ||
        s/2_/3/  ||
        s/3_/4/  ||
        s/4_/5/  ||
        s/5_/6/  ||
        s/6_/7/  ||
        s/7_/8/  ||
        s/8_/9/  ||
        s/9_/_0/ ||
        s/_//
) {
        print "STEP  : '$_'\n";
}
print "FINISH: '$_'\n";


# проверка палиндрома _examined_ -> YES | NO
$_ = "_palindromordnilap_";

print "START : '$_'\n";
while(  # таблица подстановок
        s/_([a-z])(.*?)\1_/_\2_/ ||  # две маленькие хитрости в стиле рефала: класс символов и два вхождения одного нетерминала (бекреференс) в образец

        # иначе пришлось бы расписать пулю
        s/_a(.*?)a_/_\1_/ ||
        s/_b(.*?)b_/_\1_/ ||
        s/_c(.*?)c_/_\1_/ ||
        ......
        s/_z(.*?)z_/_\1_/ ||

        s/_([a-z])_/YES/  ||
        s/__/YES/         ||
        s/_(.*?)_/NO/
) {
        print "STEP  : '$_'\n";
}
print "FINISH: '$_'\n";


mod_rewrite работает точно так же: while(правило1||правило2||правило3){}

А если к этому ещё и удалённого клиента — браузера — припахать, отдавая ему редиректы, чтобы он переспрашивал и переспрашивал... Вот это, пожалуй, будет нечаянный вычислитель!
Перекуём баги на фичи!
Re[4]: Нечаянные вычислители
От: kochetkov.vladimir Россия https://kochetkov.github.io
Дата: 16.03.17 10:08
Оценка:
Здравствуйте, Кодт, Вы писали:

К>В смысле наоборот?

К>Регекспы синтаксически выразительнее шаблонов сопоставления у нормальных алгоритмов.

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

К>mod_rewrite работает точно так же: while(правило1||правило2||правило3){}

К>А если к этому ещё и удалённого клиента — браузера — припахать, отдавая ему редиректы, чтобы он переспрашивал и переспрашивал... Вот это, пожалуй, будет нечаянный вычислитель!

С редиректами -- отличная идея Позволит "затьюринговать" рерайтинг в Nginx (там число применений правил перезаписи ограничено 10 итерациями).
... << RSDN@Home 1.0.0 alpha 5 rev. 0>>

[Интервью] .NET Security — это просто
Автор: kochetkov.vladimir
Дата: 07.11.17
Re[5]: Нечаянные вычислители
От: Ops Россия  
Дата: 25.03.17 23:22
Оценка:
Здравствуйте, kochetkov.vladimir, Вы писали:

KV>С редиректами -- отличная идея Позволит "затьюринговать" рерайтинг в Nginx (там число применений правил перезаписи ограничено 10 итерациями).

В браузере они тоже ограничены, по крайней мере FF больше 20 не жрет уже 10 лет http://kb.mozillazine.org/Network.http.redirection-limit
Переубедить Вас, к сожалению, мне не удастся, поэтому сразу перейду к оскорблениям.
Re[6]: Нечаянные вычислители
От: kochetkov.vladimir Россия https://kochetkov.github.io
Дата: 26.03.17 11:52
Оценка:
Здравствуйте, Ops, Вы писали:

Ops>Здравствуйте, kochetkov.vladimir, Вы писали:


KV>>С редиректами -- отличная идея Позволит "затьюринговать" рерайтинг в Nginx (там число применений правил перезаписи ограничено 10 итерациями).

Ops>В браузере они тоже ограничены, по крайней мере FF больше 20 не жрет уже 10 лет http://kb.mozillazine.org/Network.http.redirection-limit

Последним редиректом можно отдавать HTML со скриптом, который устанавливает document.location в нужный адрес.
... << RSDN@Home 1.0.0 alpha 5 rev. 0>>

[Интервью] .NET Security — это просто
Автор: kochetkov.vladimir
Дата: 07.11.17
Re[7]: Нечаянные вычислители
От: Ops Россия  
Дата: 26.03.17 13:26
Оценка:
Здравствуйте, kochetkov.vladimir, Вы писали:

KV>Последним редиректом можно отдавать HTML со скриптом, который устанавливает document.location в нужный адрес.


Ну это не честно, так можно и на lua все повычислять.
Переубедить Вас, к сожалению, мне не удастся, поэтому сразу перейду к оскорблениям.
Re[8]: Нечаянные вычислители
От: kochetkov.vladimir Россия https://kochetkov.github.io
Дата: 26.03.17 13:32
Оценка:
Здравствуйте, Ops, Вы писали:

Ops>Ну это не честно, так можно и на lua все повычислять.


Ok, пусть будет не скрипт редиректа, а meta refresh. HTML не тьюринг-полный язык, тут всё по-честному

[Интервью] .NET Security — это просто
Автор: kochetkov.vladimir
Дата: 07.11.17
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.