Re[4]: С++ culture
От: ArtemGorikov Австралия жж
Дата: 09.11.05 19:00
Оценка: +2
Здравствуйте, VladD2, Вы писали:

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


ГВ>>И хотя я могу показаться крамольным... Тем не менее, следует учитывать, что язык в немалой степени определяет способ мышления. Хотя, если задача, или ещё какие-либо условия мышления не требуют, то спору нет, в таком контексте бессмысленно говорить о различиях языков, API и прочих подобных вещей.

+

VD>Язык определяет сужение мышления. Люди знающий один ЯП принципиально не могут мыслить широко. А вот когда ты знашь много разных языков, то на любом языке ты можешь мысль более свободно.

++++

IMHO то же самое относится к обычным языкам — многие конструкции на английском языке просто невозможно точно передать на русском. Бывает полезно переключить мозги и мыслить именно на том конкретном языке, чтобы 100% точно понять суть сказанной фразы.

И все-таки есть один язык, который ты знаешь лучше остальных, поэтому "профессионал может писать на любом языке" не значит "профессионал раскроет все возможности любого языка и использует его наиболее продуктивно и оптимально". Ессно все IMHO
Re[11]: С++ culture
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 10.11.05 00:31
Оценка: 51 (6) +3 :)))
Здравствуйте, mrozov, Вы писали:

ПК>>Это ваш опыт. Не пытайтесь его обобщать в категоричной форме на всех.

M>Нет, не мой. Это опыт трех компаний, в которых я работал (одна — очень крупная) и нескольких, делами которых я интересовался.
M>Это позволяет мне делать некоторые обобщающие выводы.

Следует, однако, отметить, что остаётся туманной репрезентативность опыта рассмотренных Вами компаний по отношению ко всей отрасли. Короче говоря, что одна компания, что три, всё равно это опыт конкретных компаний, который ну только очень условно может проецироваться на конкретные ситуации и людей. Я вот об этом:

E>В общем, мне кажется, что лозунги "Нужно писать на .Net, потому, что C++ глючный, т.к. я на нем пишу с ошибками" -- это такая же эмоция, как "C++ forever!". А выбор языка и платформы для конкретной задачи должен включать в себя анализ большого количества факторов. И очень жаль, что критерий "количество багов в C++ программах" для конкретной команды оказывается на одном из первых мест.

Да нет же, все не так. Нужно писать на .Net, потому, что C++ глючный, т.к. я, все мои знакомые программисты и подавляющее большинство других программистов, на нем пишут с ошибками. (Это предложение — вообще чистой воды иллюстрация к статье "как не надо строить доказательства". — ГВ.) А количество ошибок на .net заметно меньше, как и общая скорость разработки. И практика моей компании показывает, что стоимость решений на с++ оказывается неприемлимо высокой.


Здесь ещё нужно расспросить о:
— профиле компаний;
— сравниваемых продуктах;
— методике оценки;
— времени эксплуатации;
— количестве вовлечённых людей и их квалификации и т.п.

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

А высказывания типа "практика компании имярек показывает" столь же убедительны, как и "ведущие агенства мира рекомендуют пользоваться нашим шампунем".

M>А про "на всех" пусть остается на Вашей совести.


>>> И за долгие и многочисленные часы нашего общения на эту тему мне так и не удалось довести до его сознания простую мысль — он в меньшинстве и распространять свой опыт на окружающих автоматически — совершенно некорректно.


ПК>>Зря вы не применяете этого же подхода к себе.


M>И опять не угадано ни одной буквы! То, что я в меньшинстве со своим пониманием опасности вызова CreateThread, я-то как раз прекрасно понимаю. А вот Вы в своей башне из слоновой кости бум web-программирования, похоже, благополучно проспали.


А какая связь между тем, что Вы "в меньшинстве" и "башней из слоновой кости"? А то я, что-то не понимаю.

M>Мир изменился.


"Я чувствую это в воде, я чувствую это в земле... О! Вот и в воздухе что-то..." (c)

