Re[13]: Линус о языке Си++
От: Maxim S. Shatskih Россия  
Дата: 14.12.07 20:26
Оценка:
MSS>>Как хорошо, что Си не дает передавать структуры by value... и временных объектов не плодит...

RO>С каких это пор не дает?


Когда я это последний раз пробовал сделать — получил warning, и тут же про это забыл. Зачем это нужно-то? если мне будет нужно by value — то я сам объявлю Tmp и сделаю Tmp = Struct; f(&Tmp); Делов-то
Занимайтесь LoveCraftом, а не WarCraftом!
Re[10]: Что мне не нравится в указателях
От: Maxim S. Shatskih Россия  
Дата: 14.12.07 20:36
Оценка:
RO>имеется в виду, очевидно, void f(SomeType * здесьмогбыбытьвашconst someParameter).

Ну да, видимо, remark это имел в виду. Мне как-то кажется, что потребность сделать константой указуемое более насущна, чем константный указатель.
Занимайтесь LoveCraftом, а не WarCraftом!
Re[12]: Линус о языке Си++
От: Pzz Россия https://github.com/alexpevzner
Дата: 14.12.07 20:45
Оценка:
Здравствуйте, Maxim S. Shatskih, Вы писали:

MSS>Как хорошо, что Си не дает передавать структуры by value... и временных объектов не плодит...


Как это не дает? Очень даже дает. И возвращать по значению тоже дает. Семантика такой передачи при этом — как у memcpy.
Re: Линус о языке Си++
От: hexis  
Дата: 14.12.07 20:47
Оценка:
Maxim S. Shatskih wrote:
>
> http://article.gmane.org/gmane.comp.version-control.git/57918
>
> ...а я давно говорил нечто подобное, хотя и мягче, чем Линус.
> Линус о языке Си++

Я думаю, что в целом Линус прав, но кое в чем он ошибается. Просто у
этих языков — принципиально разные цели. Настолько разные, что их, по
большому счету, не имеет особого смысла сравнивать. C++ (как и все ОО
языки), в первую очередь, ориентирован на эффективность разработки и
сопровождения программы, а C — на эффективность исполнения (память,
скорость, объем кода). Самое интересное, что стиль программирования
действительно меняется с языком. Происходит это за счет того, что язык
поощряет определенные решения, упрощая процесс их реализации. Как
правило, программы, написанные одним и тем же человеком на C, обычном
C++, при помощи метапрограммирования на C++ или функциональных языков,
имеют принципиально различные проектные решения.
Вот и получается, что выбрав в качестве одной из первичных целей
эффективность исполнения, им пришлось намеренно отказаться от C++.
Конечно, на C++ тоже можно писать эффективные программы (как и на C —
неэффективные). Просто для этого, как правило, приходится прилагать
больше усилий и тщательнее контролировать себя. В тоже время, существует
множество задач, где использование C++ оправданно и желательно.
Posted via RSDN NNTP Server 2.1 beta
Re[9]: Линус о языке Си++
От: The Lex Украина  
Дата: 14.12.07 20:47
Оценка:
Здравствуйте, Erop, Вы писали:

TL>>Я в Линусе чайник: что еще кроме линукса Линус написал?

E>Не помню. Мни и линукса вполне достаточно. Это очень большой и серьёзный проект

Цитата из Википедии: (да, более достоверных источников... да мне просто лень искать )

В настоящее время лишь около двух процентов системного ядра «Linux» написано самим Торвальдсом, но за ним остаётся решение о внесении изменений в официальную ветку ядра.

Торвальдс владеет товарным знаком «Linux» и следит за его использованием[4] через некоммерческую организацию «Linux International» и при помощи пользователей «Linux» во всём мире.


Это и есть "очень большой и серьезный проект"?
Голь на выдумку хитра, однако...
Re[13]: Ты просто неверно понимаешь концепцию константности
От: Erop Россия  
Дата: 14.12.07 20:51
Оценка:
Здравствуйте, Pzz, Вы писали:

Pzz>К примеру, взять такой объект:


Pzz>
Pzz>struct str
Pzz>{
Pzz>    char *s;
Pzz>};
Pzz>


Pzz>В буквальном C++'ном понимании его константность заключается в том, что я не смогу поменать указатель s. Но мне ничего не помешает пописать в память, на которую ссылается этот указатель. Изменится при этом значение объекта или нет?


Ты просто плохо понимаешь концепцию константности в С++.
AFAIK, в C++ всё устроено как-то так
Автор: Erop
Дата: 04.09.07
...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[8]: Линус о языке Си++
От: Pzz Россия https://github.com/alexpevzner
Дата: 14.12.07 20:53
Оценка: +2
Здравствуйте, The Lex, Вы писали:

TL>>>Ключевой момент был неоднократно упомянут и указан явно тоже: практик в _чем_ именно?

E>>В программировании довольно сложных систем. А Александреску практик в написании книжек...

TL>Я в Линусе чайник: что еще кроме линукса Линус написал?


Git и книжку про то, как ему было в кайф писать линух и как ему нравится кататься на красном BMW.

Но я бы считал его главной заслугой способность поддерживать разработку ядра линуха на плаву. Это нетривиальная задача, с точки зрения управления проектами.
Re[9]: Линус о языке Си++
От: The Lex Украина  
Дата: 14.12.07 20:56
Оценка:
Здравствуйте, Maxim S. Shatskih, Вы писали:

TL>>Я в Линусе чайник: что еще кроме линукса Линус написал?


MSS>7 лет назад был 15 мег зип с исходниками. Конечно, там не все один Линус писал, но он писал самые старые и фундаментальные вещи и еще и поддерживал все это как тимлид.


Т.е. Линус "удачно попав под струю" осуществил в принципе мечту каждого человека: заниматься любимым делом и не думать о деньгах. Однако же тут уже заметили, что для остальных "население планеты минус Линус" это далеко не всегда так, а чаще как раз наоборот. К тому же, как уже заметили, ничего особо нового Линус в технический прогресс не привнес — по сути своей как ни посмотри, а Линукс — явление больше социально-организационного масштаба, чем технологического.

Лично у меня нет мечты — сидеть за компьютером и писать программы. Лично я больше мечтаю об отельчике на берегу моря. Лично мне что удачливый Линус, что удачливый Гейтс, что иже с ними Стив и Стив — все это примеры удачливых людей — а сколько было неудачливых?

Лично я пока что не вижу чем Сам Линус может мне помочь в моей лично скромной жизни. Копаться в ядре линукса я не буду — что лично мне Линус еще может предложить? А полезного лично для меня?
Голь на выдумку хитра, однако...
Re[2]: Линус о языке Си++
От: Pzz Россия https://github.com/alexpevzner
Дата: 14.12.07 21:00
Оценка: :))
Здравствуйте, hexis, Вы писали:

H>Я думаю, что в целом Линус прав, но кое в чем он ошибается. Просто у

H>этих языков — принципиально разные цели. Настолько разные, что их, по
H>большому счету, не имеет особого смысла сравнивать. C++ (как и все ОО
H>языки), в первую очередь, ориентирован на эффективность разработки и
H>сопровождения программы,

Это заблуждение. C++ в первую очередь рассчитан на индустриальный стиль программирования — когда главный индус описывает интерфейсы, а подчиненные индусы наращивают мясо на эти интерфейсы. Это не обеспечивает эффективности разработки, это обеспечивает массштабируемость (больше индусов — больше кода, почти в линейной пропорции, до тех пор, пока bandwidth главного индуса не исчерпан. А потом — кирдык).
Re[14]: Ты просто неверно понимаешь концепцию константности
От: Pzz Россия https://github.com/alexpevzner
Дата: 14.12.07 21:08
Оценка:
Здравствуйте, Erop, Вы писали:

Pzz>>В буквальном C++'ном понимании его константность заключается в том, что я не смогу поменать указатель s. Но мне ничего не помешает пописать в память, на которую ссылается этот указатель. Изменится при этом значение объекта или нет?


E>Ты просто плохо понимаешь концепцию константности в С++.

E>AFAIK, в C++ всё устроено как-то так
Автор: Erop
Дата: 04.09.07
...


Я очень хорошо понимаю. Проблема как раз в том, что в C++ нет явного способа, поддерживаемого синтаксисом языка, выразить, что именно является значением объекта. А рассуждения о константности имеют смысл только как о переменной, значение которой нельзя менять.

Заметим в скобках, что в языках, в которых нет переменных (т.е., чистая функциональщина), и понятие константы не имеет смысла. В такого рода языках выражение let x = 5 не создает переменной x, а создает человеческое имя для значения 5.
Re[3]: Линус о языке Си++
От: The Lex Украина  
Дата: 14.12.07 21:12
Оценка:
Здравствуйте, Pzz, Вы писали:

Pzz>Это заблуждение. C++ в первую очередь рассчитан на индустриальный стиль программирования — когда главный индус описывает интерфейсы, а подчиненные индусы наращивают мясо на эти интерфейсы. Это не обеспечивает эффективности разработки, это обеспечивает массштабируемость (больше индусов — больше кода, почти в линейной пропорции, до тех пор, пока bandwidth главного индуса не исчерпан. А потом — кирдык).


Простите, а как разрабатывается линукс? Все дружно пишут кто что хочет, а потом Линус пытается найти из всего этого что-нибудь полезного и интегрировать в систему?

