Re[8]: Не пора ли нам перейти на D
От: konsoletyper Россия https://github.com/konsoletyper
Дата: 28.02.07 17:13
Оценка:
Здравствуйте, Tilir, Вы писали:

T>Вот этот "прожектизм" меня и отталкивает от D. Весь мир наC-лья мы разрушим до основанья, а затем... Вот есть большие подозрения, что затем окажемся у разбитого корыта. Возмите как пример Страуструпа — он сделал C подмножеством C++. И C++ очень быстро и без лишней агитации подгрёб под себя громадное C-сообщество, которое уже потом, перейдя на C++, потихоньку научилось наследовать классы и пользоваться STL. Аналогично произошло с Delphi и Pascal-подмножеством в нём. Если бы начали делать D и сказали: "любимые наши C++ — разработчики, вот вам C++-подмножество в D, наслаждайтесь. А на досуге, оцените ещё наши новые фичи — туплы, вариативные шаблоны и ещё кучу всякой радости". Да я бы обеими руками был бы за переход на такой язык и начальство бы уговорил.


Ага, однажды пришёл C и разрушил всё до основания. Он предложил некоторые вещи, которые были круче, чем в Фортране. Но C не был надмножеством Фортрана, так что народ, мы идём по неправильному пути! Долой всякие там C/C++/C#! Даёшь Мегафортран с ФВП, лямбдами, замыканиями, метапрограммированием и STL! Но главное, чтобы прога на Фортране была так же прогой на Мегафортране.
... << RSDN@Home 1.2.0 alpha rev. 672>>
Re: Задумчиво...
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 28.02.07 17:42
Оценка: +1
Здравствуйте, Disappear,

Сдаётся мне, что по количеству слов "фобия", "кос[т]ность", "дремучее прошлое" и прочих сугубо идеологомозговедческих артефактов эта тема в ФП скоро выйдет в устойчивые лидеры. Уж по термину "Блаб" — стопудово.
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[7]: Не пора ли нам перейти на D
От: VladD2 Российская Империя www.nemerle.org
Дата: 28.02.07 18:44
Оценка: +1
Здравствуйте, Mirrorer, Вы писали:

M>Я в свое время делал это на Delphi. И никак не мог понять почему COM программирование считается большим анусом... Потом прочитал книгу Inside COM, посмотрел на реализацию простейшего СОМ сервера на С++. Как бы это помягче выразится.. Впечатления были очень протеворечивые..


Это потому, что Дельфи начиная с 4-ой версии (если не ошибаюсь) поддерживала КОМ на уровне языка, а в С++ все эмулировалось на уровне паттернов.

На дельфи 2.0 писать КОМ-объекты было еще противнее чем на С++, так как оддержики фактически не было, а эмуляция получалась еще более убогая чем на С++.

По большому счету поддеркжу КОМ можно представить как внутренний ДСЛ. И лучше всего тут будет выглядеть язык хорошо поддерживающий встравание внутренних ДСЛ-ей (или содержащий такой ДСЛ, как Дельфи).
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[14]: Не пора ли нам перейти на D
От: VladD2 Российская Империя www.nemerle.org
Дата: 28.02.07 18:44
Оценка:
Здравствуйте, Cyberax, Вы писали:

C>Вообще-то, обычно да. Той же JVM/C# приходится сделать достаточно много

C>работы для вызова неуправляемого кода — за-pin'ить объекты, сохранить
C>контекст GC и т.п.

Ерунду говоришь полнейшую. "Запинить объект" == установить ровно один бит в его заголовке. Никаких контекстов ЖЦ сохранять не нужно.
Другое дело, что форматы дотнета и WinAPI различаются. Так что в не тривильных случаях приходится производить конвертацию данных (маршалинг). Но оные действия приходится производить и в С++-коде. Ведь ты не будешешь оперировать скажем char*, wchar_t* или BSTR. Ты скорее всего скопируешь данные в std::string или его аналог. А это тот же маршалинг. Причем может быть лично ты напишешь код конвертации очень грамотно. А вот В.Пупкин может написать его криво и тормозно. Так что не факт, что дотет тут проиграет.

Рельно скорость маршалинга довольно высока. По крайней мере я за все время его использования не наблюдал ни одногшо солучая когда бы он стал узким местом.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[12]: Не пора ли нам перейти на D
От: minorlogic Украина  
Дата: 28.02.07 19:05
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Здравствуйте, Sinclair, Вы писали:


M>>>Попробую еще раз на пальцах , при использовании миксинов , код компилируется и линкуется Многократно, виртуальное же наследование лишено этих недостатков.

