powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Программирование [игнор отключен] [закрыт для гостей] / multi-body
9 сообщений из 9, страница 1 из 1
multi-body
    #38440370
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сразу предупреждаю: это все чисто теоретические рассуждения.

Базовая идея: Для функции определяем два (три-десять) разных реализаций. Компилятор сам решает какую из них взять.
Функция имеет заголовок и несколько тел. Например так:
Код: sql
1.
2.
3.
4.
define sort(array);

body qsort for sort(array) {....};
body mergesort for sort(array) {....};

собираем это все в библиотеку. Потом в приложении вызываем sort(a); а при итоговой сборке ставим компилятору флаг "-speed" или "-memory". В соответствии с этим флагом компилятор подхватывает либо ту, либо другую реализацию sort(array).


В плюсах этого я вижу:
- не надо задумываться во время написания какой из примитивных алгоритмов брать в каждом конкретном случае.
- Упростится кросс-платформенное написание - можно будет собирать либо для десктопа, либо для микроконтроллера из одного общего исходника, а оптимизация под платформу пойдет автоматически.

В минусах:
- не очень большое количество алгоритмов получат выигрыш от такого подхода.
- сложно автоматом определить к какому флагу оптимизации относится та или другая реализация.

флаги оптимизации которые я сходу могу назвать это: -speed, -memory, -singlethread, -multithread и что-то в духе -strength=N для тяжелых алгоритмов которые могут работать тщательно, а могут быстро (типа архиваторов, преобразователей картинок и тп).

Мысли?
...
Рейтинг: 0 / 0
multi-body
    #38440385
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Одним флагом тут, имхо, не отделаешься. Ведь вполне может быть, что массив А нужно отсортировать как можно быстрее, а в соседней строчке массив B нужно сортировать с экономией памяти.
...
Рейтинг: 0 / 0
multi-body
    #38440392
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну это можно решить либо расширенным синтаксисом вызова функции. Что-то типа:
Код: sql
1.
2.
sort(small_array)-speed;
sort(big_array)-memory;



Либо переключателями в духе pragma:
Код: sql
1.
2.
3.
4.
5.
#pragma optimize-speed
sort(small_array);
#pragma optimize-memory
sort(big_array);
#pragma optimize-default



С третей стороны, каждая реализация функции может иметь свой набор флагов определяющих область применимости.
Код: sql
1.
2.
3.
body mergesort for sort(array)
when size(array)<1Mb
{ .... }
...
Рейтинг: 0 / 0
multi-body
    #38440428
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White OwlНу это можно решить либо расширенным синтаксисом вызова функции. Что-то типа:
Код: sql
1.
2.
sort(small_array)-speed;
sort(big_array)-memory;




Либо переключателями в духе pragma:
Код: sql
1.
2.
3.
4.
5.
#pragma optimize-speed
sort(small_array);
#pragma optimize-memory
sort(big_array);
#pragma optimize-default

А тогда какой смысл огород городить? Сразу нужную функцию и вызвать.
White OwlС третей стороны, каждая реализация функции может иметь свой набор флагов определяющих область применимости.
Код: sql
1.
2.
3.
body mergesort for sort(array)
when size(array)<1Mb
{ .... }

Можно сделать все то же самое в функции-обертке.
...
Рейтинг: 0 / 0
multi-body
    #38440429
Фотография softwarer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White OwlБазовая идея: Для функции определяем два (три-десять) разных реализаций. Компилятор сам решает какую из них взять.
Мне кажется, для этого не нужно какой-то специфической поддержки со стороны компилятора. Это вполне легко делается существующими инструментами, начиная с макрогенератора.

Что касается "автоматом определить", то это нереальная лирика. Скажем, алгоритм имеет временную сложность в лучшем случае O(1), в худшем O(n*n). Какой флаг поставит ему компилятор? Туда же - про микроконтроллеры на той же платформе, имхо.
...
Рейтинг: 0 / 0
multi-body
    #38440454
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
miksoftМожно сделать все то же самое в функции-обертке.Да, можно, для рантайма будет даже удобно: есть память - жрём, нету - экономим. Но тогда мы будем тащить за собой три функции вместо одной - две реализации и один враппер выбирающий которую из реализаций использовать сейчас.

softwarerЧто касается "автоматом определить", то это нереальная лирика. Скажем, алгоритм имеет временную сложность в лучшем случае O(1), в худшем O(n*n). Какой флаг поставит ему компилятор?да, это самая сложная часть в реализации этой идеи.
...
Рейтинг: 0 / 0
multi-body
    #38440484
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
White Owl,

Будет проблема, я думаю, с наборами взаимозаменяемых алгоритмов.
Таких взаимозаменяемых алгоритмов мне кажется не так уж и много.
SORT -- одно из счастливых исключений.
Но и тут ты уже покривил душой, запихав всё в одну функцию. Сортировки бывают stable и unstable.
...
Рейтинг: 0 / 0
multi-body
    #38440600
White Owl
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MasterZivСортировки бывают stable и unstable.А градацию такого уровня можно отнести в группу strength которую я предлагал для обработчиков графики.


После прочтения уже появившихся постов, я начинаю склоняться к мысли что подобное не будет иметь большого смысла в статической компиляции. А вот для динамической компиляции или в скриптовых языках - может быть интересно.


Собственно говоря я к этой идее из-за этого и пришел. Курочу наш конторский веб-сайт в очередной раз, сражаюсь с javascript и css. У разных браузеров разные возможности и приходится делать кучу подстроек под текущую ситуацию. Вот и возникла мысль превратить фабрику в синтаксис.



О! Еще один пример вспомнил:
VHDL - практически один в один. Реальная реализация этой-же самой идеи. Но там "алгоритмы" можно довольно жестко замерить по разным параметрам и в автомате это делать легко.
А для чистого софта это действительно плоховато подходит.
...
Рейтинг: 0 / 0
multi-body
    #38440722
_мод
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
White OwlО! Еще один пример вспомнил:
Эта идея 60-х годов. OS/360, PICS и прочее. Препроцессор в PL/1
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / Программирование [игнор отключен] [закрыт для гостей] / multi-body
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]