Re[12]: За что я не люблю С++
От: Ночной Смотрящий Россия  
Дата: 29.05.09 08:36
Оценка: :)
Здравствуйте, Геннадий Васильев, Вы писали:

ГВ>Ещё раз, медленно: Найк, вроде бы, со мной согласен.


Еще раз, медленно — он может быть миллион раз с тобой согласен, но это никак не обесценивает приведенные им примеры и не делает эти примеры построением протокола обмена данными.
Re[33]: За что я не люблю С++
От: Mamut Швеция http://dmitriid.com
Дата: 29.05.09 08:51
Оценка: +1
Здравствуйте, criosray, Вы писали:

c> ГВ>>>

Ну поделитесь с нами грешными примером кода, где программа на С++ на лету во время исполнения генерирует полностью новый класс с методами и полями по переданной ей из текстового файла спецификации.


c> ГВ>Понятно. Значит, я придумал цитату из твоего собственного постинга. А сам твой постинг мне привиделся.


c> Ваши тупые попытки троллинга откровенно утомили. В моем посте ничего не сказано про то, что генерируемый код не должен удовлетворять определенному контракту.


И наоборот, там нигде не говорится, что он должен каком-уто контракту соответствовать
avalon 1.0rc1 rev 239, zlib 1.2.3


dmitriid.comGitHubLinkedIn
Re[24]: За что я не люблю С++
От: Mamut Швеция http://dmitriid.com
Дата: 29.05.09 08:51
Оценка:
M> M>Лучше, если эти пять строк уже встроены в язык

M> осторожно! Можно ведь и захотеть декодер mpc поиметь встроенный в язык


Пусть будет

M> Ограничивать себя в сладостях надо


Зачем?
avalon 1.0rc1 rev 239, zlib 1.2.3


dmitriid.comGitHubLinkedIn
Re[28]: Подсчёт ссылок
От: Eugeny__ Украина  
Дата: 29.05.09 09:16
Оценка:
Здравствуйте, Sinclair, Вы писали:


S>
S>public static void EpicFail(HugeBitmap bmp)
S>{
S>  RefCounter<HugeBitmap> c;
S>  using(var a = new RefCounter<HugeBitmap>(bmp)); // bmp.refCount++;
S>    {
S>      var b = new RefCounter(a); // bmp.refCount++
S>      c = a; // oops... вот в этот момент С++ инкрементирует указатель. С# - нет.
S>    b.Dispose(); //bmp.refCount-- 
S>    } // bmp.refCount-- => bmp.Release()
S>    c.Reference.Draw(); // InvalidOperationException!
S>}
S>




Я чего-то не понимаю, на кой вообще битмапу(который, по сути, тупо массив байт, вполне себе менеджед, а значит, подвластен GC(или в шарпе это не так? Я только про джаву знаю достоверно)) Release? Не нужен — просто обнуляешь все ссылки на него, пусть сборщик сам разбирается, он прекрасно увидит, что есть крупный массив байт, и на него нету ссылок ни у одного из потоков, и соберет его, когда память начнет кончаться. Зачем вообще эти пляски с бубном?
Новости очень смешные. Зря вы не смотрите. Как будто за наркоманами подсматриваешь. Только тетка с погодой в завязке.
There is no such thing as a winnable war.
Re[25]: За что я не люблю С++
От: Константин Б. Россия  
Дата: 29.05.09 09:19
Оценка:
Здравствуйте, Sinclair, Вы писали:

S>Здравствуйте, Геннадий Васильев, Вы писали:

ГВ>>Ответь мне на один наводящий вопрос: а что дальше делать с этой сгенерированной и полностью новой структурой?
S>Ну хорошо. Пусть это будет не совсем новая структура.
S>Пусть это будет, скажем, наследник некоего известного интерфейса. Впрочем, нет — этого нам недостаточно. Потребуется еще какая-то функция со стандартной сигнатурой.
S>Скажем,
S>
S>IStandardObject factory()
S>

