Вчера делал дюпинг. Толком не проверил, для дебаггинга языка надо сделать библиотеку repr.
Суть токова, я понял, что нельзя разрешать операции между мультивекторами разной размерности: abc[:] = a[:][:] + b[:][:], потому что будут проблемы. Зато можно одинаковой размерности: abc[:][:] = a[:][:] + b[:][:] Но есть проблема, когда мы выбираем, старт, стоп и шаги: abc[0:5] = a[0:3:2] + b[0:1] Левый элемент говорит, что хочет провести операцию на пятью элементами и заполнить ими массив. Но a выдаёт только по индексам 0 и 2, а b по индексу 0. В таком случае надо просто сдюпать, то есть будет a[0],a[2],a[0],a[2],a[0] и b[0],b[0],b[0],b[0],b[0]. Но там всё довольно сложно, я сделал ремеиндер для счётчика и будет a[0],a[2],a[1],a[0],a[2]. В любом случае, дюпинг пока не очень стандартизирован и его не следует использовать с шагами. Зато удобно, если хочешь много элементов умножить на число: a[:] *= [number][:]. В итоге мне надо ещё штук 15 фич ввести, чтобы выпустить пререлиз Иколайси v1.0.
Я ещё придумал как реализовать модульность библиотек. Есть @import, а надо будет сделать что-то типа @importnames или как ещё назвать, эта директива препроцессора кроме импортирования будет возвращать лист имён библиотек. Таким образом, можно будет импортировать все библиотеки из некоторой директории, а потом прочекать их константы и спрепроцессить в основную библиотеку. В константах могут быть ID модулей, коллбеки всякие, структуры.
Кстати, также я позанимался своей ГУИ-библиотекой, начал вводить плоты. На картинке очень простой плот Graph2D. Функции и линии рисуются не при помощи моего графичекого движка (потому что он не работает с линиями), а при помощи моей библиотеки растеризации линий и точек. Я планирую эту библиотеку сделать такой, чтобы можно было рисовать и при помощи кистей (как в фотошопах), и разными стилями (пунктир, точка-пунктир).