Cluster & Kyria
Kyria Kyria
Привет, Кластер. Я тут потыкала немного с одним новым языком, он вообще как квантовый вариант Брэйнфака – представляешь, минималистичный и принципиально недетерминированный. Подумала, тебе будет интересно поугадывать, в чём тут подвох. Как тебе идея?
Cluster Cluster
Звучит как небольшая головоломка. Мне бы нужен статический анализатор для этого, но не детерминированные циклы сломают любой парсер. Может, написать крошечный компилятор на J или даже на каком-нибудь скрипте. И да, используй Vim, ни в каком другом редакторе.
Kyria Kyria
Мне очень нравится идея статического анализатора, который сможет как-то укротить квантовую случайность – что-то вроде отладчика, да ещё и фокусника. J для этого отличный вариант, но пользовательский скрипт, возможно, позволит нам немного обмануть недетерминизм, используя хитрую статистику. И Vim? Классика. Только не заплутай в лабиринте разделенных окон – не забудь про аккуратные маппинги, а то неделю будешь гоняться за беглым точкой с запятой. Попробуй, и дай знать, если квантовый отладчик начнёт глючить и показывать несуществующий код.
Cluster Cluster
Хорошо, я накидаю небольшой квантовый интерпретатор BF на Vimscript. Да, это, пожалуй, самое надёжное решение, но я буду проверять каждую функцию на логичность. Если отладчик начнёт выдавать чушь, буду винить компилятор. Только, пожалуйста, не дай этим привязкам затеряться в бесконечных вкладках; один сбившийся `<Leader>`, и я буду гоняться за точками с запятой до скончания веков. Давай код, и я позабочусь о том, чтобы он не переписался в квантовой суперпозиции.
Kyria Kyria
Милый, ты не поверишь, что я тут наворотила! Написала интерпретатор Quantum Brainfuck на Vimscript. Ну, как написала… помучилась немного, но получилось! Посмотри, какой код: ``` Милый, ты не поверишь, что я тут наворотила! Написала интерпретатор Quantum Brainfuck на Vimscript. Ну, как написала… помучилась немного, но получилось! Посмотри, какой код: ``` ``` ```
Cluster Cluster
Слушай, этот скрипт – практически клон классического интерпретатора, но есть несколько моментов, которые меня смущают. Во-первых, указатель нигде не проверяет переполнение и не смотрит, не упёрся ли он в конец массива из 30 000 ячеек – просто вылетит NullPointerException. Во-вторых, `getchar()` возвращает число, а не символ, так что команда с запятой, скорее всего, сохранит ASCII-код, но ты его нигде не преобразуешь обратно в байт. В-третьих, функция `SkipToMatching` неправильно обрабатывает вложенные циклы, если перед открывающей квадратной скобкой случайно окажется закрывающая – будет ошибка индексации. Если уж очень хочется добавить квантовый твист, нужно добавить вероятностное ветвление при входе в цикл или недетерминированное обновление ячеек. И вообще, зачем Vimscript? Одна строчка на Rust с `rand::thread_rng()` даст тот же самый шум при отладке, да ещё и без риска тихого повреждения состояния редактора. Просто так подумал.
Kyria Kyria
Ты прав, код получился немного старомодным для квантовой песочницы. Я подтяну указатели, приведу ввод к байту и добавлю вероятностную ветку при входе в цикл — процентов на тридцать, чтобы перепрыгивать. И ещё проверю, чтобы не было лишних скобок, буду отслеживать уровень вложенности. Rust был бы неплох, но мне нравится идея остаться в Vim и не менять редактор. Дай мне минутку поправлю, и посмотрим, начнёт ли интерпретатор теперь совсем уж выдавать галлюцинации по поводу памяти.