OberonCore https://forum.oberoncore.ru/ |
|
Повторно используемые структуры данных-алгоритмы https://forum.oberoncore.ru/viewtopic.php?f=23&t=506 |
Страница 1 из 1 |
Автор: | Илья Ермаков [ Среда, 06 Июнь, 2007 23:29 ] |
Заголовок сообщения: | Повторно используемые структуры данных-алгоритмы |
Алексей Елин писал(а): И что же такое полноценные дженерики, стесняюсь спросить?
Чем они отличаются от "неполноценных", кроме мизерных накладных расходов на неявное разыменование указателей для статических полей-рекордов? Ага, если бы vector<int> в STL тоже делался с "всего-то одним лишним уровнем косвенности", то его популярность бы сильно поубавилась... Дело в том, что для динамических объектов дженерики как раз не сильно нужны - там можно себе позволить задействовать ОО-полиморфизм и т.п. Хочется дженериков для построения библиотеки базовых алгоритмов, работающих с любыми типами, начиная с атомарных - и без оверхеда. С оверхедом я вам и без дженериков напишу общий алгоритм - через метапрограммирование можно работать как угодно и с чем угодно... |
Автор: | Алексей Елин [ Среда, 06 Июнь, 2007 23:47 ] |
Заголовок сообщения: | |
Илья Ермаков писал(а): С оверхедом я вам и без дженериков напишу общий алгоритм - через метапрограммирование можно работать как угодно и с чем угодно...
Я и сам напишу, и с мета, без мета. Потому их и не использую. Но хочется иногда себе жизнь чуть чуть упростить, для самых примитивов, чтоб меньше писанины, но только для них! никих STL! ![]() Правда в жизни так не бывает: есть инструмент - будут пользоваться. ![]() |
Автор: | Илья Ермаков [ Четверг, 07 Июнь, 2007 00:19 ] |
Заголовок сообщения: | |
Ну да ![]() Вон в ББ нет стандартной алгоритмической-контейнерной библиотеки - и ничего, вполне себе все нормально. Когда надо, пишется с полпинка и не особенно напрягает. Но я понимаю, что это нормально для меня - системщика! А при продвижении ББ в написание типового бизнес-ПО стандартной прикладной библиотеки ох как нехватать будет народу... Особенно разбалованному народу... |
Автор: | Vlad [ Четверг, 07 Июнь, 2007 06:39 ] |
Заголовок сообщения: | |
Илья Ермаков писал(а): Ну да
![]() Вон в ББ нет стандартной алгоритмической-контейнерной библиотеки - и ничего, вполне себе все нормально. Когда надо, пишется с полпинка и не особенно напрягает. Но я понимаю, что это нормально для меня - системщика! Как связаны системное программирование и необходимость каждый раз писать связный список или бинарный поиск? |
Автор: | Сергей Губанов [ Четверг, 07 Июнь, 2007 10:16 ] |
Заголовок сообщения: | |
Vlad писал(а): Как связаны системное программирование и необходимость каждый раз писать связный список или бинарный поиск?
У "системщика", обычно, контейнеры бывают весьма специфические. Их в любом случае придётся каждый раз писать самому. Например, позавчера мне понадобилась некая особая смесь хэштаблицы со списком, а использовать вместо неё два стандартных контейнера: хештаблицу и список в силу "системности" задачи было бы неоправданным оверхедом по памяти и производительности. У "прикладника" такой оверхед - нормальное явление. |
Автор: | Vlad [ Четверг, 07 Июнь, 2007 10:46 ] |
Заголовок сообщения: | |
Сергей Губанов писал(а): Vlad писал(а): Как связаны системное программирование и необходимость каждый раз писать связный список или бинарный поиск? У "системщика", обычно, контейнеры бывают весьма специфические. А в процентном соотношении какова доля специфических контейнеров и обычных? И уж конечно системщики никогда не пишут "обычный" поиск, каждый раз специфический? Сергей Губанов писал(а): в силу "системности" задачи было бы неоправданным оверхедом по памяти и производительности. У "прикладника" такой оверхед - нормальное явление.
А что за системная задача такая, в двух словах можно описать? |
Автор: | Илья Ермаков [ Четверг, 07 Июнь, 2007 12:06 ] |
Заголовок сообщения: | |
Написание этого самого "особого поиска" - 10 секунд времени и 3 строчки кода... Кстати, в качестве стандартного контейнера можно использовать массив переменной длины - SetLength начиная с Service Pack 4 я ввел. Можно и алгоритмы обобщенные написать для массивов - есть возможность описать процедуру, принимающуюю указатель на любой массив с любым базовым типом (как SetLength). Лично я этим практически не пользуюсь, но интересно - кто-то SetLength пользует? Если пользует, давайте помозгуем о небольшой библиотечке алгоритмов... |
Автор: | Сергей Губанов [ Четверг, 07 Июнь, 2007 12:44 ] |
Заголовок сообщения: | |
Vlad писал(а): А в процентном соотношении какова доля специфических контейнеров и обычных? И уж конечно системщики никогда не пишут "обычный" поиск, каждый раз специфический?
А что за системная задача такая, в двух словах можно описать? Все мои контейнеры специфичные. Однако, иногда, конечно, внутри них используются стандартные generic контейнеры. Я пишу ядро дотнетной части VoIP системы ( http://www.mera.ru/products/siprise.html ) и всё тут должно работать быстро и есть очень мало памяти. Там на сайте указаны технические характеристики ~ 5000 абонентов, на самом деле мне уже тут удалось оптимизировать ядро на столько что можно обслуживать абонентов на порядок больше (40'000). В перспективе, хотелось бы обслуживать до 2-3 миллионов абонентов (это уже конечно с использованием целого кластера персональных компьютеров). |
Автор: | Vlad [ Четверг, 07 Июнь, 2007 13:00 ] |
Заголовок сообщения: | |
Илья Ермаков писал(а): Написание этого самого "особого поиска" - 10 секунд времени и 3 строчки кода...
Понятно. Значит все-таки стандартные контейнеры и алгоритмы нужны и для системного программирования, просто их нельзя реализовать в удобном для использования виде. |
Автор: | Vlad [ Четверг, 07 Июнь, 2007 13:03 ] |
Заголовок сообщения: | |
Сергей Губанов писал(а): Я пишу ядро дотнетной части VoIP системы ( http://www.mera.ru/products/siprise.html ) и всё тут должно работать быстро и есть очень мало памяти.
Почему тогда .NET? Небезопасность C/C++ нивелирует меньшие требования к памяти? |
Автор: | Илья Ермаков [ Четверг, 07 Июнь, 2007 14:48 ] |
Заголовок сообщения: | |
Vlad писал(а): Илья Ермаков писал(а): Написание этого самого "особого поиска" - 10 секунд времени и 3 строчки кода... Понятно. Значит все-таки стандартные контейнеры и алгоритмы нужны и для системного программирования, просто их нельзя реализовать в удобном для использования виде. Оверхед вроде был бы и небольшой - но когда вместо точной реализации будет использоваться "приближенно подходящая" из библиотеки - и так в тысячах мест системы... И мизерный в отдельном случае оверхед множится на эту тысячу мест. Вот и стартует Дельфа и Студия больше минуты на новых процессорах, а Блэкбокс и на 486-м летает до сих пор... |
Автор: | Сергей Губанов [ Четверг, 07 Июнь, 2007 16:40 ] |
Заголовок сообщения: | |
Vlad писал(а): Почему тогда .NET? Небезопасность C/C++ нивелирует меньшие требования к памяти?
По чисто экономическим соображениям. Разработка на дотнете существенно быстрее, дешевле и предоставляет куда большие возможности в плане алгоритмической сложности чем на C++ (на С++ замучаешься отлаживать, потеряешь кучу времени, да и реальным специалистам по С++ нужно кучу денег платить). У нас система комбинированная. Фиксированная часть отвечающая за переключение и конвертацию медиа-потоков написана на C++. Масштабируемая часть отвечающая за бизнес логику работы системы - на дотнете. В параллельном нашему проекте вместо дотнета для тех же самых целей что и мы используют Питон, он им больше нравится. Но там бизнес логика не такая серьёзная и масштабируемая как у нас. |
Автор: | Иван Кузьмицкий [ Четверг, 07 Июнь, 2007 19:46 ] |
Заголовок сообщения: | |
Илья Ермаков писал(а): ...интересно - кто-то SetLength пользует? Если пользует, давайте помозгуем о небольшой библиотечке алгоритмов...
Вообще пользуем, удобная штука. |
Автор: | Илья Ермаков [ Четверг, 07 Июнь, 2007 22:02 ] |
Заголовок сообщения: | |
А повторно используемый набор алгоритмов не пробовали выделять? |
Автор: | Vlad [ Пятница, 08 Июнь, 2007 06:03 ] |
Заголовок сообщения: | |
Сергей Губанов писал(а): У нас система комбинированная. Фиксированная часть отвечающая за переключение и конвертацию медиа-потоков написана на C++. Масштабируемая часть отвечающая за бизнес логику работы системы - на дотнете.
И эта бизнес логика должна работать очень быстро и есть мало памяти? |
Автор: | Vlad [ Пятница, 08 Июнь, 2007 06:25 ] |
Заголовок сообщения: | |
Илья Ермаков писал(а): А повторно используемый набор алгоритмов не пробовали выделять?
Без дженериков в этом смысла особого нет. Потому что в случае часто используемых неспециализированных алгоритмов скопипастить будет проще, чем "повторно использовать". |
Автор: | Сергей Губанов [ Пятница, 08 Июнь, 2007 11:24 ] |
Заголовок сообщения: | |
Vlad писал(а): И эта бизнес логика должна работать очень быстро и есть мало памяти?
Ну, это уже мечта... Идея в том, что есть некий фрэймворк (ядро) в среде которого запускаются "сервисы" бизнес логики. Вот это вот ядро должно работать очень быстро и есть мало памяти. |
Автор: | Илья Ермаков [ Пятница, 08 Июнь, 2007 12:51 ] |
Заголовок сообщения: | |
Vlad писал(а): Илья Ермаков писал(а): А повторно используемый набор алгоритмов не пробовали выделять? Без дженериков в этом смысла особого нет. Потому что в случае часто используемых неспециализированных алгоритмов скопипастить будет проще, чем "повторно использовать". Я имею в виду алгоритмы на массивах. КП в реализации Блэкбокса позволяет писать процедуру, принимающую любой указатель - например, на массив любого базового типа (SYSTEM.PTR) и выяснять, что это за массив и из скольки элементов какого типа он состоит. |
Автор: | Vlad [ Пятница, 08 Июнь, 2007 13:28 ] |
Заголовок сообщения: | |
Илья Ермаков писал(а): Я имею в виду алгоритмы на массивах. КП в реализации Блэкбокса позволяет писать процедуру, принимающую любой указатель - например, на массив любого базового типа (SYSTEM.PTR) и выяснять, что это за массив и из скольки элементов какого типа он состоит.
Массив элементов базовых типов - это очень сильное ограничение. На практике обычно используются динамические последовательности из элементов пользовательского типа. |
Автор: | Иван Кузьмицкий [ Пятница, 08 Июнь, 2007 18:08 ] |
Заголовок сообщения: | |
Илья Ермаков писал(а): А повторно используемый набор алгоритмов не пробовали выделять? Да особо нет, кроме матричных преобразований для 3d-графики, и какие-то геометрические вычисления. Но сейчас вытанцовывается некая обобщённая конструкция пользовательского интерфейса к БД — кстати, как раз там и динамический массивчик с SetLength используем. Vlad писал(а): Без дженериков в этом смысла особого нет. Потому что в случае часто используемых неспециализированных алгоритмов скопипастить будет проще, чем "повторно использовать".
Я шаблонов накушался в Clarione, на всю оставшуюся жизнь — как-то и без них прекрасно живётся. |
Страница 1 из 1 | Часовой пояс: UTC + 3 часа |
Powered by phpBB® Forum Software © phpBB Group https://www.phpbb.com/ |