S>Насколько практично порождать новый код такого рода на С++? К примеру, если у меня есть регулярное выражение — сколько вызовов Match() на нескомпилированном выражении скомпенсируют стоимость компиляции выражения? Тысяча? Миллион?

А насколько практичен в этом отношении Reflection.Emit?
Re: За что я не люблю С++
От: Pavel Dvorkin Россия  
Дата: 29.05.09 09:42
Оценка: 1 (1) +2
Решил я вмешаться в эту дискуссию, но немного с другой стороны. Статью не читал и не буду — что там может быть, и так представляю, а почитав дискуссию, представляю вполне.

Я другой вопрос хочу задать. Ладно, не любите С++ — имеете право. Ладно, у C#/Java что-то такое есть, чего там нет — вполне возможно.

А вот что не ладно — какие альтернативы С++ можете предложить в ЕГО НИШЕ ? Вот представьте себе — исчез он. Чем замените ?

Тем, кому тут же хочется выдвинуть Java или C# — даю сразу полный отлуп. Я говорю только о той нише, где используется ИСКЛЮЧИТЕЛЬНО компилированный код, без всяких JIT и прочих огромных рантаймов.

Паскаль вроде как собирается приказать долго жить. Модула давно приказала. Ада толком так и не родилась.

Фортран ?

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

И если при этих тяжелых наследственных заболеваниях он все же выжил, и не только выжил, но является становым хребтом ИТ — жить ему долго!

А есть в нем property или нет, и как там с сериализацией — господи, какие мелочи и пустяки!
With best regards
Pavel Dvorkin
Re[29]: Подсчёт ссылок
От: MxKazan Португалия  
Дата: 29.05.09 09:47
Оценка: +2
Здравствуйте, Eugeny__, Вы писали:

E__>Я чего-то не понимаю, на кой вообще битмапу(который, по сути, тупо массив байт, вполне себе менеджед, а значит, подвластен GC(или в шарпе это не так? Я только про джаву знаю достоверно)) Release? Не нужен — просто обнуляешь все ссылки на него, пусть сборщик сам разбирается, он прекрасно увидит, что есть крупный массив байт, и на него нету ссылок ни у одного из потоков, и соберет его, когда память начнет кончаться. Зачем вообще эти пляски с бубном?

Ключевое выделено. Парням из банды С++ хочется, чтобы объект собрался не когда память начнет кончаться, а именно когда не будет ссылок. И еще такой момент: текущая реализации битмапа в Windows Forms — это таки нативный хэндл ОС, в котором GC не властен.
Re[2]: За что я не люблю С++
От: MxKazan Португалия  
Дата: 29.05.09 09:59
Оценка: +1 :)
Здравствуйте, Pavel Dvorkin, Вы писали:

PD>А вот что не ладно — какие альтернативы С++ можете предложить в ЕГО НИШЕ ? Вот представьте себе — исчез он. Чем замените ?

Исчезать не нуна. Никто и не призывает вроде. Низкоуровневые детали его удел. Вот в WPF прослойка нативная, исполняющая команды отрисовки и меня это нисколечки не смущает.

PD>Тем, кому тут же хочется выдвинуть Java или C# — даю сразу полный отлуп. Я говорю только о той нише, где используется ИСКЛЮЧИТЕЛЬНО компилированный код, без всяких JIT и прочих огромных рантаймов.

Конкретнее, что за ниша?
Re[2]: За что я не люблю С++
От: Qbit86 Кипр
Дата: 29.05.09 10:09
Оценка:
Здравствуйте, Pavel Dvorkin, Вы писали:

PD>Статью не читал


И правильно сделал. Бог с ними, с притянутыми за уши кривостями и ламеризмами типа «шаблоны — это те же макросы». Но такое обилие дурацких смайликов, инфантильных серийных восклицательных знаков и полное пренебрежения правилами типографики — это не «статья», а так, пост в жэжэшечке. Ну или на narod.ru, ага. Серьёзно относиться к такого рода писулькам — много им чести.

PD>Вот представьте себе — исчез он. Чем замените ?