Не сочтите за обиду, но Вам не смешно оперировать терминологией, которой оперируют дети в переходном возрасте и маркетологи?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[13]: С++ culture
От: VladD2 Российская Империя www.nemerle.org
Дата: 10.11.05 00:32
Оценка:
Здравствуйте, mrozov, Вы писали:

M>. Ни один разумный человек не станет убеждать окружающих в том, что драйвера нужно начинать писать на C#.


Кстати, ты все же ошибашся. Есть таки очень разумные и весьма дальновидные люди которые пишут драйверы на C#. Правда, другим они пока это делать не предлагают, но когда-нибудь это обязательно произойдет.

Откуда они? Из MS Research. Занимаются они разработкой уравляемой ОС.
... << RSDN@Home 1.2.0 alpha rev. 618>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[17]: С++ culture
От: VladD2 Российская Империя www.nemerle.org
Дата: 10.11.05 00:32
Оценка: :)
Здравствуйте, mrozov, Вы писали:

E>>Давай так: перечисли те прикладные области, которые ты знаешь. Так будет проще оценивать перспективность языка.


M>Давайте все-таки на вы, если это не противоречит Вашим религиозным убеждениям.


Здесь принято гворить "на ты". Более того, когда народ доходит до оскорблений, то зачастую переходит "на Вы".

Так что говорить "на Вы" тут никто не запрещает, но и обижаться на ты не стоит.
... << RSDN@Home 1.2.0 alpha rev. 618>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[12]: С++ culture
От: VladD2 Российская Империя www.nemerle.org
Дата: 10.11.05 01:30
Оценка: :))) :)
Здравствуйте, Kluev, Вы писали:

K>В итоге имеем оверхед на ровном месте. В качестве примера цифры из реальной жизни.

K>В программе ~150000 обьектов в которых 8 фикс.массивов на борту, ~50000 в которых 15.
K>В С++ общее число обьектов: 200 тысяч.
K>В .NETе 150к + 150к*8 + 50к + 50к*15 = 2,150,000

Это из серии:

Назову конкретные цифры: 150, 8, 50, 15, 2150000...



K>Если смысл обсуждать дальше? Конечно можно возразить (на примере того же треугольника) делай вот так и будет щастье:

K>
K>class Triangle
K>{
K>   public Node A, B, C; // вместо массива переменные
K>}
K>

K>Но это уже буллшит какой-то.

Это подобные слова "булшит" какой-то.

Индексированный доступ всего лишь абстракция. Можно реализовать ее так:
using System;
using System.Collections.Generic;
using System.Collections;

class Triangle : ICollection<Node>
{
    public Triangle(Node node1, Node node2, Node node3)
    {
        Node1 = node1;
        Node2 = node2;
        Node3 = node3;
    }

    public Node Node1;
    public Node Node2;
    public Node Node3;

    public IEnumerator<Node> Nodes
    {
        get
        {
            yield return Node1;
            yield return Node2;
            yield return Node3;
        }
    }

    public Node[] ToArray()
    {
        return new Node[] { Node1, Node2, Node3 };
    }

    #region ICollection<Node> Members

    public Node this[int index]
    {
        get
        {
            switch (index)
            {
                case 0:  return Node1;
                case 1:  return Node2;
                case 2:  return Node3;
                default: throw new ArgumentOutOfRangeException("index");
            }
        }
    }

    public bool Contains(Node item)
    {
        return item == Node1 || item == Node2 || item == Node3;
    }

    public void CopyTo(Node[] array, int arrayIndex) { array[0] = Node1; }
    public int Count { get { return 3; } }
    public bool IsReadOnly { get { return true; } }
    public IEnumerator<Node> GetEnumerator() { return Nodes; }
    IEnumerator IEnumerable.GetEnumerator() { return Nodes; }

    public void Add(Node item) { throw new InvalidOperationException(); }
    public void Clear() { throw new InvalidOperationException(); }
    public bool Remove(Node item) { throw new InvalidOperationException(); }

    #endregion
}

struct Node
{
    public Node(double x, double y) { X = x; Y = y; }
    public double X;
    public double Y;

    public static bool operator ==(Node a, Node b)
    {
        return a.X == b.X && a.Y == b.Y;
    }