Вообще-то "индустриальный стиль программирования" применим для любого языка, способного реализовать систему из отдельных модулей, объединенных интерфейсами. Или описание функций — это не есть "описать интерфейсы"?

ЗЫ: Линус — не индус. Значит Си хороший, а Си++ — плохой. Имхо, логично.
Голь на выдумку хитра, однако...
Re[16]: Линус о языке Си++
От: Pzz Россия https://github.com/alexpevzner
Дата: 14.12.07 21:13
Оценка:
Здравствуйте, Roman Odaisky, Вы писали:

RO>std::vector<int> const someIntegers(42u, 42);


RO>там наверняка внутри три указателя — начало данных, конец данных, конец выделенной области памяти. Как ты этот вектор ни используй, данные ты не изменишь. Спрятано всё.


Это все перестает работать, как только мы попытаемся засунуть в вектор объект, которому не все равно, где лежать.

Pzz>>Проблема в том, что в C++ управление памятью — ручное. Как его не оборачивай в темплейтные обертки, компилятор все равно не в курсе, что происходит с памятью. А без этого, видимо, высокоуровневый язык не построишь.


RO>Открою секрет: в C++09 изо всех сил стараются добавить GC. Ручное управление памятью — не проблема.


C++ вообще, как хороший наркотик. Чем больше колешься, тем больше хочется.

Pzz>>На C++, на самом деле, тоже толком никак. Например потому, что конструктор не знает, конструирует ли он константный или mutable объект.


RO>Это лишено смысла… X const x = X(); — здесь какой объект конструируется?


Отнюдь нет. Конструируя константный объект, можно было бы не заботиться о конструировании тех его запчастей, которые нужны только для неконстантного объекта. Если бы об этом можно было узнать в момент конструирования...
Re[4]: Линус о языке Си++
От: Pzz Россия https://github.com/alexpevzner
Дата: 14.12.07 21:18
Оценка:
Здравствуйте, The Lex, Вы писали:

TL>Простите, а как разрабатывается линукс? Все дружно пишут кто что хочет, а потом Линус пытается найти из всего этого что-нибудь полезного и интегрировать в систему?


Ну примерно. К линусу приходят разные люди с идеями, "я вот тута сделал кульную штуку, давай включим ее в ядро". Линус либо включает, либо не включает. Иногда даже объясняет, почему он принимает то или иное решение

TL>Вообще-то "индустриальный стиль программирования" применим для любого языка, способного реализовать систему из отдельных модулей, объединенных интерфейсами. Или описание функций — это не есть "описать интерфейсы"?


C++ дает дополнительную гибкость именно в описании интерфейсов. В остальном он примерно такой же, как Си.
Re[17]: Линус о языке Си++
От: remark Россия http://www.1024cores.net/
Дата: 14.12.07 21:24
Оценка:
Здравствуйте, Pzz, Вы писали:


RO>>Это лишено смысла… X const x = X(); — здесь какой объект конструируется?


Pzz>Отнюдь нет. Конструируя константный объект, можно было бы не заботиться о конструировании тех его запчастей, которые нужны только для неконстантного объекта. Если бы об этом можно было узнать в момент конструирования...



В такой ситуации имхо логичнее просто сделать 2 различных типа:
class X_const {};
class X {};



Логичнее даже наверное так:
class X_const {};
class X : public X_const {};



Так проще, и в противном случае не удасться полность избавиться от издержек, т.к. раскладку объекта менять не получится.



1024cores &mdash; all about multithreading, multicore, concurrency, parallelism, lock-free algorithms
Re[3]: Линус о языке Си++
От: hexis  
Дата: 14.12.07 21:27
Оценка:
Pzz wrote:
>
> Это заблуждение. C++ в первую очередь рассчитан на индустриальный стиль
> программирования — когда главный индус описывает интерфейсы, а
> подчиненные индусы наращивают мясо на эти интерфейсы. Это не
> обеспечивает эффективности разработки, это обеспечивает
> массштабируемость (больше индусов — больше кода, почти в линейной
> пропорции, до тех пор, пока bandwidth главного индуса не исчерпан. А
> потом — кирдык).

Ну, тогда мы явно заблуждаемся вместе. Что такое "индустриальный"
стиль программирования, как не эффективность на этапе разработки?
Принцип — разработать продукт с удовлетворительным качеством в заданные
сроки, использовав заданные ресурсы. Как правило ресурсы приоритетнее.
Да и вы приводите пример повышения именно такой эффективности —
сокращение времени, потраченного на разработку, за счет
распараллеливания задач и возможность использования множества легко
доступных посредственных программистов. А таланты архитектора — не
принадлежность языка или какой-то парадигмы. Хотя вполне могут
ограничиваться ими.
Posted via RSDN NNTP Server 2.1 beta
Re[16]: Линус о языке Си++
От: Erop Россия  
Дата: 14.12.07 21:37
Оценка:
Здравствуйте, Roman Odaisky, Вы писали:

RO>Это лишено смысла… X const x = X(); — здесь какой объект конструируется?


Вообще-то тут конструируется два объекта, один временный и один константный. При этом компилятор может оптимизировать это дело и строить сразу константный.

В целом не понятно что мешает как-то предоставить доступ к информации о том, какой объект конструируется, временный, константный, на стеке или в куче. Правда не понятно зачем это так уж сильно надо. Разве что для какой-то хитрой оптимизации...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[4]: Линус о языке Си++
От: Pzz Россия https://github.com/alexpevzner
Дата: 14.12.07 21:39
Оценка: -1
Здравствуйте, hexis, Вы писали:

H>Ну, тогда мы явно заблуждаемся вместе. Что такое "индустриальный"

H>стиль программирования, как не эффективность на этапе разработки?

Для начала надо определить понятие эффективности. Но как бы не была определена эффективность, ясно, что она является дробью, в числителе у которой то, что мы преобрели, а в знаменателе — то, что потратили.

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

Заметим в скобках, что если бабок мало, масштабируемость совершенно не нужна. В отличии от эффективности.
Re[13]: А при чём тут ссылки? :)
От: Erop Россия  
Дата: 14.12.07 21:47
Оценка:
Здравствуйте, Pzz, Вы писали:

Pzz>Не насколько не распостранена. Но факт передачи указателя явно виден в точке вызова. Т.е., когда Вы читаете вызов функции, Вам не надо заглядывать в другой файл, чтобы понять, что на самом деле получит эта функция — значение или ссылку.


Ну если программу пишут нормально, то от константных ссылок указатели не берут, и уж тем более не прихранивают.
Вот смотри. функция1
void f( CMyObject obj )
{
    m_store = &obj;
}
и функция 2
void f( const CMyObject &obj )
{
    m_store = &obj;
}
одинаково неправильные...
Чем тут мешает именно ссылка? Это всего лишь оптимизация передачи значения объекта в функцию. Зачем про эту оптимизацию знать в точке вызова?
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[5]: Линус о языке Си++
От: The Lex Украина  
Дата: 14.12.07 21:59
Оценка: -1
Здравствуйте, Pzz, Вы писали:

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


Нет такого — и никогда не было. Софт — это не единственный и далеко не новый "объект индустриального производства, нуждающийся в разработке". Тупо "масштабируются" при сохранении возможности создания конечного продука только рутинные операции: надо написать 100 буков "А" — можно посадить 1 человека, а можно 10, а можно и 100 — получим почти линейную масштабируемость. Если же надо написать "Войну и мир" — читай, "разработать" — масштабировать на уровне "чем больше наймем — тем лучше" никак не получится — и никогда не получалось. Еще раз: до софта была куча других промышленных объектов, которые точно так же проектировались, как софт — разрабатывается. И "просто масштабировать" производительность КБ, посадив 100 проектировщиков вместо 10 можно только на рутинных, четко определенных и ограниченных операциях, вроде черчения или расчетов.

Имхо, это дискуссия не для этого топика и не для этого раздела — это уже в "философию".

Pzz>Заметим в скобках, что если бабок мало, масштабируемость совершенно не нужна. В отличии от эффективности.


Тема бабок не раскрыта. Тема эффективности не раскрыта. Тема масштабируемости не раскрыта. Тема создания конечно продукта не раскрыта. Незачот.

Давайте замнем — для ясности.
Голь на выдумку хитра, однако...
Re[14]: Линус о языке Си++
От: Roman Odaisky Украина  
Дата: 14.12.07 22:28
Оценка: +1
Здравствуйте, Maxim S. Shatskih, Вы писали:

MSS>>>Как хорошо, что Си не дает передавать структуры by value... и временных объектов не плодит...

RO>>С каких это пор не дает?

MSS>Когда я это последний раз пробовал сделать — получил warning, и тут же про это забыл. Зачем это нужно-то? если мне будет нужно by value — то я сам объявлю Tmp и сделаю Tmp = Struct; f(&Tmp); Делов-то


Во-первых, зачем так пренебрегать замечательными возможностями C99?
drawLine((struct Point){ .x = 1, .y = 2 }, (struct Point){ .x = 3, .y = 42 });

Во-вторых, в C по определению нет типов с «тяжелым» копированием, так что там передача структур по значению проблем не вызывает.
До последнего не верил в пирамиду Лебедева.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.