Если бы это сборище костылей с 1K-страничным стандартом исчезло, это послужило бы толчком к появлению и развитию более удачных низкоуровневых языков. Современные компиляторы с C++ выдают эффективный код не благодаря языку C++, а вопреки. Создать компилятор C++ чрезвычайно трудно, причём это не столько объективная трудность, сколько борьба с тёмными углами языка.
Глаза у меня добрые, но рубашка — смирительная!
Re[26]: За что я не люблю С++
От: Sinclair Россия https://github.com/evilguest/
Дата: 29.05.09 10:10
Оценка:
Здравствуйте, Константин Б., Вы писали:
КБ>А насколько практичен в этом отношении Reflection.Emit?
Ну... На моей тачке регексы компиляются со скоростью около 1E-5 секунды на символ.
То есть для типичных регекспов длиной в сотню символов речь идет об 1й миллисекунде задержки.
... << RSDN@Home 1.2.0 alpha rev. 677>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[3]: За что я не люблю С++
От: Pavel Dvorkin Россия  
Дата: 29.05.09 10:33
Оценка: +1
Здравствуйте, Qbit86, Вы писали:

Q>Если бы это сборище костылей с 1K-страничным стандартом исчезло, это послужило бы толчком к появлению и развитию более удачных низкоуровневых языков. Современные компиляторы с C++ выдают эффективный код не благодаря языку C++, а вопреки. Создать компилятор C++ чрезвычайно трудно, причём это не столько объективная трудность, сколько борьба с тёмными углами языка.


Что-то в этой мвсли есть, но если бы такой язык был нужен, он бы ВЫТЕСНИЛ С++. Как в свое время вытеснили Фортран
With best regards
Pavel Dvorkin
Re[3]: За что я не люблю С++
От: Pavel Dvorkin Россия  
Дата: 29.05.09 10:39
Оценка: +2 -1
Здравствуйте, MxKazan, Вы писали:

PD>>Тем, кому тут же хочется выдвинуть Java или C# — даю сразу полный отлуп. Я говорю только о той нише, где используется ИСКЛЮЧИТЕЛЬНО компилированный код, без всяких JIT и прочих огромных рантаймов.

MK>Конкретнее, что за ниша?

Операционные системы, драйверы, утилиты. (только ради бога не надо про Сингуларити)
Десктопное ПО с существенными требованиями по быстродействию (граф. редакторы, серьезные текстовые редакторы, системы автоматизации проектироваия,системы распознавания образов разного рода).
ПО с серьезными расчетами.

Это то,что первым в голову пришло. Подумать — можно еще добавить.
With best regards
Pavel Dvorkin
Re[30]: Подсчёт ссылок
От: Erop Россия  
Дата: 29.05.09 10:45
Оценка:
Здравствуйте, MxKazan, Вы писали:

MK>Ключевое выделено. Парням из банды С++ хочется, чтобы объект собрался не когда память начнет кончаться, а именно когда не будет ссылок. И еще такой момент: текущая реализации битмапа в Windows Forms — это таки нативный хэндл ОС, в котором GC не властен.


Да и вообще, а вдруг он в видеопамяти живёт? Или прога не битмапами управляет а кудовыми заданиями на рассчёт, например?
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[32]: cli? ;) (-)
От: Erop Россия  
Дата: 29.05.09 10:46
Оценка:
Здравствуйте, COFF, Вы писали:

COF>По моему, если бы был язык, который поддерживает и сборку мусора и детерминированное освобождение ресурсов, то я бы первый сказал, что этот язык может быть лучше чем C++, а сейчас я могу только повторить, что они разные
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[3]: За что я не люблю С++
От: COFF  
Дата: 29.05.09 10:46
Оценка:
Здравствуйте, Qbit86, Вы писали:

PD>>Вот представьте себе — исчез он. Чем замените ?


Q>Если бы это сборище костылей с 1K-страничным стандартом исчезло, это послужило бы толчком к появлению и развитию более удачных низкоуровневых языков. Современные компиляторы с C++ выдают эффективный код не благодаря языку C++, а вопреки. Создать компилятор C++ чрезвычайно трудно, причём это не столько объективная трудность, сколько борьба с тёмными углами языка.