    public static bool operator !=(Node a, Node b)
    {
        return a.X != b.X || a.Y != b.Y;
    }

    public override bool Equals(object obj)
    {
        if (obj == null || !(obj is Node))
            return false;
        
        return this == (Node)obj;
    }

    public override int GetHashCode()
    {
        return (int)(X * 1000) ^ (int)(Y * 10000);
    }

    public override string ToString()
    {
        return "{ X=" + X + " Y=" + Y + " }";
    }
}

    class Program
    {
        static void Main()
        {
            Triangle triangle1 = new Triangle(new Node(1.123, 2.345),
                new Node(0.123, 0.345), new Node(2.123, 3.345));

            foreach (Node node in triangle1)
                Console.Write(node + " ");

            Console.WriteLine();
            Console.WriteLine();

            Console.WriteLine("triangle1[1]    = " + triangle1[1]);
            Console.WriteLine("triangle1.Node2 = " + triangle1.Node2);
        }
    }


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

K>И это элементарные вещи широко используемыые в повседневной жизни. В NET на таких простых вещах имеешь либо оверхед либо гемморой, а чаще и то и другое вместе взятое.


Ага геморрой. И имя ему инкамсуляция.
... << RSDN@Home 1.2.0 alpha rev. 618>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[9]: off
От: VladD2 Российская Империя www.nemerle.org
Дата: 10.11.05 01:47
Оценка:
Здравствуйте, mrozov, Вы писали:

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


Никак пытался оправдаться по поводу "почему его девки не любят"?
... << RSDN@Home 1.2.0 alpha rev. 618>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[10]: С++ culture
От: VladD2 Российская Империя www.nemerle.org
Дата: 10.11.05 03:03
Оценка:
Здравствуйте, mrozov, Вы писали:

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


C>>Твоя мысль понятна. Но судишь ты о мало тебе знакомой проблеме. Вообще

C>>странная ситуация. Все кто пользуется С++ не находят проблем в
C>>описаваемых теоретиками случаях.

M>Наглая и беспринципная ложь, коллега!

M>

Полегче, плиз. Я конечно понимаю, что коллега оценивает знания других неправомерно, но все же.
... << RSDN@Home 1.2.0 alpha rev. 618>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[14]: С++ culture
От: Кузнецов Денис Викторович Казахстан  
Дата: 10.11.05 08:12
Оценка:
Здравствуйте, VladD2, Вы писали:

M>>. Ни один разумный человек не станет убеждать окружающих в том, что драйвера нужно начинать писать на C#.


VD>Кстати, ты все же ошибашся. Есть таки очень разумные и весьма дальновидные люди которые пишут драйверы на C#. Правда, другим они пока это делать не предлагают, но когда-нибудь это обязательно произойдет.


VD>Откуда они? Из MS Research. Занимаются они разработкой уравляемой ОС.


Исследования, на то они и исследования, чтобы ошибаться. Причем часто. А реальная применимость где? Где скачать, установить и как реально можно использовать? Они хоть на бумаге могут писать эти драйвера. Это ж Research!!!
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[13]: С++ culture
От: Kluev  
Дата: 10.11.05 08:37
Оценка: +2
Здравствуйте, VladD2, Вы писали:

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


K>>В итоге имеем оверхед на ровном месте. В качестве примера цифры из реальной жизни.

K>>В программе ~150000 обьектов в которых 8 фикс.массивов на борту, ~50000 в которых 15.
K>>В С++ общее число обьектов: 200 тысяч.
K>>В .NETе 150к + 150к*8 + 50к + 50к*15 = 2,150,000

VD>Это из серии:

VD>

Назову конкретные цифры: 150, 8, 50, 15, 2150000...

VD>
Могу кусок лога показать, посчитаем с точностью до байта, полегчает от этого?

K>>Если смысл обсуждать дальше? Конечно можно возразить (на примере того же треугольника) делай вот так и будет щастье:

K>>
K>>class Triangle
K>>{
K>>   public Node A, B, C; // вместо массива переменные
K>>}
K>>

