Здравствуйте, naje, Вы писали: N>что-то типа boost::tuples поможет?
Не вижу, как бы оно мне помогло. Какие параметры ты в этот Tuple передашь? Ты не мог бы мне привести пример пользовательского кода, в котором декларируется метод
class B {
A([MarshalAs(UnmanagedType.Int8)] int g)
{};
}
? Заодно было бы неплохо сравнить объем библиотечного кода, который надо написать для такого применения. S>>Нету этого. Нету. Где оно? Покажите мне такую систему. Ни один из популярных компиляторов этого не умеет. А непопулярные — извините, ребята, низкое качество их кода съест все преимущества от специализации. N>gcc не популярный компилятор? (gnu rtl даже в микрософтовских лекциях по созданию компиляторов на .net упоминается)
А что, в gcc я могу делать какое-то промежуточное представление, которое позволит мне в него вносить изменения в run-time и получать специфичный код? N>>>объясни чем могут помочь частичные вычисления в rt, это можно и в ct делать в большинстве случаев, именно для повышения производительности, не хочешь?, тогда спасёт компилятор с промежуточным представлением, но это не особенность языка, а мы обсуждаем C++ против C# N>какие правила? boost::concept_check поможет?
Не поможет. В его рамках нельзя потребовать отсутствия чего-либо. Да, можно потребовать приводимости типов, и поддержки операторов. Но нельзя запретить, например, иметь публичные поля заданного типа. N>по поводу других языков немного, я тут уже приводил пример с генераторами парсеров, когда генераторы парсеров появятся в C#?, это просто один из примеров
Гм. Я что-то пропустил этот постинг. При чем тут генераторы парсеров? Это же всего лишь приложения. Если я правильно понимаю, то тебе надо читать вот сюда Когда в С++ появятся RegExp, которые компиляются в КА при первом использовании? N>комерческие реализации не ограничиваются этими двумя N>впринципе наверное смог бы показать, но тоже времени особо нет, поэтому отложим
ok.
... << RSDN@Home 1.1.3 beta 2 >>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
K>>В С++ вообще все user-defined. Конечно метаданные как в НЕТ не сделаешь, но ИМХО и потребности нет. S>Вот-вот. То же самое сорок лет назад говорили ассемблерщики про C.
Разное время, разные задачи, разные требования. Ассемлер был востребован именно для задач своего времени. Всякие плюсы и остальное гемор были действительно не особо нужны.
S>>>Ну щас прям. И сразу получи платформенную зависимость. Как минимум. А также необходимость таскать с собой запас хидеров для того, чтобы генеренный код мог взаимодействовать с другим кодом. В общем, ребята, солюшн с Ц-компилером даже на шутку не тянет. Потому его и не применяет никто и никогда. В отличие от той самой генерации кода в .Net.
Солюшн с цекомпилером — вындоуз и линукс например. Думаю что линукс более патформонезависимый, нежели дотнет. На скольки патформах доступен дотнет ?
Слишком большой CLR, что бы его портировать. За то время, пока Билл портировал CLR для БСД, линуксоилы освоили парочку платформ.
S>Короче, я никого не заставляю. .Net предлагает способ дешево делать хорошие программы. Альтернативы ему есть — та же Java.
Смотря для чего. Чтото игровая индустрия не особо то и спешит в сторону дотнета и жавы.
И здесь используются именно скрипт-машины на для С++.
Вот когда появится Офис полностью менеджед или другой тул поольше, тогда модно будет сравнить быстродействие. На нашем проекте дотнет очень сильно проигрывает в этом плане.
Зато не нем дешевле и проще.
Здравствуйте, Sinclair, Вы писали:
N>>я спрашивал что нового в .Net, как вобще можно сравнивать язык с фреймворком? S>Как хочешь — так и сравнивай. С++ тоже не только язык. Без стандартной библиотеки и рантайма он мертв.
Ты еще скажи, что С++ без компилера мертв. С++ нужно всего ничего — компилер, линкер и... все ! Есть АПИ — юзай его. Это только кажется, что мало что можно сделать.
На самом деле это очень много. В этом плане для дотнета нужно очень много.
S>Да нет проблем. Просто в C# делается все, что делается в .Net. В С++ этого нет. В нем нет делегатов, нет автоматического управления памятью, нет гарантий, что везде, где можно написать a<b можно написать и b>a, нет Reflection, нет модели безопасности, нет встроенной поддержки компонентности.
Делегатов нет — это точно. Автоматическое управление памятью не всегда то и нужно.
В с++ память кушается меньше и больше юзается стек. Моей тачки — 800мгц+512MB вполне хватает для всех плюсовых задач. А вот для дотнета очень слабо. Профайлер работает ой как долго.
Все от того, что памяти кушается слишком много.
Здравствуйте, Sinclair, Вы писали:
S>Здравствуйте, naje, Вы писали: N>>что-то типа boost::tuples поможет? S>Не вижу, как бы оно мне помогло. Какие параметры ты в этот Tuple передашь? Ты не мог бы мне привести пример пользовательского кода, в котором декларируется метод S>
S>class B {
S> A([MarshalAs(UnmanagedType.Int8)] int g)
S> {};
S>}
S>
S>? Заодно было бы неплохо сравнить объем библиотечного кода, который надо написать для такого применения.
нихочу тебя ни в чём переубеждать да и времени нету, просто поверь у меня всё это работает, не на boost::tuples, но работает
S>>>Нету этого. Нету. Где оно? Покажите мне такую систему. Ни один из популярных компиляторов этого не умеет. А непопулярные — извините, ребята, низкое качество их кода съест все преимущества от специализации. N>>gcc не популярный компилятор? (gnu rtl даже в микрософтовских лекциях по созданию компиляторов на .net упоминается) S>А что, в gcc я могу делать какое-то промежуточное представление, которое позволит мне в него вносить изменения в run-time и получать специфичный код?
ну чтобы в rt надо с собой кусок gcc такскать, впринципе такая идея была, но потом победило мнение что ничево в rt не нужно N>>>>объясни чем могут помочь частичные вычисления в rt, это можно и в ct делать в большинстве случаев, именно для повышения производительности, не хочешь?, тогда спасёт компилятор с промежуточным представлением, но это не особенность языка, а мы обсуждаем C++ против C# N>>какие правила? boost::concept_check поможет? S>Не поможет. В его рамках нельзя потребовать отсутствия чего-либо. Да, можно потребовать приводимости типов, и поддержки операторов. Но нельзя запретить, например, иметь публичные поля заданного типа.
ну нельзя
а зачем?
единый стиль, по особому заданные публичные поля
и всё N>>по поводу других языков немного, я тут уже приводил пример с генераторами парсеров, когда генераторы парсеров появятся в C#?, это просто один из примеров S>Гм. Я что-то пропустил этот постинг. При чем тут генераторы парсеров? Это же всего лишь приложения. Если я правильно понимаю, то тебе надо читать вот сюда
Генераторы парсеров приложение, а вот парсеры уже можно сказать нет, да я и написал там только для примера, чтоб показать что всё на idl не заканчивается, и всего в язык всё-равно не впихнёшь S>Когда в С++ появятся RegExp, которые компиляются в КА при первом использовании?
а при втором? зачем их компилить в rt я не понимаю, если ты регэксп задаёшь в rt, то какая вераятность что он у тебя будет использоватся больше одного раза, и как часто они будут встречатся?, а если в ct то в ct всё оч даже компилится, туда куда надо, да и причём тут регэкспы (ты ссылку повтори пожалуста чтоб я смог прочитать то что мне надо), ты мне сейчас весь фреймворк перечислять будешь?
Здравствуйте, naje, Вы писали:
N>нихочу тебя ни в чём переубеждать да и времени нету, просто поверь у меня всё это работает, не на boost::tuples, но работает
Пиши статью Дело-то хорошее. Плюсы еще очень много где применимы. Так что best practices по ним завсегда нужны. N>ну чтобы в rt надо с собой кусок gcc такскать, впринципе такая идея была, но потом победило мнение что ничево в rt не нужно
Ага. Просто когда я все определяю в compile time, оно и без Runtime прекрасно работает. Нам не нужен кузнец, потому что нам не нужен кузнец. S>>Не поможет. В его рамках нельзя потребовать отсутствия чего-либо. Да, можно потребовать приводимости типов, и поддержки операторов. Но нельзя запретить, например, иметь публичные поля заданного типа. N>ну нельзя N>а зачем? N>единый стиль, по особому заданные публичные поля
- В C нельзя запретить прямое обращение к членам структуры, минуя функции-аксессоры.
— Ну нельзя. А зачем? Единый стиль, по особому заданные функции...
Ничего не напоминает? N>Генераторы парсеров приложение, а вот парсеры уже можно сказать нет, да я и написал там только для примера, чтоб показать что всё на idl не заканчивается, и всего в язык всё-равно не впихнёшь N>а при втором? зачем их компилить в rt я не понимаю, если ты регэксп задаёшь в rt, то какая вераятность что он у тебя будет использоватся больше одного раза, и как часто они будут встречатся?, N>а если в ct то в ct всё оч даже компилится, туда куда надо,
Да ну? Вот так прямо регекспы компиляются в CT? И все в рамках С++? N>да и причём тут регэкспы (ты ссылку повтори пожалуста чтоб я смог прочитать то что мне надо), ты мне сейчас весь фреймворк перечислять будешь?
Как причем? Если ты мне приводишь в качестве аргумента некие приложения, написанные на С++, и результаты их работы, то я тебе в ответ напишу библиотеки, написанные на C#, и результаты их использования.
А ссылка — вот здесь.
... << RSDN@Home 1.1.3 beta 2 >>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Здравствуйте, Sinclair, Вы писали:
S>О боже. Я имел в виду как раз вообще концепцию IDL и промежуточные компиляторы. Стоимость подобного генератора для custom-задачи настолько высока, что их практически никогда не разрабатывают.
Я сам лично разработал 2. Правда не для маршалинга. А насчет стоимости полная ерунда, если надо быстро и дешево то XML вполне подойдет. К тому-же можно заюзать готовые фичи типа autogen.
Конечно, если ты работаешь в NASA, и решаешь сверхзадачи, то и С++ и .NET выглядят настолько маленькими, что можно сразу начинать писать свой язык — на финальную стоимость это почти не повлияет. Но мы-то живем в реальном мире!
Реальный мир гораздо больше чем тебе кажется. Многие программы никогда не покидали стены учереждений где были разработаны. А многие настолько специализированны, что о них мало кто слышал. То что продается на рынке это только вершина айсберга. Наверное больше 80% софта закрыто для посторонних глаз.
K>>В С++ вообще все user-defined. Конечно метаданные как в НЕТ не сделаешь, но ИМХО и потребности нет. S>Вот-вот. То же самое сорок лет назад говорили ассемблерщики про C.
S>Вот именно — в научной среде. Практического применения эта техника не имеет. От быстродействия я действительно закачаюсь. Сколько времени у меня займет компиляция нового класса в рантайме? Учитывая, что в него придется скормить тысяч двести строк хидеров?
Одного хидера вполне хватит. Ты же не будешь генерить ГУЙ на лету? Это безумие. А какой-нибудь вычислительный алгоритм так скомпильнуть нет проблем. Потеряешь секунду на компиляции зато сэкономишь часы на расчете.
А в ненаучной среде я не вижу потребности в таких задачах. Может приведешь пример?
S> И не пойдет ли пользователь курить? Обрати внимание — в JSP и ASP применяют compile on demand. Как ты думаешь, почему не существует C++SP?
Потому что С++ это не скрипт язык. Все должно применятся там где это нужно.
K>>А если быстродействие особое не нужно, то прикрутить скрипт-машину к плюсовой программе нет проблемм. Генери в скрипт и не жалуйся. ИМХО, надуманная проблемма вообще. S>Ребята, это тупиковый подход. Прикручивание скрипт-машины к плюсовой программе имеет несколько существенных недостатков, основной из которых — высокая стоимость.
Какая такая стоимость? Я скрипт машину за неделю с нуля напишу, а уж готовую прикрутить. не вижу проблем вообще.
S>Короче, я никого не заставляю. .Net предлагает способ дешево делать хорошие программы. Альтернативы ему есть — та же Java. Более старые технологии позволяют делать либо хорошие, либо дешевые программы. Точка. Не хотите — не надо.
Либо позволяют делать программы которые на НЕТ ну никак. Все что интенсивно пользует память, все расчетные задачи, все задачи моделирования и проектирования не для НЕТ по определению
Здравствуйте, Kluev, Вы писали:
K>Какая такая стоимость? Я скрипт машину за неделю с нуля напишу, а уж готовую прикрутить. не вижу проблем вообще.
С этим кнечно все просто. Проблемы не со скрипт-машиной и ее прокручиванием.
Пролемы с отображением модели данных например в скрипт.
К слову — этиже пролемы есть и в шарпе. Причем очень хитрые, не сразу и догадаешься.
Кое какие ушли. Кое какие добавились. За счет экономии времени на написание кода и на отладку есть время обходить косяки дотнетовские.
K>Либо позволяют делать программы которые на НЕТ ну никак. Все что интенсивно пользует память, все расчетные задачи, все задачи моделирования и проектирования не для НЕТ по определению
Именно ! Мы поимели печальный опыт дотнета. Кастомер ппросил увеличить перформанс в два-три раза. От плюсовой версии, к примеру, все торчали.
Здравствуйте, Sinclair, Вы писали:
S>Здравствуйте, naje, Вы писали:
N>>нихочу тебя ни в чём переубеждать да и времени нету, просто поверь у меня всё это работает, не на boost::tuples, но работает S>Пиши статью Дело-то хорошее. Плюсы еще очень много где применимы. Так что best
practices по ним завсегда нужны.
та надо
S>
S>- В C нельзя запретить прямое обращение к членам структуры, минуя функции-аксессоры.
S>- Ну нельзя. А зачем? Единый стиль, по особому заданные функции...
S>Ничего не напоминает?
в С врядли получится генерить ct-ошибки, по каким-то семантическим правилам
S>Да ну? Вот так прямо регекспы компиляются в CT? И все в рамках С++?
, там правда не в автомат выражение собирается, но можно сделать чтоб в автомат, это пример просто чтоб показать что можно сделать.
N>>да и причём тут регэкспы (ты ссылку повтори пожалуста чтоб я смог прочитать то что мне надо), ты мне сейчас весь фреймворк перечислять будешь? S>Как причем? Если ты мне приводишь в качестве аргумента некие приложения, написанные на С++, и результаты их работы, то я тебе в ответ напишу библиотеки, написанные на C#, и результаты их использования.
сравнивать регулярные выражения и генератор парсеров?
это ж как бы разные как бы порядки (разницу между контестно свободными и регулярными языками знаешь?)
S>А ссылка — вот здесь.
Здравствуйте, Plutonia Experiment, Вы писали:
PE>Здравствуйте, Kluev, Вы писали:
PE>Именно ! Мы поимели печальный опыт дотнета. Кастомер ппросил увеличить перформанс в два-три раза. От плюсовой версии, к примеру, все торчали.
зря ты это сказал, щас они тебе начнут про радиус кривизны зачитывать,
я просто не знаю какой велечины должен быть специалист чтоб на нете нормальные проги писать
Здравствуйте, naje, Вы писали:
PE>>Именно ! Мы поимели печальный опыт дотнета. Кастомер ппросил увеличить перформанс в два-три раза. От плюсовой версии, к примеру, все торчали.
N>зря ты это сказал, щас они тебе начнут про радиус кривизны зачитывать, N>я просто не знаю какой велечины должен быть специалист чтоб на нете нормальные проги писать
Распределенные прилы, бызы данных, все, что свебов связано — запросто. А в ряде областей очень геморройно получается.
Но что выйдет в конце концов ? Пользователи будут ставить по 1гигу памяти и по 2 гигагерца процессор.
Первые, вторые, третьи пни отомрут. Четверные и пятые будут рулить. Но это со временем. А пока спрос неслабый на нативные прилы.
Дотнет нормально будет развиваться на 64х битах. Есть кастомеры, которым нужна совместимость с вынь95. Отчего ? А железо сложно обновить.
Здравствуйте, Sinclair, Вы писали:
S>Может я чего не знаю, но что-то я не вижу способа просто и изящно передать параметры маршалинга в С++ библиотеку в непроцедурном стиле. Как ты объяснишь, что вот этот параметр надо маршалить по ссылке, а этот — по значению?
Только как я уже говорил иногда выгоднее использовать внешние описания и кодогенераторы. А аля маршаллинга лучше что-нить типа IDL
S>Да. Внутри там то же самое что и в других системах. Это не серебряная пуля, это просто способ повысить производительность и качество труда программистов.
Отдельно взятой категории программистов. Мою производительность он никак не способен повысить, задачи совсем другие.
S>Да нет проблем. Просто в C# делается все, что делается в .Net. В С++ этого нет. В нем нет делегатов, нет автоматического управления памятью, нет гарантий, что везде, где можно написать a<b можно написать и b>a, нет Reflection, нет модели безопасности, нет встроенной поддержки компонентности.
Автоматическое управление памятью — это фатальный недостаток НЕТ. Программы которые манипулируют одновременно около 100000 обьектами связанными в сеть, писать на НЕТ просто нет смысла.
А все осталное в свете этого — это как висит груша нельзя скушать. Возможности есть но из-за обших недостатков их не заюзаешь. Когда у вас пройдет эйфория поймете что у НЕТ есть свой скромный уголок, такой же как и у всех языков. Страуструп, вообще, всегда говорил что С++ — это язык номер 2.
S>Да, все это можно эмулировать. Впрочем, наследование тоже можно эмулировать на С. Проблема в том, что в рамках С++ нельзя научить компилятор валидировать введенные пользователем правила. И из-за отсутствия рефлексии нельзя это сделать и в рантайме. Поэтому у Versant есть свой препроцессор, который проверяет persistent классы на целостность и генерирует метаданные. Но это фактически другой язык. В C# работу, выполняемую этим препроцессором, можно делать в рамках языка. См. Rsdn.Framework.Data. Почему-то никто не написал подобного для С++!
Здравствуйте, Kluev, Вы писали:
K>Реальный мир гораздо больше чем тебе кажется. Многие программы никогда не покидали стены учереждений где были разработаны. А многие настолько специализированны, что о них мало кто слышал. То что продается на рынке это только вершина айсберга. Наверное больше 80% софта закрыто для посторонних глаз.
Я совершенно с этим согласен. Просто я 5 лет работаю в Custom Software Development, и в нашем случае рулят скорость и цена разработки. Нету здесь ни огромного бюджета, как у Microsoft Office, ни бесконечного срока разработки, как в TeX. K>Одного хидера вполне хватит. Ты же не будешь генерить ГУЙ на лету? Это безумие. А какой-нибудь вычислительный алгоритм так скомпильнуть нет проблем. Потеряешь секунду на компиляции зато сэкономишь часы на расчете.
Гм. А чем будет пользоваться этот вычислительный алгоритм? Сколько весит хидер для библмотеки классов, которая ему нужна? K>А в ненаучной среде я не вижу потребности в таких задачах. Может приведешь пример?
Rsdn.Framework.Data подойдет? Там еще много есть куда копать. K>Потому что С++ это не скрипт язык. Все должно применятся там где это нужно.
Классное объяснение. А Java что — уже скрипт язык?
K>Какая такая стоимость? Я скрипт машину за неделю с нуля напишу, а уж готовую прикрутить. не вижу проблем вообще.
Очень интересно. Может так оно и есть.
S>>Короче, я никого не заставляю. .Net предлагает способ дешево делать хорошие программы. Альтернативы ему есть — та же Java. Более старые технологии позволяют делать либо хорошие, либо дешевые программы. Точка. Не хотите — не надо. K>Либо позволяют делать программы которые на НЕТ ну никак. Все что интенсивно пользует память, все расчетные задачи, все задачи моделирования и проектирования не для НЕТ по определению
Да. Действительно, это так.
... << RSDN@Home 1.1.3 beta 2 >>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Здравствуйте, Plutonia Experiment, Вы писали:
PE>В виндовских исходниках частенько присутсвует оптимизация в таком и другом виде.
Те коды могли писаться сто лет назад или для платформ гед компилятор вообще оптимизаций не делает. В тестах же где итерации делаются для того чтобы уменьшить погрешность измерения разворот циклов — это нечесный хак.
... << RSDN@Home 1.1.3 beta 2 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, AndrewVK, Вы писали:
AVK>Не, в 1.2 вроде бы МС++ можно для страничек пользовать.
МС++ можно было использовать для АСП еще в весрии 1.0 (раком правда, но все же). Но это МС++. На на обычном так вот просто хрена с два выйдет. Будут все те же проблемы С++.
... << RSDN@Home 1.1.3 beta 2 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, naje, Вы писали:
N>зря ты это сказал, щас они тебе начнут про радиус кривизны зачитывать, N>я просто не знаю какой велечины должен быть специалист чтоб на нете нормальные проги писать
А зачем? Вы похоже уже это усвоили.
... << RSDN@Home 1.1.3 beta 2 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Да никто и не спорит, что и С++ и даже С будут жить еще очень долго. Но с каждым годом системы вроде дотнета и явы будут совершенствоваться и вытеснять плюсы из все большего количества ниш.
Рассказы о приемуществах С++ в скорости сильно приувеличены. А со временем этих приемуществ вообще не будет. Если сравнить скорость VC и дотнета (C#) вресий 7.0, 7.1, 8.0, то невооруженным взглядом видно, что разрыв потихоничку сокращается. Да и не так он велик. Без проблем в алгоритмах масимальный проигрыш в 2 раза. Если же учесть простоту и скорость разработки на дотнете, то становится понятно, что проще экономить время и тратить деньги на железо. Ну, а если учесть, что аысвободившееся время можно потратить на оптимизацию алгоритмов...
... << RSDN@Home 1.1.3 beta 2 >>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.