Я согласен, что C++ не самый легкий и прямой язык. Но с другой стороны, все это вызвано вполне естественными причинами. Начни разрабатывать подобный язык с нуля, то в итоге либо C++ и получится (так как скажем копирование объекта из одного места в памяти так и останется копированием, соответственно срезка никуда не денется, ну и так далее по всем проблемным местам), либо он будет красивый и стройный, но абсолютно неприменимый в реальных проектах. Сила (и слабость) C++ в том, что он результат более чем тридцатилетней эволюции (если и C тоже считать). Посмотрим во что через двадцать лет превратится C#
Re[39]: За что я не люблю С++
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 29.05.09 10:51
Оценка:
Здравствуйте, Sinclair, Вы писали:

S>Когда у тебя в руках молоток — всё кажется гвоздями. Когда С++ — всё кажется классами. Оказывается, не обязательно быть классом для того, чтобы успешно работать.


Добавим тривиальное усложнение в функцию управления Enabled:

// Где-то в недрах:
if (bOK) { ... }


Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[2]: А я вот, например жену люблю, а к языкам равнодушен ;
От: Erop Россия  
Дата: 29.05.09 11:01
Оценка: 3 (2) +1
Здравствуйте, Pavel Dvorkin, Вы писали:

PD>А вот что не ладно — какие альтернативы С++ можете предложить в ЕГО НИШЕ ? Вот представьте себе — исчез он. Чем замените ?

PD>Тем, кому тут же хочется выдвинуть Java или C# — даю сразу полный отлуп. Я говорю только о той нише, где используется ИСКЛЮЧИТЕЛЬНО компилированный код, без всяких JIT и прочих огромных рантаймов.

Ну замена есть, и она никуда не девалась -- это собственно С. Может быть С с каким-то другими объектными расширениями. Например Objective-C... (типа всё умное в проекте пишем с объектами, а всё быстрое на чистом С)...

Но оно на самом деле-то понятно, что предмета для спора нет. И что у каждого языка есть своя ниша. И определяется она не умозрительными всякими "достоинствами", а кучей практических соображений... Вот то же D так и не пошёл, например...

А так, да, ХиндиС -- гениальное, IMHO, изобретений. Круче VB даже. Для случая "педалить код быстро-быстро, так как готово должно быть уже вчера" -- это самое то. Тут C++ просто сливает со страшной неодолимой силой.
А написать что-то такое сложно-умное, много насилующее память и процессор, то тут уже ХиндиС не тянет. Можно, конечно всякими ужимками и наймом супер-профи противиться очевидному и в том и в другом случае, но это тупо НЕ ВЫГОДНО...

Да, кстати, я не хочу сказать, что есть только два указанных полюса ("быстропедальный" код vs многосчитающий), полюсов на самом деле много, они все в разной степени важны и нужны, но в целом более или менее одинаково почётны. Эти два я привёл просто для примера...


Вывод:
Нет смысла спорить о том, что круче -- шаблоны или свойства. Надо спорить о том, какие программисты более настоящие? Системные или вычислительные? Энтерпрайз или ретейл и т. д...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[31]: Подсчёт ссылок
От: MxKazan Португалия  
Дата: 29.05.09 11:05
Оценка:
Здравствуйте, Erop, Вы писали:

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


MK>>Ключевое выделено. Парням из банды С++ хочется, чтобы объект собрался не когда память начнет кончаться, а именно когда не будет ссылок. И еще такой момент: текущая реализации битмапа в Windows Forms — это таки нативный хэндл ОС, в котором GC не властен.

E>Да и вообще, а вдруг он в видеопамяти живёт? Или прога не битмапами управляет а кудовыми заданиями на рассчёт, например?
Это к чему?
Re[4]: За что я не люблю С++
От: Qbit86 Кипр
Дата: 29.05.09 11:18
Оценка: :)
Здравствуйте, COFF, Вы писали:

COF>Но с другой стороны, все это вызвано вполне естественными причинами.


Я бы предпочёл, чтобы в разработке языка обошлась без «естественных причин» типа совместимости с Си на уровне исходных кодов.

COF>Начни разрабатывать подобный язык с нуля, то в итоге либо C++ и получится


Голословное заблуждение.

COF>Сила (и слабость) C++ в том, что он результат более чем тридцатилетней эволюции (если и C тоже считать).


О какой эволюции может идти речь по отношению к языку, стандарт которого законсервирован на десяток лет? (Предупреждая возможные вопросы — да, я читал «D&E» Страуструпа.) Только сейчас в нём начинают появляться языковые средства (которым, по сути, сто лет в обед), которые уже давно стали нормой для современных ЯП. И ещё не скоро эти нововведения войдут в обиход (учитывая консервативность адептов).

COF>Посмотрим во что через двадцать лет превратится C# :)


Через двадцать лет он скорее всего благополучно преставится, и никто не станет по нему особо сокрушаться. Потому что на смену придут более удачные и удобные инструменты.
Глаза у меня добрые, но рубашка — смирительная!
Re[40]: За что я не люблю С++
От: Sinclair Россия https://github.com/evilguest/
Дата: 29.05.09 11:35
Оценка: 2 (1)
Здравствуйте, Геннадий Васильев, Вы писали:
ГВ>Добавим тривиальное усложнение в функцию управления Enabled:
Ничего военного.
void ManageEnabled(IProperty<bool> propOK, IProperty<bool> propCancel) {
  if (propOK.Value)
    {
      ...
    }
  if (someCondition)
  {
    propOK.Value=true);
    propCancel.Value=false;
  }
  else if (otherCondition)
  {
    propOK.Value=false;
    propCancel.Value=true;
  }
  else // strangeCondition
  {
    propOK.Value=false;
    propCancel.Value=false;
  }
}

Как-то так:
var bOk = new StoredProperty<bool>(false);
var bCancel = new StoredProperty<bool>(true);

someCondition = true; // Это упрощение - я имею в виду, что мы привели тестовое окружение в состояние,
// когда внутреннее условие someCondition станет true.
ManageEnabled(bOk, bCancel);


Boilerplate:
    public interface IReadProperty<T>
    {
        T Value { get; }
    }
    public interface IWriteProperty<T>
    {
        T Value { set; }
    }
    public interface IProperty<T> : IReadProperty<T>, IWriteProperty<T>
    {
    }

    public class CustomProperty<T> : IProperty<T>
    {
        private Func<T> _get;
        private Action<T> _set;
        public CustomProperty(Func<T> get, Action<T> set)
        {
            _get = get;
            _set = set;
        }

        public T Value
        {
            get { return _get(); }
            set { _set(value); }
        }
    }

    public class StoredProperty<T> : IProperty<T>
    {
        private T _value;
        public StoredProperty(T value)
        {
            _value = value;
        }
        public T Value
        {
            get { return _value; }
            set { _value = value; }
        }
    }

    public class ReflectionProperty<T> : CustomProperty<T>
    {
        public ReflectionProperty(object obj, string propName)
            : base(GetGetter(obj, propName), GetSetter(obj, propName))
        {
        }

        private static Action<T> GetSetter(object obj, string propName)
        {
            var pi = obj.GetType().GetProperty(propName);
            if (pi.PropertyType != typeof(T))
                throw new InvalidOperationException("Incorrect property type");

            return (Action<T>)Delegate.CreateDelegate(typeof(Action<T>), obj, pi.GetSetMethod());
        }

        private static Func<T> GetGetter(object obj, string propName)
        {
            var pi = obj.GetType().GetProperty(propName);
            if (pi.PropertyType != typeof(T))
                throw new InvalidOperationException("Incorrect property type");

            return (Func<T>)Delegate.CreateDelegate(typeof(Func<T>), obj, pi.GetGetMethod());
        }
    }
... << RSDN@Home 1.2.0 alpha rev. 677>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.