OberonCore

Библиотека  Wiki  Форум  BlackBox  Компоненты  Проекты
Текущее время: Воскресенье, 15 Июнь, 2025 20:31

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 20 ] 
Автор Сообщение
СообщениеДобавлено: Среда, 06 Июнь, 2007 23:29 
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
Алексей Елин писал(а):
И что же такое полноценные дженерики, стесняюсь спросить?
Чем они отличаются от "неполноценных", кроме мизерных накладных расходов на неявное разыменование указателей для статических полей-рекордов?

Ага, если бы vector<int> в STL тоже делался с "всего-то одним лишним уровнем косвенности", то его популярность бы сильно поубавилась...
Дело в том, что для динамических объектов дженерики как раз не сильно нужны - там можно себе позволить задействовать ОО-полиморфизм и т.п. Хочется дженериков для построения библиотеки базовых алгоритмов, работающих с любыми типами, начиная с атомарных - и без оверхеда. С оверхедом я вам и без дженериков напишу общий алгоритм - через метапрограммирование можно работать как угодно и с чем угодно...


Последний раз редактировалось Илья Ермаков Четверг, 07 Июнь, 2007 22:07, всего редактировалось 2 раз(а).

Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Среда, 06 Июнь, 2007 23:47 

Зарегистрирован: Суббота, 28 Январь, 2006 00:10
Сообщения: 52
Откуда: г. Киров
Илья Ермаков писал(а):
С оверхедом я вам и без дженериков напишу общий алгоритм - через метапрограммирование можно работать как угодно и с чем угодно...


Я и сам напишу, и с мета, без мета. Потому их и не использую. Но хочется иногда себе жизнь чуть чуть упростить, для самых примитивов, чтоб меньше писанины, но только для них! никих STL! :evil:

Правда в жизни так не бывает: есть инструмент - будут пользоваться. :(


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Четверг, 07 Июнь, 2007 00:19 
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
Ну да :-)

Вон в ББ нет стандартной алгоритмической-контейнерной библиотеки - и ничего, вполне себе все нормально. Когда надо, пишется с полпинка и не особенно напрягает. Но я понимаю, что это нормально для меня - системщика! А при продвижении ББ в написание типового бизнес-ПО стандартной прикладной библиотеки ох как нехватать будет народу... Особенно разбалованному народу...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Четверг, 07 Июнь, 2007 06:39 

Зарегистрирован: Суббота, 26 Ноябрь, 2005 18:38
Сообщения: 1857
Илья Ермаков писал(а):
Ну да :-)

Вон в ББ нет стандартной алгоритмической-контейнерной библиотеки - и ничего, вполне себе все нормально. Когда надо, пишется с полпинка и не особенно напрягает. Но я понимаю, что это нормально для меня - системщика!


Как связаны системное программирование и необходимость каждый раз писать связный список или бинарный поиск?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Четверг, 07 Июнь, 2007 10:16 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 18:55
Сообщения: 2272
Откуда: Россия, Нижний Новгород
Vlad писал(а):
Как связаны системное программирование и необходимость каждый раз писать связный список или бинарный поиск?

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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Четверг, 07 Июнь, 2007 10:46 

Зарегистрирован: Суббота, 26 Ноябрь, 2005 18:38
Сообщения: 1857
Сергей Губанов писал(а):
Vlad писал(а):
Как связаны системное программирование и необходимость каждый раз писать связный список или бинарный поиск?

У "системщика", обычно, контейнеры бывают весьма специфические.


А в процентном соотношении какова доля специфических контейнеров и обычных? И уж конечно системщики никогда не пишут "обычный" поиск, каждый раз специфический?

Сергей Губанов писал(а):
в силу "системности" задачи было бы неоправданным оверхедом по памяти и производительности. У "прикладника" такой оверхед - нормальное явление.


А что за системная задача такая, в двух словах можно описать?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Четверг, 07 Июнь, 2007 12:06 
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
Написание этого самого "особого поиска" - 10 секунд времени и 3 строчки кода...