S>>Не факт, что это недостаток. Виртуальное наследование предотвращает некоторые оптимизации, потенциально доступные для миксина. Компилятор точно знает, в какой класс он примешивает миксин, поэтому есть шанс выполнить инлайнинг и прочие агрессивные оптимизации. При виртуальном наследовании копия кода ровно одна, и она должна подходить для всех классов.

VD>Совершенно верно. Но можно сказать проще. Миксины/трэйтсы просто меняют структуру классов. Ни для кого не сикрет, что сами методы это просто глобальные фукнции получающие в качестве параметра ссылку на объект нужного типа. Так что миксины/трэйтсы не вызвают оверхэд, а на оборот приводят в итоге к более простым решениям в компиляторе.


VD>Например, для разрешения ссылок на множество базовых классов в С++ часто испльзуется "двойной" указатель (на 32-битных платформах его размер обычно больше 32-х бит). Это вынуждает компилятор порождать код пересчета адресов, что естественно отражается на скорости вызова метода доводя его до скорости вызова интерфейса в дотнете. А раз так, ток каой смысл заниматься всеми этими сложностями?


Это к чему ? Вы думаете это секрет что МН реализуется нетривиально ? Должен вас огорчить, к сожалению Страуструп в курсе. А в целом рекомендую почитать дизайн и эволюцию , про принцыпы C++ "не платим за то , что не используем". Удачи.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Ищу работу, 3D, SLAM, computer graphics/vision.
Re[15]: Не пора ли нам перейти на D
От: Cyberax Марс  
Дата: 28.02.07 19:18
Оценка:
VladD2 wrote:
> Ерунду говоришь полнейшую. "Запинить объект" == установить ровно один
> бит в его заголовке.
Агащаз. Еще надо его добавить в список за-pin'еных объектов. В JVM он
хранится в виде single-linked списка. А это уже overhead.

> Никаких контекстов ЖЦ сохранять не нужно.

Нужно.

> Ведь ты не будешешь оперировать скажем char*, wchar_t* или BSTR. Ты скорее

> всего скопируешь данные в std::string или его аналог.
Буду работать с char*, обернутым в мою строку
Posted via RSDN NNTP Server 2.0
Sapienti sat!
Re[15]: Не пора ли нам перейти на D
От: EvilChild Ниоткуда  
Дата: 28.02.07 19:59
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Рельно скорость маршалинга довольно высока. По крайней мере я за все время его использования не наблюдал ни одногшо солучая когда бы он стал узким местом.


Я вот недавно профайлил своё приложение, которое очень интенсивно юзаем COM компоненты и с удивлением обнаружил, что служебный код interop находится в топе списка по сумме времени проведённом в вызове. В итоге я просто попросил профайлер не показывать его мне, ибо без толку — отказаться от использования этих компонент я не могу.

Кстати, есть где-нибудь детальное описание механики .NET-COM interop'а, чтобы знать, что именно там происходит?
now playing: Noisia & Phace — Surface Tension
Re[11]: Не пора ли нам перейти на D
От: EvilChild Ниоткуда  
Дата: 28.02.07 20:03
Оценка: +1
Здравствуйте, VladD2, Вы писали:

VD>Скорость моего кода работающего на VM значительно выше чем кода большинства программистов гордящихся тем, что они пишут на С++.


Это особенно заметно на legacy C++ code — тогда люди делали массу отпимизаций, которые сейчас просто потеряли смысл и просто сбивают с толку компилятор, т.к. информация, что именно должен делать компилятор слишком детализированная и ему негде развернуться.
now playing: Phace — fraXion
Re[12]: Не пора ли нам перейти на D
От: EvilChild Ниоткуда  
Дата: 28.02.07 20:08
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Что касается конкуренов С++, то для меня это само по себе смешно. С++ маральный урод. Он устарел еще 10 лет назад. Его испоьзуют не потому что он лучий, а потому, что к нему привыкли и потому что вокруг него море фобий.


Ещё потому, что есть прорва legacy code написанного на нём, которую никто в здравом уме просто так не выбросит, а итероперировать с C++ проще всего на C++
now playing: Impulse & Submerged — Dirty Bomb (Scorn Remix)
Re[9]: Не пора ли нам перейти на D
От: EvilChild Ниоткуда  
Дата: 28.02.07 20:12
Оценка: +1
Здравствуйте, ie, Вы писали:

ie>на Haskell так:

ie>
ie>factorial 0 = 1
ie>factorial n = n * (factorial (n-1))
ie>

Этот вариант всех рвёт по компактности и изяществу.
now playing: Impulse & Submerged — Dirty Bomb (Scorn Remix)
Re[15]: Не пора ли нам перейти на D
От: Mirrorer  
Дата: 28.02.07 21:39
Оценка:
Здравствуйте, VladD2, Вы писали:


VD>Обойтись без компиляции вообще невозможно, так как такова реализация. Так что говоря о дотенете просто бессмысленно рассуждать о байткоде.


Если говорить именно о микрсофтовском .Net, то ты несомненно прав. Но ведь спецификация CLR вроде не обязывает иметь JIT или я ошибаюсь ?

З.Ы. В своем посте под .Net я подразумевал именно CLR, а не конкретно MS .Net. возможно из-за этого путаница возникла.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[13]: Не пора ли нам перейти на D
От: VladD2 Российская Империя www.nemerle.org
Дата: 28.02.07 22:19
Оценка:
Здравствуйте, minorlogic, Вы писали:

M>Это к чему ? Вы думаете это секрет что МН реализуется нетривиально ?


Для кого как.

M> Должен вас огорчить, к сожалению Страуструп в курсе.


Почему это должно меня было огорчить?

M> А в целом рекомендую почитать дизайн и эволюцию


Спасибо за рекомендацию, но я уже читал этот исторический экскурс.
От себя осмелюсь порекомендовать в следующий раз прежде чем давать рекомендации, спрашивать нуждается ли в них тот кому ты их даешь.

M> , про принцыпы C++ "не платим за то , что не используем".


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

Собственно Страуструпу то простительно. Он просто не додумался до более простого и эффективного решения. Ведь трыйтсы били проработаны и описаны только недавно. Но для разработчиков языков сегодня повторение ошибок Страуструпа уже не проститльно. В прочем эти ошибки никто и не повторил (пока что).


M>Удачи.


Спасибо.

ЗЫ

И не надо так оверквотинг.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[13]: Не пора ли нам перейти на D
От: VladD2 Российская Империя www.nemerle.org
Дата: 28.02.07 22:57
Оценка: -1
Здравствуйте, EvilChild, Вы писали:

EC>Ещё потому, что есть прорва legacy code написанного на нём,


Вот это чистейшей воды миф. Практически все API делаются совместимыми с C или одной из VM.

EC> которую никто в здравом уме просто так не выбросит, а итероперировать с C++ проще всего на C++


В здравом уме люди не стали бы писть сегодня на С++. Но они же это делают? Так что апелляция к здравому уму по меньшей мере неуместна.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[16]: Не пора ли нам перейти на D
От: VladD2 Российская Империя www.nemerle.org
Дата: 28.02.07 22:57
Оценка:
Здравствуйте, Mirrorer, Вы писали:

M>Здравствуйте, VladD2, Вы писали:



VD>>Обойтись без компиляции вообще невозможно, так как такова реализация. Так что говоря о дотенете просто бессмысленно рассуждать о байткоде.


M>Если говорить именно о микрсофтовском .Net, то ты несомненно прав. Но ведь спецификация CLR вроде не обязывает иметь JIT или я ошибаюсь ?


CLR — это runtime для Microsoft .Net. Microsoft .Net — это реализация стандарта CLI от Microsoft. Если говорить о CLI, то потенциально, нет. Но серьезной реализацией интерпретатор не считается. В Моно тоже имеется компиляция. В прочем там есть и интерпретируемый вариант, но используется он только в тех случаях когда для платформы пока не портирован компилятор в нэйтив-код.

M>З.Ы. В своем посте под .Net я подразумевал именно CLR, а не конкретно MS .Net. возможно из-за этого путаница возникла.


И в очередной раз ошибаешся.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[16]: Не пора ли нам перейти на D
От: VladD2 Российская Империя www.nemerle.org
Дата: 28.02.07 22:57
Оценка:
Здравствуйте, Cyberax, Вы писали:

C>Агащаз. Еще надо его добавить в список за-pin'еных объектов. В JVM он

C>хранится в виде single-linked списка. А это уже overhead.

Мне плевать на JVM. В дотнете никаких списков нет. Это ровно один бит расположенный рядом с битом использованием для пометки объекта как посещенного. Так что у тебя проблемы с матчастью.

>> Никаких контекстов ЖЦ сохранять не нужно.

C>Нужно.

ОК. Подверди, плиз свои утверждения. Сразу предупреждаю, чно кивать на Яву не надо.

>> Ведь ты не будешешь оперировать скажем char*, wchar_t* или BSTR. Ты скорее

>> всего скопируешь данные в std::string или его аналог.
C>Буду работать с char*, обернутым в мою строку

Ладно. Тебе можно. Работай с BSTR и char* обернутые в твою троку. Главное незабудь сказать когда этот софт будут запускать на АЭС.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[16]: Не пора ли нам перейти на D
От: VladD2 Российская Империя www.nemerle.org
Дата: 28.02.07 22:57
Оценка:
Здравствуйте, EvilChild, Вы писали:

