Gamemaker — это аккуратный инструмент, который позволяет получить хороший RAD. Однако у него довольно много недостатков. Одним из них является отсутствие хорошей стандартной библиотеки.
Да, у вас есть члены типа "ds_*", но их явно не хватает. Например, приоритетная очередь имеет тип только для однократного чтения (в процессе она уничтожается). Функция сортировки списков использует ужасно медленный метод. (Хотя официально это не заявлено, я подозреваю, что он использует пузырьковую сортировку). И просто нет встроенного метода для связанных списков. Вдобавок к этому простой доступ к членам медленнее, чем должен быть.
Теперь можно было создавать эти вещи на родном языке. Однако это становится довольно медленным (поскольку интерпретатор медленный). т.е. написание быстрой/кучной сортировки во многих случаях было медленнее, чем встроенная сортировка. Написание моих собственных «связанных списков» с использованием специальных объектов для каждого узла требовало слишком больших накладных расходов. (каждый объект в Gamemaker делает множество вещей на каждом этапе).
Итак, теперь я собираюсь написать слой C++ для стандартной библиотеки. Я надеюсь добавить дополнительную функциональность (основной целью являются хеш-таблицы и связанные списки), а также улучшить алгоритмы. Для большинства проблем у меня уже есть идея, как с этим справиться, за исключением 1 большой проблемы:
Все библиотеки C++ используют "итераторы" для идентификации элемента. Gamemaker позволяет передавать только двойные числа (или массивы символов в стиле C) в dll и из них.
Как мне обойти это? Не возвращать индекс элемента довольно глупо, поэтому мне нужно найти способ сопоставить эти итераторы с двойными значениями.
Что является хорошей идеей для этого? Лучше ли мне просто переписать все структуры данных, чтобы итераторы гарантированно имели карту 1 на 1 для двойного (или фактически двойного + индекса структуры данных)? Или есть лучшие методы?
P.S. почему до сих пор нет тега Gamemaker?