Мои каникулы с Rust были потрясающими. Я работал над своим любимым проектом графиков уравнений (который случайно стал отдельным арт-проектом под названием equart). Нет лучшего способа выучить язык, чем использовать его.

В процессе возни с Rust я обнаружил, что итераторы сверхсложны. Я знал эту идею из своего опыта работы с Python, и я более или менее понимаю, что происходит в Rust, но мне трудно с ними работать. Ключевая проблема заключается в том, что итераторы на самом деле являются трейтами на стероидах, и нужно 100% понимание трейтов, чтобы заложить основу для знакомства с итераторами. Более того, видео-лекции, которым я следую, к сожалению, сделали главу об итераторах чрезмерно сложной и неполной одновременно, поэтому мне нужно найти другой подход к этой теме.

Еще одно обновление связано с 2D-графикой.

Мой любимый проект использует библиотеку «черепаха» для рисования графиков. Он отлично работает для небольших графиков (например, sin(x)-y=0), но начинает ползать по сложным вещам с большим количеством точек.

Это не вина библиотеки, так как я использую ее неправильно. Черепаха задумана как векторная библиотека, а я использую ее как пиксельный движок, где каждый пиксель представляет собой вектор размером 1 пиксель. Конечно, с миллионами векторов он начинает ползать.

Я думал найти легкую замену черепашке на что-то более пиксельно ориентированное, но обнаружил довольно странную проблему: не могу найти простую 2D-библиотеку.

Вещи, которые я видел, делятся на три категории:

  • 2D игровые движки. Это слишком сложно для меня, так как я просто хочу рисовать пиксели.
  • Обертки над SDL/vulkan/opengl/cairo
  • Обертки для нативных оконных систем (windows, x11, wayland).

Я не смотрел, но думаю, что есть привязки qt/gtk, которые попадают в категории «слишком сложные» и «обертки».

Я не смог найти библиотеку для «инициализации, рисования». Большинство этих библиотек (насколько я понял после беглого просмотра документации) предлагают обрабатывать цикл событий и выполнять множество дополнительных действий, выходящих за рамки основной цели.

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

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

Обновление: как только я это разместил, пришел ответ на мой вопрос на users.rust-lang.org. Есть две библиотеки, которые я пропустил в своих первоначальных поисках, и обе выглядят очень многообещающе: minifb и nannou. Я постараюсь использовать их, чтобы увидеть, что лучше подходит для моих нужд.