Кстати, в качестве стандартного контейнера можно использовать массив переменной длины - SetLength начиная с Service Pack 4 я ввел. Можно и алгоритмы обобщенные написать для массивов - есть возможность описать процедуру, принимающуюю указатель на любой массив с любым базовым типом (как SetLength). Лично я этим практически не пользуюсь, но интересно - кто-то SetLength пользует? Если пользует, давайте помозгуем о небольшой библиотечке алгоритмов...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Четверг, 07 Июнь, 2007 12:44 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 18:55
Сообщения: 2272
Откуда: Россия, Нижний Новгород
Vlad писал(а):
А в процентном соотношении какова доля специфических контейнеров и обычных? И уж конечно системщики никогда не пишут "обычный" поиск, каждый раз специфический?
А что за системная задача такая, в двух словах можно описать?

Все мои контейнеры специфичные. Однако, иногда, конечно, внутри них используются стандартные generic контейнеры. Я пишу ядро дотнетной части VoIP системы ( http://www.mera.ru/products/siprise.html ) и всё тут должно работать быстро и есть очень мало памяти. Там на сайте указаны технические характеристики ~ 5000 абонентов, на самом деле мне уже тут удалось оптимизировать ядро на столько что можно обслуживать абонентов на порядок больше (40'000). В перспективе, хотелось бы обслуживать до 2-3 миллионов абонентов (это уже конечно с использованием целого кластера персональных компьютеров).


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Четверг, 07 Июнь, 2007 13:00 

Зарегистрирован: Суббота, 26 Ноябрь, 2005 18:38
Сообщения: 1857
Илья Ермаков писал(а):
Написание этого самого "особого поиска" - 10 секунд времени и 3 строчки кода...


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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Четверг, 07 Июнь, 2007 13:03 

Зарегистрирован: Суббота, 26 Ноябрь, 2005 18:38
Сообщения: 1857
Сергей Губанов писал(а):
Я пишу ядро дотнетной части VoIP системы ( http://www.mera.ru/products/siprise.html ) и всё тут должно работать быстро и есть очень мало памяти.


Почему тогда .NET? Небезопасность C/C++ нивелирует меньшие требования к памяти?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Четверг, 07 Июнь, 2007 14:48 
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
Vlad писал(а):
Илья Ермаков писал(а):
Написание этого самого "особого поиска" - 10 секунд времени и 3 строчки кода...


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

Оверхед вроде был бы и небольшой - но когда вместо точной реализации будет использоваться "приближенно подходящая" из библиотеки - и так в тысячах мест системы... И мизерный в отдельном случае оверхед множится на эту тысячу мест. Вот и стартует Дельфа и Студия больше минуты на новых процессорах, а Блэкбокс и на 486-м летает до сих пор...


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Четверг, 07 Июнь, 2007 16:40 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 18:55
Сообщения: 2272
Откуда: Россия, Нижний Новгород
Vlad писал(а):
Почему тогда .NET? Небезопасность C/C++ нивелирует меньшие требования к памяти?

По чисто экономическим соображениям. Разработка на дотнете существенно быстрее, дешевле и предоставляет куда большие возможности в плане алгоритмической сложности чем на C++ (на С++ замучаешься отлаживать, потеряешь кучу времени, да и реальным специалистам по С++ нужно кучу денег платить). У нас система комбинированная. Фиксированная часть отвечающая за переключение и конвертацию медиа-потоков написана на C++. Масштабируемая часть отвечающая за бизнес логику работы системы - на дотнете. В параллельном нашему проекте вместо дотнета для тех же самых целей что и мы используют Питон, он им больше нравится. Но там бизнес логика не такая серьёзная и масштабируемая как у нас.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Четверг, 07 Июнь, 2007 19:46 

Зарегистрирован: Четверг, 17 Ноябрь, 2005 11:51
Сообщения: 2935
Откуда: г. Ярославль
Илья Ермаков писал(а):
...интересно - кто-то SetLength пользует? Если пользует, давайте помозгуем о небольшой библиотечке алгоритмов...


Вообще пользуем, удобная штука.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Четверг, 07 Июнь, 2007 22:02 
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
А повторно используемый набор алгоритмов не пробовали выделять?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пятница, 08 Июнь, 2007 06:03 

Зарегистрирован: Суббота, 26 Ноябрь, 2005 18:38
Сообщения: 1857
Сергей Губанов писал(а):
У нас система комбинированная. Фиксированная часть отвечающая за переключение и конвертацию медиа-потоков написана на C++. Масштабируемая часть отвечающая за бизнес логику работы системы - на дотнете.


И эта бизнес логика должна работать очень быстро и есть мало памяти?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пятница, 08 Июнь, 2007 06:25 

Зарегистрирован: Суббота, 26 Ноябрь, 2005 18:38
Сообщения: 1857
Илья Ермаков писал(а):
А повторно используемый набор алгоритмов не пробовали выделять?


Без дженериков в этом смысла особого нет. Потому что в случае часто используемых неспециализированных алгоритмов скопипастить будет проще, чем "повторно использовать".


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пятница, 08 Июнь, 2007 11:24 
Аватара пользователя

Зарегистрирован: Пятница, 25 Ноябрь, 2005 18:55
Сообщения: 2272
Откуда: Россия, Нижний Новгород
Vlad писал(а):
И эта бизнес логика должна работать очень быстро и есть мало памяти?

Ну, это уже мечта...

Идея в том, что есть некий фрэймворк (ядро) в среде которого запускаются "сервисы" бизнес логики. Вот это вот ядро должно работать очень быстро и есть мало памяти.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пятница, 08 Июнь, 2007 12:51 
Аватара пользователя

Зарегистрирован: Понедельник, 14 Ноябрь, 2005 18:39
Сообщения: 9459
Откуда: Россия, Орёл
Vlad писал(а):
Илья Ермаков писал(а):
А повторно используемый набор алгоритмов не пробовали выделять?


Без дженериков в этом смысла особого нет. Потому что в случае часто используемых неспециализированных алгоритмов скопипастить будет проще, чем "повторно использовать".


Я имею в виду алгоритмы на массивах. КП в реализации Блэкбокса позволяет писать процедуру, принимающую любой указатель - например, на массив любого базового типа (SYSTEM.PTR) и выяснять, что это за массив и из скольки элементов какого типа он состоит.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пятница, 08 Июнь, 2007 13:28 

Зарегистрирован: Суббота, 26 Ноябрь, 2005 18:38
Сообщения: 1857
Илья Ермаков писал(а):
Я имею в виду алгоритмы на массивах. КП в реализации Блэкбокса позволяет писать процедуру, принимающую любой указатель - например, на массив любого базового типа (SYSTEM.PTR) и выяснять, что это за массив и из скольки элементов какого типа он состоит.


Массив элементов базовых типов - это очень сильное ограничение. На практике обычно используются динамические последовательности из элементов пользовательского типа.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения:
СообщениеДобавлено: Пятница, 08 Июнь, 2007 18:08 

Зарегистрирован: Четверг, 17 Ноябрь, 2005 11:51
Сообщения: 2935
Откуда: г. Ярославль
Илья Ермаков писал(а):
А повторно используемый набор алгоритмов не пробовали выделять?


Да особо нет, кроме матричных преобразований для 3d-графики, и какие-то геометрические вычисления.
Но сейчас вытанцовывается некая обобщённая конструкция пользовательского интерфейса к БД — кстати, как раз там и динамический массивчик с SetLength используем.

Vlad писал(а):
Без дженериков в этом смысла особого нет. Потому что в случае часто используемых неспециализированных алгоритмов скопипастить будет проще, чем "повторно использовать".


Я шаблонов накушался в Clarione, на всю оставшуюся жизнь — как-то и без них прекрасно живётся.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 20 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 2


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Вся информация, размещаемая участниками на конференции (тексты сообщений, вложения и пр.) © 2005-2025, участники конференции «OberonCore», если специально не оговорено иное.
Администрация не несет ответственности за мнения, стиль и достоверность высказываний участников, равно как и за безопасность материалов, предоставляемых участниками во вложениях.
Без разрешения участников и ссылки на конференцию «OberonCore» любое воспроизведение и/или копирование высказываний полностью и/или по частям запрещено.
Powered by phpBB® Forum Software © phpBB Group
Русская поддержка phpBB