Здравствуйте, Сергей Губанов, Вы писали:
СГ>Начиная с Modula эти языки являются модульными. Шаблоны в модульных языках практического смысла не имеют.
Т.е. обобщенные типы и методы в .Net 2 не имеют практического смысла? СГ> Вот, например, в не модульном языке С++ шаблоны имеют практический смысл потому что можно один раз написать шаблон в одном текстовом файле, а потом инклюдить этот текстовый файл в другие текстовые файлы исходного кода программы и многократно использовать этот шаблон. В модульных языках программирования отсутсвует само понятие инклюда, там используется импорт (уже скомпилированных — бинарных) модулей, стало быть шаблоны, если бы они были, пришлось бы писать в каждом модуле заново — отсюда и исчезновение практического смысла.
Оба утверждения не верны.
... << RSDN@Home 1.1.4 beta 3 rev. 185>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
s.ts пишет:
> ... но как выяснилось, большинство пишущих на с++ пишут на нем в стиле > плохого дельфи-кодераочень многие не могут даже на паскале нормально > написать
А большинство пишущих на Паскале/Дельфи — студенты и школьники. Говорить
о качестве их кода или промолчать?
Еще предлагаю посчитать среднюю температуру по программистам на Дельфи и
С++.
Здравствуйте, Сергей Губанов, Вы писали: СГ>Под шаблонами я имел ввиду templates — подстановка текста, а не generic.
Я думаю, Коденок под шаблонами имел в виду именно средства обобщенного программирования. Поэтому отмазки про невозможность и ненужность идут мимо кассы.
... << RSDN@Home 1.1.4 beta 3 rev. 185>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Здравствуйте, Cyberax, Вы писали:
C>Да???? Это С++ с его механизмом раздельной компиляции — не модульный C>язык????
IMHO, Вы путаете раздельную (separate) и независимую (independent) компиляцию.
Но существует одно качество, которое нельзя купить, — это надежность. Цена надежности — погоня за крайней простотой. Это цена, которую очень богатому труднее всего заплатить.
Здравствуйте, Сергей Губанов, Вы писали:
СГ> Однако, вместо шаблонов в модульных языках можно применять так называемые generics — они, конечно, не идентичны templates, но все же могут быть полезны.
Всегда считал, что templates и generics это два термина, принятые в разных языках/сообществах для обозначения одного и того же: параметризованных (или обобщённых) алгоритмов и типов.
У Вас есть возможность рассказать поподробнее о различиях между этими терминами — откуда у них ноги растут и в чём отличие?
Здравствуйте, tarkil, Вы писали:
T>Здравствуйте, Сергей Губанов, Вы писали:
СГ>> Однако, вместо шаблонов в модульных языках можно применять так называемые generics — они, конечно, не идентичны templates, но все же могут быть полезны.
T>Всегда считал, что templates и generics это два термина, принятые в разных языках/сообществах для обозначения одного и того же: параметризованных (или обобщённых) алгоритмов и типов.
T>У Вас есть возможность рассказать поподробнее о различиях между этими терминами — откуда у них ноги растут и в чём отличие?
templates — грубо говоря подстановка на уровне исходного текста (в runtime никаких templates нету)
generic — что-то отдаленно напоминающее COM интерфейсы, т.е. проверка принадлежности например типа объекта к generic типу осуществляется динамически в runtime.
Сергей Губанов пишет:
> T>У Вас есть возможность рассказать поподробнее о различиях между > этими терминами — откуда у них ноги растут и в чём отличие? > templates — грубо говоря подстановка на уровне исходного текста (в > runtime никаких templates нету) > generic — что-то отдаленно напоминающее COM интерфейсы, т.е. проверка > принадлежности например типа объекта к generic типу осуществляется > динамически в runtime.
Generics в .NET- это тоже создание типа по его шаблону. Просто generic'и
_инстанцируются_ на этапе выполнения из специального промежуточного
кода, так что по сравнению с С++-template'ами имеются некоторые ограничения.
В Java генерики — это просто средство контроля типов на этапе компиляции.
Здравствуйте, Сергей Губанов, Вы писали:
СГ>templates — грубо говоря подстановка на уровне исходного текста (в runtime никаких templates нету) СГ>generic — что-то отдаленно напоминающее COM интерфейсы, т.е. проверка принадлежности например типа объекта к generic типу осуществляется динамически в runtime.
А если пользуется что-то типа отложенной на момент загрузки компиляции? Отличия от runtime проверок в том, что последние выполняются при каждом вызове функции, а описываемый вариант — только при загрузке модуля. На момент загрузки известны типы, с которыми она будет использоваться и генерятся необходимые instances.
Как назвать такую схему? Я думал, все эти три способа обозначаются общим термином generics.
Здравствуйте, DEMON HOOD, Вы писали:
DH>Чегото вспомнилось сегодня, решил запостить...
DH>Начинал программировать на паскале, причина тривиальная — в наличии был только компилятор паскаля. IDE Borland Pascal DH>потом появилась у меня IDE Borland C. И там и там были жёлтые буквы на синем фоне да и паскаль от си не сильно отличается, DH>но единственная фича которая перевесила в пользу си — это возможность обьявлять переменные в произвольном месте , а не где-то там, в блоке var.
Ага, это аргумент такого же уровня, что и "Писать на С быстрей, потому что {} быстрей чем begin-end". ИМХО — не серьезно.
Здравствуйте, slegkapjan, Вы писали:
Кё>>Ну как раз против Си Паскаль держится очень уверенно и лично я бы предпочел не очень удобный паскалевский синтаксис и ОО, чем Си и старательную эмуляцию ООП через структуры и хранимые в них указатели на функции. А вот современный C++ — совершенно другое дело S>ИМХО -- не сравнивать Object Pascal и Си некорректно.
Может быть тут имелся в виду Pascal 7 with objects (кажется так назывался)?
Здравствуйте, DangerDen, Вы писали:
DD>Здравствуйте, Аноним, Вы писали:
DD>ПОлностью согласен!
DD>Когда я знал более менее паскаль, мне умные люди рассказывали как круто знать С и С++. Что его могут знать лишь избранные (я жил в маленьком городе и там таких не было ). И тогда я понял надо бросать Паскаль и Дельфи и рулить к Visual Studio (тогда я думал что это тоже что и С++) — то что там нельзя написать прогу мышкой доказывало мне силу С++ .
А вот неправда ваша!
Сколько-нибудь сложную программу на Delphi написать нельзя. Обработсики кнопок все равно руками нужно делать. А вот был такой VisualAge for C++ v.3.6. (По крайней мере в этой версии точно было) года эдак 1996-1998 (не позднее). Так там стово Visual отрабатывало. Формочка по работе со списком элементов (список, строка вводе, кнопки на добавление, правку, удаление элементов и их обработчики) делалать ТОЛЬКО мышой!
Жаль мало его поковырять удалось. А IBM очередную пару по маркетингу!!!
ST>продолжение из моего опыта:
ST>... но как выяснилось, большинство пишущих на с++ пишут на нем в стиле плохого дельфи-кодераочень многие не могут даже на паскале нормально написать (как выразился один мой коллега-дельфин: "тут ведь если компилируется, то работает!" — это про паскаль конечно). Люди, пишущие на C++ не знают stl, не используют шаблоны и нэймспэйсы, создают кучу глобальных переменных, называя их MyVar и ... вообще, даже страуструпа похоже не читали. ST>зато все мегабаксовые вакансии с работных сайтов с гордыми заголовками "С++" для них. и рекрутеры пытаются выудить из потока г... ST>мнда...
ST>добавлю в заклюении, то все встретившиекся в моей жизни дебилы от программирования (кроме одного ) писали на С++
"Это еще что! Сейчас даже ездовые академики встречаются!" (с) папа Дяди Федора. Я тут мучаюсь с дебилом от написания ТЗ!
Имхо — хуже. Весь отдел стонет!
Здравствуйте, slegkapjan, Вы писали:
S>учителей; Паскаль — для студентов; Лого — для детей; АПЛ — для S>марсиан; Форт, Лисп и Пролог — специализированные языки. Один Си S>— это язык для программистов.
"АПЛ — создана для решения стратегических задач" (с) капитан 2 ранга Кравцов. Кафедра ВМФ.
ЗЫ
АПЛ — Атомная подводная лодка. Хотя сейчас правильнее РПКСН.
Сори за офтоп. Но не мог упустить — вдолбили наверно на всю жизнь.
A>НО! Если нужно писать прикладные программы не критичные по скорости, не затрагивающие низкоуровневое программирование — Паскаль — очень даже неплохой выбор. В Delphi многие огрехи паскаля исправили, но далеко не все.
Не всегда скорость конечного продукта является определяющей. Важнее остаются показатели скорость разрабоки/качество или стоимость/качество.
Информация к размышлению:
Мой бывший преподаватель был в жюри (не знаю как точно называется, может орг. комитет) всероссийских олимпиад по программированию. Так он мне рассказывал об интересной статистике. Оказывается что бОльшая часть участников использует Паскаль. И не потому что это студенты и они на нем обучались (Ведь для умеющего программировать — выбор языка не первая задача. Я думаю эти ребята умеют программировать ), а потому что в условиях дефицита времени важно иметь возможность отловить большинство ошибок на момент компиляции.
ЗЫ
Информация взята с чужих слов, юридической силой не обладает
Gust пишет:
> Информация к размышлению: > Мой бывший преподаватель был в жюри (не знаю как точно называется, > может орг. комитет) всероссийских олимпиад по программированию. Так он > мне рассказывал об интересной статистике. Оказывается что бОльшая > часть участников использует Паскаль. И не потому что это студенты и > они на нем обучались (Ведь для умеющего программировать — выбор языка > не первая задача. Я думаю эти ребята умеют программировать ), а потому > что в условиях дефицита времени важно иметь возможность отловить > большинство ошибок на момент компиляции.
Просто олимпиады по программированию к самому _программированию_
отношение имеют весьма слабое.
Здравствуйте, Bigger, Вы писали:
B>а чего смешного
B>memcpy(dest, src, sizeof(src));
Предлагаю подумать, что получится в случае, когда dest и src имеют тип char* и вообще указатель (что и имеет место быть в примере jazzer'а). И вообще, что такое sizeof.