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