Majestio писал(а):
in4 писал(а):
- м. не делать одну универсальную систему, лучше сделать несколько специализированных
Не согласен. Как пример, приведу пересборку ядра *nix систем. Есть все что надо "под все". Но когда делаем под себя - конфигурируем. Что есть по себе - мета-программирование. В результате получаем ядро с нужными встроенными модулями (мы знаем что они будут дергаться в работе постоянно) + получаем отдельно загружаемые модули (редкого использования).
Рассмотрим, как проще - делать систему с кучей проверок различных условий (по результатам метапрограммирования) либо заменить фрагменты исходника(например, выбрав другой набор включенных файлов). Например, проверять разрядность данных при каждой операции с ними или подключать разные файлы с реализацией алгоритма для разной разрядности - 64, 32, 24, 18, 16, 8...
А еще для разной разрядности и endian-овости могут быть разные оптимизации алгоритма.
Так что или имеем один файл со сложными проверками условий либо несколько файлов, специализированных для каждого варианта. Я за второй вариант. А еще лучше - за систему, которая выделяет сходства и отличия разных вариантов, поддерживая их
все. И речь идет не о текстовой конфигурации. При сборке используются не тексты, а нужные части внутреннего представления.
Majestio писал(а):
in4 писал(а):
--- но тогда как удобно перемещать между ними хорошие специализированные решения? - Мой ответ - более высокоуровневая среда разработки
Мне кажется дело не столько в среде разработки, сколько в возможностях подстройки (в ее реализации) кода к условиям эксплуатации. К примеру, взбредет кому в голову написать библиотеку по тензорному анализу. Будет преступлением - игнорировать наличие какого-нить GPU Ati Radeon'а.
Среда - это просто удобное место работы, где вся нужная документация, фрагменты кода, схемы и доп. информация под рукой. Где можно создать части схемы и таскать их по экрану, размещая так, чтобы было удобно видеть нужные связи. И где можно было бы допрограммировать взаимодействия созданных экранных элементов. Где можно работать с фрагментами алгоритмов как с экранными объектами.
А если добавить поддержку Raspberry Pi (GPU VideoCore) и CubieBoard(GPU Mali400), то луше в ту библиотеку добавить условий для оптимизации под каждый вариант, или сделать несколько вариантов(свою реализацию набора примитивов для каждого GPU) ?
Среда должна помочь одновременно поддерживать
все эти GPU.
Majestio писал(а):
in4 писал(а):
- при специальном представлении исходников - в прекомпилированном виде - можно значительно увеличить скорость компиляции ценой усложнения редактора и возможностей легкой передачи текстов исходников
У меня вообще шальная идея )) Исходники хранить только в ипостаси дампа (обычного читаемого). А все рабочее - загнать в SQlite, обеспечить норм индексацией. По сравнению с работой с файловой системой - ускорение будет на порядки. Только не забывать периодически сбрасывать снимки базы на диск. Вон люди уже
давно извращаются.
А это уже вопросы реализации!
- читаемость внутреннего представления не обязательна
- аналогичные возможности может обеспечить хорошая система контроля версий
Вот я сейчас рассматриваю, подходит ли Git для некоторых работ. Мне кажется, нужна бОльшая интеграция системы разработки и системы контроля версий, но это вопрос удобства и будущего.