K>>Но это уже буллшит какой-то.

VD>Это подобные слова "булшит" какой-то.


VD>Индексированный доступ всего лишь абстракция. Можно реализовать ее так:

VD>

VD>    public Node this[int index]
VD>    {
VD>        get
VD>        {
VD>            switch (index)
VD>            {
VD>                case 0:  return Node1;
VD>                case 1:  return Node2;
VD>                case 2:  return Node3;
VD>                default: throw new ArgumentOutOfRangeException("index");
VD>            }
VD>        }
VD>    }

VD>

Самому не смешно?

А нужно всего-то:
struct Triangle
{
   Node *nodes[3];
   Node* node_at( int idx ) // кольцевой доступ
   {
      static const int imap[] = { 1, 2, 0, 1, 2, 0, 1 };
      return nodes[imap[idx+2]];
   }
};


VD>А можно применить ансэй и будет точно так же как на плюсах. Если при этом как следует инкапсулировать опасный код, то дальше можно работать совершенно безопасно.


А почему бы тогда сразу не на плюсах? Зачем какие-то танцы с бубном.
Re[12]: off
От: mrozov  
Дата: 10.11.05 10:57
Оценка: 31 (3) +1
Здравствуйте, Геннадий Васильев, Вы писали:

Коллега, я надеюсь, что Вы не сочтете это за оскорбление, но Вы нудите.
Хотите, я разберу Ваш пост по косточкам и высмею каждую фразу, которую Вы написали? Причем это будет совсем несложно.

Доказывать я что-то буду коллегии присяжных, да и то — только по совету моего адвоката. Я делюсь своим опытом и опытом моих коллег, которых я знаю лично. Мои оппоненты делают в точности то же самое. Я почему-то не заметил, чтобы Вы потребовали доказательства репрезентативности их выборки.

Просто так уж сложилось, что за 10 лет практики я ни разу не столкнулся с задачей, которая требовала бы задействования тех преимуществ языка с++ над java/.net, которые действительно в реальности существуют, причем требовала бы не локально, не в двух-трех местах, а повсеместно.

Одно из приложений, которое сейчас находится у меня в разработке, написано на смеси c++ и с#. Просто для решения одной из подзадач с++ оказался удобнее. Но подзадача — сравнительно мелкая и легко изолируемая.
Другое приложение, оптимизацией которого я в данный момент занимаюсь, написано уже чисто на с++. Обусловлено это особенностями конфигурации машин потенциальных клиентов, а вовсе не преимуществами с++. .net, как раз, был бы гораздо удобнее. И так далее и тому подобное. Причем в моей практике таких нюансов встречается на порядок больше, чем у большинства людей, с которыми я когда-либо работал.

Все это ни в малейшей степени не означает, что "жирафов не бывает". Разумеется, есть люди, которые исключительно такими задачами и занимаются. Просто мой личный (и не только мой) опыт заставляет меня крайне скептически относиться к предположениям, что таких задач — большинство. Доказательств обратного, замечу, мне никто (включая Вас) не предоставил.

Имею ли я право на свое мнение? Думаю, что да. Имеет ли мое мнение под собой веские основания? Думаю, что да. Прав ли я? Возможно, нет. Но пока мой подход себя оправдывал. Чего и Вам желаю.
Re[13]: why off?
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 10.11.05 14:23
Оценка: 54 (6) +5 -1 :))) :))
Здравствуйте, mrozov, Вы писали:

M>Доказывать я что-то буду коллегии присяжных, да и то — только по совету моего адвоката. Я делюсь своим опытом и опытом моих коллег, которых я знаю лично.


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

M>Мои оппоненты делают в точности то же самое. Я почему-то не заметил, чтобы Вы потребовали доказательства репрезентативности их выборки.


А они, как правило, аргументируют примерно так:

Глашатай .Net: Мир поменялся! Всем переходить на .Net!
он: И я?!
Глашатай .Net: Да!
он: А почему?
Глашатай .Net: Так надо! У тебя проблемы с утечками памяти и <много всего>!
он: У мна? (ошарашенно оглядывается по сторонам) У мна их нет. Уж лет пять как.
Глашатай .Net: У меня есть проблемы! У моих коллег есть проблемы с галимым C++! Потому — все на .Net!
(долгая беседа с разбором конкретных случаев, когда особенности .Net и C# реально мешают делу, завершающаяся немой сценой и взаимными обидами)

Понимаете разницу между позицией одного и второго, нет? А кто здесь безапеляционен? Кто неправомерно обобщает?

M>Просто так уж сложилось, что за 10 лет практики я ни разу не столкнулся с задачей, которая требовала бы задействования тех преимуществ языка с++ над java/.net, которые действительно в реальности существуют, причем требовала бы не локально, не в двух-трех местах, а повсеместно.


Опять таки, трудно делать выводы относительно конкретной области Вашей практики.

M>Одно из приложений, которое сейчас находится у меня в разработке, написано на смеси c++ и с#. Просто для решения одной из подзадач с++ оказался удобнее. Но подзадача — сравнительно мелкая и легко изолируемая.

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

Стоп. Из этого следует, что выбор C++ обусловлен как раз преимуществами C++ в конкретном контексте. Пусть не как языка, но как системы программирования. Не так ли? А раз так, то какая разница, в чём именно они состоят?

M>.net, как раз, был бы гораздо удобнее.


Очень интереное противопоставление: "удобство vs. удовлетворение требований пользователей". Отметим.

M>И так далее и тому подобное. Причем в моей практике таких нюансов встречается на порядок больше, чем у большинства людей, с которыми я когда-либо работал.


Э... извините, не понял, о каких именно нюансах речь? Вы имеете ввиду, что Вам на порядок чаще, чем другим людям приходится использовать C++ вместо .Net?

M>Все это ни в малейшей степени не означает, что "жирафов не бывает". Разумеется, есть люди, которые исключительно такими задачами и занимаются. Просто мой личный (и не только мой) опыт заставляет меня крайне скептически относиться к предположениям, что таких задач — большинство.


Ещё раз — это только Ваш опыт.

M>Доказательств обратного, замечу, мне никто (включая Вас) не предоставил.


А я и не пытался ничего доказать. Утверждаете здесь Вы. Следовательно и доказывать свои утверждения должны Вы. Меня как раз и интересует обоснованость Вашей позиции.

M>Имею ли я право на свое мнение? Думаю, что да. Имеет ли мое мнение под собой веские основания? Думаю, что да. Прав ли я? Возможно, нет. Но пока мой подход себя оправдывал. Чего и Вам желаю.


Снимаю перед Вами шляпу, коллега. Из уст сторонника .Net такое слышишь не часто.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[15]: С++ culture
От: VladD2 Российская Империя www.nemerle.org
Дата: 10.11.05 15:50
Оценка: -1
Здравствуйте, Кузнецов Денис Викторович, Вы писали:

КДВ>Исследования, на то они и исследования, чтобы ошибаться.


Исследования делаются, чтобы проверить свои суждения, а не чтобы ошибаться. Чтобы ошибаться достаточно что-то начать делать.

КДВ> Причем часто. А реальная применимость где?


А где были реальные применения знаний по ядерной физике до появления ректоров и бомб? Знамо где в научно-исследовательских институтах.

КДВ> Где скачать, установить и как реально можно использовать?


Обратись к авторам. Если они сочтут тебя интересым для себя, то, думаю, дадут попробовать.

КДВ> Они хоть на бумаге могут писать эти драйвера. Это ж Research!!!


А какая разница? Я не призивал использовать Сингулярити для создания копрпоротивных веб-порталов. Я просто заметил, что есть таки вполне разумные люди — ученые, которые пишут драйверы на C#. Пускай это пока что игрушка ученых, но идея эта уже далеко не бредовая.
... << RSDN@Home 1.2.0 alpha rev. 618>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[14]: С++ culture
От: VladD2 Российская Империя www.nemerle.org
Дата: 10.11.05 15:50
Оценка:
Здравствуйте, Kluev, Вы писали:

K>Могу кусок лога показать, посчитаем с точностью до байта, полегчает от этого?


Полегчает. Ты в будущем или приводи что-то доступное для разума окружающих, или не приводи вовсе. А то смешно же право смореть на какие-то цифры вырванные из контекста твоего подсознания.

...

K>Самому не смешно?


А что мне смеяться то?

K>А нужно всего-то:

K>
K>struct Triangle
K>{
K>   Node *nodes[3];
K>   Node* node_at( int idx ) // кольцевой доступ
K>   {
K>      static const int imap[] = { 1, 2, 0, 1, 2, 0, 1 };
K>      return nodes[imap[idx+2]];
K>   }
K>};
K>


За такой код в промышленных системах нужно по началу лишать премий, а потом выгонять если не прочувствушь. Это называется начхание на инкапсуляцию.

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

Код этот один фиг пишется один раз на проект. И жалеть тут 20 строк смысла нет. Лучше уж иметь более защищенную и удобную систему. А вот использование будет полностью идентично.

VD>>А можно применить ансэй и будет точно так же как на плюсах. Если при этом как следует инкапсулировать опасный код, то дальше можно работать совершенно безопасно.


K>А почему бы тогда сразу не на плюсах? Зачем какие-то танцы с бубном.


Потому что оптимизации требует отдельные, редко встречающиеся кусти кода, а безопасность и скорость разработки нужны везде.
... << RSDN@Home 1.2.0 alpha rev. 618>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[15]: С++ culture
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 10.11.05 15:57
Оценка: +1
Здравствуйте, VladD2, Вы писали:

K>>А нужно всего-то:

K>>
K>>struct Triangle
K>>{
K>>   Node *nodes[3];
K>>   Node* node_at( int idx ) // кольцевой доступ
K>>   {
K>>      static const int imap[] = { 1, 2, 0, 1, 2, 0, 1 };
K>>      return nodes[imap[idx+2]];
K>>   }
K>>};
K>>


VD>За такой код в промышленных системах нужно по началу лишать премий, а потом выгонять если не прочувствушь. Это называется начхание на инкапсуляцию.


А можно ли раскрыть эту тему по подробнее? Что именно плохо в приведенном коде (особенно с поправкой на то, что это врядли в точности тот код, который используется в реальной системе, а больше похож на быструю "выжимку" из оного)?
... << RSDN@Home 1.1.4 stable rev. 510>>


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[16]: С++ culture
От: Павел Кузнецов  
Дата: 10.11.05 16:07
Оценка: 1 (1) +2
VladD2,

> КДВ>Исследования, на то они и исследования, чтобы ошибаться.

>
> Исследования делаются, чтобы проверить свои суждения, а не чтобы ошибаться.

Твой оппонент хотел сказать, что при проверке суждения часто оказываются ошибочными. Соответственно, само по себе наличие исследований ни о чем, кроме интереса к теме, не говорит.
Posted via RSDN NNTP Server 2.0 beta
Легче одурачить людей, чем убедить их в том, что они одурачены. — Марк Твен
Re[16]: С++ culture
От: VladD2 Российская Империя www.nemerle.org
Дата: 10.11.05 16:23
Оценка:
Здравствуйте, eao197, Вы писали:

E>А можно ли раскрыть эту тему по подробнее? Что именно плохо в приведенном коде (особенно с поправкой на то, что это врядли в точности тот код, который используется в реальной системе, а больше похож на быструю "выжимку" из оного)?


K>>> Node *nodes[3];
... << RSDN@Home 1.2.0 alpha rev. 618>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[15]: С++ culture
От: Kluev  
Дата: 10.11.05 16:32
Оценка: 2 (2) +2
Здравствуйте, VladD2, Вы писали:

K>>Самому не смешно?


VD>А что мне смеяться то?


K>>А нужно всего-то:

K>>
K>>struct Triangle
K>>{
K>>   Node *nodes[3];
K>>   Node* node_at( int idx ) // кольцевой доступ
K>>   {
K>>      static const int imap[] = { 1, 2, 0, 1, 2, 0, 1 };
K>>      return nodes[imap[idx+2]];
K>>   }
K>>};
K>>


VD>За такой код в промышленных системах нужно по началу лишать премий, а потом выгонять если не прочувствушь. Это называется начхание на инкапсуляцию.


А что инкапсуляция это догма? К тому же не везде она хорошо работает. Например есть устовшаяся структура данных, а алгоритмов вокруг нее пишется тьма. В этом случае инкапсуляция совершенно неуместна

К примеру, такой подход:
struct Shell; // устоявшийся, редко меняемый класс

void shell_make_watertight(Shell *p, double tolerance); // непрерывно в разработке
// и еще куча функций вокруг, которые добавляются-выбрасываются в процессе

Гораздо лучше чем:
class Shell
{
 // триста функций на борту
};



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


Node* node_at(int idx)
{
   switch (idx)
   {
     case -2: return &node1;
     case -1: return &node2;
     case  0: return &node0;
     case  1: return &node1;
     case  2: return &node2;
     case  3: return &node0;
     case  4: return &node1;
   }
}

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

VD>Код этот один фиг пишется один раз на проект. И жалеть тут 20 строк смысла нет.

И эти 20 строк еще в 15-ти местах.

VD>Лучше уж иметь более защищенную и удобную систему. А вот использование будет полностью идентично.

Защищенную от чего? От ошибок в алгоритмах защиты нет. А остальные виды защиты имхо весьма сомнительное достижение, обманка для простаков.

VD>>>А можно применить ансэй и будет точно так же как на плюсах. Если при этом как следует инкапсулировать опасный код, то дальше можно работать совершенно безопасно.


K>>А почему бы тогда сразу не на плюсах? Зачем какие-то танцы с бубном.


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

Ты что же, девелоперов за лохов держишь? Еслибы С# ускорил и обезопасил мой процесс я бы нанего и перелез. А так пока я вижу, что только прийдется заниматся обходом всяких геморов и лишатся удобств.
Re[17]: С++ culture
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 10.11.05 16:33
Оценка:
Здравствуйте, VladD2, Вы писали:

E>>А можно ли раскрыть эту тему по подробнее? Что именно плохо в приведенном коде (особенно с поправкой на то, что это врядли в точности тот код, который используется в реальной системе, а больше похож на быструю "выжимку" из оного)?


K>>>> Node *nodes[3];


Я именно это и подразумевал, когда говорил, что код больше похож на выжику из production кода. Да и лечится эта проблема элементарно:
struct Triangle
{
   Node* node_at( int idx ) // кольцевой доступ
   {
      static const int imap[] = { 1, 2, 0, 1, 2, 0, 1 };
      return nodes[imap[idx+2]];
   }
  private :
   Node *nodes[3];
};


А еще более вероятно, что в реальной системе что-то вроде:
class Triangle
{
public :
    const Node * node_at( int idx ) const 
        { return nodes[ imap( idx + 2 ) ]; }
    Node * node_at( int idx )
        { return nodes[ imap( idx + 2 ) ]; }
private :
    Node * nodes[ 3 ];
    
    static const int imap( int idx )
        {
            static const int m[] = { 1, 2, 0, 1, 2, 0, 1 };
            assert( 0 <= idx && idx < (sizeof(m)/sizeof(m[0])) );
            return m[ idx ];
        }
};
... << RSDN@Home 1.1.4 stable rev. 510>>


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[18]: С++ culture
От: DarkGray Россия http://blog.metatech.ru/post/ogni-razrabotki.aspx
Дата: 10.11.05 22:31
Оценка:
E>А еще более вероятно, что в реальной системе что-то вроде:

И это все шаманство будет быстрее, чем:
return nodes[(idx+2)%3];

?
Re[17]: С++ culture
От: VladD2 Российская Империя www.nemerle.org
Дата: 10.11.05 23:19
Оценка:
Здравствуйте, Павел Кузнецов, Вы писали:

ПК>Твой оппонент хотел сказать, что при проверке суждения часто оказываются ошибочными.


Видимо у него не получилось.

ПК> Соответственно, само по себе наличие исследований ни о чем, кроме интереса к теме, не говорит.


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