EC>Я вот недавно профайлил своё приложение, которое очень интенсивно юзаем COM компоненты и с удивлением обнаружил, что служебный код interop находится в топе списка по сумме времени проведённом в вызове. В итоге я просто попросил профайлер не показывать его мне, ибо без толку — отказаться от использования этих компонент я не могу.


Думаю, твой профайлер показывал не время именно интеропа, а время проведенное вне управляемого кода.

EC>Кстати, есть где-нибудь детальное описание механики .NET-COM interop'а, чтобы знать, что именно там происходит?


В одном из старых номеров МСДН Маг-а (анклийсгого) была статья по этому повду.
А вообще, все сильно зависит от типов данных. Скажем для массива байтов вообще маршалинг не требудется.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[10]: Не пора ли нам перейти на D
От: VladD2 Российская Империя www.nemerle.org
Дата: 28.02.07 22:57
Оценка:
Здравствуйте, igna, Вы писали:

ie>>на Haskell так:

I>
ie>>factorial 0 = 1
ie>>factorial n = n * (factorial (n-1))
I>


I>Ну так понятнее же чем на Nemerle.


Чем?

К примеру, сможешь объяснить, что будет если убрать одни из скобок?
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[12]: Не пора ли нам перейти на D
От: Sinclair Россия https://github.com/evilguest/
Дата: 01.03.07 04:08
Оценка: +1
Здравствуйте, minorlogic, Вы писали:
M>Я встречал людей делящихся на 2 типа по отношению к МН, те которые его понимают и те которые его просто не знают. А вы мне говорите про какие то сложности ? Видимо вы исключение из правил.
Если честно, я не понял, про что эта фраза. Да, я понимаю, как работает МН в С++. Я это вообще в университете преподавал. И естественно, я думаю, что МН в С++ — это нелепое нагромождение компромиссов. Да, я в курсе, почему и зачем оно так сделано. Это всего лишь демонстрация того, как неверно сделанное в начале предположение приводит к кривому и запутанному дизайну.

M>Классический пример — наследование реализации для иерархии интерфейсов.

Конкретнее можно? Покажите мне, где я буду наследоваться от одного и того же класса и невиртуально и виртуально? Чтобы вот эта процитированная фраза реально применилась:

If virtual inheritance and nonvirtual inheritance are mixed, there is a single virtual A and a nonvirtual A for each nonvirtual inheritance path to A.

S>>Все эти правила призваны всего лишь разрулить неопределенности, возникающие из-за самой идеи двух видоа наследования. Никакой практической полезности в них нет.
M>Для вас нет ?
Я признаю их полезность как только мне ее продемонстрируют. Где она? Мое мнение: в реальной жизни это не применяется.

M>>>Попробую еще раз на пальцах , при использовании миксинов , код компилируется и линкуется Многократно, виртуальное же наследование лишено этих недостатков.

S>>Не факт, что это недостаток. Виртуальное наследование предотвращает некоторые оптимизации, потенциально доступные для миксина. Компилятор точно знает, в какой класс он примешивает миксин, поэтому есть шанс выполнить инлайнинг и прочие агрессивные оптимизации. При виртуальном наследовании копия кода ровно одна, и она должна подходить для всех классов.
M>Не факт , но мне хочется иметь возможность выбрать , а вам ?
Выбрать что? Мне хочется иметь возможность не выбирать. Меня вполне устраивает ситуация, в которой такие вещи, как инлайнинг кода, выбирает компилятор. Никакого требования копировать код в миксинах нету. Есть масса альтернативных стратегий. Лишь бы семантика была та же самая.
1.2.0 alpha rev. 655
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[9]: Не пора ли нам перейти на D
От: IT Россия linq2db.com
Дата: 01.03.07 04:58
Оценка: :)
Здравствуйте, konsoletyper, Вы писали:

K>Но главное, чтобы прога на Фортране была так же прогой на Мегафортране.


Если учеть тот факт, что Фотртан есть язык языков, то так оно и есть.
... << RSDN@Home 1.2.0 alpha rev. 0>>
Если нам не помогут, то мы тоже никого не пощадим.
Re[10]: Не пора ли нам перейти на D
От: IT Россия linq2db.com
Дата: 01.03.07 05:13
Оценка:
Здравствуйте, EvilChild, Вы писали:

EC>Этот вариант всех рвёт по компактности и изяществу.


Согласен. Единственная проблема — очень сильно чувствуется узаконенный душок побочных эффектов компиляции некторых других языков.
... << RSDN@Home 1.2.0 alpha rev. 0>>
Если нам не помогут, то мы тоже никого не пощадим.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.