К чему приведёт обобщённое программирование

AI 22.06.2004 - 11:40 | вот я сейчас читаю использую концепсию обобщённого программирования в с++ и немного пугаюсь того что : язык в котором идёт строгая типизация теряет свою роль. отсуствия сил слежения за динамической памятью в STL шаблонах --- к чему идём - ? к подобию явы или языкам где не важен тип тип данных.. Чем станет язык в итоге лет так через 5 ?
silly sad 1 - 22.06.2004 - 14:33 | меня больше прикалывает, что изначально создав безтиповый язык BCPL , добавили к нему потом типы и назвали Ц, а потом некто решил что языку нужна более строгая типизация и добавил два плюса. и теперь вы все дружно боретесь с этой типизацией (см. _variant_t (целый класс создали чтобы обойти типизацию)) - а катится это всё к тому что у класса Буква будет метод Печать.
Сергей 2 - 23.06.2004 - 00:25 | [0] Не совсем понятно, что имелось ввиду... "язык в котором идёт строгая типизация теряет свою роль" В том смысле, что "С++ вытесняется другими языками, с менее строгой типизацией"? Да, много новых - и не очень - языков имеют место быть, но не думаю, что стоит беспокоиться; С++ в настоящее время очень и очень активно используется; очевидное доказательство того, что язык не отправляется "к праотцам" - на рынке постоянно предлагаются все более новые качественные версии компиляторов С++; при этом клиент - то есть разработчики по всему миру - "голосуют рублем" (или долларом - у кого что). Если же имеется ввиду, что шаблоны каким-то образом нарушают строгую типизацию С++ "изнутри" - позволю себе не согласиться и с этим. Что есть типизация? Типизация - это набор правил, описывающих, что именно можно делать с "объектами" языка ("данными", "переменными"...), а что - нельзя. Расcмотрим, например, код: class ClassA {}; class ClassB {}; void F(ClassA &object) { //... }; void main() { ClassA a_object; // все в порядке - компилятор "знает", что к экземплярам ClassA применима F F(a_object); ClassB b_object; // далее - ошибка контроля типов - к экземплярам ClassB не применима F F(b_object); } Что позволяют шаблоны? Они дают возможность описывать алгоритм работы над объектами, исходя из обобщенных (generic) свойств их типов. Например, мы могли бы написать "универсальный вычислитель средней величины": template <class T> T averageValue(T val1, T val2) { return (val1 + val2) / 2; } Применение выглядит совершенно бесконтрольным - какой тип хочу, такой и подставляю; очень смахивает на то, что про типизацию вообще как-то "забыли": averageValue(3, 3); // здесь T "вычислится" как int averageValue(3.7f, 8.95f); // здесь T "вычислится" как float averageValue(3.896, 4.897); // здесь T "вычислится" как double Однако попробуем небольшую "шалость": averageValue("строгая", "типизация"); Компилятор отказывается компилировать код; причина - строгая типизация языка, выраженная в том, что для типа const char* (чем для компилятора и являются переданные параметры) не предусмотрено операции сложения, которую мы пытаемся применить внутри тела шаблонной функции! Строгая типизация не только показала зубы, но и спасла от ошибки (ведь если у нас нет "вменяемого" способа сложить два указателя, будет ли вменяемым результат такого сложения?) Так за кажущейся "мягкотелостью" шаблонов скрывается все та же строгая типизация - при инстанцировании шаблонов компилятор определяет фактический тип переданных параметров (если речь идет о функции) и проводит, исходя их этих фактических типов, полную проверку корректности кода шаблона. По поводу "отсуствия сил слежения за динамической памятью в STL шаблонах" - не вполне понятно, что именно имеется ввиду. Во всех пришедших на ум контейнерах STL в качестве параметров шаблона присутствует тип Allocator, при помощи которого пользователь может повлиять на процесс выделения динамической памяти внутри контейнера; Страуструп в своей книге "Язык програмирования С++" в 19.4.2 приводит пример "пользовательского" распределителя памяти, подменяющего, где необходимо, стандартный для STL-конетйнеров. Собственно код я пропускаю, а применение выглядит довольно просто: std::vector<int, Pool_Alloc<int> > v; [1] "и теперь вы все дружно боретесь с этой типизацией (см. _variant_t (целый класс создали чтобы обойти типизацию))". Признаться, не замечал, чтобы кто-то в моем присутствии целенаправленно боролся с типизацией :) Что касается _variant_t - этот класс не является стандартнаым элементом языка C++, а частью "сторонней" библиотеки поддержки "не сильно" типизированной технолгии Automation; едва ли _variant_t может служить сильным доводом за "распад типизации в С++". Скорее всего, можно говорить лишь о "хорошо укупоренном окошке в нетипизированный мир" :)
Тупой ламер 3 - 23.06.2004 - 09:20 | Позвольте задать вопрос. Я довольно часто наблюдаю на этом форуме вопросы и выпады в сторону различных платформ и средств реализации задач (языков - в частности). А в реальной работе, в которой я варюсь ежесекундно - лично у меня таких вопросов не возникало никогда (НИКОГДА!), как правило, "упираешься" в свою ограниченность... или аднинистративные препоны, или методологические трудности. Неужели те незначительные отличия средств (как правило - семантического, а не семиотического плана), которые Вы используете, настолько Вас волнуют или мешают? Мне просто интересно.
AI 4 - 23.06.2004 - 10:16 | ясненько спасибо Сергей. я немного запутался в определение термина типизации :-)
yeziz 5 - 23.06.2004 - 10:47 | 2 НеТупой ламер: не все и не всегда способны сформулировать проблему как результат собственной ограниченности. А еще "настоящим программистам" хочется, чтобы все было "круто" аж до не могу. На полумеры они не согласны. Ну, и последнее: у каждого свои предпочтения в выборе платформы-языка-и т.д. Отсюда желание свои предпочтения обосновать с той или иной степенью категоричности (зависит от воспитания).
Старый UE 6 - 23.06.2004 - 11:58 | Надо воспринимать шаблоны теми, кто они есть, а именно продвинутыми макросами ;)
silly sad 7 - 23.06.2004 - 12:32 | to #3 иногда такие проблемы бывают, но они возникают на такой глубине познания, что на форумах, вчастности здесь, не обсуждаются. Тот ли это УЕ который фанат виндозы - не узнаЮ.
Сергей 8 - 24.06.2004 - 17:56 | Ну в данной конкретной теме никто и не обсуждает, какой язык "самый-самый". Просто вопрос относительно типобезопасности шаблонов. На которые, конечно, можно смотреть, как на "продвинутые макросы"... Тогда, выходит, водка - это "продвинутое пиво"? :)

>>