|
|
|
multi-body
|
|||
|---|---|---|---|
|
#18+
Сразу предупреждаю: это все чисто теоретические рассуждения. Базовая идея: Для функции определяем два (три-десять) разных реализаций. Компилятор сам решает какую из них взять. Функция имеет заголовок и несколько тел. Например так: Код: sql 1. 2. 3. 4. собираем это все в библиотеку. Потом в приложении вызываем sort(a); а при итоговой сборке ставим компилятору флаг "-speed" или "-memory". В соответствии с этим флагом компилятор подхватывает либо ту, либо другую реализацию sort(array). В плюсах этого я вижу: - не надо задумываться во время написания какой из примитивных алгоритмов брать в каждом конкретном случае. - Упростится кросс-платформенное написание - можно будет собирать либо для десктопа, либо для микроконтроллера из одного общего исходника, а оптимизация под платформу пойдет автоматически. В минусах: - не очень большое количество алгоритмов получат выигрыш от такого подхода. - сложно автоматом определить к какому флагу оптимизации относится та или другая реализация. флаги оптимизации которые я сходу могу назвать это: -speed, -memory, -singlethread, -multithread и что-то в духе -strength=N для тяжелых алгоритмов которые могут работать тщательно, а могут быстро (типа архиваторов, преобразователей картинок и тп). Мысли? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.10.2013, 18:26 |
|
||
|
multi-body
|
|||
|---|---|---|---|
|
#18+
Одним флагом тут, имхо, не отделаешься. Ведь вполне может быть, что массив А нужно отсортировать как можно быстрее, а в соседней строчке массив B нужно сортировать с экономией памяти. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.10.2013, 18:34 |
|
||
|
multi-body
|
|||
|---|---|---|---|
|
#18+
Ну это можно решить либо расширенным синтаксисом вызова функции. Что-то типа: Код: sql 1. 2. Либо переключателями в духе pragma: Код: sql 1. 2. 3. 4. 5. С третей стороны, каждая реализация функции может иметь свой набор флагов определяющих область применимости. Код: sql 1. 2. 3. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.10.2013, 18:51 |
|
||
|
multi-body
|
|||
|---|---|---|---|
|
#18+
White OwlНу это можно решить либо расширенным синтаксисом вызова функции. Что-то типа: Код: sql 1. 2. Либо переключателями в духе pragma: Код: sql 1. 2. 3. 4. 5. А тогда какой смысл огород городить? Сразу нужную функцию и вызвать. White OwlС третей стороны, каждая реализация функции может иметь свой набор флагов определяющих область применимости. Код: sql 1. 2. 3. Можно сделать все то же самое в функции-обертке. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.10.2013, 19:24 |
|
||
|
multi-body
|
|||
|---|---|---|---|
|
#18+
White OwlБазовая идея: Для функции определяем два (три-десять) разных реализаций. Компилятор сам решает какую из них взять. Мне кажется, для этого не нужно какой-то специфической поддержки со стороны компилятора. Это вполне легко делается существующими инструментами, начиная с макрогенератора. Что касается "автоматом определить", то это нереальная лирика. Скажем, алгоритм имеет временную сложность в лучшем случае O(1), в худшем O(n*n). Какой флаг поставит ему компилятор? Туда же - про микроконтроллеры на той же платформе, имхо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.10.2013, 19:26 |
|
||
|
multi-body
|
|||
|---|---|---|---|
|
#18+
miksoftМожно сделать все то же самое в функции-обертке.Да, можно, для рантайма будет даже удобно: есть память - жрём, нету - экономим. Но тогда мы будем тащить за собой три функции вместо одной - две реализации и один враппер выбирающий которую из реализаций использовать сейчас. softwarerЧто касается "автоматом определить", то это нереальная лирика. Скажем, алгоритм имеет временную сложность в лучшем случае O(1), в худшем O(n*n). Какой флаг поставит ему компилятор?да, это самая сложная часть в реализации этой идеи. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.10.2013, 20:08 |
|
||
|
multi-body
|
|||
|---|---|---|---|
|
#18+
White Owl, Будет проблема, я думаю, с наборами взаимозаменяемых алгоритмов. Таких взаимозаменяемых алгоритмов мне кажется не так уж и много. SORT -- одно из счастливых исключений. Но и тут ты уже покривил душой, запихав всё в одну функцию. Сортировки бывают stable и unstable. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.10.2013, 20:41 |
|
||
|
multi-body
|
|||
|---|---|---|---|
|
#18+
MasterZivСортировки бывают stable и unstable.А градацию такого уровня можно отнести в группу strength которую я предлагал для обработчиков графики. После прочтения уже появившихся постов, я начинаю склоняться к мысли что подобное не будет иметь большого смысла в статической компиляции. А вот для динамической компиляции или в скриптовых языках - может быть интересно. Собственно говоря я к этой идее из-за этого и пришел. Курочу наш конторский веб-сайт в очередной раз, сражаюсь с javascript и css. У разных браузеров разные возможности и приходится делать кучу подстроек под текущую ситуацию. Вот и возникла мысль превратить фабрику в синтаксис. О! Еще один пример вспомнил: VHDL - практически один в один. Реальная реализация этой-же самой идеи. Но там "алгоритмы" можно довольно жестко замерить по разным параметрам и в автомате это делать легко. А для чистого софта это действительно плоховато подходит. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 25.10.2013, 00:59 |
|
||
|
|

start [/forum/topic.php?fid=16&msg=38440454&tid=1341617]: |
0ms |
get settings: |
5ms |
get forum list: |
9ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
51ms |
get topic data: |
5ms |
get forum data: |
1ms |
get page messages: |
27ms |
get tp. blocked users: |
1ms |
| others: | 212ms |
| total: | 315ms |

| 0 / 0 |
