Достаточно ли знать С без знания С++ для устройства на работу?
От: ramar Марс  
Дата: 04.09.14 08:08
Оценка:
А можно ли быть программистом-системщиком, но знать только С, без С++? Вообще, насколько важно знать С++ или достаточно только С? Не только в России, но за бугром тоже. В Америке, я знаю, именно С больше в почете.
Re: Достаточно ли знать С без знания С++ для устройства на работу?
От: Miroff Россия  
Дата: 04.09.14 08:24
Оценка:
Здравствуйте, ramar, Вы писали:

R>А можно ли быть программистом-системщиком, но знать только С, без С++? Вообще, насколько важно знать С++ или достаточно только С? Не только в России, но за бугром тоже. В Америке, я знаю, именно С больше в почете.


Если в связке C + Java/Python/whatever то достаточно.
Re: Достаточно ли знать С без знания С++ для устройства на работу?
От: Dair Россия https://dair.spb.ru
Дата: 04.09.14 08:24
Оценка: +1
Здравствуйте, ramar, Вы писали:

R>А можно ли быть программистом-системщиком, но знать только С, без С++? Вообще, насколько важно знать С++ или достаточно только С? Не только в России, но за бугром тоже. В Америке, я знаю, именно С больше в почете.


Разные области применения.
C — в микроконтроллеры и подобное "встраиваемое".
C++ — всё ж повыше.

Линуксовое ядро — C.
Верхний уровень вроде того же Qt — C++.
Re[2]: Достаточно ли знать С без знания С++ для устройства на работу?
От: ramar Марс  
Дата: 04.09.14 08:30
Оценка:
Здравствуйте, Miroff, Вы писали:


M>Если в связке C + Java/Python/whatever то достаточно.


Да, в связке.
Re: Достаточно ли знать С без знания С++ для устройства на работу?
От: Abyx Россия  
Дата: 04.09.14 08:45
Оценка: +5 :))) :))) :)))
Здравствуйте, ramar, Вы писали:

R>А можно ли быть программистом-системщиком, но знать только С, без С++? Вообще, насколько важно знать С++ или достаточно только С? Не только в России, но за бугром тоже. В Америке, я знаю, именно С больше в почете.


С не нужен.
99% тех, кто на нем пишет — это те что ниасилили С++.
что какбэ намекает на то, что люди не способные осилить язык никому не нужны.
тем более что есть строгая корреляция между знанием языка и знанием различных технологий и практик программирования.
In Zen We Trust
Re[2]: Достаточно ли знать С без знания С++ для устройства на работу?
От: ramar Марс  
Дата: 04.09.14 08:52
Оценка: 1 (1) :))) :))
Здравствуйте, Abyx, Вы писали:

A>С не нужен.

A>99% тех, кто на нем пишет — это те что ниасилили С++.
A>что какбэ намекает на то, что люди не способные осилить язык никому не нужны.
A>тем более что есть строгая корреляция между знанием языка и знанием различных технологий и практик программирования.

Java не нужен.
99% тех, кто на нем пишет — это те что ниасилили Scala.
что какбэ намекает на то, что люди не способные осилить язык никому не нужны.
тем более что есть строгая корреляция между знанием языка и знанием различных технологий и практик программирования.
Re[2]: Достаточно ли знать С без знания С++ для устройства на работу?
От: smeeld  
Дата: 04.09.14 09:00
Оценка: :))) :))) :))) :)
Здравствуйте, Abyx, Вы писали:

A>С не нужен.

A>99% тех, кто на нем пишет — это те что ниасилили С++.
A>что какбэ намекает на то, что люди не способные осилить язык никому не нужны.
A>тем более что есть строгая корреляция между знанием языка и знанием различных технологий и практик программирования.

Осилить C++ -пара недель почитывания стандарта. Это написавшие ZFS С++ не осилили?
Вообще С++ это для сотрудников всяких Pupkin Ink. пишущих на С++ по неспособности изучить что-то
сложнее стандарта C++, и думающих, что их жалкие, доморощенные, для пропихивания откатами, поделки,
есть вершины инженерного творчества.
Re[3]: Достаточно ли знать С без знания С++ для устройства на работу?
От: Abyx Россия  
Дата: 04.09.14 09:10
Оценка: +6
Здравствуйте, ramar, Вы писали:

R>Java не нужен.

Java конечно не нужна

R>99% тех, кто на нем пишет — это те что ниасилили Scala.

только C vs C++ не имеет никакого отношения к Java vs Scala.
Java и Scala — это разные языки для одной платформы, как например Delphi, С++ и D, или C# и VB.

А С — это просто урезанный С++, по этому если ты знаешь С, но не знаешь С++,
то для меня это выглядит так, что ты — программист С++, который
— использует минимум возможностей языка и не способен писать выразительный, идиоматичный код
— предпочитает использование небезопасных конструкций языка
— не в состоянии нормально применять ООП и ФП там где это надо
— не может писать нормальные юнит-тесты
— пишет огромное количество бойлерплейта, в коммитах огромные диффы, это тяжело читать/ревьювить
In Zen We Trust
Re[2]: Достаточно ли знать С без знания С++ для устройства на работу?
От: -n1l-  
Дата: 04.09.14 09:17
Оценка: +1 :)))
Здравствуйте, Abyx, Вы писали:

A>99% тех, кто на нем пишет — это те что ниасилили С++.


Не согласен, если человек занимается разработкой устройств или инженерной техникой, не использующей какие-то богатые пользовательские интерфейсы, а использующие простые экраны и кнопочки, то
скорее всего это программист C а не C++. К тому же всякие драйвера для линуксов не пишутся на С++. Плюс и для C есть много современных фреймворков. Так что ваш пост, мягко говоря не очень объективен.
Re[4]: Достаточно ли знать С без знания С++ для устройства на работу?
От: Няшка Россия  
Дата: 04.09.14 09:20
Оценка: +1 :)
Здравствуйте, Abyx, Вы писали:

A>А С — это просто урезанный С++


facepalm
80% людей оценивают свое мастерство выше среднего...
Re: Достаточно ли знать С без знания С++ для устройства на работу?
От: Няшка Россия  
Дата: 04.09.14 09:27
Оценка:
Здравствуйте, ramar, Вы писали:

R>А можно ли быть программистом-системщиком, но знать только С, без С++?

можно
более того, можно и не знать, но утверждать, что ты программист

R>Вообще, насколько важно знать С++ или достаточно только С?

для разработки различных ядер систем и системного ПО, драйверов или программирования микроконтроллеров обычно достаточно

R>Не только в России, но за бугром тоже. В Америке, я знаю, именно С больше в почете.

дело в сфере применения, а не стране
80% людей оценивают свое мастерство выше среднего...
Re[4]: Достаточно ли знать С без знания С++ для устройства на работу?
От: Mr.Delphist  
Дата: 04.09.14 09:35
Оценка:
Здравствуйте, Abyx, Вы писали:

A>А С — это просто урезанный С++


Май твиттер ваз хакд? Вы ещё скажите, что C полностью совместим по синтаксису с C++.
Re[5]: Достаточно ли знать С без знания С++ для устройства на работу?
От: Abyx Россия  
Дата: 04.09.14 09:56
Оценка:
Здравствуйте, Mr.Delphist, Вы писали:

A>>А С — это просто урезанный С++


MD>Вы ещё скажите, что C полностью совместим по синтаксису с C++.


нет, конечно они не совместимы на все 100%.
в С есть еще есть опасные вещи типа неявного каста void* в любой тип.
In Zen We Trust
Re[2]: Достаточно ли знать С без знания С++ для устройства на работу?
От: BulatZiganshin  
Дата: 04.09.14 10:14
Оценка: +2 :))) :))
Здравствуйте, Abyx, Вы писали:

A>99% тех, кто на нем пишет — это те что ниасилили С++.


а среди пишущих на C++ таких 100%
Люди, я люблю вас! Будьте бдительны!!!
Re[2]: Достаточно ли знать С без знания С++ для устройства на работу?
От: IgorVlasov  
Дата: 04.09.14 10:25
Оценка: 1 (1) +4 -4 :))) :)
Здравствуйте, Abyx, Вы писали:

A>С не нужен.

A>99% тех, кто на нем пишет — это те что ниасилили С++.
A>что какбэ намекает на то, что люди не способные осилить язык никому не нужны.
A>тем более что есть строгая корреляция между знанием языка и знанием различных технологий и практик программирования.

Скорее C++ не нужен.
С — отличный низкоуровневый язык для написания драйверов, прошивок и критичных к скорости выполнения участков программы, вообщем, там, где нужен маленький размер без кучи ненужных библиотек или скорость.
Например, в программе есть критичный к скорости выполнения или размеру кода участок, можно использовать какую-нибудь стороннюю библиотеку, в которой будет куча лишнего кода для решения конкретной задачи, а можно написать велосипед на C, который будет меньше и работать быстрее.
А высокоуровневые задачи пишутся на высокоуровневом же языках, например, на Java, C# и т.д.

А C++ — это попытка скрестить ужа с ежом, два разных подхода, служащих для решения разных задач.
Взяли C и прикрутили к нему сбоку ООП, типа это теперь высокоуровневый язык.
В результате язык потерял в скорости, увеличился размер стандартных библиотек, как следствие — потерял Сишную нишу(драйвера и т.д.).
И как высокоуровневый язык получился кривой, переусложнённый, с кучей подводных камней и т.д., в результате для написания прикладных программ от него сейчас отказываются.
Это всё равно что на Газель поставить двигатель от спорткара, чтобы на ней и грузы можно было возить, и ночью с пацанами погоняться. Лучше уж иметь два отдельных инструмента для решения разных задач(отдельно грузовик и отдельно спорткар).

Единственная ниша C++ — с одной стороны достаточно большие приложения, чтобы их писать целиком на C, с другой стороны, требовательные к скорости выполнения кода(например, геймдев, и то не весь).
Re[3]: Достаточно ли знать С без знания С++ для устройства на работу?
От: smeeld  
Дата: 04.09.14 11:00
Оценка: :))
Здравствуйте, IgorVlasov, Вы писали:


IV>Скорее C++ не нужен.


Плюсую.

IV>Взяли C и прикрутили к нему сбоку ООП, типа это теперь высокоуровневый язык.


ООП и на С без проблем реализуется. Во ядрах таких ОС как *BSD, Solaris, Linux-ООП ярко выраженный.
Re[3]: Достаточно ли знать С без знания С++ для устройства на работу?
От: Abyx Россия  
Дата: 04.09.14 11:19
Оценка: +5
Здравствуйте, IgorVlasov, Вы писали:

IV>Скорее C++ не нужен.

IV>С — отличный низкоуровневый язык для написания драйверов, прошивок и критичных к скорости выполнения участков программы, вообщем, там, где нужен маленький размер без кучи ненужных библиотек или скорость.
маленький размер чего?
IV>Например, в программе есть критичный к скорости выполнения или размеру кода участок, можно использовать какую-нибудь стороннюю библиотеку, в которой будет куча лишнего кода для решения конкретной задачи, а можно написать велосипед на C, который будет меньше и работать быстрее.
ну если он меньше, то он может хоть толще?

IV>А C++ — это попытка скрестить ужа с ежом, два разных подхода, служащих для решения разных задач.

IV>Взяли C и прикрутили к нему сбоку ООП, типа это теперь высокоуровневый язык.
IV>В результате язык потерял в скорости, увеличился размер стандартных библиотек, как следствие — потерял Сишную нишу(драйвера и т.д.).
конечно полиморфизм делает код медленнее, особенно статический.
IV>И как высокоуровневый язык получился кривой, переусложнённый, с кучей подводных камней и т.д., в результате для написания прикладных программ от него сейчас отказываются.
лямбда выражения опять же придумали всякие непонятные... то ли дело старые добрые указатели на функции. особенно в плане производительности.
эх, коллега, вы не представляете как же приятно пообщаться с экспертом

IV>Единственная ниша C++ — с одной стороны достаточно большие приложения, чтобы их писать целиком на C, с другой стороны, требовательные к скорости выполнения кода(например, геймдев, и то не весь).

эээ что? т.е. ты тоже согласен что С только для hello-world-ов?
In Zen We Trust
Re[4]: Достаточно ли знать С без знания С++ для устройства на работу?
От: Abyx Россия  
Дата: 04.09.14 11:20
Оценка: +1
Здравствуйте, smeeld, Вы писали:

IV>>Скорее C++ не нужен.

S>Плюсую.
ко-ко-ко

IV>>Взяли C и прикрутили к нему сбоку ООП, типа это теперь высокоуровневый язык.

S>ООП и на С без проблем реализуется. Во ядрах таких ОС как *BSD, Solaris, Linux-ООП ярко выраженный.
и в OpenSSL тоже. вот уж где хороший код
In Zen We Trust
Re[5]: Достаточно ли знать С без знания С++ для устройства на работу?
От: smeeld  
Дата: 04.09.14 11:37
Оценка: -6 :)))
Здравствуйте, Abyx, Вы писали:

A>и в OpenSSL тоже. вот уж где хороший код


Если Вы про ту самую уязвимость, то она от языка вообще никак не
зависит, и была бы там, будь openssl на C++ расписан.
А если Вы про пресловутое качество кода, его читаемость, то эти параметры важны
только для профессоров с похмельем, и пишущих их задачки студентов, чтоб двойку не получить.
И эти качества вообще параллельны на международных опенсорсных проектах.
Мне, например, от таких кусков кода ни холодно, ни жарко.
Так и должно быть.
Re[4]: Достаточно ли знать С без знания С++ для устройства н
От: eskimo82  
Дата: 04.09.14 23:21
Оценка: :)))
A>А С — это просто урезанный С++, по этому если ты знаешь С, но не знаешь С++,
Что за ерунду ты пишеш. Языки изначально были несовпадающим множеством, а сейчас еще больше и разошлись в разные стороны.

A>то для меня это выглядит так, что ты — программист С++, который

A>- использует минимум возможностей языка и не способен писать выразительный, идиоматичный код
В C99 есть такие возможности которые в C++ и не снились.

A>- предпочитает использование небезопасных конструкций языка

В любом языке есть небезопасные конструкции, даже в той же Java выстрелить себе в ногу гораздо проще и потом часами искать ошибку — Например, можно просто забыть создать экземпляр класса какой нибудь коллекции в конструкторе.

A>- не в состоянии нормально применять ООП и ФП там где это надо

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

A>- не может писать нормальные юнит-тесты

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

A>- пишет огромное количество бойлерплейта, в коммитах огромные диффы, это тяжело читать/ревьювить

Диф между linux kernel и FreeBSD kernel тоже огромный — его тяжело читать и ревьювить!
Отредактировано 04.09.2014 23:27 eskimo82 . Предыдущая версия . Еще …
Отредактировано 04.09.2014 23:25 eskimo82 . Предыдущая версия .
Re[2]: Достаточно ли знать С без знания С++ для устройства на работу?
От: eskimo82  
Дата: 04.09.14 23:41
Оценка:
A>С не нужен.
A>99% тех, кто на нем пишет — это те что ниасилили С++.
A>что какбэ намекает на то, что люди не способные осилить язык никому не нужны.
* У языка С++ есть обьективные проблемы с переносимостью и маштабируемостью получаемого решения. В пределах группы из платформ с более-менее одинаковыми характеристиками этих проблемы иногда не так заметны, но как только характеристики платформы начинают отличаться хоты бы на порядок — все эти проблемы вылезают.
* У языка Си такие проблемы тоже конечно есть, но в совершенно другом маштабе, побороть который уже предстааляется возможным. Ну и сама рантайм библиотека на несколько порядков проще — производителям "железа" не представляется сложным её портировать или реализовать в отличии от libstdc++. В добавок к этому, ABI для языка Си более консервативное, оно не меняется даже при изменении основной цифры версии (в отличии от ABI С++ которое меняется даже при изменении minor цыфры версии). Поэтому, хочеш быть максимально переносимым между платформами — пиши только на Си. Собственно, так многие и делают.

A>тем более что есть строгая корреляция между знанием языка и знанием различных технологий и практик программирования.

В среде опытных разработчиков — такой корреляции нету.
Re[5]: Достаточно ли знать С без знания С++ для устройства н
От: Cyberax Марс  
Дата: 04.09.14 23:43
Оценка: +2
Здравствуйте, eskimo82, Вы писали:

A>>А С — это просто урезанный С++, по этому если ты знаешь С, но не знаешь С++,

E>Что за ерунду ты пишеш. Языки изначально были несовпадающим множеством, а сейчас еще больше и разошлись в разные стороны.
Да ну? Почему atomics в С тогда взяли из С++? Точнее, они совместно работали.

Единственным крупным расхождением являются именованные поля в инициализаторах структур и мелочи типа variable-sized arrays.

A>>то для меня это выглядит так, что ты — программист С++, который

A>>- использует минимум возможностей языка и не способен писать выразительный, идиоматичный код
E>В C99 есть такие возможности которые в C++ и не снились.
ЩИТО?

A>>- предпочитает использование небезопасных конструкций языка

E>В любом языке есть небезопасные конструкции, даже в той же Java выстрелить себе в ногу гораздо проще и потом часами искать ошибку — Например, можно просто забыть создать экземпляр класса какой нибудь коллекции в конструкторе.
ЩИТО?

E>Элементы обобщенного програмирования в Си тоже можно неплохо применять, а частности — первые наброски Степановом того, что сейчас называется STL были сделаны на Си, довольно оригинальным способом.

Ага, через макросы.
Sapienti sat!
Re: достаточно
От: eskimo82  
Дата: 04.09.14 23:45
Оценка:
Но в РФ за это знание платить будут мало.
Re[6]: Достаточно ли знать С без знания С++ для устройства н
От: eskimo82  
Дата: 04.09.14 23:52
Оценка: -1
A>>>А С — это просто урезанный С++, по этому если ты знаешь С, но не знаешь С++,
E>>Что за ерунду ты пишеш. Языки изначально были несовпадающим множеством, а сейчас еще больше и разошлись в разные стороны.
C>Да ну? Почему atomics в С тогда взяли из С++? Точнее, они совместно работали.
Ты ничего не путаеш ? Атомарные переменные пришли в С++ из Си. Например sig_atomic_t вообще древний тип из стандарта POSIX.

C>Единственным крупным расхождением являются именованные поля в инициализаторах структур и мелочи типа variable-sized arrays.

Не только.

A>>>то для меня это выглядит так, что ты — программист С++, который

A>>>- использует минимум возможностей языка и не способен писать выразительный, идиоматичный код
E>>В C99 есть такие возможности которые в C++ и не снились.
C>ЩИТО?
Ага.

A>>>- предпочитает использование небезопасных конструкций языка

E>>В любом языке есть небезопасные конструкции, даже в той же Java выстрелить себе в ногу гораздо проще и потом часами искать ошибку — Например, можно просто забыть создать экземпляр класса какой нибудь коллекции в конструкторе.
C>ЩИТО?
Ага. И главное super вызывать не забывай.

E>>Элементы обобщенного програмирования в Си тоже можно неплохо применять, а частности — первые наброски Степановом того, что сейчас называется STL были сделаны на Си, довольно оригинальным способом.

C>Ага, через макросы.
Работает и работает неплохо.
Re[7]: Достаточно ли знать С без знания С++ для устройства н
От: Cyberax Марс  
Дата: 05.09.14 00:11
Оценка:
Здравствуйте, eskimo82, Вы писали:

C>>Да ну? Почему atomics в С тогда взяли из С++? Точнее, они совместно работали.

E>Ты ничего не путаеш ? Атомарные переменные пришли в С++ из Си. Например sig_atomic_t вообще древний тип из стандарта POSIX.
Нет, не путаю. RTFM стандарты.
Вот статьи с обзором: https://lwn.net/Articles/586838/ и https://lwn.net/Articles/588300/

Фактически, это кодификация разных барьерных intrinsinc'ов и CAS-операций, которые раньше делались расширениями компиляторов.

C>>Единственным крупным расхождением являются именованные поля в инициализаторах структур и мелочи типа variable-sized arrays.

E>Не только.
А что ещё?

A>>>>- использует минимум возможностей языка и не способен писать выразительный, идиоматичный код

E>>>В C99 есть такие возможности которые в C++ и не снились.
C>>ЩИТО?
E>Ага.
Я весь внимание. Можно список?

E>>>В любом языке есть небезопасные конструкции, даже в той же Java выстрелить себе в ногу гораздо проще и потом часами искать ошибку — Например, можно просто забыть создать экземпляр класса какой нибудь коллекции в конструкторе.

C>>ЩИТО?
E>Ага. И главное super вызывать не забывай.
Можно пример? Вообще-то, super() выполняется автоматически.

E>>>Элементы обобщенного програмирования в Си тоже можно неплохо применять, а частности — первые наброски Степановом того, что сейчас называется STL были сделаны на Си, довольно оригинальным способом.

C>>Ага, через макросы.
E>Работает и работает неплохо.
Плохо. Криво, без частичной специализации и без многих оптимизаций.
Sapienti sat!
Re[8]: Достаточно ли знать С без знания С++ для устройства н
От: eskimo82  
Дата: 05.09.14 00:23
Оценка: :))
C>>>Да ну? Почему atomics в С тогда взяли из С++? Точнее, они совместно работали.
E>>Ты ничего не путаеш ? Атомарные переменные пришли в С++ из Си. Например sig_atomic_t вообще древний тип из стандарта POSIX.
C>Нет, не путаю. RTFM стандарты.
C>Вот статьи с обзором: https://lwn.net/Articles/586838/ и https://lwn.net/Articles/588300/
C>Фактически, это кодификация разных барьерных intrinsinc'ов и CAS-операций, которые раньше делались расширениями компиляторов.
Стандарты разные бывают. Ко всему прочему есть де-факто стандарты.


C>>>Единственным крупным расхождением являются именованные поля в инициализаторах структур и мелочи типа variable-sized arrays.

E>>Не только.
C>А что ещё?
Много чего. Возврат структурных типов из функций, например.

A>>>>>- использует минимум возможностей языка и не способен писать выразительный, идиоматичный код

E>>>>В C99 есть такие возможности которые в C++ и не снились.
C>>>ЩИТО?
E>>Ага.
C>Я весь внимание. Можно список?
Ты можеш составить его сам.

E>>>>В любом языке есть небезопасные конструкции, даже в той же Java выстрелить себе в ногу гораздо проще и потом часами искать ошибку — Например, можно просто забыть создать экземпляр класса какой нибудь коллекции в конструкторе.

C>>>ЩИТО?
C>Можно пример?
public class AAA {
    public AAA( ... ) {
        //nodes = new IdentityHashMap();
    }

    public void selectAll(boolean tag) {
        for (Node node: nodes.values()) {
            node.select = tag;
        }
    }

    public void addNode(String id, Node node) {
        nodes.put(id, node);
    }

    IdentityHashMap<String, Node> nodes;
};


C>Вообще-то, super() выполняется автоматически.

Возможно.


E>>>>Элементы обобщенного програмирования в Си тоже можно неплохо применять, а частности — первые наброски Степановом того, что сейчас называется STL были сделаны на Си, довольно оригинальным способом.

C>>>Ага, через макросы.
E>>Работает и работает неплохо.
C>Плохо. Криво, без частичной специализации и без многих оптимизаций.
Никто не говорил что будут все фишки, а работает нормально и с хорошей оптимизацией.
Отредактировано 05.09.2014 0:30 eskimo82 . Предыдущая версия . Еще …
Отредактировано 05.09.2014 0:26 eskimo82 . Предыдущая версия .
Отредактировано 05.09.2014 0:24 eskimo82 . Предыдущая версия .
Re[9]: Достаточно ли знать С без знания С++ для устройства н
От: Cyberax Марс  
Дата: 05.09.14 00:29
Оценка:
Здравствуйте, eskimo82, Вы писали:

C>>Фактически, это кодификация разных барьерных intrinsinc'ов и CAS-операций, которые раньше делались расширениями компиляторов.

E>Стандарты разные бывают. Ко всему прочему есть де-факто стандарты.
Вот в С11 их взяли из С++.

E>>>Не только.

C>>А что ещё?
E>Много чего. Возврат структурных типов из функций, например.
Не позорься, а?

E>>>>>В C99 есть такие возможности которые в C++ и не снились.

C>>>>ЩИТО?
E>>>Ага.
C>>Я весь внимание. Можно список?
E>Ты можеш составить его сам.
Вот полный список:
- пусто -


C>>Можно пример?

E>
E>public class AAA {
E>    public void selectAll(boolean tag) {
E>        for (Node node: nodes.values()) {
E>            node.select = tag;
E>        }
E>    }
E>    public void addNode(String id, Node node) {
E>        nodes.put(id, node);
E>    }
E>    IdentityHashMap<String, Node> nodes = new IdentityHashMap();
E>};
E>

И всё. В отличие от С, в Java доступны нетривиальные in-place конструкторы. Тем более, что такая ошибка — это вообще из стиля "ну вот я тут забыл написать весь код и оно ничего не работает".

C>>Плохо. Криво, без частичной специализации и без многих оптимизаций.

E>Никто не говорил что будут все фишки, а работает нормально и с хорошей оптимизацией.
Работает плохо, и разбухивает код. Не говоря уж о сплошных ODR-нарушениях при попытках оптимизировать.
Sapienti sat!
Re[10]: Достаточно ли знать С без знания С++ для устройства
От: eskimo82  
Дата: 05.09.14 00:40
Оценка: -2 :))) :)
C>>>Фактически, это кодификация разных барьерных intrinsinc'ов и CAS-операций, которые раньше делались расширениями компиляторов.
E>>Стандарты разные бывают. Ко всему прочему есть де-факто стандарты.
C>Вот в С11 их взяли из С++.
C11 когда приняли ? а когда появились всякие __sync_fetch_and_sub ?

E>>>>Не только.

C>>>А что ещё?
E>>Много чего. Возврат структурных типов из функций, например.
C>Не позорься, а?
Да это ты не позорься, если не знал.

E>>>>>>В C99 есть такие возможности которые в C++ и не снились.

C>>>>>ЩИТО?
E>>>>Ага.
C>>>Я весь внимание. Можно список?
E>>Ты можеш составить его сам.
C>Вот полный список:
C>
C>- пусто -
C>

Не в состоянии составить список ?

C>>>Можно пример?

E>>
E>>public class AAA {
E>>    public void selectAll(boolean tag) {
E>>        for (Node node: nodes.values()) {
E>>            node.select = tag;
E>>        }
E>>    }
E>>    public void addNode(String id, Node node) {
E>>        nodes.put(id, node);
E>>    }
E>>    IdentityHashMap<String, Node> nodes = new IdentityHashMap();
E>>};
E>>

C>И всё. Тем более, что такая ошибка — это вообще из стиля "ну вот я тут забыл написать весь код и оно ничего не работает".
Дело в том, что в C++ такую ошибку допустить в принципе нельзя.

C>В отличие от С, в Java доступны нетривиальные in-place конструкторы.

Мне абсолютно побоку на "нетривиальные in-place конструкторы", я на них не надрачиваю.

C>>>Плохо. Криво, без частичной специализации и без многих оптимизаций.

E>>Никто не говорил что будут все фишки, а работает нормально и с хорошей оптимизацией.
C>Работает плохо, и разбухивает код. Не говоря уж о сплошных ODR-нарушениях при попытках оптимизировать.
МММ, щас ты меня будеш лечить что templates в C++ не разбухивают код ? Угомонись уже, код оптимизируется очень хорошо.
Отредактировано 05.09.2014 0:44 eskimo82 . Предыдущая версия .
Re[3]: Достаточно ли знать С без знания С++ для устройства на работу?
От: CreatorCray  
Дата: 05.09.14 01:31
Оценка:
Здравствуйте, smeeld, Вы писали:

S>Осилить C++ -пара недель почитывания стандарта.

Удачи!
Re[3]: Достаточно ли знать С без знания С++ для устройства на работу?
От: CreatorCray  
Дата: 05.09.14 01:31
Оценка: +4
Здравствуйте, -n1l-, Вы писали:

N>К тому же всякие драйвера для линуксов не пишутся на С++.

Причиной этому является ослиное упрямство ниасилившего Торвальдса. А мы в итоге сейчас в линуксячем кернеле жрём кактусы. Вбив бы!
Под винду драйвера на С++ пишутся легко и приятно. С содроганием вспоминаю времена когда их по дурости пытались писать на С.
Re[3]: Достаточно ли знать С без знания С++ для устройства на работу?
От: CreatorCray  
Дата: 05.09.14 01:31
Оценка:
Здравствуйте, IgorVlasov, Вы писали:

IV>Скорее C++ не нужен.

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

Не надо это рассказывать людям, которые драйвера писали и на С и на С++.
Просто небо и земля. Сишная рукопашка и вынужденный boilerplating просто выносили моск.
Re[6]: Достаточно ли знать С без знания С++ для устройства на работу?
От: CreatorCray  
Дата: 05.09.14 01:31
Оценка: +2
Здравствуйте, smeeld, Вы писали:

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


Профнепригодность detected.
Без шуток. Это no hire сразу.

S>И эти качества вообще параллельны на международных опенсорсных проектах.


Да, в опенсорсе тот ещё говнокод.
Re[6]: Достаточно ли знать С без знания С++ для устройства на работу?
От: Cyberax Марс  
Дата: 05.09.14 01:44
Оценка:
Здравствуйте, smeeld, Вы писали:

S>А если Вы про пресловутое качество кода, его читаемость, то эти параметры важны

S>только для профессоров с похмельем, и пишущих их задачки студентов, чтоб двойку не получить.
S>И эти качества вообще параллельны на международных опенсорсных проектах.
ЩИТО?
Sapienti sat!
Re[11]: Достаточно ли знать С без знания С++ для устройства
От: Cyberax Марс  
Дата: 05.09.14 01:48
Оценка:
Здравствуйте, eskimo82, Вы писали:

E>>>Стандарты разные бывают. Ко всему прочему есть де-факто стандарты.

C>>Вот в С11 их взяли из С++.
E>C11 когда приняли ? а когда появились всякие __sync_fetch_and_sub ?
И что дальше-то?

E>>>Много чего. Возврат структурных типов из функций, например.

C>>Не позорься, а?
E>Да это ты не позорься, если не знал.
struct test_t
{
   int a, b;
};

test_t testit()
{
   return {1, 2};
}

int main()
{
   test_t res = testit();
   printf("%d %d\n", res.a, res.b);
}

Всё ОК.

C>>
C>>- пусто -
C>>

E>Не в состоянии составить список ?
Нет, это полный список.

C>>>>Можно пример?

E>>>
E>>>public class AAA {
E>>>    public void selectAll(boolean tag) {
E>>>        for (Node node: nodes.values()) {
E>>>            node.select = tag;
E>>>        }
E>>>    }
E>>>    public void addNode(String id, Node node) {
E>>>        nodes.put(id, node);
E>>>    }
E>>>    IdentityHashMap<String, Node> nodes = new IdentityHashMap();
E>>>};
E>>>


C>>И всё. Тем более, что такая ошибка — это вообще из стиля "ну вот я тут забыл написать весь код и оно ничего не работает".

E>Дело в том, что в C++ такую ошибку допустить в принципе нельзя.
Да ну?
class AAA
{
    IdentityHashMap *nodes;
    AAA()
    {
        //Whoopsie
    }
};

Про всякие int'ы вообще молчу.

C>>В отличие от С, в Java доступны нетривиальные in-place конструкторы.

E>Мне абсолютно побоку на "нетривиальные in-place конструкторы", я на них не надрачиваю.
Только что подрочил уже.

C>>Работает плохо, и разбухивает код. Не говоря уж о сплошных ODR-нарушениях при попытках оптимизировать.

E>МММ, щас ты меня будеш лечить что templates в C++ не разбухивают код ? Угомонись уже, код оптимизируется очень хорошо.
Не разбухивают, по сравнению с макросами.
Sapienti sat!
Re[3]: Достаточно ли знать С без знания С++ для устройства на работу?
От: uncommon Ниоткуда  
Дата: 05.09.14 02:10
Оценка:
Здравствуйте, -n1l-, Вы писали:

N> К тому же всякие драйвера для линуксов не пишутся на С++.


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

> Плюс и для C есть много современных фреймворков.


Например?
Re: Достаточно ли знать С без знания С++ для устройства на работу?
От: uncommon Ниоткуда  
Дата: 05.09.14 02:55
Оценка: +1
Здравствуйте, ramar, Вы писали:

R>А можно ли быть программистом-системщиком, но знать только С, без С++? Вообще, насколько важно знать С++ или достаточно только С? Не только в России, но за бугром тоже. В Америке, я знаю, именно С больше в почете.


У меня есть знакомый, который вообще умный парень, знает хорошо С, но С++ мягко говоря не особо. И вот у него код получается немного странный из-за этого: состояние в глобальных переменных, макросы там где не нужно (практически весь публичный API получается состоящим из макросов), нереинтерабельные функции, и куча других "идиом" С. (При этом заголовочные файлы у него имеют расширение .hpp.) Я сначала не понимал почему. А причина в том, что на С трудно писать хороший код, и он выработал для себя набор приёмов, которые облегчают для него написание кода, но получающийся код изабилует вышеупомянутыми косяками. Так вот, я бы посоветовал тебе проверить, нет ли в твоём С коде похожих особенностей, которые легко предотвратить на С++.
Re[4]: Достаточно ли знать С без знания С++ для устройства на работу?
От: -n1l-  
Дата: 05.09.14 04:45
Оценка:
Здравствуйте, uncommon, Вы писали:

U>Например?


Они в основном для embedded systems. Понятно дело, что на десктопах и даже мобилках для старого доброго си места нет.
PS
ZigBee api например
Re[4]: Достаточно ли знать С без знания С++ для устройства на работу?
От: -n1l-  
Дата: 05.09.14 04:51
Оценка: :)
Здравствуйте, CreatorCray, Вы писали:

CC>Здравствуйте, -n1l-, Вы писали:


N>>К тому же всякие драйвера для линуксов не пишутся на С++.

CC>Причиной этому является ослиное упрямство ниасилившего Торвальдса. А мы в итоге сейчас в линуксячем кернеле жрём кактусы. Вбив бы!
Не думаю, что торвальдс, ведущий разработчик линукса, не осилил с++. Да и написание драйверов не выглядит таким уж ужасом.

CC>Под винду драйвера на С++ пишутся легко и приятно. С содроганием вспоминаю времена когда их по дурости пытались писать на С.

Майкрософт — это компания которая поддерживает с++ и развивает его куда больше чем все остальные.
Кто-то даже говорит что единственная. Так что неудивительно...
Re[12]: Достаточно ли знать С без знания С++ для устройства
От: eskimo82  
Дата: 05.09.14 05:06
Оценка: -2 :)
E>>>>Стандарты разные бывают. Ко всему прочему есть де-факто стандарты.
C>>>Вот в С11 их взяли из С++.
E>>C11 когда приняли ? а когда появились всякие __sync_fetch_and_sub ?
C>И что дальше-то?
Причинно-следственная связь.

E>>>>Много чего. Возврат структурных типов из функций, например.

C>>>Не позорься, а?
E>>Да это ты не позорься, если не знал.
C>
C>struct test_t
C>{
C>   int a, b;
C>};

C>test_t testit()
C>{
C>   return {1, 2};
C>}

C>int main()
C>{
C>   test_t res = testit();
C>   printf("%d %d\n", res.a, res.b);
C>}
C>

C>Всё ОК.
Не позорься:
1. В языке Си есть 3 непересекающихся (в отличии от C++) пространства имен — для struct, union, enum и глобальное для typedef. Твой код просто не соберется, ибо test_t не определен в глобальном пространстве имен. Он собрался бы, если бы ты написал struct test_t testit().
2. Возвращать структурные типы стало можно в C99.


C>>>
C>>>- пусто -
C>>>

E>>Не в состоянии составить список ?
C>Нет, это полный список.
Это не полный список, как минимум потому, что ты в него не включил даже того о чем написал сам.

C>>>И всё. Тем более, что такая ошибка — это вообще из стиля "ну вот я тут забыл написать весь код и оно ничего не работает".

E>>Дело в том, что в C++ такую ошибку допустить в принципе нельзя.
C>Да ну?
Именнно так:
C>
C>class AAA
C>{
C>    IdentityHashMap nodes;

C>    AAA()
C>    {
C>        // everything is ok
C>    }
C>};
C>

C>Про всякие int'ы вообще молчу.
С интами как раз все прекрасно. Неиниуиализированые значения не приводят к падению.

C>>>В отличие от С, в Java доступны нетривиальные in-place конструкторы.

E>>Мне абсолютно побоку на "нетривиальные in-place конструкторы", я на них не надрачиваю.
C>Только что подрочил уже.
Хм, просто показал что можно выстрелить себе в ногу можно в любом языке и развеял очередной миф.

C>>>Работает плохо, и разбухивает код. Не говоря уж о сплошных ODR-нарушениях при попытках оптимизировать.

E>>МММ, щас ты меня будеш лечить что templates в C++ не разбухивают код ? Угомонись уже, код оптимизируется очень хорошо.
C>Не разбухивают, по сравнению с макросами.
Да ну ? Давай приводи сравнительный пример.
Отредактировано 05.09.2014 5:11 eskimo82 . Предыдущая версия . Еще …
Отредактировано 05.09.2014 5:08 eskimo82 . Предыдущая версия .
Отредактировано 05.09.2014 5:07 eskimo82 . Предыдущая версия .
Re[13]: Достаточно ли знать С без знания С++ для устройства
От: Cyberax Марс  
Дата: 05.09.14 05:52
Оценка: +2
Здравствуйте, eskimo82, Вы писали:

E>>>C11 когда приняли ? а когда появились всякие __sync_fetch_and_sub ?

C>>И что дальше-то?
E>Причинно-следственная связь.
А она есть. Сначала появился драфт в комитете С++, потом его принял комитет С.

C>>Всё ОК.

E>Не позорься:
E>1. В языке Си есть 3 непересекающихся (в отличии от C++) пространства имен — для struct, union, enum и глобальное для typedef. Твой код просто не соберется, ибо test_t не определен в глобальном пространстве имен. Он собрался бы, если бы ты написал struct test_t testit().
И що?

E>2. Возвращать структурные типы стало можно в C99.

Бредишь. Это возможно чуть ли не с K&R C, точно было в C89. Классика жанра — возвращение структуры POINT в WinAPI.

C>>Нет, это полный список.

E>Это не полный список, как минимум потому, что ты в него не включил даже того о чем написал сам.
Нету в С преимуществ.

C>>Да ну?

E>Именнно так:
Это не эквивалентный код. В Java используется reference-тип.

C>>Про всякие int'ы вообще молчу.

E>С интами как раз все прекрасно. Неиниуиализированые значения не приводят к падению.
class fault_t
{
    int *ptr;
public:
    void do_something()
    {
         if (ptr) printf("%d\n", *ptr); //Whoopsie
    }
};

Оно скомпилируется и будет падать.

C>>Только что подрочил уже.

E>Хм, просто показал что можно выстрелить себе в ногу можно в любом языке и развеял очередной миф.
В С это делается на порядки проще.

C>>Не разбухивают, по сравнению с макросами.

E>Да ну ? Давай приводи сравнительный пример.
Создай пару контейнеров, разворачивающихся в static-функции.
Sapienti sat!
Re[3]: Достаточно ли знать С без знания С++ для устройства на работу?
От: AleksandrN Россия  
Дата: 05.09.14 06:55
Оценка:
Здравствуйте, BulatZiganshin, Вы писали:

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


A>>99% тех, кто на нем пишет — это те что ниасилили С++.


BZ>а среди пишущих на C++ таких 100%



Нет, не 100%. Страуструп освоил C++.
Re[4]: Достаточно ли знать С без знания С++ для устройства на работу?
От: ramar Марс  
Дата: 05.09.14 07:02
Оценка:
Здравствуйте, AleksandrN, Вы писали:


AN>Нет, не 100%. Страуструп освоил C++.


Нет, он сказал, что знает на 8 что-ли.
Re[13]: Достаточно ли знать С без знания С++ для устройства
От: CreatorCray  
Дата: 05.09.14 07:09
Оценка:
Здравствуйте, eskimo82, Вы писали:

E>1. В языке Си есть 3 непересекающихся (в отличии от C++) пространства имен — для struct, union, enum и глобальное для typedef.


Всегда это бесило. Кошмарно неудобно.
Re[5]: Достаточно ли знать С без знания С++ для устройства на работу?
От: CreatorCray  
Дата: 05.09.14 07:09
Оценка:
Здравствуйте, -n1l-, Вы писали:

N>>>К тому же всякие драйвера для линуксов не пишутся на С++.

CC>>Причиной этому является ослиное упрямство ниасилившего Торвальдса. А мы в итоге сейчас в линуксячем кернеле жрём кактусы. Вбив бы!
N>Не думаю, что торвальдс, ведущий разработчик линукса, не осилил с++.
Ну он про С++ писал типичное для ниасиливших.

N> Да и написание драйверов не выглядит таким уж ужасом.

На С — банально много гемору. А в kernel ошибки приводят к более чем неприятным последствиям.

CC>>Под винду драйвера на С++ пишутся легко и приятно. С содроганием вспоминаю времена когда их по дурости пытались писать на С.

N>Майкрософт — это компания которая поддерживает с++ и развивает его куда больше чем все остальные.
Молодцы, чо.
Re[14]: Достаточно ли знать С без знания С++ для устройства
От: eskimo82  
Дата: 05.09.14 07:11
Оценка: -5
E>>>>C11 когда приняли ? а когда появились всякие __sync_fetch_and_sub ?
C>>>И что дальше-то?
E>>Причинно-следственная связь.
C>А она есть. Сначала появился драфт в комитете С++, потом его принял комитет С.
А перед этим появились различные интересные функции в компиляторах для Си.

C>>>Всё ОК.

E>>Не позорься:
E>>1. В языке Си есть 3 непересекающихся (в отличии от C++) пространства имен — для struct, union, enum и глобальное для typedef. Твой код просто не соберется, ибо test_t не определен в глобальном пространстве имен. Он собрался бы, если бы ты написал struct test_t testit().
C>И що?
Не позорься, вот и то.

E>>2. Возвращать структурные типы стало можно в C99.

C>Бредишь. Это возможно чуть ли не с K&R C, точно было в C89. Классика жанра — возвращение структуры POINT в WinAPI.
1. Что я неприпоминаю, что там за функция в Win32 API возвращает POINT. Можеш напомнить ?
2. У микрософтовского компилятора есть свои специальные надстройки над языком. Еще расскажи тут, что uuidof является частью C++.

C>>>Нет, это полный список.

E>>Это не полный список, как минимум потому, что ты в него не включил даже того о чем написал сам.
C>Нету в С преимуществ.
Исходя из разговора с тобой, мне видно, что языка Си ты вообще-то незнаеш. Грубая путаница с C++.

C>>>Да ну?

E>>Именнно так:
C>Это не эквивалентный код. В Java используется reference-тип.
И там и там приведен код который обьекта — агрегата.

C>>>Про всякие int'ы вообще молчу.

E>>С интами как раз все прекрасно. Неиниуиализированые значения не приводят к падению.
C>
C>class fault_t
C>{
C>    int *ptr;
C>public:
C>    void do_something()
C>    {
C>         if (ptr) printf("%d\n", *ptr); //Whoopsie
C>    }
C>};
C>

C>Оно скомпилируется и будет падать.
Как мы видим, здесь указатель, а не int. Какой неприкрытый фейл...

C>>>Только что подрочил уже.

E>>Хм, просто показал что можно выстрелить себе в ногу можно в любом языке и развеял очередной миф.
C>В С это делается на порядки проще.
Куда уж проще чем в Java-то ? Тебя носом даже в пример потыкали.

C>>>Не разбухивают, по сравнению с макросами.

E>>Да ну ? Давай приводи сравнительный пример.
C>Создай пару контейнеров, разворачивающихся в static-функции.
В Си это делается на порядок проще. Но пример ты так и не привел, ожидаем-с.
Отредактировано 05.09.2014 7:15 eskimo82 . Предыдущая версия . Еще …
Отредактировано 05.09.2014 7:13 eskimo82 . Предыдущая версия .
Re[14]: Достаточно ли знать С без знания С++ для устройства
От: eskimo82  
Дата: 05.09.14 07:16
Оценка:
E>>1. В языке Си есть 3 непересекающихся (в отличии от C++) пространства имен — для struct, union, enum и глобальное для typedef.
CC>Всегда это бесило. Кошмарно неудобно.
Ботинки жмут ?
Re[6]: Достаточно ли знать С без знания С++ для устройства на работу?
От: Cyberax Марс  
Дата: 05.09.14 07:43
Оценка:
Здравствуйте, CreatorCray, Вы писали:

CC>>>Причиной этому является ослиное упрямство ниасилившего Торвальдса. А мы в итоге сейчас в линуксячем кернеле жрём кактусы. Вбив бы!

N>>Не думаю, что торвальдс, ведущий разработчик линукса, не осилил с++.
CC>Ну он про С++ писал типичное для ниасиливших.
Линус пробовал С++ для ядра в середине 90-х, когда все компиляторы сосали по полной. В итоге в ужасе сбежал, что было вполне разумно на тот момент.

Ну а сейчас просто уже много кода на С написано, есть вся нужная инфраструктура, а многие ядерные разработчики не знают С++. Так что менять что-то сильного смысла нет (кроме того, в ядре куча структур с полями с именами типа "class" или "protected").
Sapienti sat!
Re[5]: Достаточно ли знать С без знания С++ для устройства на работу?
От: Хон Гиль Дон Россия  
Дата: 05.09.14 07:46
Оценка: +1
Здравствуйте, Abyx, Вы писали:


IV>>>Взяли C и прикрутили к нему сбоку ООП, типа это теперь высокоуровневый язык.

S>>ООП и на С без проблем реализуется. Во ядрах таких ОС как *BSD, Solaris, Linux-ООП ярко выраженный.
A>и в OpenSSL тоже. вот уж где хороший код

Да нормальный там код, даже обработка ошибок более-менее толково реализована. И даже утечек нет, если правильно хвосты зачищать. На плюсах, правда, все это раза в 3-4 компактнее получилось бы.
Одним из 33 полных кавалеров ордена "За заслуги перед Отечеством" является Геннадий Хазанов.
Re[15]: Достаточно ли знать С без знания С++ для устройства
От: Cyberax Марс  
Дата: 05.09.14 07:53
Оценка: +1
Здравствуйте, eskimo82, Вы писали:

C>>А она есть. Сначала появился драфт в комитете С++, потом его принял комитет С.

E>А перед этим появились различные интересные функции в компиляторах для Си.
А перед этим появилась первая бактерия.

E>>>1. В языке Си есть 3 непересекающихся (в отличии от C++) пространства имен — для struct, union, enum и глобальное для typedef. Твой код просто не соберется, ибо test_t не определен в глобальном пространстве имен. Он собрался бы, если бы ты написал struct test_t testit().

C>>И що?
E>Не позорься, вот и то.
Я это знаю прекрасно, мне просто непонятно причём тут это.

E>>>2. Возвращать структурные типы стало можно в C99.

C>>Бредишь. Это возможно чуть ли не с K&R C, точно было в C89. Классика жанра — возвращение структуры POINT в WinAPI.
E>1. Что я неприпоминаю, что там за функция в Win32 API возвращает POINT. Можеш напомнить ?
В общем, я считаю, что ламеризм (воинствующее незнание) надо наказывать долларом. Так что предлагаю поспорить на $100, что в С89 есть возврат структур, аналогичный побайтному копированию.

C>>Нету в С преимуществ.

E>Исходя из разговора с тобой, мне видно, что языка Си ты вообще-то незнаеш. Грубая путаница с C++.
LOL.

C>>Это не эквивалентный код. В Java используется reference-тип.

E>И там и там приведен код который обьекта — агрегата.
ЩИТО? В Java все объекты — это reference-типы. Если бы в Java были value-типы, то тоже всё было бы как в С++.

C>>Оно скомпилируется и будет падать.

E>Как мы видим, здесь указатель, а не int. Какой неприкрытый фейл...
Можно и int, не вопрос:
int mode;
chmod("/some/file", mode); //Are you feeling lucky today?


E>>>Хм, просто показал что можно выстрелить себе в ногу можно в любом языке и развеял очередной миф.

C>>В С это делается на порядки проще.
E>Куда уж проще чем в Java-то ? Тебя носом даже в пример потыкали.
У тебя нос уже давно в навозе. В Java пишется так:
public class Test
{
   private final IdentityHashMap map;
   void do_something()
   {
      map.get("aa");
   }
};

Оно выдаст ошибку компиляции.

В чистом С пишется так:
struct list_t
{
    struct list_t *next;
    int payload;
};

struct something_t
{
    struct list_t head;
};

А потом ищутся баги с неинициализированным next.

C>>Создай пару контейнеров, разворачивающихся в static-функции.

E>В Си это делается на порядок проще. Но пример ты так и не привел, ожидаем-с.
Да ну?
#define LIST_CLAZZ(T,NM) \
    struct NM { struct NM* next; T payload; }; \
    static void add_to_#NM(NM* tail, T payload) {...};

"Методы" add_to... будут в каждом используемом файле инстанцироваться отдельно, за счёт static'а. Если static убрать, то получим конфликты времени связывания и/или неоптимальный код из-за отсутствия inlining'а.
Sapienti sat!
Re[6]: Достаточно ли знать С без знания С++ для устройства на работу?
От: Abyx Россия  
Дата: 05.09.14 08:16
Оценка: +1
Здравствуйте, Хон Гиль Дон, Вы писали:

ХГД>Здравствуйте, Abyx, Вы писали:



IV>>>>Взяли C и прикрутили к нему сбоку ООП, типа это теперь высокоуровневый язык.

S>>>ООП и на С без проблем реализуется. Во ядрах таких ОС как *BSD, Solaris, Linux-ООП ярко выраженный.
A>>и в OpenSSL тоже. вот уж где хороший код

ХГД>Да нормальный там код, даже обработка ошибок более-менее толково реализована. И даже утечек нет, если правильно хвосты зачищать. На плюсах, правда, все это раза в 3-4 компактнее получилось бы.


угу, компактнее и надежнее (те же баги типа вылезания за границы буфера, как у HeartBleed) ловились бы дебаг-итераторами
и можно было бы писать юнит тесты.
In Zen We Trust
Re[4]: Достаточно ли знать С без знания С++ для устройства на работу?
От: Abyx Россия  
Дата: 05.09.14 08:26
Оценка: +2
Здравствуйте, uncommon, Вы писали:

U>В ядре нет поддержки C++ runtime и есть некоторые ограничения на код сгенирированный компилятором, которые затрудняют написание драйверов на C++. Их пишут на C, потому что выбора нет.


можно писать на подмножестве С++, которое не требует рантайма и каких-то фич которые плохо работают в ядре.
это будет очень большое подмножество со многими полезными фичами.
In Zen We Trust
Re[15]: Достаточно ли знать С без знания С++ для устройства
От: Хон Гиль Дон Россия  
Дата: 05.09.14 08:39
Оценка: +2
Здравствуйте, eskimo82, Вы писали:

C>>>>Нет, это полный список.

E>>>Это не полный список, как минимум потому, что ты в него не включил даже того о чем написал сам.
C>>Нету в С преимуществ.
E>Исходя из разговора с тобой, мне видно, что языка Си ты вообще-то незнаеш. Грубая путаница с C++.

Эээ, а список преимуществ таки будет или это только повод обвинить собеседника в невежестве?
Одним из 33 полных кавалеров ордена "За заслуги перед Отечеством" является Геннадий Хазанов.
Re[16]: Достаточно ли знать С без знания С++ для устройства
От: eskimo82  
Дата: 05.09.14 08:40
Оценка: -3
C>>>А она есть. Сначала появился драфт в комитете С++, потом его принял комитет С.
E>>А перед этим появились различные интересные функции в компиляторах для Си.
C>А перед этим появилась первая бактерия.
Несомненно. Но поддержка атомиков появилась в С раньше чем в С++.

E>>>>1. В языке Си есть 3 непересекающихся (в отличии от C++) пространства имен — для struct, union, enum и глобальное для typedef. Твой код просто не соберется, ибо test_t не определен в глобальном пространстве имен. Он собрался бы, если бы ты написал struct test_t testit().

C>>>И що?
E>>Не позорься, вот и то.
C>Я это знаю прекрасно, мне просто непонятно причём тут это.
Очень хорошо, что ты знаеш это прекрасно. Осталось совсем малое — писать код без ошибок.

E>>>>2. Возвращать структурные типы стало можно в C99.

C>>>Бредишь. Это возможно чуть ли не с K&R C, точно было в C89. Классика жанра — возвращение структуры POINT в WinAPI.
E>>1. Что я неприпоминаю, что там за функция в Win32 API возвращает POINT. Можеш напомнить ?
Итак, какая функция в WinAPI возвращает POINT ?

C>В общем, я считаю, что ламеризм (воинствующее незнание) надо наказывать долларом. Так что предлагаю поспорить на $100, что в С89 есть возврат структур, аналогичный побайтному копированию.

Вот и начни с себя. Потрать доллары на своё образование.

C>>>Нету в С преимуществ.

E>>Исходя из разговора с тобой, мне видно, что языка Си ты вообще-то незнаеш. Грубая путаница с C++.
C>LOL.
Ага, ЛОЛ.

C>>>Это не эквивалентный код. В Java используется reference-тип.

E>>И там и там приведен код который обьекта — агрегата.
C>ЩИТО? В Java все объекты — это reference-типы. Если бы в Java были value-типы, то тоже всё было бы как в С++.
Если у бабушки был бы член, она была бы дедушкой. Но в обоих случаях осталась бы престарелым человеком. Так и в случае с агрегатными обьектами.

C>>>Оно скомпилируется и будет падать.

E>>Как мы видим, здесь указатель, а не int. Какой неприкрытый фейл...
C>Можно и int, не вопрос:
C>
C>int mode;
C>chmod("/some/file", mode); //Are you feeling lucky today?
C>

1. Глобальная переменная в С и С++ инициализируется нулем. Балбес.
2. Этот код также не упадет.

E>>>>Хм, просто показал что можно выстрелить себе в ногу можно в любом языке и развеял очередной миф.

C>>>В С это делается на порядки проще.
E>>Куда уж проще чем в Java-то ? Тебя носом даже в пример потыкали.
C>У тебя нос уже давно в навозе.
Ты свой нос с чужим не путай.

C>В Java пишется так:

А в С++ пишется по другому. И в обоих языках можно элементарно выстрелить себе в ногу.

C>В чистом С пишется так:

C>
C>struct list_t
C>{
C>    struct list_t *next;
C>    int payload;
C>};

C>struct something_t
C>{
C>    struct list_t head;
C>};
C>

C>А потом ищутся баги с неинициализированным next.
ЛОЛ, Что ?

C>>>Создай пару контейнеров, разворачивающихся в static-функции.

E>>В Си это делается на порядок проще. Но пример ты так и не привел, ожидаем-с.
C>Да ну?
C>
C>#define LIST_CLAZZ(T,NM) \
C>    struct NM { struct NM* next; T payload; }; \
C>    static void add_to_#NM(NM* tail, T payload) {...};
C>

C>"Методы" add_to... будут в каждом используемом файле инстанцироваться отдельно, за счёт static'а. Если static убрать, то получим конфликты времени связывания и/или неоптимальный код из-за отсутствия inlining'а.
Теперь напиши пример в templates и сравни как будут инстанцироваться методы.
Re[16]: Достаточно ли знать С без знания С++ для устройства
От: eskimo82  
Дата: 05.09.14 08:45
Оценка: -1 :)
C>>>>>Нет, это полный список.
E>>>>Это не полный список, как минимум потому, что ты в него не включил даже того о чем написал сам.
C>>>Нету в С преимуществ.
E>>Исходя из разговора с тобой, мне видно, что языка Си ты вообще-то незнаеш. Грубая путаница с C++.

ХГД>Эээ, а список преимуществ таки будет или это только повод обвинить собеседника в невежестве?

На затравку ты можеш начать медитацию с именоваными инициализаторами без затрат на конструирование обьектов в рантайме.
Re[6]: Достаточно ли знать С без знания С++ для устройства на работу?
От: -n1l-  
Дата: 05.09.14 08:52
Оценка:
Здравствуйте, CreatorCray, Вы писали:
CC>Ну он про С++ писал типичное для ниасиливших.
Что например?

CC>На С — банально много гемору.

Какого?
CC>А в kernel ошибки приводят к более чем неприятным последствиям.
Всегда так.
Re[6]: Достаточно ли знать С без знания С++ для устройства на работу?
От: Andrew.W Worobow https://github.com/Worobow
Дата: 05.09.14 08:54
Оценка: -1 :))
Здравствуйте, Abyx, Вы писали:

A>нет, конечно они не совместимы на все 100%.

A>в С есть еще есть опасные вещи типа неявного каста void* в любой тип.

СИ это своего рода асемблер, то есть это не опасные вещи, а просто необходимые.
В асемблере вообще BYTE,WORD,DWORD,QWORD....
На си пишется все для ядра виндов, и линукса и прочие ядра.
То есть для того что бы не делать ошибок на СИ нужна выскокая квалификация програмиста, а на С++ можно избежать ошибок и используя менее квалифицированную рабсилу.
Не все кто уехал, предал Россию.
Re[17]: Достаточно ли знать С без знания С++ для устройства
От: Abyx Россия  
Дата: 05.09.14 08:57
Оценка:
Здравствуйте, eskimo82, Вы писали:

ХГД>>Эээ, а список преимуществ таки будет или это только повод обвинить собеседника в невежестве?

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

ок, 1 элемент списка есть, а еще?
ты не стесняйся, пиши все сразу
In Zen We Trust
Re[4]: Достаточно ли знать С без знания С++ для устройства на работу?
От: Andrew.W Worobow https://github.com/Worobow
Дата: 05.09.14 08:58
Оценка: -2 :)
Здравствуйте, CreatorCray, Вы писали:

S>>Осилить C++ -пара недель почитывания стандарта.

CC>Удачи!

А что там такого сложного?
ИМХА указатели в СИ по уровню сложности понимания сложнее, чем все в С++.
То есть даже ссылки там придумали чтобы народу было проще. ))
Не все кто уехал, предал Россию.
Re[4]: Достаточно ли знать С без знания С++ для устройства на работу?
От: Andrew.W Worobow https://github.com/Worobow
Дата: 05.09.14 09:03
Оценка:
Здравствуйте, CreatorCray, Вы писали:

CC>Здравствуйте, -n1l-, Вы писали:


N>>К тому же всякие драйвера для линуксов не пишутся на С++.

CC>Причиной этому является ослиное упрямство ниасилившего Торвальдса. А мы в итоге сейчас в линуксячем кернеле жрём кактусы. Вбив бы!
CC>Под винду драйвера на С++ пишутся легко и приятно. С содроганием вспоминаю времена когда их по дурости пытались писать на С.

1)Не все, 2) не всегда можно использовать кучу вещей из С++.

Или вы имете ввиду расширенный синтаксис С++?
Ну дык эти как СИ с классами. Это не С++.
Не все кто уехал, предал Россию.
Re[5]: Достаточно ли знать С без знания С++ для устройства н
От: eskimo82  
Дата: 05.09.14 09:04
Оценка: -3 :)
U>>В ядре нет поддержки C++ runtime и есть некоторые ограничения на код сгенирированный компилятором, которые затрудняют написание драйверов на C++. Их пишут на C, потому что выбора нет.
A>можно писать на подмножестве С++, которое не требует рантайма и каких-то фич которые плохо работают в ядре.
Можно.

A>это будет очень большое подмножество со многими полезными фичами.

Это будет очень маленькое подмножество — "Си с классами и темплайтами" без какой-либо стандартной библиотеки вообще. Все остальное из С++ выпиливается всед за запретом RTTI, которое тянеят за собой исключения и все остальное.

При этом возникает еще куча разного гемороя, как-то поддержка компиляторных хвостиков самого языка C++.
Отредактировано 05.09.2014 9:06 eskimo82 . Предыдущая версия .
Re[5]: Достаточно ли знать С без знания С++ для устройства на работу?
От: Andrew.W Worobow https://github.com/Worobow
Дата: 05.09.14 09:06
Оценка: -2 :)
Здравствуйте, Abyx, Вы писали:

A>можно писать на подмножестве С++, которое не требует рантайма и каких-то фич которые плохо работают в ядре.

A>это будет очень большое подмножество со многими полезными фичами.

!!! Так это делает "это" уже не С++.
То есть если хорошо знать С++ то ясно понятно, что чтобы именно его особые (отличные от СИ) возможности использовать то нельзя уйти от всего внутри.
То есть это уже не C++, а скорее СИ с классами!
Не все кто уехал, предал Россию.
Re[4]: Достаточно ли знать С без знания С++ для устройства на работу?
От: smeeld  
Дата: 05.09.14 09:07
Оценка: :)
Здравствуйте, CreatorCray, Вы писали:

CC>Удачи!


Себе пожелай. Мне на тщательное изучение стандарта не две недели, а четырёх дней хватило, лет пять
назад. Это проще раз в сто, чем, например, топология бесконечномерных простанств. Имеенно
тогда увидел его уродливость С++. С++-кривое, уродливое безобразие. Лучшие языки, по мне-это С и Lisp, perl.
И когда это, разные поциенты, перестануть думать, что те, кому не нравится C++, это обязательно те которые не смогли его
осилить? По себе судят?
Re: Достаточно ли знать С без знания С++ для устройства на работу?
От: Andrew.W Worobow https://github.com/Worobow
Дата: 05.09.14 09:09
Оценка:
Здравствуйте, ramar, Вы писали:

R>А можно ли быть программистом-системщиком, но знать только С, без С++? Вообще, насколько важно знать С++ или достаточно только С? Не только в России, но за бугром тоже. В Америке, я знаю, именно С больше в почете.


Нет не достаточно. Надо знать C++.
Только знание СИ, это мало для создания коммерческого софта.
Не все кто уехал, предал Россию.
Re[4]: Достаточно ли знать С без знания С++ для устройства на работу?
От: smeeld  
Дата: 05.09.14 09:11
Оценка:
Здравствуйте, CreatorCray, Вы писали:


N>>К тому же всякие драйвера для линуксов не пишутся на С++.

CC>Причиной этому является ослиное упрямство ниасилившего Торвальдса. А мы в итоге сейчас в линуксячем кернеле жрём кактусы. Вбив бы!
CC>Под винду драйвера на С++ пишутся легко и приятно. С содроганием вспоминаю времена когда их по дурости пытались писать на С.

Похоже, Вы драйверы под линукс не то что не писали, но и уже написанные не видели.
В противном случее знали бы, что там истинный ООП, с структурированным разделением
сущностей на объекты, и очень изящно линкующиеся в ядро.
Re[5]: Достаточно ли знать С без знания С++ для устройства на работу?
От: Andrew.W Worobow https://github.com/Worobow
Дата: 05.09.14 09:12
Оценка: +1
Здравствуйте, smeeld, Вы писали:

S>И когда это, разные поциенты, перестануть думать, что те, кому не нравится C++, это обязательно те которые не смогли его

S>осилить? По себе судят?

Тема для тролинга, скоро пойдет в войны. То есть ну разве не видно?
С++ отличный язык, СИ отличный язык, у них разные ниши.
Так что забей. ))
Не все кто уехал, предал Россию.
Re[6]: Достаточно ли знать С без знания С++ для устройства н
От: Andrew.W Worobow https://github.com/Worobow
Дата: 05.09.14 09:14
Оценка: -1
Здравствуйте, eskimo82, Вы писали:

E>Это будет очень маленькое подмножество — "Си с классами и темплайтами" без какой-либо стандартной библиотеки вообще. Все остальное из С++ выпиливается всед за запретом RTTI, которое тянеят за собой исключения и все остальное.


Они это не поймут. ))
Тут я как-то столкнулся — типа "пришлите пример кода драйвера". Я высылаю — .... бабаба.... Ответ: Ну это же все на СИ, а нам хотелось увидеть как вы на С++ пишете.
Вот и это был ответ тех.спеца типа. )) Ну тимлидера из ядренной разработки. Я плакаль. ))
Не все кто уехал, предал Россию.
Re[7]: Достаточно ли знать С без знания С++ для устройства на работу?
От: Хон Гиль Дон Россия  
Дата: 05.09.14 09:15
Оценка:
Здравствуйте, Abyx, Вы писали:


ХГД>>Да нормальный там код, даже обработка ошибок более-менее толково реализована. И даже утечек нет, если правильно хвосты зачищать. На плюсах, правда, все это раза в 3-4 компактнее получилось бы.


A>угу, компактнее и надежнее (те же баги типа вылезания за границы буфера, как у HeartBleed) ловились бы дебаг-итераторами


Скорее всего.

A>и можно было бы писать юнит тесты.


Если бы кому-то хотелось писать юнит-тесты, они бы их и для C написали
Одним из 33 полных кавалеров ордена "За заслуги перед Отечеством" является Геннадий Хазанов.
Re[18]: Достаточно ли знать С без знания С++ для устройства
От: eskimo82  
Дата: 05.09.14 09:15
Оценка:
ХГД>>>Эээ, а список преимуществ таки будет или это только повод обвинить собеседника в невежестве?
E>>На затравку ты можеш начать медитацию с именоваными инициализаторами без затрат на конструирование обьектов в рантайме.

A>ок, 1 элемент списка есть, а еще?

A>ты не стесняйся, пиши все сразу
А зачем торопиться ? Составные литералы еще никто здесь не упомянал ?
Re[7]: Достаточно ли знать С без знания С++ для устройства на работу?
От: smeeld  
Дата: 05.09.14 09:20
Оценка:
Здравствуйте, CreatorCray, Вы писали:


CC>Профнепригодность detected.

CC>Без шуток. Это no hire сразу.

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

CC>Да, в опенсорсе тот ещё говнокод.


Вот когда сотрудники Pupkin Inc из Мск выкатят что-то, хоть отдалённо приближающееся,
по степени распространённости и востребованности в мире, к опенсорсным проектам, тогда
и смогут судить о опенсорсных проектах.
Re[8]: Достаточно ли знать С без знания С++ для устройства на работу?
От: eskimo82  
Дата: 05.09.14 09:28
Оценка:
ХГД>Если бы кому-то хотелось писать юнит-тесты, они бы их и для C написали
Те кто хочет, пишут юнит тесты и на Си с использованием соответсвующих фреймворков или без. Фреймворки для этого есть, cmockery например.
Re[19]: Достаточно ли знать С без знания С++ для устройства
От: Хон Гиль Дон Россия  
Дата: 05.09.14 09:48
Оценка:
Здравствуйте, eskimo82, Вы писали:

ХГД>>>>Эээ, а список преимуществ таки будет или это только повод обвинить собеседника в невежестве?

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

Ну да, было бы удобно. Но мелочь.

A>>ок, 1 элемент списка есть, а еще?

A>>ты не стесняйся, пиши все сразу
E>А зачем торопиться ? Составные литералы еще никто здесь не упомянал ?

А какой от них в плюсах был бы прок? Анонимные объекты и так без проблем можно создавать
Одним из 33 полных кавалеров ордена "За заслуги перед Отечеством" является Геннадий Хазанов.
Re[2]: достаточно
От: PMLife http://PMLife.ru
Дата: 05.09.14 09:55
Оценка:
Здравствуйте, eskimo82, Вы писали:

E>Но в РФ за это знание платить будут мало.


Знакомые в России не могут нанять хорошего С программиста, платить готовы хорошо, но специалистов на рынке мало.
Блог менеджера проектов.
Re[20]: Достаточно ли знать С без знания С++ для устройства
От: eskimo82  
Дата: 05.09.14 09:58
Оценка: -3
ХГД>>>>>Эээ, а список преимуществ таки будет или это только повод обвинить собеседника в невежестве?
E>>>>На затравку ты можеш начать медитацию с именоваными инициализаторами без затрат на конструирование обьектов в рантайме.
ХГД>Ну да, было бы удобно. Но мелочь.
Так это не совсем мелочь.

A>>>ок, 1 элемент списка есть, а еще?

A>>>ты не стесняйся, пиши все сразу
E>>А зачем торопиться ? Составные литералы еще никто здесь не упомянал ?
ХГД>А какой от них в плюсах был бы прок? Анонимные объекты и так без проблем можно создавать
Какой прок ? В отсутсвии вызовов кострукторов для POD хотя бы.
task.state = (state_t) { .priority = 10, .name="task1" };
Отредактировано 05.09.2014 9:59 eskimo82 . Предыдущая версия .
Re[3]: достаточно
От: eskimo82  
Дата: 05.09.14 10:03
Оценка:
E>>Но в РФ за это знание платить будут мало.
PML>Знакомые в России не могут нанять хорошего С программиста, платить готовы хорошо, но специалистов на рынке мало.
Все уехали.
Re[3]: достаточно
От: -n1l-  
Дата: 05.09.14 10:15
Оценка:
Здравствуйте, PMLife, Вы писали:

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


E>>Но в РФ за это знание платить будут мало.


PML>Знакомые в России не могут нанять хорошего С программиста, платить готовы хорошо, но специалистов на рынке мало.


Город, зарплата, небудте голословными.
Re[8]: Достаточно ли знать С без знания С++ для устройства на работу?
От: Abyx Россия  
Дата: 05.09.14 10:18
Оценка: +1
Здравствуйте, Хон Гиль Дон, Вы писали:

A>>и можно было бы писать юнит тесты.

ХГД>Если бы кому-то хотелось писать юнит-тесты, они бы их и для C написали
я как-то не очень себе представляю юнит-тесты на Си. слишком мало возможностей чтобы подцепить фейки/моки, слишком много бойлерплейта.

по крайней мере я просто никогда не видел юнит-тестов в проектах на Си. (не регрессионных, а именно юнит-тестов)
In Zen We Trust
Re[21]: Достаточно ли знать С без знания С++ для устройства
От: Хон Гиль Дон Россия  
Дата: 05.09.14 10:19
Оценка:
Здравствуйте, eskimo82, Вы писали:

ХГД>>А какой от них в плюсах был бы прок? Анонимные объекты и так без проблем можно создавать

E>Какой прок ? В отсутсвии вызовов кострукторов для POD хотя бы.
E>
E>task.state = (state_t) { .priority = 10, .name="task1" };
E>


Вот именно — "в отсутствии вызовов конструкторов". С чего бы им в плюсах отсутствовать? В C++11 даже POD могут иметь кое-какие конструкторы.
Одним из 33 полных кавалеров ордена "За заслуги перед Отечеством" является Геннадий Хазанов.
Re[9]: Достаточно ли знать С без знания С++ для устройства на работу?
От: smeeld  
Дата: 05.09.14 10:46
Оценка:
Здравствуйте, Abyx, Вы писали:


A>я как-то не очень себе представляю юнит-тесты на Си. слишком мало возможностей чтобы подцепить фейки/моки, слишком много бойлерплейта.


A>по крайней мере я просто никогда не видел юнит-тестов в проектах на Си. (не регрессионных, а именно юнит-тестов)


Хотите пример? Есть такой DTrace. Посмотрите как он реализован в solaris, не где нибудь ещё, вроде freebsd,
а именно в солярисе. И увидите не что иное как реализацию организации модульного тестирования всего ядра,
на всём его протяжении. На каждом, хоть что-то значащем, его участке.
Re[9]: Достаточно ли знать С без знания С++ для устройства на работу?
От: Хон Гиль Дон Россия  
Дата: 05.09.14 10:52
Оценка:
Здравствуйте, Abyx, Вы писали:


A>>>и можно было бы писать юнит тесты.

ХГД>>Если бы кому-то хотелось писать юнит-тесты, они бы их и для C написали
A>я как-то не очень себе представляю юнит-тесты на Си. слишком мало возможностей чтобы подцепить фейки/моки, слишком много бойлерплейта.

Ну фреймворков-то полно, как-то наверное цепляются. И вообще, в C слишком много бойлерплейта не бывает

A>по крайней мере я просто никогда не видел юнит-тестов в проектах на Си. (не регрессионных, а именно юнит-тестов)


В плюсовом опенсорсе тоже как бы не особо распространенное явление
Одним из 33 полных кавалеров ордена "За заслуги перед Отечеством" является Геннадий Хазанов.
Re[22]: Достаточно ли знать С без знания С++ для устройства
От: eskimo82  
Дата: 05.09.14 10:57
Оценка: :)
ХГД>>>А какой от них в плюсах был бы прок? Анонимные объекты и так без проблем можно создавать
E>>Какой прок ? В отсутсвии вызовов кострукторов для POD хотя бы.
E>>
E>>task.state = (state_t) { .priority = 10, .name="task1" };
E>>


ХГД>Вот именно — "в отсутствии вызовов конструкторов". С чего бы им в плюсах отсутствовать? В C++11 даже POD могут иметь кое-какие конструкторы.

И это очень плохо. Не всегда есть желание и даже возможность вызывать конструктор, например до старта main в статических данных

Поясню. Если Вы напишете на С++ модуль к ядру Линукса и в этом модуле будет нечто статическое (необязательно обьект), для которого компилятор сгенерит инициализирующий конструктор, то Вас ждет много удивительных открытий и незабываемых часов с отладчиком и дизассемблером.
Отредактировано 05.09.2014 11:02 eskimo82 . Предыдущая версия .
Re[10]: Достаточно ли знать С без знания С++ для устройства на работу?
От: Abyx Россия  
Дата: 05.09.14 11:02
Оценка:
Здравствуйте, smeeld, Вы писали:

S>Хотите пример? Есть такой DTrace. Посмотрите как он реализован в solaris, не где нибудь ещё, вроде freebsd,

S>а именно в солярисе. И увидите не что иное как реализацию организации модульного тестирования всего ядра,
S>на всём его протяжении. На каждом, хоть что-то значащем, его участке.

дай ссылку на код или репозиторий, а лучше на конкретные файлы с тестами,
а то я нашел пару каких-то dtrace, но юнит-тестов там не было
In Zen We Trust
Re[4]: достаточно
От: PMLife http://PMLife.ru
Дата: 05.09.14 11:15
Оценка:
Здравствуйте, -n1l-, Вы писали:

PML>>Знакомые в России не могут нанять хорошего С программиста, платить готовы хорошо, но специалистов на рынке мало.

N>Город, зарплата, небудте голословными.

Москва.
Зарплата по результатам собеседования Для редких специалистов индивидуальный подход.
Блог менеджера проектов.
Re[4]: достаточно
От: PMLife http://PMLife.ru
Дата: 05.09.14 11:16
Оценка:
Здравствуйте, eskimo82, Вы писали:

E>>>Но в РФ за это знание платить будут мало.

PML>>Знакомые в России не могут нанять хорошего С программиста, платить готовы хорошо, но специалистов на рынке мало.
E>Все уехали.

Возможно. А может перепрофилировались на "клепателей формочек".
Блог менеджера проектов.
Re[23]: Достаточно ли знать С без знания С++ для устройства
От: Хон Гиль Дон Россия  
Дата: 05.09.14 11:23
Оценка: +1
Здравствуйте, eskimo82, Вы писали:

ХГД>>>>А какой от них в плюсах был бы прок? Анонимные объекты и так без проблем можно создавать

E>>>Какой прок ? В отсутсвии вызовов кострукторов для POD хотя бы.
E>>>
E>>>task.state = (state_t) { .priority = 10, .name="task1" };
E>>>


ХГД>>Вот именно — "в отсутствии вызовов конструкторов". С чего бы им в плюсах отсутствовать? В C++11 даже POD могут иметь кое-какие конструкторы.

E>И это очень плохо. Не всегда есть желание и даже возможность вызывать конструктор, например до старта main в статических данных

E>Поясню. Если Вы напишете на С++ модуль к ядру Линукса и в этом модуле будет нечто статическое (необязательно обьект), для которого компилятор сгенерит инициализирующий конструктор, то Вас ждет много удивительных открытий и незабываемых часов с отладчиком и дизассемблером.


От записи штоле защищено? И на выяснение этого факта надо много часов с отладчиком и дизассемблером? Ужас-ужас, а дустом не пробовали? В смысле, constexpr constructor тоже почему-то не годиццо?
Одним из 33 полных кавалеров ордена "За заслуги перед Отечеством" является Геннадий Хазанов.
Re[11]: Достаточно ли знать С без знания С++ для устройства на работу?
От: smeeld  
Дата: 05.09.14 11:24
Оценка:
Здравствуйте, Abyx, Вы писали:


A>дай ссылку на код или репозиторий, а лучше на конкретные файлы с тестами,

A>а то я нашел пару каких-то dtrace, но юнит-тестов там не было

Ну, скорее всего, лучше начать отсюда, и дальше по ссылкам для построения картины.
Re[5]: достаточно
От: Хон Гиль Дон Россия  
Дата: 05.09.14 11:26
Оценка: :)
Здравствуйте, PMLife, Вы писали:

PML>>>Знакомые в России не могут нанять хорошего С программиста, платить готовы хорошо, но специалистов на рынке мало.

N>>Город, зарплата, небудте голословными.

PML>Москва.

PML>Зарплата по результатам собеседования Для редких специалистов индивидуальный подход.

Если зарплату стесняются озвучить, то и ответ соискателей, наверное, обычный — "ищи дурака за 4 сольдо"
Одним из 33 полных кавалеров ордена "За заслуги перед Отечеством" является Геннадий Хазанов.
Re[20]: Достаточно ли знать С без знания С++ для устройства
От: student__  
Дата: 05.09.14 12:02
Оценка: -1 :)
В 2008 г. я работал в одной конторе, в которой мы писали системный софт (на уровне userspace) для промышленных контроллеров, я писал на C вместо C++. Это не были легковесные контроллеры типа PIC, на них крутился полновесный Linux. При этом JVM там была несколько неуместна, потому что кроме системы ещё выполнялась технологическая задача, которая писалась на своём DSL, и кто знает, какого размера она могла быть, а также нужно было ещё гарантировать, что JVM не будет портить время циклов в наших soft-realtimе сервисах. Для многих системных вещей, по крайней мере тех, с которыми я работал, C++ был бы удобнее, и если бы я его знал достаточно хорошо, стоило как раз на C++ всё реализовывать. Но мои коллеги всё писали на C, и поскольку вся система (userspace надстройка над Linux и всякие системные вещи типа коммуникации, диагностики) уже были написаны на C, я решил не выпендриваться с C++. В принципе, некоторые вещи в моём коде были бы лаконичнее и менее костыльны (яркий пример тому — динамические массивы, списки), в C этого нет, и приходится тащить сторонние библиотеки или прибегать к жутким макросным поделкам.

Сейчас некоторые системные вещи, которые I/O-bound, я писал бы на Rust, или чём-нибудь компилируемом под ARM и современнее C++.
Но проблема многих контор в том, что уже есть куча кода, написанная на языке X, а руководство скептически относится к смене инструмента по прихоти новых сотрудников, нужны очень веские причины, чтобы уговорить ввести в разработку новый язык Y. Связано это, очевидно, с боязнью сокращения прибыли в случае ошибок и недооценок дополнительного времени, потраченного на введение в разработку нового языка Y и его поддержки. Переписывать же грамотно спроектированную систему с X на Y, если она работает годами, требуя небольших расширений, не меняющих архитектуру, никто не будет, потому что это неоправданные затраты человеко-часов, непонятно, ради чего. Не бывает системщиков, не знакомых с C, и пока ядра ОС пишут на C, и существуют другие проверенные временем промышленные системы, написанные на C, будут востребованы C-программисты.

Самый быстрый код — компилируемый на C (ещё есть всякие фортраны, но я их не рассматриваю), и поскольку вседа есть приложения (а вернее, их bottlenecks), в которых нужно выжать максимум из железки (например, за счёт использования векторизации, специфичной для конкретного класса процессоров), будет жить и C.
Re[6]: достаточно
От: PMLife http://PMLife.ru
Дата: 05.09.14 12:03
Оценка:
Здравствуйте, Хон Гиль Дон, Вы писали:

PML>>Москва.

PML>>Зарплата по результатам собеседования Для редких специалистов индивидуальный подход.

ХГД>Если зарплату стесняются озвучить, то и ответ соискателей, наверное, обычный — "ищи дурака за 4 сольдо"



1. Обращаю ваше внимание, что это не я ищу такого программиста, соответственно и суммы озвучивать мне будет неправильно.
2. Для большинства компаний неозвучивание сумм публично — это стандартно, нравится вам это или нет: Яндекс, Abbyy, Касперский.
Блог менеджера проектов.
Re[12]: Достаточно ли знать С без знания С++ для устройства на работу?
От: Abyx Россия  
Дата: 05.09.14 12:22
Оценка:
Здравствуйте, smeeld, Вы писали:

A>>дай ссылку на код или репозиторий, а лучше на конкретные файлы с тестами,

A>>а то я нашел пару каких-то dtrace, но юнит-тестов там не было

S>Ну, скорее всего, лучше начать отсюда, и дальше по ссылкам для построения картины.


и что это? где сами тесты-то?
In Zen We Trust
Re[21]: Достаточно ли знать С без знания С++ для устройства
От: Хон Гиль Дон Россия  
Дата: 05.09.14 12:41
Оценка:
Здравствуйте, student__, Вы писали:

__>Но проблема многих контор в том, что уже есть куча кода, написанная на языке X, а руководство скептически относится к смене инструмента по прихоти новых сотрудников, нужны очень веские причины, чтобы уговорить ввести в разработку новый язык Y. Связано это, очевидно, с боязнью сокращения прибыли в случае ошибок и недооценок дополнительного времени, потраченного на введение в разработку нового языка Y и его поддержки. Переписывать же грамотно спроектированную систему с X на Y, если она работает годами, требуя небольших расширений, не меняющих архитектуру, никто не будет, потому что это неоправданные затраты человеко-часов, непонятно, ради чего. Не

бывает системщиков, не знакомых с C, и пока ядра ОС пишут на C, и существуют другие проверенные временем промышленные системы, написанные на C, будут востребованы C-программисты.

Это все отлично, но мне-то зачем такое писать? Я же конкретно про список отсутствующих в плюсах мегафич С спрашивал Чисто для расширения кругозора — на чистом Це я писал довольно мало и очень давно.

__>Самый быстрый код — компилируемый на C (ещё есть всякие фортраны, но я их не рассматриваю), и поскольку вседа есть приложения (а вернее, их bottlenecks), в которых нужно выжать максимум из железки (например, за счёт использования векторизации, специфичной для конкретного класса процессоров), будет жить и C.


С чего бы коду на C быть быстрее кода на C++? Если автор кода не очень криворук, естественно.
Одним из 33 полных кавалеров ордена "За заслуги перед Отечеством" является Геннадий Хазанов.
Re[7]: достаточно
От: Хон Гиль Дон Россия  
Дата: 05.09.14 12:50
Оценка: +2
Здравствуйте, PMLife, Вы писали:

ХГД>>Если зарплату стесняются озвучить, то и ответ соискателей, наверное, обычный — "ищи дурака за 4 сольдо"


PML>

PML>1. Обращаю ваше внимание, что это не я ищу такого программиста, соответственно и суммы озвучивать мне будет неправильно.

Да я ж и не настаиваю Просто без указания зарплаты это разговор ни о чем.

PML>2. Для большинства компаний неозвучивание сумм публично — это стандартно, нравится вам это или нет: Яндекс, Abbyy, Касперский.


Ну так они и не жалуются, что не могут толковых спецов найти
А вот если и зарплата секретная, и с наймом работников проблемы — то вывод сам собой напрашивается.
Одним из 33 полных кавалеров ордена "За заслуги перед Отечеством" является Геннадий Хазанов.
Re[13]: Достаточно ли знать С без знания С++ для устройства на работу?
От: smeeld  
Дата: 05.09.14 13:06
Оценка: -1
Здравствуйте, Abyx, Вы писали:

A>и что это? где сами тесты-то?


Там они расписаны ровно настолько, насколько нужно было для организации
определённого наблудения за состоянием определённых объектов и параметров в работающем ядре.
Но точно также, расставлением хуков DTRACE_PROBE, можно организовать мониторинг в рантайме исполнения любой функции,
и наблюдать за состоянием любого объекта в ядре.
Re[14]: Достаточно ли знать С без знания С++ для устройства на работу?
От: Abyx Россия  
Дата: 05.09.14 13:20
Оценка: +1
Здравствуйте, smeeld, Вы писали:

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


A>>и что это? где сами тесты-то?


S>Там они расписаны ровно настолько, насколько нужно было для организации

S>определённого наблудения за состоянием определённых объектов и параметров в работающем ядре.
S>Но точно также, расставлением хуков DTRACE_PROBE, можно организовать мониторинг в рантайме исполнения любой функции,
S>и наблюдать за состоянием любого объекта в ядре.

ты вообще в курсе что такое юнит-тесты? >_<
In Zen We Trust
Re[15]: Достаточно ли знать С без знания С++ для устройства на работу?
От: smeeld  
Дата: 05.09.14 13:33
Оценка: +1 -1
Здравствуйте, Abyx, Вы писали:

A>ты вообще в курсе что такое юнит-тесты? >_<


Вы сами то в курсе, что то что называется модульным тестированием, может
проводится не только так, как Вас учили в ВУЗе, или как оно расписано
каким-то корифеем в книжке. Вы в курсе, что, например, некоторые линуксоиды кернельщики то, что
называется юнит тестированием, проводят вообще с помощью printk(), и этого им за глаза хватает.
Re[6]: Достаточно ли знать С без знания С++ для устройства на работу?
От: Pzz Россия https://github.com/alexpevzner
Дата: 05.09.14 13:38
Оценка:
Здравствуйте, Abyx, Вы писали:

A>нет, конечно они не совместимы на все 100%.

A>в С есть еще есть опасные вещи типа неявного каста void* в любой тип.

В C++ есть еще более опасные вещи, типа неявного создания временных объектов при вычислении выражений. В сочетании с тем, что конструкторы/деструкторы этих объектов могут модифицировать другие объекты, результат может быть совершенно разрушительным и трудноуловимым.

Кстати, опасность неявного каста void* сильно приувеличенна. void* встречаются на так уж часто в нормально написанной программе.
Re[5]: Достаточно ли знать С без знания С++ для устройства на работу?
От: DarkEld3r  
Дата: 05.09.14 13:50
Оценка:
Здравствуйте, -n1l-, Вы писали:

N>Майкрософт — это компания которая поддерживает с++ и развивает его куда больше чем все остальные.

N>Кто-то даже говорит что единственная. Так что неудивительно...
Eсть какое-то подтверждение? Потому что (со стороны) ситуация выглядит несколько другой. Скажем, поддержку нового стандарта они до сих пор, кажется, не доделали. При этом конкуренты (clang, gcc) ещё не принятый С++14 внедряют. Помню ещё читал про какие-то фичи (кажется, про аттрибуты) они заявляли, что-то типа "у нас уже реализовано другим способом и переделывать не будем". Опять же, дотнетом несколько уменьшили роль С++.
Re[2]: Достаточно ли знать С без знания С++ для устройства на работу?
От: 11molniev  
Дата: 05.09.14 14:01
Оценка:
Здравствуйте, Abyx, Вы писали:

A>С не нужен.

A>99% тех, кто на нем пишет — это те что ниасилили С++.
A>что какбэ намекает на то, что люди не способные осилить язык никому не нужны.
A>тем более что есть строгая корреляция между знанием языка и знанием различных технологий и практик программирования.

ххх не нужен.
99% тех, кто пользуются этой штукой — это те что ниасилили ххх+.
что какбэ намекает на то, что люди не способные осилить ххх+ никому не нужны.
тем более что есть строгая корреляция между знанием этой штуки и знанием различных технологий и практик пользования такими штуками.

Знаете, мне почему то кажется что так можно написать к любому отношению ххх/ххх+.
Re[23]: Достаточно ли знать С без знания С++ для устройства
От: IID Россия  
Дата: 05.09.14 14:27
Оценка: +1
Здравствуйте, eskimo82, Вы писали:

E>Поясню. Если Вы напишете на С++ модуль к ядру Линукса и в этом модуле будет нечто статическое (необязательно обьект), для которого компилятор сгенерит инициализирующий конструктор, то Вас ждет много удивительных открытий и незабываемых часов с отладчиком и дизассемблером.


Это не только в линуксе. В NT тоже самое. И в любом микроконтроллере, где нету стандартного С++ стартапа. Надо стартап правильный написать. И никаких часов отладки с дизассемблером. Просто не надо быть [censored] и надо знять что для Ц/Ц++ есть инициализаторы и финализаторы которые исполняются до/после мэйна стартапом.

Для чистого Си это тоже актуально, странно что ты не в курсе. Статики-то надо инитить, и в _atexit напиханные функции вызывать.
kalsarikännit
Re[24]: Достаточно ли знать С без знания С++ для устройства
От: IID Россия  
Дата: 05.09.14 14:29
Оценка:
Здравствуйте, Хон Гиль Дон, Вы писали:

ХГД>От записи штоле защищено? И на выяснение этого факта надо много часов с отладчиком и дизассемблером?


Ну, справедливости ради, GDB та еще какашка А может автор живую отладку не осиливает, и пользуется исключительно sprintf-ом в файл/компорт/etc.
kalsarikännit
Re[3]: Достаточно ли знать С без знания С++ для устройства на работу?
От: Abyx Россия  
Дата: 05.09.14 14:39
Оценка:
Здравствуйте, 11molniev, Вы писали:

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


A>>С не нужен.

A>>99% тех, кто на нем пишет — это те что ниасилили С++.
A>>что какбэ намекает на то, что люди не способные осилить язык никому не нужны.
A>>тем более что есть строгая корреляция между знанием языка и знанием различных технологий и практик программирования.

1>ххх не нужен.

1>99% тех, кто пользуются этой штукой — это те что ниасилили ххх+.
1>что какбэ намекает на то, что люди не способные осилить ххх+ никому не нужны.
1>тем более что есть строгая корреляция между знанием этой штуки и знанием различных технологий и практик пользования такими штуками.

1>Знаете, мне почему то кажется что так можно написать к любому отношению ххх/ххх+.


да, можно, и что?
у тебя много таких пар ххх/ххх+ ?
In Zen We Trust
Re[24]: Достаточно ли знать С без знания С++ для устройства
От: smeeld  
Дата: 05.09.14 14:45
Оценка: :)
Здравствуйте, IID, Вы писали:

IID>Это не только в линуксе. В NT тоже самое. И в любом микроконтроллере, где нету стандартного С++ стартапа. Надо стартап правильный написать. И никаких часов отладки с дизассемблером. Просто не надо быть [censored] и надо знять что для Ц/Ц++ есть инициализаторы и финализаторы которые исполняются до/после мэйна стартапом.


IID>Для чистого Си это тоже актуально, странно что ты не в курсе. Статики-то надо инитить, и в _atexit напиханные функции вызывать.


Если Вы про .init/.fini _start/_end, то не это проблемы создаёт.
Ядро, при сборке, линкуется в некоторое виртуальное адресное пространство.
И некоторая его часть, которая исполняется на старте, в которое управление
передаёт загрузчик, линкуется вне этого пространства, которое
работает в режиме реальных адресов, но которому должны быть доступны объекты,
слинкованные в простарнство виртульных адресов, для их инициализации.
И в этом пространстве многие объекты должны распологаться на строго
определённых участках, отмеряемых в смещениях между объектами, занимать
строго определённое местоположение относительно других.
Такая тонкая организация карты расположения объектов возможно только
на чистом С, и С++ с его служебными полями, которые компилятор помещает
в память, занимаемую объектами, так как ему захочется, здесь нарушит всю
структуру и карту пространства памяти в которое линкуется ядро. Поэтому
никаких классов, конструкторов, шаблонов, динамического полиморфизма
через виртуальные фукнции и прочие С++-змы.
Re[7]: Достаточно ли знать С без знания С++ для устройства на работу?
От: andyag  
Дата: 05.09.14 14:48
Оценка:
Здравствуйте, Andrew.W Worobow, Вы писали:

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


A>>нет, конечно они не совместимы на все 100%.

A>>в С есть еще есть опасные вещи типа неявного каста void* в любой тип.

AWW>То есть для того что бы не делать ошибок на СИ нужна выскокая квалификация програмиста, а на С++ можно избежать ошибок и используя менее квалифицированную рабсилу.


Это заблуждение. В мире СИ нужно делать много специфической работы, которой нет в других ЯП. Безусловно, минусом это является только когда речь заходит о вполне конкретных задачах, типа "сделать за 2 часа и чтоб работало".

На сайте есть совершенно замечательная статья — в ней вместо C++ можно подставить C.
Re[4]: Достаточно ли знать С без знания С++ для устройства на работу?
От: 11molniev  
Дата: 05.09.14 15:34
Оценка:
Здравствуйте, Abyx, Вы писали:

1>>Знаете, мне почему то кажется что так можно написать к любому отношению ххх/ххх+.


A>да, можно, и что?

То что это не конструктивно и довольно категорично.
A>у тебя много таких пар ххх/ххх+ ?
А причем тут пары? Берите все что угодно вместо них.
Собственно в ваших собственных рассуждениях можно заменить С на С++, а С++ на С)))
Re[25]: Достаточно ли знать С без знания С++ для устройства
От: student__  
Дата: 05.09.14 15:44
Оценка:
Здравствуйте, smeeld, Вы писали:

S>Ядро, при сборке, линкуется в некоторое виртуальное адресное пространство.

S>И некоторая его часть, которая исполняется на старте...
S> многие объекты должны распологаться на строго
S>определённых участках...
S>С++ с его служебными полями, которые компилятор помещает
S>в память, занимаемую объектами, так как ему захочется
Наверное, в детерминированной программе, каковой является гипотетический компилятор C++ "как захочется" означает определённых набор правил?

S>структуру и карту пространства памяти в которое линкуется ядро. Поэтому

S>никаких классов, конструкторов, шаблонов, динамического полиморфизма
S>через виртуальные фукнции и прочие С++-змы.
Шаблоны-то тут при чём, раз всё линкуется статически?
Re[8]: Достаточно ли знать С без знания С++ для устройства н
От: Andrew.W Worobow https://github.com/Worobow
Дата: 05.09.14 16:01
Оценка: -1 :)
Здравствуйте, andyag, Вы писали:

AWW>>То есть для того что бы не делать ошибок на СИ нужна выскокая квалификация програмиста, а на С++ можно избежать ошибок и используя менее квалифицированную рабсилу.


A>Это заблуждение. В мире СИ нужно делать много специфической работы, которой нет в других ЯП. Безусловно, минусом это является только когда речь заходит о вполне конкретных задачах, типа "сделать за 2 часа и чтоб работало".


Ну никакое это не заблуждение )).
В СИ очень много работы на прямую с памятью, в С++ это постарались убрать, точнее дали возможность этого избежать.
Прямая работа с помятью, (выделение, освобождение, инициализация ) всегда генерирует множество ошибок. То есть на СИ писать сложнее, но когда это необходимо то нужна более квалифицирванная рабсила.

То есть СИ более низкоуровневый язык, а чем ниже уровень, тем ближе к "железу", тем выше нужна квалификация. Ну что бы написать тоже самое на C# надо скажем 10 строчек, на СИ надо 100. C# даст кучу предупреждений которые в силу самого языка вожможно выявить и подсказать программисту.
В СИ есть у тебя указатель на буфер, это просто адрес, и крутись как хочешь — весь контроль тебе передали, в С++ уже есть ссылки, ошибок наделать можно меньше.

Если в языке много поводов сделать ошибок, это писать на нем без ошибок — нужна более высокая квалификация.

Мы сейчас говорим, я надеюсь все это понимают, что имеется ввиду что если С++, то уже без указателей. Ну просто так как СИ и С++ есть близкие языки, то можно естественно и на С++ делать так же как обычно принято на СИ. То есть грань этак "проще" "легче" почти не видна.
Но суть еще раз в том, что — чем ниже язык по уровню, тем выше нужна квалификация что бы делать качественный код. И в вопросе архитектуры кстати тоже.
Не все кто уехал, предал Россию.
Отредактировано 05.09.2014 16:03 Andrew.W Worobow . Предыдущая версия .
Re[7]: Достаточно ли знать С без знания С++ для устройства на работу?
От: CreatorCray  
Дата: 05.09.14 17:20
Оценка:
Здравствуйте, Andrew.W Worobow, Вы писали:

AWW>То есть для того что бы не делать ошибок на СИ нужна выскокая квалификация програмиста, а на С++ можно избежать ошибок и используя менее квалифицированную рабсилу.

Ой как ты тут неправ.
Неквалифицированный кодер на С много не наломает — язык примитивный, можно разобрать. Но если его подпустить к С++ это будет полный ПЦ.
Ну и по факту, на С пишут такие обормоты, что просто за голову хватаешься.
Re[9]: Достаточно ли знать С без знания С++ для устройства н
От: CreatorCray  
Дата: 05.09.14 17:20
Оценка:
Здравствуйте, Andrew.W Worobow, Вы писали:

AWW>То есть на СИ писать сложнее, но когда это необходимо то нужна более квалифицирванная рабсила.

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

AWW>То есть СИ более низкоуровневый язык, а чем ниже уровень, тем ближе к "железу", тем выше нужна квалификация.

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

AWW>Если в языке много поводов сделать ошибок, это писать на нем без ошибок — нужна более высокая квалификация.

Печаль в том, что по факту на С говнокодят в стиле: скомпилировалось — значит ошибок нет.
Re[15]: Достаточно ли знать С без знания С++ для устройства
От: CreatorCray  
Дата: 05.09.14 17:20
Оценка:
Здравствуйте, eskimo82, Вы писали:

E>>>1. В языке Си есть 3 непересекающихся (в отличии от C++) пространства имен — для struct, union, enum и глобальное для typedef.

CC>>Всегда это бесило. Кошмарно неудобно.
E>Ботинки жмут ?

Ваганыч, ты?
Re[5]: Достаточно ли знать С без знания С++ для устройства на работу?
От: CreatorCray  
Дата: 05.09.14 17:20
Оценка:
Здравствуйте, Andrew.W Worobow, Вы писали:

S>>>Осилить C++ -пара недель почитывания стандарта.

CC>>Удачи!
AWW>А что там такого сложного?
Получение опыта использования.

AWW>ИМХА указатели в СИ по уровню сложности понимания сложнее, чем все в С++.

Я встречал людей которые указатели не понимали, да.

AWW>То есть даже ссылки там придумали чтобы народу было проще. ))

Там ещё много чего есть кроме ссылок.
Re[5]: Достаточно ли знать С без знания С++ для устройства на работу?
От: CreatorCray  
Дата: 05.09.14 17:20
Оценка:
Здравствуйте, smeeld, Вы писали:

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

CC>>Удачи!

S>Себе пожелай. Мне на тщательное изучение стандарта не две недели, а четырёх дней хватило, лет пять

S>назад. Имеенно тогда увидел его уродливость С++. С++-кривое, уродливое безобразие. Лучшие языки, по мне-это С и Lisp, perl.

Т.е. на С++ ты ничего серьёзного не писал.
Re[7]: Достаточно ли знать С без знания С++ для устройства на работу?
От: CreatorCray  
Дата: 05.09.14 17:20
Оценка:
Здравствуйте, Cyberax, Вы писали:

CC>>>>Причиной этому является ослиное упрямство ниасилившего Торвальдса. А мы в итоге сейчас в линуксячем кернеле жрём кактусы. Вбив бы!

N>>>Не думаю, что торвальдс, ведущий разработчик линукса, не осилил с++.
CC>>Ну он про С++ писал типичное для ниасиливших.
C>Линус пробовал С++ для ядра в середине 90-х, когда все компиляторы сосали по полной. В итоге в ужасе сбежал, что было вполне разумно на тот момент.
Тем не менее он до сих пор воинствует.

C> Так что менять что-то сильного смысла нет (кроме того, в ядре куча структур с полями с именами типа "class" или "protected").

Так получилось что я щас пишу код в полулинуксячье ядро. И мне там очень не хватает возможностей С++. Огромное колво мест можно написать нормально, а не через задницу, как оно написано сейчас.
Re[7]: Достаточно ли знать С без знания С++ для устройства на работу?
От: CreatorCray  
Дата: 05.09.14 17:20
Оценка: +1
Здравствуйте, -n1l-, Вы писали:

CC>>Ну он про С++ писал типичное для ниасиливших.

N>Что например?
google linus c++ rant

CC>>На С — банально много гемору.

N>Какого?
Рукопашка везде и во всём. Boilerplating. Принципиальная невозможность писать safe код.
Re[5]: Достаточно ли знать С без знания С++ для устройства на работу?
От: CreatorCray  
Дата: 05.09.14 17:20
Оценка: +2
Здравствуйте, Andrew.W Worobow, Вы писали:

N>>>К тому же всякие драйвера для линуксов не пишутся на С++.

CC>>Причиной этому является ослиное упрямство ниасилившего Торвальдса. А мы в итоге сейчас в линуксячем кернеле жрём кактусы. Вбив бы!
CC>>Под винду драйвера на С++ пишутся легко и приятно. С содроганием вспоминаю времена когда их по дурости пытались писать на С.

AWW>1)Не все, 2) не всегда можно использовать кучу вещей из С++.


Дайте мне в С:
классы с конструкторами, деструкторами, операторами и наследованием
перегрузка функций
templates (variadics included)

и я уже буду счастлив.

AWW>Ну дык эти как СИ с классами. Это не С++.

Даже С с классами уже помогает сократить объём кода раза эдак в 2-3 и облегчить жизнь разработчику за счёт автоматизации.
Re[5]: Достаточно ли знать С без знания С++ для устройства на работу?
От: CreatorCray  
Дата: 05.09.14 17:20
Оценка:
Здравствуйте, smeeld, Вы писали:

N>>>К тому же всякие драйвера для линуксов не пишутся на С++.

CC>>Причиной этому является ослиное упрямство ниасилившего Торвальдса. А мы в итоге сейчас в линуксячем кернеле жрём кактусы. Вбив бы!
CC>>Под винду драйвера на С++ пишутся легко и приятно. С содроганием вспоминаю времена когда их по дурости пытались писать на С.

S>Похоже, Вы драйверы под линукс не то что не писали, но и уже написанные не видели.

Я пишу код в linux-based ядре. Нихрена там нет, спагетти и говнокод.
Re[8]: Достаточно ли знать С без знания С++ для устройства на работу?
От: CreatorCray  
Дата: 05.09.14 17:20
Оценка:
Здравствуйте, smeeld, Вы писали:

S>А мне мнение и видение сотрудников Pupkin Inc. из РФ о профпригодности в кодотворстве параллельны.


Меня тоже, я от РФ нахожусь очень далеко.

S>Там, где приходится вращаться, о профпригодности судят по другим признакам, в которые желание оформлять

S>код как цветочную клумбу, или букет для подарка женщинам, не входят.

Сколько было человек в самой большой команде где ты когда либо работал за деньги?

S>Вот когда сотрудники Pupkin Inc из Мск выкатят что-то, хоть отдалённо приближающееся,

S>по степени распространённости и востребованности в мире, к опенсорсным проектам, тогда
S>и смогут судить о опенсорсных проектах.

Классическое "Сперва добейся!" (С)
Тут давеча закончился VMworld, и если ты там был (в чём я сомневаюсь) ты мог посмотреть на то, что мы выкатываем.
Re[6]: Достаточно ли знать С без знания С++ для устройства на работу?
От: CreatorCray  
Дата: 05.09.14 17:27
Оценка:
Здравствуйте, Andrew.W Worobow, Вы писали:

A>>можно писать на подмножестве С++, которое не требует рантайма и каких-то фич которые плохо работают в ядре.

A>>это будет очень большое подмножество со многими полезными фичами.

AWW>!!! Так это делает "это" уже не С++.

Т.е. чтобы писать на С++ надо обязательно использовать каждую фичу языка? Одну забыл и всё, программа уже не на С++?
Re[6]: Достаточно ли знать С без знания С++ для устройства н
От: CreatorCray  
Дата: 05.09.14 17:27
Оценка:
Здравствуйте, eskimo82, Вы писали:

E>При этом возникает еще куча разного гемороя, как-то поддержка компиляторных хвостиков самого языка C++.

Это кстати не так уж сложно. Один раз собирается библиотека и на этом всё. МС кстати об этом сама позаботилась.
Re[7]: Достаточно ли знать С без знания С++ для устройства н
От: CreatorCray  
Дата: 05.09.14 17:27
Оценка:
Здравствуйте, Andrew.W Worobow, Вы писали:

AWW>Тут я как-то столкнулся — типа "пришлите пример кода драйвера". Я высылаю — .... бабаба.... Ответ: Ну это же все на СИ, а нам хотелось увидеть как вы на С++ пишете.

AWW>Вот и это был ответ тех.спеца типа. )) Ну тимлидера из ядренной разработки. Я плакаль. ))

Всё правильно тебе ответили. Не надо писать на С когда есть возможность писать на С++.
Re[17]: Достаточно ли знать С без знания С++ для устройства
От: CreatorCray  
Дата: 05.09.14 17:27
Оценка:
Здравствуйте, eskimo82, Вы писали:

C>>>>Оно скомпилируется и будет падать.

E>>>Как мы видим, здесь указатель, а не int. Какой неприкрытый фейл...
C>>Можно и int, не вопрос:
C>>
C>>int mode;
C>>chmod("/some/file", mode); //Are you feeling lucky today?
C>>

E>1. Глобальная переменная в С и С++ инициализируется нулем. Балбес.
А с чего ты взял что это глобальная переменная?
Re[8]: достаточно
От: -n1l-  
Дата: 05.09.14 17:30
Оценка:
Согласен. Когда нет озвученной ветки, это разговор ни о чем.
Причем яндекс и всякие лабы озвучивают минимум и максимум.
Re[8]: достаточно
От: PMLife http://PMLife.ru
Дата: 05.09.14 17:38
Оценка:
Здравствуйте, Хон Гиль Дон, Вы писали:

PML>>2. Для большинства компаний неозвучивание сумм публично — это стандартно, нравится вам это или нет: Яндекс, Abbyy, Касперский.


ХГД>Ну так они и не жалуются, что не могут толковых спецов найти


Вы не поверите
Блог менеджера проектов.
Re[9]: достаточно
От: PMLife http://PMLife.ru
Дата: 05.09.14 17:38
Оценка:
Здравствуйте, -n1l-, Вы писали:

N>Согласен. Когда нет озвученной ветки, это разговор ни о чем.

N>Причем яндекс и всякие лабы озвучивают минимум и максимум.

Публично или лично вам на собеседовании?
Блог менеджера проектов.
Re[8]: Достаточно ли знать С без знания С++ для устройства на работу?
От: -n1l-  
Дата: 05.09.14 17:41
Оценка:
Здравствуйте, CreatorCray, Вы писали:

CC>Здравствуйте, -n1l-, Вы писали:


CC>>>Ну он про С++ писал типичное для ниасиливших.

N>>Что например?
CC>google linus c++ rant

CC>>>На С — банально много гемору.

N>>Какого?
CC>Рукопашка везде и во всём. Boilerplating. Принципиальная невозможность писать safe код.
как везде и во всем? А как же GTK?
Небезопасны там только указатели. Там в принципе больше ничего особого и нет, так что тоже голословно.
Re[6]: Достаточно ли знать С без знания С++ для устройства на работу?
От: -n1l-  
Дата: 05.09.14 17:45
Оценка:
Здравствуйте, DarkEld3r, Вы писали:

N>>Кто-то даже говорит что единственная. Так что неудивительно...

DE>Eсть какое-то подтверждение? Потому что (со стороны) ситуация выглядит несколько другой. Скажем, поддержку нового стандарта они до сих пор, кажется, не доделали. При этом конкуренты (clang, gcc) ещё не принятый С++14 внедряют. Помню ещё читал про какие-то фичи (кажется, про аттрибуты) они заявляли, что-то типа "у нас уже реализовано другим способом и переделывать не будем". Опять же, дотнетом несколько уменьшили роль С++.

Честно говоря мне это сказал тех. рук. на собеседовании в одной питерской конторе.
Я принял на веру. Хотя после ваших слов мне он кажется не очень компетентным.
Re[10]: достаточно
От: -n1l-  
Дата: 05.09.14 17:49
Оценка:
Здравствуйте, PMLife, Вы писали:

PML>Здравствуйте, -n1l-, Вы писали:


N>>Согласен. Когда нет озвученной ветки, это разговор ни о чем.

N>>Причем яндекс и всякие лабы озвучивают минимум и максимум.

PML>Публично или лично вам на собеседовании?


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

http://omsk.hh.ru/vacancy/11538451?query=%D1%8F%D0%BD%D0%B4%D0%B5%D0%BA%D1%81
Re[6]: Достаточно ли знать С без знания С++ для устройства на работу?
От: smeeld  
Дата: 05.09.14 18:20
Оценка:
Здравствуйте, CreatorCray, Вы писали:

S>>Похоже, Вы драйверы под линукс не то что не писали, но и уже написанные не видели.

CC>Я пишу код в linux-based ядре. Нихрена там нет, спагетти и говнокод.

А можно назвать область ядра в которой заняты, и назвать хоть одну структуру,
которую по Вашему мнению можно заменить, и вообще, работу с которой можно реализовать
через С++ класс.
Re[9]: Достаточно ли знать С без знания С++ для устройства на работу?
От: CreatorCray  
Дата: 05.09.14 18:36
Оценка:
Здравствуйте, -n1l-, Вы писали:

CC>>Рукопашка везде и во всём. Boilerplating. Принципиальная невозможность писать safe код.

N>как везде и во всем? А как же GTK?
А что с ним?

N>Небезопасны там только указатели. Там в принципе больше ничего особого и нет, так что тоже голословно.


Ну например сделай мне на С безопасный printf. Чтобы такая вот очепятка:
char *foo;
int bar;

printf ("%s %i", bar, foo);

не приводила к крашу.

На С++ вариадики такое разруливают на раз-два, работает даже быстрее varargs имплементации.
Re[7]: Достаточно ли знать С без знания С++ для устройства на работу?
От: CreatorCray  
Дата: 05.09.14 18:36
Оценка:
Здравствуйте, smeeld, Вы писали:

S>>>Похоже, Вы драйверы под линукс не то что не писали, но и уже написанные не видели.

CC>>Я пишу код в linux-based ядре. Нихрена там нет, спагетти и говнокод.

S>А можно назвать область ядра в которой заняты

Storage virtualization

S> и назвать хоть одну структуру, которую по Вашему мнению можно заменить, и вообще, работу с которой можно реализовать через С++ класс.

Все.
Re[9]: Достаточно ли знать С без знания С++ для устройства на работу?
От: Cyberax Марс  
Дата: 05.09.14 18:39
Оценка:
Здравствуйте, -n1l-, Вы писали:

CC>>Рукопашка везде и во всём. Boilerplating. Принципиальная невозможность писать safe код.

N>как везде и во всем? А как же GTK?
Вот GTK как раз — прекрасный пример. Множество проектов (LXDE, Wireshark, ...) переключаются с GTK на QT из-за того, что их авторы поняли, что они много лет ели кактус.
Sapienti sat!
Re[17]: Достаточно ли знать С без знания С++ для устройства
От: Cyberax Марс  
Дата: 05.09.14 18:48
Оценка:
Здравствуйте, eskimo82, Вы писали:

C>>А перед этим появилась первая бактерия.

E>Несомненно. Но поддержка атомиков появилась в С раньше чем в С++.
В виде intrinsinc'ов — ровно наоборот, если речь идёт о gcc.

C>>>>Бредишь. Это возможно чуть ли не с K&R C, точно было в C89. Классика жанра — возвращение структуры POINT в WinAPI.

E>>>1. Что я неприпоминаю, что там за функция в Win32 API возвращает POINT. Можеш напомнить ?
E>Итак, какая функция в WinAPI возвращает POINT ?
Лень искать.

C>>В общем, я считаю, что ламеризм (воинствующее незнание) надо наказывать долларом. Так что предлагаю поспорить на $100, что в С89 есть возврат структур, аналогичный побайтному копированию.

E>Вот и начни с себя. Потрать доллары на своё образование.
Ну так готов спорить?

C>>ЩИТО? В Java все объекты — это reference-типы. Если бы в Java были value-типы, то тоже всё было бы как в С++.

E>Если у бабушки был бы член, она была бы дедушкой. Но в обоих случаях осталась бы престарелым человеком. Так и в случае с агрегатными обьектами.
Что такое "агрегатный обьект"?

E>1. Глобальная переменная в С и С++ инициализируется нулем. Балбес.

Это автоматическая переменная. За глобальные переменные вообще расстрел сразу.

E>2. Этот код также не упадет.

Да, всего лишь молчаливо даст доступ к файлу. Тут если посмотреть, то в CVE от uninitialized access примерно процентов так 10% багов.

C>>В Java пишется так:

E>А в С++ пишется по другому. И в обоих языках можно элементарно выстрелить себе в ногу.
Ну так тут кто-то утверждает, что в Java всякие странные проблемы с вызовом super. В чём в Java проблемы с вызовом super?

C>>А потом ищутся баги с неинициализированным next.

E>ЛОЛ, Что ?
Ну вот видишь.

C>>"Методы" add_to... будут в каждом используемом файле инстанцироваться отдельно, за счёт static'а. Если static убрать, то получим конфликты времени связывания и/или неоптимальный код из-за отсутствия inlining'а.

E>Теперь напиши пример в templates и сравни как будут инстанцироваться методы.
Нормально будут.
template<class T> struct list_t
{
    typename list_t<T> *next;
    T payload;

    void add_to_list(T value) {...} 
};

Не надо указывать явный static.
Sapienti sat!
Re[10]: Достаточно ли знать С без знания С++ для устройства на работу?
От: -n1l-  
Дата: 05.09.14 19:04
Оценка:
Здравствуйте, CreatorCray, Вы писали:

CC>
CC>char *foo;
CC>int bar;

CC>printf ("%s %i", bar, foo);
CC>

На си char* — общий указатель, там может быть что угодно. И вообще, разве невнимательность программиста — это проблема языка?
Re[10]: Достаточно ли знать С без знания С++ для устройства на работу?
От: -n1l-  
Дата: 05.09.14 19:08
Оценка:
Здравствуйте, Cyberax, Вы писали:

C>Здравствуйте, -n1l-, Вы писали:


CC>>>Рукопашка везде и во всём. Boilerplating. Принципиальная невозможность писать safe код.

N>>как везде и во всем? А как же GTK?
C>Вот GTK как раз — прекрасный пример. Множество проектов (LXDE, Wireshark, ...) переключаются с GTK на QT из-за того, что их авторы поняли, что они много лет ели кактус.
Скорее всего убегут обратно. С ктютом совладать смог только сьюз.
Re[11]: Достаточно ли знать С без знания С++ для устройства на работу?
От: Cyberax Марс  
Дата: 05.09.14 19:45
Оценка:
Здравствуйте, -n1l-, Вы писали:

C>>Вот GTK как раз — прекрасный пример. Множество проектов (LXDE, Wireshark, ...) переключаются с GTK на QT из-за того, что их авторы поняли, что они много лет ели кактус.

N>Скорее всего убегут обратно. С ктютом совладать смог только сьюз.
То есть?
Sapienti sat!
Re[11]: достаточно
От: PMLife http://PMLife.ru
Дата: 05.09.14 20:42
Оценка:
Здравствуйте, -n1l-, Вы писали:

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


PML>>Здравствуйте, -n1l-, Вы писали:


N>>>Согласен. Когда нет озвученной ветки, это разговор ни о чем.

N>>>Причем яндекс и всякие лабы озвучивают минимум и максимум.

PML>>Публично или лично вам на собеседовании?


N>Ну сейчас вижу, что у разработчиков перестали писать, но раньше на хх видел веточки.

N>Вот у всяких рекламщиков есть:

N>http://omsk.hh.ru/vacancy/11538451?query=%D1%8F%D0%BD%D0%B4%D0%B5%D0%BA%D1%81


Вилка от 70 до 250 — это все равно, что ничего не написано
Блог менеджера проектов.
Re: Достаточно ли знать С без знания С++ для устройства на работу?
От: Sealcon190 Соломоновы острова  
Дата: 05.09.14 21:23
Оценка: 3 (1)
Здравствуйте, ramar, Вы писали:

R>А можно ли быть программистом-системщиком, но знать только С, без С++? Вообще, насколько важно знать С++ или достаточно только С? Не только в России, но за бугром тоже. В Америке, я знаю, именно С больше в почете.


Достаточно. Более того, там, где находятся центры разработки железа, знание C намного востребованнее знания плюсов.
Скажем, когда я ходил по собеседованиям в Тайване, в 3 конторах из пяти мне сказали что плюсы — это, конечно, хорошо, но может я согласен пересесть на C?
Re[18]: Достаточно ли знать С без знания С++ для устройства
От: eskimo82  
Дата: 05.09.14 22:28
Оценка:
C>>>>>Оно скомпилируется и будет падать.
E>>>>Как мы видим, здесь указатель, а не int. Какой неприкрытый фейл...
C>>>Можно и int, не вопрос:
C>>>
C>>>int mode;
C>>>chmod("/some/file", mode); //Are you feeling lucky today?
C>>>

E>>1. Глобальная переменная в С и С++ инициализируется нулем. Балбес.
CC>А с чего ты взял что это глобальная переменная?
А с чего бы ей не быть глобальной переменной ?
Re: Достаточно ли знать С без знания С++ для устройства на работу?
От: TimurSPB Интернет  
Дата: 05.09.14 22:35
Оценка:
Да.
Make flame.politics Great Again!
Re[18]: Достаточно ли знать С без знания С++ для устройства
От: eskimo82  
Дата: 05.09.14 22:51
Оценка: :)
C>>>А перед этим появилась первая бактерия.
E>>Несомненно. Но поддержка атомиков появилась в С раньше чем в С++.
C>В виде intrinsinc'ов — ровно наоборот, если речь идёт о gcc.
Вот и напиши здесь даты появления стандарта C11 и дату появления __sync_xxx функций в gcc.

C>>>>>Бредишь. Это возможно чуть ли не с K&R C, точно было в C89. Классика жанра — возвращение структуры POINT в WinAPI.

E>>>>1. Что я неприпоминаю, что там за функция в Win32 API возвращает POINT. Можеш напомнить ?
E>>Итак, какая функция в WinAPI возвращает POINT ?
C>Лень искать.
Поищи и приведи ссылку, иначе твоё заевление не соответсвует действительности.

C>>>В общем, я считаю, что ламеризм (воинствующее незнание) надо наказывать долларом. Так что предлагаю поспорить на $100, что в С89 есть возврат структур, аналогичный побайтному копированию.

E>>Вот и начни с себя. Потрать доллары на своё образование.
C>Ну так готов спорить?
Лень спорить с балбесом.

C>>>ЩИТО? В Java все объекты — это reference-типы. Если бы в Java были value-типы, то тоже всё было бы как в С++.

E>>Если у бабушки был бы член, она была бы дедушкой. Но в обоих случаях осталась бы престарелым человеком. Так и в случае с агрегатными обьектами.
C>Что такое "агрегатный обьект"?
Ты не знаеш принципы ООП ?

E>>1. Глобальная переменная в С и С++ инициализируется нулем. Балбес.

C>Это автоматическая переменная.
Кто сказал ?

C>За глобальные переменные вообще расстрел сразу.

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

E>>2. Этот код также не упадет.

C>Да, всего лишь молчаливо даст доступ к файлу. Тут если посмотреть, то в CVE от uninitialized access примерно процентов так 10% багов.
Или не даст доступ к файлу.

C>>>В Java пишется так:

E>>А в С++ пишется по другому. И в обоих языках можно элементарно выстрелить себе в ногу.
C>Ну так тут кто-то утверждает, что в Java всякие странные проблемы с вызовом super. В чём в Java проблемы с вызовом super?
В Java вообще возникает много странных проблем по сравнению с C++.

C>>>А потом ищутся баги с неинициализированным next.

E>>ЛОЛ, Что ?
C>Ну вот видишь.
Что тут видеть, если человек вообще не написал конструктор ? Согласись — это разные немного вещи: 1. не написать конструктор вообще, 2. в процесе модификации обьекта добавить коллекцию и забыть написать её создание в конструкторе. Второй случай как раз однозначно соответсвует потенциальным Сишным самострелам. В этом варианте С++, в отличии от Java, оказывается языком где нету такого замечательного шанса пострелять себе в ноги. Так что о том что Java — это безопасный язык ты можеш лечить молодых школьников.

C>>>"Методы" add_to... будут в каждом используемом файле инстанцироваться отдельно, за счёт static'а. Если static убрать, то получим конфликты времени связывания и/или неоптимальный код из-за отсутствия inlining'а.

E>>Теперь напиши пример в templates и сравни как будут инстанцироваться методы.
C>Нормально будут.
C>
C>template<class T> struct list_t
C>{
C>    typename list_t<T> *next;
C>    T payload;

C>    void add_to_list(T value) {...} 
C>};
C>

C>Не надо указывать явный static.
А теперь ответь на следующие вопросы:
1. Как будут инстанцироваться методы add_to_list ?
2. Сколько копий их будет ?
3. Есть ли разница в количестве копий с Сишным вариантом ?
Re[10]: Достаточно ли знать С без знания С++ для устройства н
От: eskimo82  
Дата: 05.09.14 22:54
Оценка:
CC>Куда более серьёзная проблема в том, что на С нет никаких способов писать безопасный код.
Как показал мой пример, на Java есть способы писать опасный код.

Некоторые глупцы еще пытаются найти серебряную пулю в виде языка не дающего писать безопасный код. Таких языков нет, безопасен код или нет зависит целиком и полностью от его автора.
Re[24]: Достаточно ли знать С без знания С++ для устройства
От: eskimo82  
Дата: 05.09.14 23:03
Оценка:
IID>Для чистого Си это тоже актуально, странно что ты не в курсе. Статики-то надо инитить, и в _atexit напиханные функции вызывать.
Простые статики уже лежат проиниченые, а в_atexit функции надо сначала понапихать.
Re[24]: Достаточно ли знать С без знания С++ для устройства
От: eskimo82  
Дата: 05.09.14 23:11
Оценка: :))
ХГД>От записи штоле защищено?
Кеп подсказывает что инициализирующий конструктор не вызывается.

ХГД>И на выяснение этого факта надо много часов с отладчиком и дизассемблером?

В том случае, про который я рассказываю, компилятор сгенерировал инициализирующий конструктор для таблицы замен знаменитого госта (что такое таблица замен и гост я расказывать не буду — ты все равно не поймеш), сгенерировал он его потому что мудрила, набивший эти таблицы сделал это с нарушением сишного синтаксиса, а сам код — это был как раз тот случай когда модуль к ядру был написан на С++ и собирался как С++ код. Как ты догадываешся, все внешние юнит-тесты прекрасно проходили. Но связь с другой стороной пропала — пакеты вроде ходят, но расшифроваться не могут.
А теперь, умник, обозначь свои действия в этой ситуации.

ХГД>Ужас-ужас, а дустом не пробовали? В смысле, constexpr constructor тоже почему-то не годиццо?

С чего ты взял что constexpr обязательно выполнится на этапе компиляции, а не после ушлого компилятора на этапе инициализации программы ?
Re[25]: Достаточно ли знать С без знания С++ для устройства
От: eskimo82  
Дата: 05.09.14 23:13
Оценка:
IID>Ну, справедливости ради, GDB та еще какашка
Нормальный отладчик, ты просто им пользоваться не умееш.

IID>А может автор живую отладку не осиливает, и пользуется исключительно sprintf-ом в файл/компорт/etc.

Автор вообще програмирует на счетах.
Re[19]: Достаточно ли знать С без знания С++ для устройства
От: Cyberax Марс  
Дата: 05.09.14 23:46
Оценка: +2
Здравствуйте, eskimo82, Вы писали:

C>>В виде intrinsinc'ов — ровно наоборот, если речь идёт о gcc.

E>Вот и напиши здесь даты появления стандарта C11 и дату появления __sync_xxx функций в gcc.
А в PCC их до сих пор нет.

E>>>Итак, какая функция в WinAPI возвращает POINT ?

C>>Лень искать.
E>Поищи и приведи ссылку, иначе твоё заевление не соответсвует действительности.
Мне совсем лень искать. Да и не важно, если я даже ошибаюсь.

E>>>Вот и начни с себя. Потрать доллары на своё образование.

C>>Ну так готов спорить?
E>Лень спорить с балбесом.
Ну так ты признаёшь, что:
1) В C89 структуры могут возвращаться из функций.
2) В С++ абсолютно аналогичное поведение.

Или как?

C>>Что такое "агрегатный обьект"?

E>Ты не знаеш принципы ООП ?
Ну так что это такое? Я не знаю термина "агрегатный объект".

E>>>1. Глобальная переменная в С и С++ инициализируется нулем. Балбес.

C>>Это автоматическая переменная.
E>Кто сказал ?
Я сказал. Ещё вопросы про вменяемое поведение в С будут?

C>>За глобальные переменные вообще расстрел сразу.

E>Это категогричное заявление сразу выдает дилетанта наслушавшегося страшилок про глобальные переменные.
Я их не наслушался, а наиспытвался на себе.

E>Глобальные переменные могут быть очень полезны, а могут нести вред — это зависит от того как и для чего они используются.

Нет, пользы от глобальных переменных нет совсем.

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

Синглтоны — это те же глобальные переменные и точно так же идут в морг.

C>>Да, всего лишь молчаливо даст доступ к файлу. Тут если посмотреть, то в CVE от uninitialized access примерно процентов так 10% багов.

E>Или не даст доступ к файлу.
Да, в зависимости от фазы Луны.

C>>Ну так тут кто-то утверждает, что в Java всякие странные проблемы с вызовом super. В чём в Java проблемы с вызовом super?

E>В Java вообще возникает много странных проблем по сравнению с C++.
Ну то есть, Java ты не знаешь, и привести примеры реальных источников ошибок оттуда не можешь.

C>>Ну вот видишь.

E>Что тут видеть, если человек вообще не написал конструктор ? Согласись — это разные немного вещи: 1. не написать конструктор вообще, 2. в процесе модификации обьекта добавить коллекцию и забыть написать её создание в конструкторе.
А ещё можно забыть вообще код написать.

E>Второй случай как раз однозначно соответсвует потенциальным Сишным самострелам. В этом варианте С++, в отличии от Java, оказывается языком где нету такого замечательного шанса пострелять себе в ноги. Так что о том что Java — это безопасный язык ты можеш лечить молодых школьников.

В Java я уже показал как пишется подобный код. В С++ тоже точно так же можно написать:
class test_t
{
    std::map<std::string, int> *m_;
};

А потом плакаться про забытую инициализацию m_.

C>>Не надо указывать явный static.

E>А теперь ответь на следующие вопросы:
E>1. Как будут инстанцироваться методы add_to_list ?
При использовании.

E>2. Сколько копий их будет ?

Ровно одна, за исключением случаев inline'а, даже если шаблон инстанцируется из нескольких единиц компиляции.

E>3. Есть ли разница в количестве копий с Сишным вариантом ?

Есть. В С количество инстанцирований зависит от умности линкера.
Sapienti sat!
Re[6]: Достаточно ли знать С без знания С++ для устройства на работу?
От: eskimo82  
Дата: 05.09.14 23:50
Оценка: -1 :)
CC>Дайте мне в С:
CC>классы с конструкторами, деструкторами, операторами и наследованием
За исключением операторов всё реализуемо.

CC>перегрузка функций

По указателю. Получается даже гибче чем в С++.

CC>templates (variadics included)

Некоторая часть реализуема на основе макросов, в том числе variadic-макросов.

CC>и я уже буду счастлив.

Ты счаслив ?

AWW>>Ну дык эти как СИ с классами. Это не С++.

CC>Даже С с классами уже помогает сократить объём кода раза эдак в 2-3 и облегчить жизнь разработчику за счёт автоматизации.


Что кассается драйверов и прочих модулей ядра — как я уже говорил отмена исключений и RTTI выпиливает практически весь С++ со почти всей стандартной библиотекой. Остается Си с классами и темплейтами и немного алгоритмов которые не бросают исключений.

Что осталось:
1. Наследование, полиморфизм из ООП.
2. Автоматический контроль за временем жизни переменных, RAII
3. Темплейты и обобщеное програмирование.


А теперь, можно задасться вопросом, насколько оставшийся функционал отличается от Сишного:
1. Наследование, полиморфизм из ООП.
— Элементы ООП прекрасно реализуются средствами Си.

2. Автоматический контроль за временем жизни переменных, RAII
— Поскольку исключений нет, то и вернуть ошибку из конструктора невозможно. Следовательно, всё что можем — это тривиальные конструкторы и двухступенчатая инициализация аля как в MFC (после тривиального конструктора руками вызывать Init-функцию, которая и сделает всю реальную работу по конструированию и вернет ошибку). Это сводит на нет весь этот пункт — какая разница, что забывать вызвать руками, какой-ть free или какой-нибудь init.

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


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

Вам такой С++ вообще нужен ?
Re[20]: Достаточно ли знать С без знания С++ для устройства
От: eskimo82  
Дата: 06.09.14 00:08
Оценка: :)
C>>>В виде intrinsinc'ов — ровно наоборот, если речь идёт о gcc.
E>>Вот и напиши здесь даты появления стандарта C11 и дату появления __sync_xxx функций в gcc.
C>А в PCC их до сих пор нет.
И що ?

E>>>>Итак, какая функция в WinAPI возвращает POINT ?

C>>>Лень искать.
E>>Поищи и приведи ссылку, иначе твоё заевление не соответсвует действительности.
C>Мне совсем лень искать. Да и не важно, если я даже ошибаюсь.
Это как раз важно, их нет потому что WinAPI родилось тогда когда возврата структурных типов в Си еще не было.

E>>>>Вот и начни с себя. Потрать доллары на своё образование.

C>>>Ну так готов спорить?
E>>Лень спорить с балбесом.
C>Ну так ты признаёшь, что:
C>1) В C89 структуры могут возвращаться из функций.
C>2) В С++ абсолютно аналогичное поведение.
C>Или как?
Возврат структурных типов в Си появился не сразу, довольно долгое время его не было.

C>>>Что такое "агрегатный обьект"?

E>>Ты не знаеш принципы ООП ?
C>Ну так что это такое? Я не знаю термина "агрегатный объект".
Значит учи матчасть.

E>>>>1. Глобальная переменная в С и С++ инициализируется нулем. Балбес.

C>>>Это автоматическая переменная.
E>>Кто сказал ?
C>Я сказал. Ещё вопросы про вменяемое поведение в С будут?
Отлично, а теперь покажи кодом, что это автоматическая переменная.

C>>>За глобальные переменные вообще расстрел сразу.

E>>Это категогричное заявление сразу выдает дилетанта наслушавшегося страшилок про глобальные переменные.
C>Я их не наслушался, а наиспытвался на себе.
Если ты разбирал говнокод — это еще не повод для категоричных обобщений. Все говнокод разбирали.
Ты же делаеш обобщение, аналогичное: был избит неграми — значит всех негров под расстрел. Надеюсь ты осознаеш, что твоё обобщение неверно ?

E>>Глобальные переменные могут быть очень полезны, а могут нести вред — это зависит от того как и для чего они используются.

C>Нет, пользы от глобальных переменных нет совсем.
E>>Ты ведь не будеш тут брызгать слюной по поводу синглетонов ?, а ведь их реализация строится как раз на основе глобальных переменных, может и обьявленых как локально статические, но сути это не меняет.
C>Синглтоны — это те же глобальные переменные и точно так же идут в морг.
Тем не менее это один из архитектурных паттернов ООП. Ты противник ООП ?

C>>>Да, всего лишь молчаливо даст доступ к файлу. Тут если посмотреть, то в CVE от uninitialized access примерно процентов так 10% багов.

E>>Или не даст доступ к файлу.
C>Да, в зависимости от фазы Луны.
Но виноват то не язык, а человек написавший код.

C>>>Ну так тут кто-то утверждает, что в Java всякие странные проблемы с вызовом super. В чём в Java проблемы с вызовом super?

E>>В Java вообще возникает много странных проблем по сравнению с C++.
C>Ну то есть, Java ты не знаешь, и привести примеры реальных источников ошибок оттуда не можешь.
Ну да, Java я не знаю. Предпочитаю писать на С++ и С. Как истиный валенок, поддавшить на маркетинговые лозунги об безопасном языке, первыми же строчками на Java выстрелил себе в ногу. Вот такой вот "безопасный язык".

C>>>Ну вот видишь.

E>>Что тут видеть, если человек вообще не написал конструктор ? Согласись — это разные немного вещи: 1. не написать конструктор вообще, 2. в процесе модификации обьекта добавить коллекцию и забыть написать её создание в конструкторе.
C>А ещё можно забыть вообще код написать.
Можно. Но одно дело код ненаписать, а другое — в процесе его модификации сделать опасным. Или по твоему нет никакой разницы ?

E>>Второй случай как раз однозначно соответсвует потенциальным Сишным самострелам. В этом варианте С++, в отличии от Java, оказывается языком где нету такого замечательного шанса пострелять себе в ноги. Так что о том что Java — это безопасный язык ты можеш лечить молодых школьников.

C>В Java я уже показал как пишется подобный код. В С++ тоже точно так же можно написать:
C>
C>class test_t
C>{
C>    std::map<std::string, int> *m_;
C>};
C>

C>А потом плакаться про забытую инициализацию m_.
Ты любитель гемороя ? Зачем тебе лишний указатель ?

C>>>Не надо указывать явный static.

E>>А теперь ответь на следующие вопросы:
E>>1. Как будут инстанцироваться методы add_to_list ?
C>При использовании.
Правильно.

E>>2. Сколько копий их будет ?

C>Ровно одна, за исключением случаев inline'а, даже если шаблон инстанцируется из нескольких единиц компиляции.
Ровна одна для каждого варианта T.

E>>3. Есть ли разница в количестве копий с Сишным вариантом ?

C>Есть. В С количество инстанцирований зависит от умности линкера.
В С++ тоже вообще-то. Кол-во копий в обоих вариантах будет одинаковым. Внезапно, да ?
Re[5]: Достаточно ли знать С без знания С++ для устройства на работу?
От: uncommon Ниоткуда  
Дата: 06.09.14 03:57
Оценка:
Здравствуйте, Abyx, Вы писали:

A>можно писать на подмножестве С++, которое не требует рантайма и каких-то фич которые плохо работают в ядре.

A>это будет очень большое подмножество со многими полезными фичами.

Где про это можно узнать поподробнее применительно к Linux kernel? Я помню, давным давно где-то кто-то что-то пытался сделать, но был съеден Линусом заживо
Re[6]: Достаточно ли знать С без знания С++ для устройства на работу?
От: Cyberax Марс  
Дата: 06.09.14 04:05
Оценка:
Здравствуйте, uncommon, Вы писали:

A>>можно писать на подмножестве С++, которое не требует рантайма и каких-то фич которые плохо работают в ядре.

A>>это будет очень большое подмножество со многими полезными фичами.
U>Где про это можно узнать поподробнее применительно к Linux kernel?
Я видел проект, где ядро на С++, разделяемое между Linux и Windows. Работало через тонкую прослойку на С.
Sapienti sat!
Re[21]: Достаточно ли знать С без знания С++ для устройства
От: Cyberax Марс  
Дата: 06.09.14 04:12
Оценка:
Здравствуйте, eskimo82, Вы писали:

C>>А в PCC их до сих пор нет.

E>И що ?
То что С отстаёт от С++ !!!!11111!!!

C>>Или как?

E>Возврат структурных типов в Си появился не сразу, довольно долгое время его не было.
Ну так он был в C89 или нет?

C>>Ну так что это такое? Я не знаю термина "агрегатный объект".

E>Значит учи матчасть.
Гугл со мной согласен. Этот термин упоминается в контексте программирования на 1С.

C>>Я сказал. Ещё вопросы про вменяемое поведение в С будут?

E>Отлично, а теперь покажи кодом, что это автоматическая переменная.
int set_mode(const char *path)
{
   int mode;
   return chmod(path, mode);
}


C>>Я их не наслушался, а наиспытвался на себе.

E>Если ты разбирал говнокод — это еще не повод для категоричных обобщений. Все говнокод разбирали.
E>Ты же делаеш обобщение, аналогичное: был избит неграми — значит всех негров под расстрел. Надеюсь ты осознаеш, что твоё обобщение неверно ?
Синглтоны — это Гитлеры.

C>>Синглтоны — это те же глобальные переменные и точно так же идут в морг.

E>Тем не менее это один из архитектурных паттернов ООП. Ты противник ООП ?
Нет, я противник глобальных переменных. Оборачивание глобальной переменной в объект её менее отстойной не делает.

C>>Да, в зависимости от фазы Луны.

E>Но виноват то не язык, а человек написавший код.
Или тот, кто проектировал язык.

E>Ну да, Java я не знаю. Предпочитаю писать на С++ и С. Как истиный валенок, поддавшить на маркетинговые лозунги об безопасном языке, первыми же строчками на Java выстрелил себе в ногу. Вот такой вот "безопасный язык".

Да, безопасный. Так как не имеет undefined behavior в этом случае.

C>>А потом плакаться про забытую инициализацию m_.

E>Ты любитель гемороя ? Зачем тебе лишний указатель ?
Ну так сам же любитель геморроя. Любой программист на Java написал бы:
public class Test
{
    private final IdentityHashMap map=new IdentityHashMap();
}

А не занимался бы созданием лишнего геморроя.

E>>>2. Сколько копий их будет ?

C>>Ровно одна, за исключением случаев inline'а, даже если шаблон инстанцируется из нескольких единиц компиляции.
E>Ровна одна для каждого варианта T.
Конечно.

E>>>3. Есть ли разница в количестве копий с Сишным вариантом ?

C>>Есть. В С количество инстанцирований зависит от умности линкера.
E>В С++ тоже вообще-то. Кол-во копий в обоих вариантах будет одинаковым. Внезапно, да ?
Нет, неверно. В С++ линкер удалит лишние копии. В С это не гарантируется, хотя часто работает.
Sapienti sat!
Re[9]: Достаточно ли знать С без знания С++ для устройства н
От: andyag  
Дата: 06.09.14 04:35
Оценка:
Здравствуйте, Andrew.W Worobow, Вы писали:

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


AWW>>>То есть для того что бы не делать ошибок на СИ нужна выскокая квалификация програмиста, а на С++ можно избежать ошибок и используя менее квалифицированную рабсилу.


A>>Это заблуждение. В мире СИ нужно делать много специфической работы, которой нет в других ЯП. Безусловно, минусом это является только когда речь заходит о вполне конкретных задачах, типа "сделать за 2 часа и чтоб работало".


AWW>Ну никакое это не заблуждение )).

AWW>В СИ очень много работы на прямую с памятью, в С++ это постарались убрать, точнее дали возможность этого избежать.
AWW>Прямая работа с помятью, (выделение, освобождение, инициализация ) всегда генерирует множество ошибок. То есть на СИ писать сложнее, но когда это необходимо то нужна более квалифицирванная рабсила.

Я не могу согласиться про квалификацию. Для программиста на Си навык "правильной работы с памятью" будет примерно настолько же важным, насколько для программиста на какой-нибудь Java важным будет навык "вытащить данные из БД". И то, и другое, безусловно, требует опыта и знаний, но с точки зрения практической полезности работа с памятью ради работы с памятью не имеет смысла — нужно что-то ещё.

AWW>То есть СИ более низкоуровневый язык, а чем ниже уровень, тем ближе к "железу", тем выше нужна квалификация. Ну что бы написать тоже самое на C# надо скажем 10 строчек, на СИ надо 100. C# даст кучу предупреждений которые в силу самого языка вожможно выявить и подсказать программисту.

AWW>В СИ есть у тебя указатель на буфер, это просто адрес, и крутись как хочешь — весь контроль тебе передали, в С++ уже есть ссылки, ошибок наделать можно меньше.

Т.е. самая высокая квалификация у программистов микроконтроллеров, а самая низкая — у энтерпрайзеров? По-моему неверно. Квалификация — это разница между самыми лоу левел и самыми хай левел знаниями/навыками. Всреднем, ИМХО, чем больше лоу левел, тем меньше хай левел.

AWW>Если в языке много поводов сделать ошибок, это писать на нем без ошибок — нужна более высокая квалификация.


Это не квалификация, а, извините, просто степень задротства Чем больше ресурсов уходит на борьбу с языком, тем меньше остаётся на решение полезных задач. Тут главное помнить, что ценность обычно представляют решения полезных задач.

AWW>Мы сейчас говорим, я надеюсь все это понимают, что имеется ввиду что если С++, то уже без указателей. Ну просто так как СИ и С++ есть близкие языки, то можно естественно и на С++ делать так же как обычно принято на СИ. То есть грань этак "проще" "легче" почти не видна.

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

Может быть у нас просто терминология не совпадает. Квалификация — это произведение ширины опыта и знаний на глубину.
* Когда программист умеет программировать _вообще_, то знание всяких там указателей — это плюс
* Когда программист умеет работать с указателями и всё — это какой-то очень специфический программист
Re[22]: Достаточно ли знать С без знания С++ для устройства
От: eskimo82  
Дата: 06.09.14 04:46
Оценка: -1 :))) :)
C>>>А в PCC их до сих пор нет.
E>>И що ?
C>То что С отстаёт от С++ !!!!11111!!!
Для того чтобы отставать нужно иметь хотя общий вектор развития. Согласен ?
Для Си и С++ общего вектора нет. С++ идет непонятно куда, скорее всего в УГ.

C>>>Или как?

E>>Возврат структурных типов в Си появился не сразу, довольно долгое время его не было.
C>Ну так он был в C89 или нет?
Не помню. В K&R его точно не было.

C>>>Ну так что это такое? Я не знаю термина "агрегатный объект".

E>>Значит учи матчасть.
C>Гугл со мной согласен. Этот термин упоминается в контексте программирования на 1С.
А также он много раз употребляется в MSDN. Вывод — ты не умееш пользоваться гуглом.

C>>>Я сказал. Ещё вопросы про вменяемое поведение в С будут?

E>>Отлично, а теперь покажи кодом, что это автоматическая переменная.
C>
C>int set_mode(const char *path)
C>{
C>   int mode;
C>   return chmod(path, mode);
C>}
C>

Отлично! Но ты все равно написал ошибочный код — в POSIX второй аргумент chmod имеет тип mode_t.

C>>>Я их не наслушался, а наиспытвался на себе.

E>>Если ты разбирал говнокод — это еще не повод для категоричных обобщений. Все говнокод разбирали.
E>>Ты же делаеш обобщение, аналогичное: был избит неграми — значит всех негров под расстрел. Надеюсь ты осознаеш, что твоё обобщение неверно ?
C>Синглтоны — это Гитлеры.
Это твое ничем не обоснованое мнение.

C>>>Синглтоны — это те же глобальные переменные и точно так же идут в морг.

E>>Тем не менее это один из архитектурных паттернов ООП. Ты противник ООП ?
C>Нет, я противник глобальных переменных. Оборачивание глобальной переменной в объект её менее отстойной не делает.
Ты просто не понял зачем они нужны и как их надо использовать. А без этого понимания проще запретить — думать то не надо.

C>>>Да, в зависимости от фазы Луны.

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

E>>Ну да, Java я не знаю. Предпочитаю писать на С++ и С. Как истиный валенок, поддавшить на маркетинговые лозунги об безопасном языке, первыми же строчками на Java выстрелил себе в ногу. Вот такой вот "безопасный язык".

C>Да, безопасный. Так как не имеет undefined behavior в этом случае.
Он имеет в этом случае падение с неадекватным сообщением об ошибке, в отличии от автоматически вызванного конструктора в С++.

C>>>А потом плакаться про забытую инициализацию m_.

E>>Ты любитель гемороя ? Зачем тебе лишний указатель ?
C>Ну так сам же любитель геморроя. Любой программист на Java написал бы:
C>
C>public class Test
C>{
C>    private final IdentityHashMap map=new IdentityHashMap();
C>}
C>

C>А не занимался бы созданием лишнего геморроя.
Но язык же позволяет ? и даже никаких ворнингов не дает.

E>>>>2. Сколько копий их будет ?

C>>>Ровно одна, за исключением случаев inline'а, даже если шаблон инстанцируется из нескольких единиц компиляции.
E>>Ровна одна для каждого варианта T.
C>Конечно.
Можеш взять дизассемблер и убетиться лично.

E>>>>3. Есть ли разница в количестве копий с Сишным вариантом ?

C>>>Есть. В С количество инстанцирований зависит от умности линкера.
E>>В С++ тоже вообще-то. Кол-во копий в обоих вариантах будет одинаковым. Внезапно, да ?
C>Нет, неверно. В С++ линкер удалит лишние копии. В С это не гарантируется, хотя часто работает.
Чтож неверно ? В Си линкер надо попросить удалить лишнии копии. В результате получается индентичный с С++ по кол-ву этих самых копий код.
Кроме того весьма сомнительно, что ты начал бы штамповать макросами в каждой единицы трансляции неиспользуемые функции. Даже не знаю, зачем это может понадобится человеку в здравом уме.
Re: Достаточно ли знать С без знания С++ для устройства на работу?
От: мыщъх США http://nezumi-lab.org
Дата: 06.09.14 05:11
Оценка: 3 (1)
Здравствуйте, ramar, Вы писали:

R>А можно ли быть программистом-системщиком, но знать только С, без С++? Вообще, насколько важно знать С++ или достаточно только С? Не только в России, но за бугром тоже. В Америке, я знаю, именно С больше в почете.


вы совершенно правы. я был приятно удивлен, обнаружив, что в штатах можно знать си и совсем не париться по поводу плюсов. ладно бы я один не парился, так ведь и люди вокруг меня программируют на си и плюсы им совсем ни к чему. от рядовых разработчиков до архитекторов. си, линух. плюс питон | руби | что-то еще. и незначние плюсов (по крайней мере там, где я работал) это скорее плюс, чем минус, т.к. сишный код понятен большему числу людей и его читают все остальные сотрудники, даже те, кто больше по джава.
americans fought a war for a freedom. another one to end slavery. so, what do some of them choose to do with their freedom? become slaves.
Re[19]: Достаточно ли знать С без знания С++ для устройства
От: CreatorCray  
Дата: 06.09.14 05:50
Оценка:
Здравствуйте, eskimo82, Вы писали:

C>>>>
C>>>>int mode;
C>>>>chmod("/some/file", mode); //Are you feeling lucky today?
C>>>>

E>>>1. Глобальная переменная в С и С++ инициализируется нулем. Балбес.
CC>>А с чего ты взял что это глобальная переменная?
E>А с чего бы ей не быть глобальной переменной ?
Ты не можешь написать вызов функции рядом с определением глобальной переменной
Re[26]: Достаточно ли знать С без знания С++ для устройства
От: CreatorCray  
Дата: 06.09.14 05:50
Оценка:
Здравствуйте, eskimo82, Вы писали:

IID>>Ну, справедливости ради, GDB та еще какашка

E>Нормальный отладчик, ты просто им пользоваться не умееш.
Ты просто нормальных видимо не видел никогда.
Re[25]: Достаточно ли знать С без знания С++ для устройства
От: CreatorCray  
Дата: 06.09.14 05:50
Оценка:
Здравствуйте, eskimo82, Вы писали:

ХГД>>Ужас-ужас, а дустом не пробовали? В смысле, constexpr constructor тоже почему-то не годиццо?

E>С чего ты взял что constexpr обязательно выполнится на этапе компиляции, а не после ушлого компилятора на этапе инициализации программы ?
Потому что стандарт.
Re[11]: Достаточно ли знать С без знания С++ для устройства на работу?
От: CreatorCray  
Дата: 06.09.14 05:50
Оценка:
Здравствуйте, -n1l-, Вы писали:

CC>>
CC>>char *foo;
CC>>int bar;

CC>>printf ("%s %i", bar, foo);
CC>>

N>На си char* — общий указатель, там может быть что угодно.

Ок.
char *foo = "Blah";
int bar = 123;
...
printf ("%s %i", bar, foo);


N> И вообще, разве невнимательность программиста — это проблема языка?

Если бы люди были всегда внимательными то и память никогда бы не текла, ни по NULL поинтеру никто бы не ходил, все ошибочные ситуации правильно обрабатывались и проч. и проч.
Re[7]: Достаточно ли знать С без знания С++ для устройства на работу?
От: CreatorCray  
Дата: 06.09.14 05:50
Оценка: +3
Здравствуйте, eskimo82, Вы писали:

CC>>классы с конструкторами, деструкторами, операторами и наследованием

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

CC>>перегрузка функций

E>По указателю. Получается даже гибче чем в С++.
Overloading нужна по параметрам: http://www.cplusplus.com/doc/tutorial/functions2/

void DoSomething(int value);
void DoSomething(char value);
void DoSomething(double value);
void DoSomething(someclass& value);
void DoSomething(char* value);


CC>>templates (variadics included)

E>Некоторая часть реализуема на основе макросов, в том числе variadic-макросов.
Вы когда нибудь отлаживали макросы? В вложенные макросы? Я — отлаживал, больше не хочу.

CC>>и я уже буду счастлив.

E>Ты счаслив?
Не то чтобы, ибо вынужден на данный момент писать под линух и на С.
Держат только RSUs и прочие плюшки.

E>Что осталось:

E>1. Наследование, полиморфизм из ООП.
E>2. Автоматический контроль за временем жизни переменных, RAII
E>3. Темплейты и обобщеное програмирование.
Этого уже достаточно чтобы жить стало легче, кода стало меньше, читабельность и стабильность улучшилась драматически.

E>А теперь, можно задасться вопросом, насколько оставшийся функционал отличается от Сишного:

E>1. Наследование, полиморфизм из ООП.
E>- Элементы ООП прекрасно реализуются средствами Си.
Вот только не надо мне рассказывать про макросы. Я их давным давно наелся.

E>2. Автоматический контроль за временем жизни переменных, RAII

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

E>3. Темплейты и обобщенное програмирование.

E>Некоторая часть может быть реализована на основе макросов препроцессора, возможно эта часть даже перекрывает все потребности.
Ещё раз: макросы это разговоры в пользу бедных. Templates в итоге не от хорошей жизни придумали.
Поскольку макросы это просто подстановка без проверки типов то очень просто написать такой код, который скомпилируется без единого чиха и даже будет выполняться, но производить такие тонкие разрушения что придётся доооолго разгребать как же это получилось. Я это видел, дебажил и тыкал носом авторов много раз. Как только надо написать сколь либо сложное то сначала тратится море усилий чтобы написать макросы, потом море усилий чтобы их отладить. В итоге получается хрупкая конструкция, которая рушится как только надо что либо добавить или поменять.

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

Весь "системный геморрой" заключается в написании С++ stdlib для кернела с поддержкой SEH/Signal исключений. Очень сложно, да!

E>Вам такой С++ вообще нужен ?

Мало того что нужен, мы его в винде давно уже используем.
Только линуксоиды упираются и цепляются за духовные скрепы С.
Re[11]: Достаточно ли знать С без знания С++ для устройства н
От: CreatorCray  
Дата: 06.09.14 05:50
Оценка:
Здравствуйте, eskimo82, Вы писали:

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

E>Как показал мой пример, на Java есть способы писать опасный код.
Всё относительно.
Re[8]: Достаточно ли знать С без знания С++ для устройства на работу?
От: Cyberax Марс  
Дата: 06.09.14 06:06
Оценка: 2 (1)
Здравствуйте, CreatorCray, Вы писали:

CC>>>классы с конструкторами, деструкторами, операторами и наследованием

E>>За исключением операторов всё реализуемо.
CC>Мне надо автоматический вызов конструкторов и деструкторов. Без макроёбства.
В GCC есть __cleanup__, что существенно упрощает работу.
#define autofree __attribute((cleanup(free)))__
#define release_return(x) __typeof__(x) res=x; x=0; return res;

const char *do_something()
{
   autofree char *x = (char*) malloc(32);
   if (something_failed())
       return 0;
   release_return(x);
}


Конечно, не так удобно, как в С++, но уже хоть что-то лучше "goto error_exit".
Sapienti sat!
Re[2]: Достаточно ли знать С без знания С++ для устройства на работу?
От: CreatorCray  
Дата: 06.09.14 06:21
Оценка:
Здравствуйте, мыщъх, Вы писали:

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

Верно, но потом смотришь на их код и грустишь. А если ещё и процесс написания наблюдаешь то грустишь вдвойне, ибо столько пара уходит в гудок на борьбу с ограниченностью языка.
Re[9]: Достаточно ли знать С без знания С++ для устройства на работу?
От: CreatorCray  
Дата: 06.09.14 06:24
Оценка:
Здравствуйте, Cyberax, Вы писали:

C>В GCC есть __cleanup__, что существенно упрощает работу.

C>Конечно, не так удобно, как в С++, но уже хоть что-то лучше "goto error_exit".

Лучше, но это ж всё равно костыль.
Ну и я так понимаю для полей структуры да со вложенностью оно работать не будет.
Re[20]: Достаточно ли знать С без знания С++ для устройства
От: eskimo82  
Дата: 06.09.14 07:44
Оценка: -3
C>>>>>
C>>>>>int mode;
C>>>>>chmod("/some/file", mode); //Are you feeling lucky today?
C>>>>>

E>>>>1. Глобальная переменная в С и С++ инициализируется нулем. Балбес.
CC>>>А с чего ты взял что это глобальная переменная?
E>>А с чего бы ей не быть глобальной переменной ?
CC>Ты не можешь написать вызов функции рядом с определением глобальной переменной
А с чего ты взял что что вызов функции ?
Может это какое-то хитрое макроопределение, вида:
#define chmod(n, m) \
    static struct {
        .name = n,
        .mode = m
    } pad

Из приведенного кода — это не ясно.
Отредактировано 06.09.2014 7:47 eskimo82 . Предыдущая версия . Еще …
Отредактировано 06.09.2014 7:45 eskimo82 . Предыдущая версия .
Re[27]: Достаточно ли знать С без знания С++ для устройства
От: eskimo82  
Дата: 06.09.14 07:49
Оценка: -1 :)
IID>>>Ну, справедливости ради, GDB та еще какашка
E>>Нормальный отладчик, ты просто им пользоваться не умееш.
CC>Ты просто нормальных видимо не видел никогда.
Ну приведи пример нормальных с твой точки зрения. Если заикнешся про студийный отладчик — можеш сразу засчитать себе фейл — студийный отладчик очень херовый по функционалу.
Re[26]: Достаточно ли знать С без знания С++ для устройства
От: eskimo82  
Дата: 06.09.14 07:51
Оценка: -3
ХГД>>>Ужас-ужас, а дустом не пробовали? В смысле, constexpr constructor тоже почему-то не годиццо?
E>>С чего ты взял что constexpr обязательно выполнится на этапе компиляции, а не после ушлого компилятора на этапе инициализации программы ?
CC>Потому что стандарт.
И що ? Стандарт — стандартом, компиляторы его особо не придерживаются, особенно MS.
Re[27]: Достаточно ли знать С без знания С++ для устройства
От: CreatorCray  
Дата: 06.09.14 07:56
Оценка: +1
Здравствуйте, eskimo82, Вы писали:

ХГД>>>>Ужас-ужас, а дустом не пробовали? В смысле, constexpr constructor тоже почему-то не годиццо?

E>>>С чего ты взял что constexpr обязательно выполнится на этапе компиляции, а не после ушлого компилятора на этапе инициализации программы ?
CC>>Потому что стандарт.
E>И що ? Стандарт — стандартом, компиляторы его особо не придерживаются, особенно MS.

Ну конечно же! Операция + может на самом деле делить, ведь "Стандарт — стандартом, компиляторы его особо не придерживаются".
Re[10]: Достаточно ли знать С без знания С++ для устройства н
От: Andrew.W Worobow https://github.com/Worobow
Дата: 06.09.14 08:11
Оценка:
Здравствуйте, CreatorCray, Вы писали:

Хм, )) Какой-то странный испорченный телефон.

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

AWW>>То есть на СИ писать сложнее, но когда это необходимо то нужна более квалифицирванная рабсила.

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

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

AWW>>То есть СИ более низкоуровневый язык, а чем ниже уровень, тем ближе к "железу", тем выше нужна квалификация.

CC>Чем сложнее инструмент тем выше нужна квалификация.

Ну а почему инструмент сложен? Самый простой это ассемблер — всего-то команды и адреса. Но писать на нем сложно. А "сложность" языка, это рамки которые тебе дают. Но не сложность освоения.

CC>Те же самые индусы, что у нас пишут на С пишут кое какие части на С++. Туда просто без слёз не взглянуть: нагромождения буста в таких причудливых комбинациях что просто диву даёшься как они такое вообще придумали и как оно вообще умудряется работать. Там где можно сделать просто они делают сложно.




AWW>>Если в языке много поводов сделать ошибок, это писать на нем без ошибок — нужна более высокая квалификация.

CC>Печаль в том, что по факту на С говнокодят в стиле: скомпилировалось — значит ошибок нет.

Так в том, то и дело )) Что бы не говнокодить на СИ надо иметь высокую квалификацю, а С++ тебе уже не даст той вольности, и наложит ограничения. ))
Не все кто уехал, предал Россию.
Re[8]: Достаточно ли знать С без знания С++ для устройства на работу?
От: eskimo82  
Дата: 06.09.14 08:12
Оценка: -1
CC>>>классы с конструкторами, деструкторами, операторами и наследованием
E>>За исключением операторов всё реализуемо.
CC>Мне надо автоматический вызов конструкторов и деструкторов. Без макроёбства.
Зачем тебе конструкторы, если ничего полезного в них ты сделать не сможеш по причиние невозможности вернуть ошибку ?

CC>>>перегрузка функций

E>>По указателю. Получается даже гибче чем в С++.
CC>Overloading нужна по параметрам: http://www.cplusplus.com/doc/tutorial/functions2/
Ты можеш реализовать это с использованием gcc шного typeof и свитча внутри function-like макроса.

CC>>>templates (variadics included)

E>>Некоторая часть реализуема на основе макросов, в том числе variadic-макросов.
CC>Вы когда нибудь отлаживали макросы? В вложенные макросы? Я — отлаживал, больше не хочу.
Отлаживал и в огромных кол-вах. Надо просто уметь писать обобщенный код в макросах так, чтобы его было удобно отлаживать.
Для этого надо писать не "в лоб", а немного подумать. Думать можно начать с Степановского сишного прототипа STL.

CC>>>и я уже буду счастлив.

E>>Ты счаслив?
CC>Не то чтобы, ибо вынужден на данный момент писать под линух и на С.
CC>Держат только RSUs и прочие плюшки.

E>>Что осталось:

E>>1. Наследование, полиморфизм из ООП.
E>>2. Автоматический контроль за временем жизни переменных, RAII
E>>3. Темплейты и обобщеное програмирование.
CC>Этого уже достаточно чтобы жить стало легче, кода стало меньше, читабельность и стабильность улучшилась драматически.
См ниже:

E>>А теперь, можно задасться вопросом, насколько оставшийся функционал отличается от Сишного:

E>>1. Наследование, полиморфизм из ООП.
E>>- Элементы ООП прекрасно реализуются средствами Си.
CC>Вот только не надо мне рассказывать про макросы. Я их давным давно наелся.
Ты просто не умееш с ними работать.

E>>2. Автоматический контроль за временем жизни переменных, RAII

E>>- Поскольку исключений нет, то и вернуть ошибку из конструктора невозможно.
CC>Исключения есть, лично писал kernel код с их использованием.
Вот тут было интересно узнать подробности. Особбенно совмещение неопределенных точек возврата с сишным кодом ядра.

E>>3. Темплейты и обобщенное програмирование.

E>>Некоторая часть может быть реализована на основе макросов препроцессора, возможно эта часть даже перекрывает все потребности.
CC>Ещё раз: макросы это разговоры в пользу бедных. Templates в итоге не от хорошей жизни придумали.
CC>Поскольку макросы это просто подстановка без проверки типов то очень просто написать такой код, который скомпилируется без единого чиха и даже будет выполняться, но производить такие тонкие разрушения что придётся доооолго разгребать как же это получилось. Я это видел, дебажил и тыкал носом авторов много раз. Как только надо написать сколь либо сложное то сначала тратится море усилий чтобы написать макросы, потом море усилий чтобы их отладить. В итоге получается хрупкая конструкция, которая рушится как только надо что либо добавить или поменять.
Еще раз — ты просто не научился нормально работать с макросами.

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

CC>Весь "системный геморрой" заключается в написании С++ stdlib для кернела с поддержкой SEH/Signal исключений. Очень сложно, да!
То что ты сказал — на мой взгляд, сделать в линуксе невозможно. Но ты можеш поделить ссылкой на пример, если таковой конечно существует.
Даже для юзер спэйса, где нет кучи ограничений, написание поддержки С++ является проблемой. Через сколько там лет после первого релиза в андроиде появилася порт libstdc++ — можеш напомнить ?

E>>Вам такой С++ вообще нужен ?

CC>Мало того что нужен, мы его в винде давно уже используем.
Не потому ли виндой сейчас уже невозможно пользоваться ?

CC>Только линуксоиды упираются и цепляются за духовные скрепы С.

Винда потихоньку помрет и туда ей дорога.
Re[6]: Достаточно ли знать С без знания С++ для устройства на работу?
От: Andrew.W Worobow https://github.com/Worobow
Дата: 06.09.14 08:12
Оценка:
Здравствуйте, CreatorCray, Вы писали:

CC>Т.е. на С++ ты ничего серьёзного не писал.


Пугают иногда вот такие вот заявления. )) Или вы знакомы лично?
Не все кто уехал, предал Россию.
Re[28]: Достаточно ли знать С без знания С++ для устройства
От: eskimo82  
Дата: 06.09.14 08:13
Оценка:
ХГД>>>>>Ужас-ужас, а дустом не пробовали? В смысле, constexpr constructor тоже почему-то не годиццо?
E>>>>С чего ты взял что constexpr обязательно выполнится на этапе компиляции, а не после ушлого компилятора на этапе инициализации программы ?
CC>>>Потому что стандарт.
E>>И що ? Стандарт — стандартом, компиляторы его особо не придерживаются, особенно MS.

CC>Ну конечно же! Операция + может на самом деле делить, ведь "Стандарт — стандартом, компиляторы его особо не придерживаются".

В С++ — вполне может.
Re[8]: Достаточно ли знать С без знания С++ для устройства на работу?
От: Andrew.W Worobow https://github.com/Worobow
Дата: 06.09.14 08:18
Оценка:
Здравствуйте, CreatorCray, Вы писали:

CC>Исключения есть, лично писал kernel код с их использованием.


Так это другие исключения вообщето-то.

На полном и правильном С++ в ядре писать нельзя. Ибо 1 — не нужно. 2 — вредно, так как куча всего делается в тени.

Вообще у меня такое ощущение, что вы все тут про какой-то свой С++ говорите — С++ это всякие итераторы, исключения, потоки, да куча всего, что делает С++ удобным языком, без этого всего С++ это просто удобный СИ. И все его конечно с удовольствием используют. Но это не С++. ))
Не все кто уехал, предал Россию.
Re[7]: Достаточно ли знать С без знания С++ для устройства на работу?
От: Andrew.W Worobow https://github.com/Worobow
Дата: 06.09.14 08:20
Оценка: :)
Здравствуйте, CreatorCray, Вы писали:

AWW>>!!! Так это делает "это" уже не С++.

CC>Т.е. чтобы писать на С++ надо обязательно использовать каждую фичу языка? Одну забыл и всё, программа уже не на С++?

Тогда о чем спор? ))
С++ без всего это просто удобный СИ. Ну и классы. Это не С++, если человек не занает всех жирностей С++, а использует только его подмножество, то это не знание С++, совсем!
Не все кто уехал, предал Россию.
Re[10]: Достаточно ли знать С без знания С++ для устройства н
От: Andrew.W Worobow https://github.com/Worobow
Дата: 06.09.14 08:28
Оценка:
Здравствуйте, andyag, Вы писали:

A>Т.е. самая высокая квалификация у программистов микроконтроллеров, а самая низкая — у энтерпрайзеров? По-моему неверно. Квалификация — это разница между самыми лоу левел и самыми хай левел знаниями/навыками. Всреднем, ИМХО, чем больше лоу левел, тем меньше хай левел.


Да 100% не верно, так как просто абстрактной квалификации нет. Я же именно про квалификацию владения языком, про понимание того во что этот код выливается в машкомандах.

A>Это не квалификация, а, извините, просто степень задротства Чем больше ресурсов уходит на борьбу с языком, тем меньше остаётся на решение полезных задач. Тут главное помнить, что ценность обычно представляют решения полезных задач.


Вот это и есть разная специфика — для кого то задродство, а для кого-то это просто работа. В том числе и програмирование работы с контроллером памяти на СИ. Если не хватает СИ то приходится писать на асемблере. То есть ассемблер это как раз раздорство. Но увы это такая работа. ))

A>Может быть у нас просто терминология не совпадает. Квалификация — это произведение ширины опыта и знаний на глубину.

A>* Когда программист умеет программировать _вообще_, то знание всяких там указателей — это плюс
A>* Когда программист умеет работать с указателями и всё — это какой-то очень специфический программист

Согласен — вы правы с точки зрения приклодного программиста, видимо в это разница, то есть я то про системного (железячника).
Не все кто уехал, предал Россию.
Re[9]: Достаточно ли знать С без знания С++ для устройства на работу?
От: Andrew.W Worobow https://github.com/Worobow
Дата: 06.09.14 08:40
Оценка:
Здравствуйте, eskimo82, Вы писали:

E>>>Вам такой С++ вообще нужен ?

CC>>Мало того что нужен, мы его в винде давно уже используем.
E>Не потому ли виндой сейчас уже невозможно пользоваться ?

Да нельзя писать на С++ по правильному (по канону) в ядре виндов.

http://msdn.microsoft.com/en-us/library/windows/hardware/ff557560(v=vs.85).aspx

CC>>Только линуксоиды упираются и цепляются за духовные скрепы С.

E>Винда потихоньку помрет и туда ей дорога.

Думаю, что не помрет, так как на десктопе она еще удобнее чем все другое. Удобнее означает кому-то удобнее, а эти кому-то в процентах много больше чем других. ))
Не все кто уехал, предал Россию.
Re[9]: Достаточно ли знать С без знания С++ для устройства н
От: eskimo82  
Дата: 06.09.14 09:32
Оценка: :)
AWW>Вообще у меня такое ощущение, что вы все тут про какой-то свой С++ говорите — С++ это всякие итераторы, исключения, потоки, да куча всего, что делает С++ удобным языком, без этого всего С++ это просто удобный СИ. И все его конечно с удовольствием используют. Но это не С++. ))
По своим прошлым диспутам с этими товарищами я сделал вывод, что это два каких-то бывших игродела (может и ошибаюсь). Учитывая разные упоминания, что в той индустрии вместо нормального С++ используется по большей части очень небольшое подмножество С++, практически Си с классами, можно сделать вывод что они действительно говорят о каком-то своём С++. С++ — это не только синтаксические механизмы, а еще вся стандартная библиотека с которой язык переплетен слишком тесно. Эта гипотеза могла бы обьяснить их такую любовь к windows, где все сделано для максимального неудобства нормального програмиста.
Отредактировано 06.09.2014 9:36 eskimo82 . Предыдущая версия .
Re[29]: Достаточно ли знать С без знания С++ для устройства
От: CreatorCray  
Дата: 06.09.14 10:44
Оценка:
Здравствуйте, eskimo82, Вы писали:

ХГД>>>>>>Ужас-ужас, а дустом не пробовали? В смысле, constexpr constructor тоже почему-то не годиццо?

E>>>>>С чего ты взял что constexpr обязательно выполнится на этапе компиляции, а не после ушлого компилятора на этапе инициализации программы ?
CC>>>>Потому что стандарт.
E>>>И що ? Стандарт — стандартом, компиляторы его особо не придерживаются, особенно MS.
CC>>Ну конечно же! Операция + может на самом деле делить, ведь "Стандарт — стандартом, компиляторы его особо не придерживаются".
E>В С++ — вполне может.
Полностью в соответствии со стандартом между прочим.
Так что ты определись, придерживаются они стандарта или нет.
Re[7]: Достаточно ли знать С без знания С++ для устройства на работу?
От: CreatorCray  
Дата: 06.09.14 10:44
Оценка:
Здравствуйте, Andrew.W Worobow, Вы писали:

CC>>Т.е. на С++ ты ничего серьёзного не писал.

AWW>Пугают иногда вот такие вот заявления. )) Или вы знакомы лично?

Не знаком, но вдоволь наобщался с до боли похожими персонажами.
Re[9]: Достаточно ли знать С без знания С++ для устройства на работу?
От: CreatorCray  
Дата: 06.09.14 10:44
Оценка:
Здравствуйте, eskimo82, Вы писали:

CC>>Мне надо автоматический вызов конструкторов и деструкторов. Без макроёбства.

E>Зачем тебе конструкторы, если ничего полезного в них ты сделать не сможеш по причиние невозможности вернуть ошибку ?
Это почему ещё?
Исключения работают, RTTI кстати тоже можно прикрутить, впрочем он очень редко нужен.

CC>>Overloading нужна по параметрам: http://www.cplusplus.com/doc/tutorial/functions2/

E>Ты можеш реализовать это с использованием gcc шного typeof и свитча внутри function-like макроса.
Спасибо, макросы кушайте сами.

CC>>Вы когда нибудь отлаживали макросы? В вложенные макросы? Я — отлаживал, больше не хочу.

E>Отлаживал и в огромных кол-вах. Надо просто уметь писать обобщенный код в макросах так, чтобы его было удобно отлаживать.
E>Для этого надо писать не "в лоб", а немного подумать.
Я в тот проект пришёл когда там линуксоиды со стажем все свои макросы уже написали. И занимались увлекательным делом — пытались с этим всем взлететь.

E>Думать можно начать с Степановского сишного прототипа STL.

Ссылка была бы просто замечательна.

CC>>Вот только не надо мне рассказывать про макросы. Я их давным давно наелся.

E>Ты просто не умееш с ними работать.

Можно я буду так отвечать всем, кто кричит что С++ плохой?

E>>>2. Автоматический контроль за временем жизни переменных, RAII

E>>>- Поскольку исключений нет, то и вернуть ошибку из конструктора невозможно.
CC>>Исключения есть, лично писал kernel код с их использованием.
E>Вот тут было интересно узнать подробности.
Речь естественно про винду, в которой озаботились чтобы люди могли просто ловить исключения в ядре. Причём ловятся все, включая access violation.

Throw, сгенеренный компилятором, вызывает _CxxThrowException, которая всегда бросает стандартный виндовый SEH. Ядрёная реализация это делает через RtlRaiseException.
Ловим __try / __except c EXCEPTION_EXECUTE_HANDLER. Бросаться стандартными классами исключений становится несколько сложнее. Можно прикрутить RTTI, можно сделать свои классы с блекджеком и всем что к нему прилагается.
Из-за этой разницы стандартные юзермодные библиотеки без обработки напильником в кернеле использовать не получается.

E>Особбенно совмещение неопределенных точек возврата с сишным кодом ядра.

Не понял про что ты?

E>Еще раз — ты просто не научился нормально работать с макросами.

Судя по тому, как линуксоиды со стажем мудохаются со своими же макросами — с ними никто не умеет работать.
Так что я не вижу смысла инвестировать свое время в напрасный труд.

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

CC>>Весь "системный геморрой" заключается в написании С++ stdlib для кернела с поддержкой SEH/Signal исключений. Очень сложно, да!
E>То что ты сказал — на мой взгляд, сделать в линуксе невозможно. Но ты можеш поделить ссылкой на пример, если таковой конечно существует.
Почему в винде это возможно (по факту) а в линухе вдруг нет?

E>Даже для юзер спэйса, где нет кучи ограничений, написание поддержки С++ является проблемой. Через сколько там лет после первого релиза в андроиде появилася порт libstdc++ — можеш напомнить ?

Спроси у авторов андроида почему у них руки из задницы.

E>>>Вам такой С++ вообще нужен ?

CC>>Мало того что нужен, мы его в винде давно уже используем.
E>Не потому ли виндой сейчас уже невозможно пользоваться?
Кому?

CC>>Только линуксоиды упираются и цепляются за духовные скрепы С.

E>Винда потихоньку помрет и туда ей дорога.
Дада, она уже чёрти сколько лет вот вот помрёт. Осталось подождать ещё совсем немного.
Re[9]: Достаточно ли знать С без знания С++ для устройства на работу?
От: CreatorCray  
Дата: 06.09.14 10:44
Оценка:
Здравствуйте, Andrew.W Worobow, Вы писали:

AWW>Так это другие исключения вообщето-то.

Это всё SEH, через них в винде вообще все исключения сделаны. Различают С++ exceptions от остальных чисто по ExceptionCode.

AWW>На полном и правильном С++ в ядре писать нельзя. Ибо 1 — не нужно. 2 — вредно, так как куча всего делается в тени.

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

AWW>Вообще у меня такое ощущение, что вы все тут про какой-то свой С++ говорите — С++ это всякие итераторы, исключения, потоки

Итераторы и потоки это просто поставляемые в комплекте с компилятором библиотеки.
Мы же говорим про свойства самого языка. Такие как упомянутые тобой исключения (которые в ядре таки работают), которые требуют поддержки компилятором.

AWW>да куча всего, что делает С++ удобным языком

Т.е. те же классы с RAII, overriding, templates и другие чисто языковые фичи — как раз то, о чём мы и говорим.

AWW>Но это не С++. ))

Ну вот опять начинается.
Если я в С++ программе не использую ни одну стандартную библиотеку но использую все фичи самого языка — перестанет ли она быть С++ программой?
Re[8]: Достаточно ли знать С без знания С++ для устройства на работу?
От: CreatorCray  
Дата: 06.09.14 10:44
Оценка: +1
Здравствуйте, Andrew.W Worobow, Вы писали:

AWW>если человек не занает всех жирностей С++, а использует только его подмножество, то это не знание С++, совсем!


Извини, но это классическая чушь теоретика.

Знание всего подмножества никого не интересует. Всем почему то надо умение решать задачу, используя данный инструмент.
Если для решения задачи какие то возможности инструмента никогда в жизни не пригодятся — никого не волнует, знаешь ты их или нет.
Поэтому никого не волнует, знаешь ли ты какой нибудь хитрожопый SFINAE трюк чтобы сделать blah, если это blah мало где вообще можно применить.
Вон, Страуструп сам свои знания С++ оценил как 8/10. Расскажи ему что он не знает С++, вместе поржём.
Re[11]: Достаточно ли знать С без знания С++ для устройства н
От: CreatorCray  
Дата: 06.09.14 10:44
Оценка: +2
Здравствуйте, Andrew.W Worobow, Вы писали:

AWW>Ну вот и чтобы все же что его писать (безопасный код) на СИ, требуется большая квалификация. ))

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

AWW>>>То есть СИ более низкоуровневый язык, а чем ниже уровень, тем ближе к "железу", тем выше нужна квалификация.

CC>>Чем сложнее инструмент тем выше нужна квалификация.
AWW>Ну а почему инструмент сложен? Самый простой это ассемблер — всего-то команды и адреса. Но писать на нем сложно.
Писать на нём не сложно, писать на нём громоздко. Повышается вероятность тупой ошибки в стиле "просмотрел" или "забыл".
С от ассемблера недалеко ушёл, впрочем он таким и задумывался.
В С++ добавились вещи, которые уже надо понимать как они устроены и работают, чтобы понимать их неявные эффекты.
В других языках уменьшили вероятность банальных ошибок, но появились возможности создания себе комплексных проблем при непонимании как работает его автоматика.

AWW> А "сложность" языка, это рамки которые тебе дают. Но не сложность освоения.

В С++ главное в изучении языка — опыт его использования и понимание как его автоматика работает "под капотом".

AWW>>>Если в языке много поводов сделать ошибок, это писать на нем без ошибок — нужна более высокая квалификация.

CC>>Печаль в том, что по факту на С говнокодят в стиле: скомпилировалось — значит ошибок нет.
AWW>Так в том, то и дело )) Что бы не говнокодить на СИ надо иметь высокую квалификацю
Скорее чистоплотность (посрал — смой выделил — освободи) и усидчивость (чтобы клепать boilerplates и не сойти с ума).
Примитивов в С кот наплакал, ничего реально сложного собрать из языковых конструкций нельзя.
В С++ нужен скилл понимания что именно нужно для решения задачи, иначе получается говнокод из мешанины языковых конструкций. Ярчайшим примером является секта укушенных Александреску, у которых вся программа — параметризуемый шаблон.

AWW>С++ тебе уже не даст той вольности, и наложит ограничения. ))

С++ позволяет делать всё то же что и С. Какие там ограничения?
Re[25]: Достаточно ли знать С без знания С++ для устройства
От: smeeld  
Дата: 06.09.14 11:31
Оценка:
Здравствуйте, eskimo82, Вы писали:

E>В том случае, про который я рассказываю, компилятор сгенерировал инициализирующий конструктор для таблицы замен знаменитого госта (что такое таблица замен и гост я расказывать не буду — ты все равно не поймеш),


Вы про crypto_tfm?
Re[2]: Достаточно ли знать С без знания С++ для устройства на работу?
От: smeeld  
Дата: 06.09.14 12:12
Оценка:
Здравствуйте, мыщъх, Вы писали:

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


В РФ просто подавляющее большинство программистов, есть не что иное как прораммистский планктон,
который не умеет ничего серьёзного кроме как обслуживать что разработали на западе, и понты резать.
Для последнего С++ подходит идеально. Когда в США и прочих европах пишут большое множество ОС, БД,
(посмотрите в код mysql-там, не что иное как С с классами и не более), компиляторов (посмотрите в код gcc,
LLVM-там, не что ино как С с классами и не более), в РФ смеются всем отделом над теми, кто вместо BOOST_FOREACH пишет for...
и думают, что Торавльдс тупее их, и не смог изучить С++ ( бред-то какой )

Кстати, мыщъх, а что там с Lisp-ом? Встречается где или нет?
Re[10]: Достаточно ли знать С без знания С++ для устройства
От: eskimo82  
Дата: 06.09.14 12:13
Оценка: :)
CC>>>Мне надо автоматический вызов конструкторов и деструкторов. Без макроёбства.
E>>Зачем тебе конструкторы, если ничего полезного в них ты сделать не сможеш по причиние невозможности вернуть ошибку ?
CC>Это почему ещё?
CC>Исключения работают, RTTI кстати тоже можно прикрутить, впрочем он очень редко нужен.
Как я понял из соседнего разговора — ты все смешал в кучу и не понимаеш, что SEH и плюсовые исключения — это совершенно разные вещи, хотя, конкретно в виндах у микрософтовского компилятора С++ исключения реализуются на базе SEH. Причем, чтобы это работало, внутри ядра должн быть закреплен фильтр SEH из userspace runtime который знает про формат сгенерированных твой любимой студией стековых фреймов. А надо сказать, этот формат для разных студий отличается. Ты хоть понимаеш каким диким говнокодом тебе придется осуществлять поддержку ++ ?

Что касается gcc то там С++ исключения реализованы по другому. Поэтому ты не сможеш просто-так собрать модуль ядра с поддержкой исключений. Более того, если ты вдруг собереш свой приплюсный виндово-ядровый код другим компилятором, или даже другой версией студии у тебя будет масса интересных сюрпризов. Ты вообще соображаеш какую говнояму ты таким образом выкапываеш для дальнейшей поддержки твоего кода ?

CC>>>Overloading нужна по параметрам: http://www.cplusplus.com/doc/tutorial/functions2/

E>>Ты можеш реализовать это с использованием gcc шного typeof и свитча внутри function-like макроса.
CC>Спасибо, макросы кушайте сами.
Ты даже не понял о чем я говорю.

CC>>>Вы когда нибудь отлаживали макросы? В вложенные макросы? Я — отлаживал, больше не хочу.

E>>Отлаживал и в огромных кол-вах. Надо просто уметь писать обобщенный код в макросах так, чтобы его было удобно отлаживать.
E>>Для этого надо писать не "в лоб", а немного подумать.
CC>Я в тот проект пришёл когда там линуксоиды со стажем все свои макросы уже написали. И занимались увлекательным делом — пытались с этим всем взлететь.
И, пока ты там не появился, весь в белом и на коне, ничего взлететь не могло. Ага, унылый сказочник.

E>>Думать можно начать с Степановского сишного прототипа STL.

CC>Ссылка была бы просто замечательна.
Спроси у гугла, ну или зайди на страницу Степанова — там есть ссылка.

CC>>>Вот только не надо мне рассказывать про макросы. Я их давным давно наелся.

E>>Ты просто не умееш с ними работать.
CC>
CC>Можно я буду так отвечать всем, кто кричит что С++ плохой?
А кто-то кричит что С++ плохой ? С++ — хороший, но внутри своей ниши, и не стоит пытаться тащить его во все без исключения места.

E>>>>2. Автоматический контроль за временем жизни переменных, RAII

E>>>>- Поскольку исключений нет, то и вернуть ошибку из конструктора невозможно.
CC>>>Исключения есть, лично писал kernel код с их использованием.
E>>Вот тут было интересно узнать подробности.
CC>Речь естественно про винду, в которой озаботились чтобы люди могли просто ловить исключения в ядре. Причём ловятся все, включая access violation.
Ты опять мешаеш всё в кучу, толи по глупости, толи из-за не понимания. Аксес виолайшен — это SEH исключение, оно из более низкого уровня абстракции. В языке С++ нет никаких access violation.

CC>Throw, сгенеренный компилятором, вызывает _CxxThrowException, которая всегда бросает стандартный виндовый SEH. Ядрёная реализация это делает через RtlRaiseException.

CC>Ловим __try / __except c EXCEPTION_EXECUTE_HANDLER. Бросаться стандартными классами исключений становится несколько сложнее.
CC>Из-за этой разницы стандартные юзермодные библиотеки без обработки напильником в кернеле использовать не получается.
Я знаком с этой кухней, поскольку лет 7-8 назад назад изучал возможность замены стандартного рантайма от студии на собственный.
_CxxThrowException — это функция из рантайма С++ предназначена для выполнения в user space mode.
RtlRaiseException — это опять же функция рантайма (но уже системного) и она предназначена для выполнения в user space mode.
При этом у С++ исключений есть специальный идентификатор, по которому его внутри фильтра можно отличить и разобрать фрейм сгенерированой студией. Но — формат этого фрейма а) немного разный для разных версий студии, б) недокументирован. А в твоем фильтре обработчике тебе надо разобрать этот формат, сделать unmangling типа RTTI и вызвать соответсвующие деструкторы.

CC>Можно прикрутить RTTI, можно сделать свои классы с блекджеком и всем что к нему прилагается.

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

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


E>>Особбенно совмещение неопределенных точек возврата с сишным кодом ядра.

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

E>>Еще раз — ты просто не научился нормально работать с макросами.

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

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

CC>>>Весь "системный геморрой" заключается в написании С++ stdlib для кернела с поддержкой SEH/Signal исключений. Очень сложно, да!
E>>То что ты сказал — на мой взгляд, сделать в линуксе невозможно. Но ты можеш поделить ссылкой на пример, если таковой конечно существует.
CC>Почему в винде это возможно (по факту) а в линухе вдруг нет?
Потому что в винде — это хак, в основе которого лежит использование того факта, что один единственый компилятор поддерживает механизм С++ исключений на основе системного механизма SEH.

E>>Даже для юзер спэйса, где нет кучи ограничений, написание поддержки С++ является проблемой. Через сколько там лет после первого релиза в андроиде появилася порт libstdc++ — можеш напомнить ?

CC>Спроси у авторов андроида почему у них руки из задницы.
Это у тебя руки из задницы.

E>>>>Вам такой С++ вообще нужен ?

CC>>>Мало того что нужен, мы его в винде давно уже используем.
E>>Не потому ли виндой сейчас уже невозможно пользоваться?
CC>Кому?
Нормальным разработчикам.

CC>>>Только линуксоиды упираются и цепляются за духовные скрепы С.

E>>Винда потихоньку помрет и туда ей дорога.
CC>Дада, она уже чёрти сколько лет вот вот помрёт. Осталось подождать ещё совсем немного.
А помрет она из-за таких вот горе-программистов.
Отредактировано 06.09.2014 12:23 eskimo82 . Предыдущая версия . Еще …
Отредактировано 06.09.2014 12:17 eskimo82 . Предыдущая версия .
Re[30]: Достаточно ли знать С без знания С++ для устройства
От: eskimo82  
Дата: 06.09.14 12:14
Оценка: -1 :)
E>>>>>>С чего ты взял что constexpr обязательно выполнится на этапе компиляции, а не после ушлого компилятора на этапе инициализации программы ?
CC>>>>>Потому что стандарт.
E>>>>И що ? Стандарт — стандартом, компиляторы его особо не придерживаются, особенно MS.
CC>>>Ну конечно же! Операция + может на самом деле делить, ведь "Стандарт — стандартом, компиляторы его особо не придерживаются".
E>>В С++ — вполне может.
CC>Полностью в соответствии со стандартом между прочим.
CC>Так что ты определись, придерживаются они стандарта или нет.
Компиляторостроители ? — Нет не придерживаются, об этом есть многочисленые факты.
Отредактировано 06.09.2014 12:15 eskimo82 . Предыдущая версия .
Re[12]: Достаточно ли знать С без знания С++ для устройства на работу?
От: -n1l-  
Дата: 06.09.14 12:26
Оценка:
Здравствуйте, CreatorCray, Вы писали:

N>> И вообще, разве невнимательность программиста — это проблема языка?

CC>Если бы люди были всегда внимательными то и память никогда бы не текла, ни по NULL поинтеру никто бы не ходил, все ошибочные ситуации правильно обрабатывались и проч. и проч.

Ну ошибки при компиляции не будет. Но это опять же не в языке дело.
Re[26]: Достаточно ли знать С без знания С++ для устройства
От: eskimo82  
Дата: 06.09.14 12:32
Оценка:
S>Вы про crypto_tfm?
Нет.
Re[25]: Достаточно ли знать С без знания С++ для устройства
От: Хон Гиль Дон Россия  
Дата: 06.09.14 12:34
Оценка:
Здравствуйте, eskimo82, Вы писали:

ХГД>>И на выяснение этого факта надо много часов с отладчиком и дизассемблером?

E>В том случае, про который я рассказываю, компилятор сгенерировал инициализирующий конструктор для таблицы замен знаменитого госта (что такое таблица замен и гост я расказывать не буду — ты все равно не поймеш), сгенерировал он его потому что мудрила, набивший эти таблицы сделал это с нарушением сишного синтаксиса, а сам код — это был как раз тот случай когда модуль к ядру был написан на С++ и собирался как С++ код. Как ты догадываешся, все внешние юнит-тесты прекрасно проходили. Но связь с другой стороной пропала — пакеты вроде ходят, но расшифроваться не могут.
E>А теперь, умник, обозначь свои действия в этой ситуации.

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

ХГД>>Ужас-ужас, а дустом не пробовали? В смысле, constexpr constructor тоже почему-то не годиццо?

E>С чего ты взял что constexpr обязательно выполнится на этапе компиляции, а не после ушлого компилятора на этапе инициализации программы ?

А с чего ты взял, что составными литералами твои структурки проинициализирутся не после ушлого компилятора на этапе инициализации программы ?
Одним из 33 полных кавалеров ордена "За заслуги перед Отечеством" является Геннадий Хазанов.
Re[26]: Достаточно ли знать С без знания С++ для устройства
От: eskimo82  
Дата: 06.09.14 12:47
Оценка:
ХГД>>>И на выяснение этого факта надо много часов с отладчиком и дизассемблером?
E>>В том случае, про который я рассказываю, компилятор сгенерировал инициализирующий конструктор для таблицы замен знаменитого госта (что такое таблица замен и гост я расказывать не буду — ты все равно не поймеш), сгенерировал он его потому что мудрила, набивший эти таблицы сделал это с нарушением сишного синтаксиса, а сам код — это был как раз тот случай когда модуль к ядру был написан на С++ и собирался как С++ код. Как ты догадываешся, все внешние юнит-тесты прекрасно проходили. Но связь с другой стороной пропала — пакеты вроде ходят, но расшифроваться не могут.
E>>А теперь, умник, обозначь свои действия в этой ситуации.

ХГД>Обиделся и начал хамить, сомневаться в квалификации и обсуждать личность собеседников? Ай-ай-ай, стыд и позор.

Будь добр, ответь на поставленый вопрос. Об остальном мы поговорим позже.
Re[27]: Достаточно ли знать С без знания С++ для устройства
От: Хон Гиль Дон Россия  
Дата: 06.09.14 13:50
Оценка:
Здравствуйте, eskimo82, Вы писали:

ХГД>>>>И на выяснение этого факта надо много часов с отладчиком и дизассемблером?

E>>>В том случае, про который я рассказываю, компилятор сгенерировал инициализирующий конструктор для таблицы замен знаменитого госта (что такое таблица замен и гост я расказывать не буду — ты все равно не поймеш), сгенерировал он его потому что мудрила, набивший эти таблицы сделал это с нарушением сишного синтаксиса, а сам код — это был как раз тот случай когда модуль к ядру был написан на С++ и собирался как С++ код. Как ты догадываешся, все внешние юнит-тесты прекрасно проходили. Но связь с другой стороной пропала — пакеты вроде ходят, но расшифроваться не могут.
E>>>А теперь, умник, обозначь свои действия в этой ситуации.

ХГД>>Обиделся и начал хамить, сомневаться в квалификации и обсуждать личность собеседников? Ай-ай-ай, стыд и позор.

E>Будь добр, ответь на поставленый вопрос.

Код в студию сначала. Равно как и версии всего софта, что использовался. Не охота гадать по каким-то мутным сказкам.

E>Об остальном мы поговорим позже.


Да о чем с тобой, хамлом, разговаривать
Одним из 33 полных кавалеров ордена "За заслуги перед Отечеством" является Геннадий Хазанов.
Re[12]: Достаточно ли знать С без знания С++ для устройства н
От: Andrew.W Worobow https://github.com/Worobow
Дата: 06.09.14 14:26
Оценка:
Здравствуйте, CreatorCray, Вы писали:

AWW>>Ну вот и чтобы все же что его писать (безопасный код) на СИ, требуется большая квалификация. ))

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




AWW>>>>То есть СИ более низкоуровневый язык, а чем ниже уровень, тем ближе к "железу", тем выше нужна квалификация.

CC>>>Чем сложнее инструмент тем выше нужна квалификация.
AWW>>Ну а почему инструмент сложен? Самый простой это ассемблер — всего-то команды и адреса. Но писать на нем сложно.
CC>Писать на нём не сложно, писать на нём громоздко. Повышается вероятность тупой ошибки в стиле "просмотрел" или "забыл".

Ну дык елы палы )) — вероятность ошибки и есть то что требует высокой квалиф. что ее не делать. ИМХА, это банальность и по-моему ты пытаешся сказать то что не получается. )) То-есть не надо искать черную кошку в черной комнате...

CC>С от ассемблера недалеко ушёл, впрочем он таким и задумывался.

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

Рискну просто спросить — С++ нравится? Недавно выучил? Класный язкык. Согласен. Но фанатизм не рационален.

AWW>> А "сложность" языка, это рамки которые тебе дают. Но не сложность освоения.

CC>В С++ главное в изучении языка — опыт его использования и понимание как его автоматика работает "под капотом".

Ага. Пошел я лучше в политику опять. ))
Извини.

CC>Скорее чистоплотность (посрал — смой выделил — освободи) и усидчивость (чтобы клепать boilerplates и не сойти с ума).


ага.

CC>С++ позволяет делать всё то же что и С. Какие там ограничения?


ну и тут согласен!
==
Не без обид, просто мы как дураки одно и тоже говорим... А зачем... ? Хз.
Не все кто уехал, предал Россию.
Re[8]: Достаточно ли знать С без знания С++ для устройства на работу?
От: Andrew.W Worobow https://github.com/Worobow
Дата: 06.09.14 14:27
Оценка:
Здравствуйте, CreatorCray, Вы писали:

CC>Не знаком, но вдоволь наобщался с до боли похожими персонажами.


Все, ... абсолютно все,... люди индивидуальны, и никогда не следует обобщать.
Не все кто уехал, предал Россию.
Re[12]: Достаточно ли знать С без знания С++ для устройства н
От: smeeld  
Дата: 06.09.14 15:17
Оценка:
Здравствуйте, CreatorCray, Вы писали:

CC>В С++ добавились вещи, которые уже надо понимать как они устроены и работают, чтобы понимать их неявные эффекты.

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

Смею доложить, что Вы не правильно поняли стандарт С++. Его суть. По своей сути весь стандарт-повествование
о том как съесть фугу, и не откинуть при этом ласты. Да, там много схем, неявно реализуемых конструкциями синтаксиса,
которые описываются несколькими страницами занудного повествования. Но, если вникнуть в их суть, то выясняется, что они все не есть
схемы, которые обеспечивают скомпиленному приложению какие-то особые качества скомпиленного кода, связанные
с повышением безопасности, или производительности кода, а есть костыли и подпорки, которыми снимают откровенные проколы в языке,
корень которых лежит в самом дизайне языка, и подобных проблем нет в других языках. Чтоб в это убедится в том что все якобы крутые,
предоставляющие большие возможности схемы, реализуемые неявно явными синтаксическими конструкциями, просто болтовня теоретиков,
внимательно поизучайте, скомпиленный с упомянутых конструкций, код. Сравните с тем, что получается с Сишного и любого другого, хоть с Lisp-a.
У меня после таких исследований появилось впечтление что С++ — это какой-то очередной мыльный пузырь, раздутый N-ым количество академиков.
Ничего, кроме некоторых удобств и упрощений для разработчика, как уже говорил Andrew.W Worobow, С++ на самом деле не предоставляет
в своей реальной имплементации существующими компиляторами.
Re[3]: Достаточно ли знать С без знания С++ для устройства на работу?
От: sergey2b ЮАР  
Дата: 06.09.14 16:13
Оценка:
Здравствуйте, smeeld, Вы писали:

S>Кстати, мыщъх, а что там с Lisp-ом? Встречается где или нет?


Встречаеться в CAD, у меня недавно был проект портировать 15k строк с lisp на C

относительно топика востребованности С
в 3 компаниях куда меня нанимали как С++ программиста код оказался на С или на С с классами


помему используют С тк он проше чем С++ для обучения инженеров
на код без слез невзглянеш, когда тут кто то жаловаллся что в проекте в одном файле 10k строк то могу точно сказать не видели они настояшей американской жесте по размеру функий и файлов в строках


раз здесь собрались матерые Сишники
подскажите пожалуйста как лучше решить такую задачу на С
нужен динамический список (лучше array но можно list)
который динамически меняет размер от 0 до 0.5G +- каждые несколько секунд
софтина серверная 24x7, просто зарезервировать полгига (может не хватить) на все время работы программы незлья пользователь не поймет этого
Re[13]: Достаточно ли знать С без знания С++ для устройства н
От: CreatorCray  
Дата: 06.09.14 21:22
Оценка:
Здравствуйте, Andrew.W Worobow, Вы писали:

CC>>Писать на нём не сложно, писать на нём громоздко. Повышается вероятность тупой ошибки в стиле "просмотрел" или "забыл".

AWW>Ну дык елы палы )) — вероятность ошибки и есть то что требует высокой квалиф.
Да не квалификация это, просто внимательности и усидчивости. А это такие свойства что даже у квалифицированного спеца могут заканчиваться время от времени.

AWW>Рискну просто спросить — С++ нравится?

Всё относительно.

AWW> Недавно выучил?

Лет 15 уже как пишу на С++ и С за деньги.

AWW> Не без обид, просто мы как дураки одно и тоже говорим... А зачем... ? Хз.

Ну не обижайся, просто у нас видимо разное понимание термина "квалификация".
Re[9]: Достаточно ли знать С без знания С++ для устройства на работу?
От: CreatorCray  
Дата: 06.09.14 21:22
Оценка:
Здравствуйте, Andrew.W Worobow, Вы писали:

CC>>Не знаком, но вдоволь наобщался с до боли похожими персонажами.

AWW>Все, ... абсолютно все,... люди индивидуальны, и никогда не следует обобщать.
В каких то вещах — да, но в основе разница невелика.
Re[11]: Достаточно ли знать С без знания С++ для устройства
От: CreatorCray  
Дата: 06.09.14 21:22
Оценка:
Здравствуйте, eskimo82, Вы писали:

E>Как я понял из соседнего разговора — ты все смешал в кучу и не понимаеш, что SEH и плюсовые исключения — это совершенно разные вещи

E>хотя, конкретно в виндах у микрософтовского компилятора С++ исключения реализуются на базе SEH.
Напомню: мы вели разговор о практической примененимости С++ в ядре, что требует тесной интеграции с предоставляемым ОС функционалом. В винде такой функционал позволяет использовать С++ исключения в ядре, т.к. исключения виндовые компиляторы традиционно раелизуют через SEH.
Рассматривать реализацию в отрыве от ОС просто не имеет смысла.

E> Причем, чтобы это работало, внутри ядра должн быть закреплен фильтр SEH из userspace runtime который знает про формат сгенерированных твой любимой студией стековых фреймов.

Userspace тут вообще ни при делах, в DDK свой рантайм и свой компилятор. Драйвера собираются им.

E> А надо сказать, этот формат для разных студий отличается.

Да всё равно, unwind производится кодом этого же модуля, исключения наружу выпускать нельзя — будет совершенно законный BSOD.

E> Ты хоть понимаеш каким диким говнокодом тебе придется осуществлять поддержку ++ ?

Ещё раз, у нас это вообще то уже лет пять назад работало в production.

E>Что касается gcc то там С++ исключения реализованы по другому. Поэтому ты не сможеш просто-так собрать модуль ядра с поддержкой исключений.

Кстати, а чем же так отличается GCC реализация что в линуксовом кернеле её нельзя использовать для бросания исключений внутри модуля?

E> Более того, если ты вдруг собереш свой приплюсный виндово-ядровый код другим компилятором, или даже другой версией студии у тебя будет масса интересных сюрпризов.

В винде драйвера собираются с помощью DDK, там вообще свой компилятор идёт в комплекте.

E> Ты вообще соображаеш какую говнояму ты таким образом выкапываеш для дальнейшей поддержки твоего кода ?

Я прекрасно понимаю как оно внутри работает. 4 года поддерживали, никаких проблем.

E>Ты даже не понял о чем я говорю.

Про макросы.

CC>>Я в тот проект пришёл когда там линуксоиды со стажем все свои макросы уже написали. И занимались увлекательным делом — пытались с этим всем взлететь.

E>И, пока ты там не появился, весь в белом и на коне, ничего взлететь не могло. Ага, унылый сказочник.
Нет, я занимался другими вещами, попутно наблюдая за их танцами с саблями.

E>>>Ты просто не умееш с ними работать.

CC>>Можно я буду так отвечать всем, кто кричит что С++ плохой?
E>А кто-то кричит что С++ плохой?
Ну вот например недалеко товарищ пишет:

Имеенно тогда увидел его уродливость С++. С++-кривое, уродливое безобразие.


E>Ты опять мешаеш всё в кучу, толи по глупости, толи из-за не понимания. Аксес виолайшен — это SEH исключение, оно из более низкого уровня абстракции. В языке С++ нет никаких access violation.

Ты ж сам только что писал что в винде вся исплементация рантайма для исключений сделана через SEH, забыл? Поэтому что SEH что С++ исключение в ядре суть одно и то же, только с разными параметрами.

E>_CxxThrowException — это функция из рантайма С++ предназначена для выполнения в user space mode.

Если пишешь в кернеле — там свой рантайм.

E>RtlRaiseException — это опять же функция рантайма (но уже системного) и она предназначена для выполнения в user space mode.

ZwRaiseException. Писал по памяти.

E>При этом у С++ исключений есть специальный идентификатор, по которому его внутри фильтра можно отличить и разобрать фрейм сгенерированой студией.

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

CC>>Можно прикрутить RTTI, можно сделать свои классы с блекджеком и всем что к нему прилагается.

E>Тебе это придется делать в любом случае — что бы понять что за исключение ты поймал и надо ли продолжать раскрутку стека.
__except позволяет решать этот вопрос без RTTI.

E>Ты хоть понимаеш сколько малокоректного говнокда из полухаков это стоит ? Такое достойно только зеленого юнца воображающего себя кулхацкером. На самом деле — это даже не смех, а сплошные слезы глядя на этого горе-кулхакера.

На сколько поинтов выросло твоё ЧСВ при написании этой фразы?

E>>>Особбенно совмещение неопределенных точек возврата с сишным кодом ядра.

CC>>Не понял про что ты?
E>У сишного кода есть четко обозначеные точки возврата "наверх". Использование исключений дает неопределенныые точки возврата — раскрутка стека может произойти в любом месте. Сишный код такого эээ несколько не ожидает.
Ещё раз, исключение не должно покинуть модуль.

E>Для начала тебе надо самому понять почему так, как ты описал выше, делать нельзя. К сожалению, ты неквалифицирован.

+10 к ЧСВ?

E>Потому что в винде — это хак

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

E>в основе которого лежит использование того факта, что один единственый компилятор поддерживает механизм С++ исключений на основе системного механизма SEH.

В линуксе же таких возможностей и вовсе нету.

E>Это у тебя руки из задницы.

+10 к ЧСВ?

E>Нормальным разработчикам.

Под нормальным разработчиком ты явно понимаешь себя.
+100 к ЧСВ?

CC>>Дада, она уже чёрти сколько лет вот вот помрёт. Осталось подождать ещё совсем немного.

E>А помрет она из-за таких вот горе-программистов.
Что то всё никак не помирает, что мы делаем не так?
Re[4]: Достаточно ли знать С без знания С++ для устройства на работу?
От: smeeld  
Дата: 06.09.14 22:42
Оценка: -1
Здравствуйте, sergey2b, Вы писали:

S>нужен динамический список (лучше array но можно list)

S>который динамически меняет размер от 0 до 0.5G +- каждые несколько секунд
S>софтина серверная 24x7, просто зарезервировать полгига (может не хватить) на все время работы программы незлья пользователь не поймет этого
Можно массив с эффектом непрерывного array только запись/чтение, управление через функции.

#define MASS_NODE (2<<20)
#define NODE_NUMBER (2<<9)
#define MAX_SIZE ((2<<29)-(2<<20))

size_t grow_buffer(void* glob_ptr, size_t sz){
unsigned long* tmp=(unsigned long*)glob_ptr, *nxt;
size_t current_size=*tmp;
size_t mas=MASS_NODE;
void* p;
if((sz > MAX_SIZE) || (current_size >= sz)) return current_size;
while(current_size < sz){
current_size+=mas;printf("RS %d Sz==%d\n", mas, sz);
nxt=tmp+current_size/mas;
p=malloc(mas);
if(!p){current_size-=mas; break; };
*nxt=(unsigned long)p;
};
*tmp=current_size;
return current_size;
};

size_t reduce_buffer(void* glob_ptr, size_t sz){
unsigned long* tmp=(unsigned long*)glob_ptr, *nxt;
size_t current_size=*tmp;
size_t mas=MASS_NODE;
void* p;

while(current_size>sz){
nxt=tmp+current_size/mas;
p=(void*) *nxt;
free(p);
current_size-=mas;
};
*tmp=current_size;
return current_size;
};

void* alloc_buffer(size_t sz){
unsigned long* glob_ptr;
void* p=malloc(NODE_NUMBER*sizeof(unsigned long));
if(!p) return NULL;
glob_ptr=(unsigned long*)p;
*glob_ptr=0;
if(grow_buffer(p, sz) < sz) return NULL;
return p;
};

free_buffer(void* p){
(void) reduce_buffer(p, 0);
free(p);
};
size_t read_from(void* dst, void* glob_ptr, size_t offset, size_t sz){
unsigned long* tmp=(unsigned long*)glob_ptr;
void* src;
tmp++;
size_t current_size=*tmp, mas=MASS_NODE, tail=offset, count=0, step;
if((offset>current_size) || (sz > (current_size-offset))) return 0;
src=(void*) *(tmp+tail/mas);
step=tail%mas;
src+=step;
step=sz-count;
do{
step=(step < mas) ? step : mas;
memcpy(dst+count, src, step);
tail+=step;
count+=step;
src=(void*) *(tmp+tail/mas);
step=sz-count;
}while(step);
return count;
};

size_t write_to(void* src, void* glob_ptr, size_t offset, size_t sz){
unsigned long* tmp=(unsigned long*)glob_ptr;
void* dst;
size_t current_size=*tmp, mas=MASS_NODE, tail=offset, count=0, step;
if((offset>current_size) || (sz > (current_size-offset))) return 0;
tmp++;
dst=(void*) *(tmp+tail/mas);
step=tail%mas;
src+=step;
step=sz-count;
do{
step=(step < mas) ? step : mas;
memcpy(dst, src+count, step);
tail+=step;
count+=step;
dst=(void*) *(tmp+tail/mas);
step=sz-count;
}while(step);
return count;
};

size_t current_size(void* glob_ptr){
unsigned long* tmp=(unsigned long*)glob_ptr;
return *tmp;
};
Re[5]: Достаточно ли знать С без знания С++ для устройства на работу?
От: Abyx Россия  
Дата: 06.09.14 23:38
Оценка:
Здравствуйте, smeeld, Вы писали:

у нас тут есть специальный тег для кода, если ты не знал.
In Zen We Trust
Re[12]: Достаточно ли знать С без знания С++ для устройства
От: eskimo82  
Дата: 07.09.14 01:39
Оценка:
E>>Как я понял из соседнего разговора — ты все смешал в кучу и не понимаеш, что SEH и плюсовые исключения — это совершенно разные вещи
E>>хотя, конкретно в виндах у микрософтовского компилятора С++ исключения реализуются на базе SEH.
CC>Напомню: мы вели разговор о практической примененимости С++ в ядре, что требует тесной интеграции с предоставляемым ОС функционалом. В винде такой функционал позволяет использовать С++ исключения в ядре, т.к. исключения виндовые компиляторы традиционно раелизуют через SEH.
CC>Рассматривать реализацию в отрыве от ОС просто не имеет смысла.
C++ традиционно не привязан к какой либо ОС.

E>> Причем, чтобы это работало, внутри ядра должн быть закреплен фильтр SEH из userspace runtime который знает про формат сгенерированных твой любимой студией стековых фреймов.

CC>Userspace тут вообще ни при делах, в DDK свой рантайм и свой компилятор. Драйвера собираются им.

E>> А надо сказать, этот формат для разных студий отличается.

CC>Да всё равно, unwind производится кодом этого же модуля, исключения наружу выпускать нельзя — будет совершенно законный BSOD.
Проблема в том что собственный unwind (а я так понял что у вас он собственный) невозможно сделать лучше чем сделал производитель компилятора (который более хорошо знаком с его особенностями). Тем более для виндусовых компиляторов практически всё остается недокументированым.

E>> Ты хоть понимаеш каким диким говнокодом тебе придется осуществлять поддержку ++ ?

CC>Ещё раз, у нас это вообще то уже лет пять назад работало в production.
То что это как-то работало в момент написания — нет сомнений. Более интересный вопрос — а сейчас то работает ? Если пересобрать другой версией компилятора — будет работать ?

E>>Что касается gcc то там С++ исключения реализованы по другому. Поэтому ты не сможеш просто-так собрать модуль ядра с поддержкой исключений.

CC>Кстати, а чем же так отличается GCC реализация что в линуксовом кернеле её нельзя использовать для бросания исключений внутри модуля?
Надо писать собственную реализацию раскрутки стека. Учитывая то, что ABI С++ постоянно нестабилен (как в винде, так и в линуксах), то поддержка этого кода для разных версий gcc становится проблемой. В тех же виндах стековый фрейм с информацией о catch меняется от версии к версии — каике-то поля добавляются, какие-то исчезают.
Вторая проблема, как я уже говорил, состоит в сопряжении уже существующего сишного кода с исключениями. Сишные код не предполагает что точка возврата может произойти в любом месте, и поэтому в нем изначально нет никакой exception-safety.

E>> Более того, если ты вдруг собереш свой приплюсный виндово-ядровый код другим компилятором, или даже другой версией студии у тебя будет масса интересных сюрпризов.

CC>В винде драйвера собираются с помощью DDK, там вообще свой компилятор идёт в комплекте.
Это компилятор С++ ? Он развивается ? У него одна единственая версия ?

E>> Ты вообще соображаеш какую говнояму ты таким образом выкапываеш для дальнейшей поддержки твоего кода ?

CC>Я прекрасно понимаю как оно внутри работает. 4 года поддерживали, никаких проблем.
А 10 лет сможете поддерживать ?

E>>Ты даже не понял о чем я говорю.

CC>Про макросы.
Про макросы, но про немного другие макросы, чем ты себе представляеш.

CC>>>Я в тот проект пришёл когда там линуксоиды со стажем все свои макросы уже написали. И занимались увлекательным делом — пытались с этим всем взлететь.

E>>И, пока ты там не появился, весь в белом и на коне, ничего взлететь не могло. Ага, унылый сказочник.
CC>Нет, я занимался другими вещами, попутно наблюдая за их танцами с саблями.
Т.е. ты не знаком с деталями танцев, а делаеш вывод глядя со стороны ?

E>>>>Ты просто не умееш с ними работать.

CC>>>Можно я буду так отвечать всем, кто кричит что С++ плохой?
E>>А кто-то кричит что С++ плохой?
CC>Ну вот например недалеко товарищ пишет:
CC>

Имеенно тогда увидел его уродливость С++. С++-кривое, уродливое безобразие.

Он пишет про уродливость (в каком-то его понимании), а не про то, что язык плохой.

E>>Ты опять мешаеш всё в кучу, толи по глупости, толи из-за не понимания. Аксес виолайшен — это SEH исключение, оно из более низкого уровня абстракции. В языке С++ нет никаких access violation.

CC>Ты ж сам только что писал что в винде вся исплементация рантайма для исключений сделана через SEH, забыл? Поэтому что SEH что С++ исключение в ядре суть одно и то же, только с разными параметрами.
Нет. Ты допускаеш грубую ошибку — путая уровни абстракции — либо ты пишеш на С++ и не знаеш ни о каких access violation, либо ты пишеш на каком-то другом, своем собственном, языке.
Это тоже самое, например, что в коде на С++ исилено использовать низкоуровневые функции Си, с соответсвующими следствиями.

E>>_CxxThrowException — это функция из рантайма С++ предназначена для выполнения в user space mode.

CC>Если пишешь в кернеле — там свой рантайм.
Может быть. По памяти — студия вообще может дергать несколько вариантов, что-то вроде _CxxThrowException, _CxxThrowExcept3, etc..

E>>RtlRaiseException — это опять же функция рантайма (но уже системного) и она предназначена для выполнения в user space mode.

CC>ZwRaiseException. Писал по памяти.

E>>При этом у С++ исключений есть специальный идентификатор, по которому его внутри фильтра можно отличить и разобрать фрейм сгенерированой студией.

CC>В случае когда пишешь драйвер используется компилятор и его либы из DDK. Сама студия уже особой роли не играет.
Это не зависит от используемого компилятора, т.к. этот идентификатор стандартизирован внутри микрософта. А вот сгенерированые фреймы имеют кучу различных версий свой структуры.

CC>>>Можно прикрутить RTTI, можно сделать свои классы с блекджеком и всем что к нему прилагается.

E>>Тебе это придется делать в любом случае — что бы понять что за исключение ты поймал и надо ли продолжать раскрутку стека.
CC>__except позволяет решать этот вопрос без RTTI.
Этот вариант даже еще хуже чем собственый unwind. В первом случае — у тебя хотя бы весь бойлерплайтный код вынесен в одно место. В этом же случае — он размазан тонким слоем по всему телу драйвера. Причем получаемый вариант — это совсем даже не С++, а непонятный набор костыликов и веревочек, играть с которыми нужно по нестандартным правилам, известным лишь только автору. Отладка макросов, даже криво написанных, по сравнению с отладкой такого спагети может оказаться милым цветочком.

E>>Ты хоть понимаеш сколько малокоректного говнокда из полухаков это стоит ? Такое достойно только зеленого юнца воображающего себя кулхацкером. На самом деле — это даже не смех, а сплошные слезы глядя на этого горе-кулхакера.

CC>На сколько поинтов выросло твоё ЧСВ при написании этой фразы?
Ни на сколько, просто констатирую факт.

E>>>>Особбенно совмещение неопределенных точек возврата с сишным кодом ядра.

CC>>>Не понял про что ты?
E>>У сишного кода есть четко обозначеные точки возврата "наверх". Использование исключений дает неопределенныые точки возврата — раскрутка стека может произойти в любом месте. Сишный код такого эээ несколько не ожидает.
CC>Ещё раз, исключение не должно покинуть модуль.

E>>Для начала тебе надо самому понять почему так, как ты описал выше, делать нельзя. К сожалению, ты неквалифицирован.

CC>+10 к ЧСВ?
Архитектура, которую ты описал, состоит из костылей и палочек. И это совсем даже не С++.

E>>Потому что в винде — это хак

CC>Т.е. решение использовать готовый и прекрасно работающий системный механизм исключений для реализации поддержки языковых исключений в рантайме это хак?
Хаком является пришитые белыми нитками С++ исключения внутри ядра. Причем в твоем варианте пришиты очень безобразно.

CC>Ах ну да, надо было написать свой, ни с чем не совместимый.

Трудолюбивый дурак порой даже хуже диверсанта.

E>>в основе которого лежит использование того факта, что один единственый компилятор поддерживает механизм С++ исключений на основе системного механизма SEH.

CC>В линуксе же таких возможностей и вовсе нету.
См. выше.

E>>Это у тебя руки из задницы.

CC>+10 к ЧСВ?
Просто констатирую факт.

E>>Нормальным разработчикам.

CC>Под нормальным разработчиком ты явно понимаешь себя.
CC>+100 к ЧСВ?

CC>>>Дада, она уже чёрти сколько лет вот вот помрёт. Осталось подождать ещё совсем немного.

E>>А помрет она из-за таких вот горе-программистов.
CC>Что то всё никак не помирает, что мы делаем не так?
Вы всё делаете так, просто надо удвоить усилия.
Re[28]: Достаточно ли знать С без знания С++ для устройства
От: eskimo82  
Дата: 07.09.14 01:47
Оценка: -3
ХГД>>>Обиделся и начал хамить, сомневаться в квалификации и обсуждать личность собеседников? Ай-ай-ай, стыд и позор.
E>>Будь добр, ответь на поставленый вопрос.

ХГД>Код в студию сначала. Равно как и версии всего софта, что использовался. Не охота гадать по каким-то мутным сказкам.

В этом коде несколько миллионов строк, над ним одновременно работают больше сотни человек. Ты столько прочесть не сможеж.

Вот тебе воодная:
На устройстве — несколько дырок ефернета, немного юсб и разьем питания.
Собрали сборку — ничего не работает. Зайти по ssh невозможно.
Будь добр, озвучь свои дальнейшие действия.


E>>Об остальном мы поговорим позже.

ХГД>Да о чем с тобой, хамлом, разговаривать
Досвидание, засранец.
Re[4]: Достаточно ли знать С без знания С++ для устройства н
От: eskimo82  
Дата: 07.09.14 01:59
Оценка:
S>раз здесь собрались матерые Сишники
S>подскажите пожалуйста как лучше решить такую задачу на С
S>нужен динамический список (лучше array но можно list)
S>который динамически меняет размер от 0 до 0.5G +- каждые несколько секунд
Можно подробнее — что за список ?

S>софтина серверная 24x7, просто зарезервировать полгига (может не хватить) на все время работы программы незлья пользователь не поймет этого

Что за система ? Можно зарезервировать часть виртуального адресного пространства, но не коммитить физические страницы.
Линукс, кстати, так и делает — пока в страницу ничего не запишеш, её и как бы и нет. Так что там можеш спокойно аллок сделать и на полгига, но если физической памяти (вместе со свопом) хватать не будет то могут и прибить.

Если просто нужен большой массив — можно приметить патерн "разреженный массив". Т.е. весь массив разбивается на страницы (или на более глубокую иерархию) и аллоцирууются только нужные страницы. Кстати, одну из реализаций можно подсмотреть в ядре — там есть специальный обьект.
Если массив "дышит" с какой-то переиодичностью, то хвостовые страницы можно отдавать системе с некотрым таймаутом, большим чем эта периодичность.
Отредактировано 07.09.2014 2:08 eskimo82 . Предыдущая версия . Еще …
Отредактировано 07.09.2014 2:06 eskimo82 . Предыдущая версия .
Re[13]: Достаточно ли знать С без знания С++ для устройства
От: CreatorCray  
Дата: 07.09.14 06:14
Оценка:
Здравствуйте, eskimo82, Вы писали:

CC>>Рассматривать реализацию в отрыве от ОС просто не имеет смысла.

E>C++ традиционно не привязан к какой либо ОС.
Подкапотные детали рантайма — привязаны.

CC>>Ещё раз, у нас это вообще то уже лет пять назад работало в production.

E>То что это как-то работало в момент написания — нет сомнений. Более интересный вопрос — а сейчас то работает ? Если пересобрать другой версией компилятора — будет работать ?
Версии DDK меняли один раз, когда W2012 вышла. Работало.

E>>>Что касается gcc то там С++ исключения реализованы по другому. Поэтому ты не сможеш просто-так собрать модуль ядра с поддержкой исключений.

CC>>Кстати, а чем же так отличается GCC реализация что в линуксовом кернеле её нельзя использовать для бросания исключений внутри модуля?
E>Надо писать собственную реализацию раскрутки стека. Учитывая то, что ABI С++ постоянно нестабилен (как в винде, так и в линуксах), то поддержка этого кода для разных версий gcc становится проблемой. В тех же виндах стековый фрейм с информацией о catch меняется от версии к версии — каике-то поля добавляются, какие-то исчезают.
Не надо, она уже написана микрософтом и не менялась почти лет 10 как.
В Win x64 больше нет стековых фреймов для exceptions: http://msdn.microsoft.com/en-us/library/8ydc79k6.aspx
Там же кстати можно покликать на версию студии и убедиться что никакой разницы нету.

E>Вторая проблема, как я уже говорил, состоит в сопряжении уже существующего сишного кода с исключениями. Сишные код не предполагает что точка возврата может произойти в любом месте, и поэтому в нем изначально нет никакой exception-safety.

У нас нет сишного кода. Что за код вызывает нас — нас не интересует, потому как любые исключения из нашего модуля мы не выпускаем, ибо будет гарантированный бадабум.

E>>> Более того, если ты вдруг собереш свой приплюсный виндово-ядровый код другим компилятором, или даже другой версией студии у тебя будет масса интересных сюрпризов.

CC>>В винде драйвера собираются с помощью DDK, там вообще свой компилятор идёт в комплекте.
E>Это компилятор С++ ? Он развивается ? У него одна единственая версия ?
Да, да, нет.

E>>> Ты вообще соображаеш какую говнояму ты таким образом выкапываеш для дальнейшей поддержки твоего кода ?

CC>>Я прекрасно понимаю как оно внутри работает. 4 года поддерживали, никаких проблем.
E>А 10 лет сможете поддерживать?
Лехко. Впрочем тот проект уже закрыт ибо нас купила не MS.

E>>>Ты даже не понял о чем я говорю.

CC>>Про макросы.
E>Про макросы, но про немного другие макросы, чем ты себе представляеш.
Те макросы определяются не через #define?

E>>>И, пока ты там не появился, весь в белом и на коне, ничего взлететь не могло. Ага, унылый сказочник.

CC>>Нет, я занимался другими вещами, попутно наблюдая за их танцами с саблями.
E>Т.е. ты не знаком с деталями танцев, а делаеш вывод глядя со стороны ?
Ещё как знаком, ибо дебажил код с результатами их трудов.

CC>>

Имеенно тогда увидел его уродливость С++. С++-кривое, уродливое безобразие.

E>Он пишет про уродливость (в каком-то его понимании), а не про то, что язык плохой.
Т.е. "кривое, уродливое безобразие" означает что язык хороший?

E>>>Ты опять мешаеш всё в кучу, толи по глупости, толи из-за не понимания. Аксес виолайшен — это SEH исключение, оно из более низкого уровня абстракции. В языке С++ нет никаких access violation.

CC>>Ты ж сам только что писал что в винде вся исплементация рантайма для исключений сделана через SEH, забыл? Поэтому что SEH что С++ исключение в ядре суть одно и то же, только с разными параметрами.
E>Нет. Ты допускаеш грубую ошибку — путая уровни абстракции — либо ты пишеш на С++ и не знаеш ни о каких access violation, либо ты пишеш на каком-то другом, своем собственном, языке.
Я системщик. Для меня "уровни абстракции" которые надо учитывать и использовать простираются вплоть до железа. Поэтому знать обо всём что происходит неявно — моя прямая обязанность.

E>Это тоже самое, например, что в коде на С++ исилено использовать низкоуровневые функции Си, с соответсвующими следствиями.

Что такое "низкоуровневые функции Си" и почему это их вдруг нельзя вызывать?

E>А вот сгенерированые фреймы имеют кучу различных версий свой структуры.

Судя по докам они с VS2005 не менялись.

CC>>>>Можно прикрутить RTTI, можно сделать свои классы с блекджеком и всем что к нему прилагается.

E>>>Тебе это придется делать в любом случае — что бы понять что за исключение ты поймал и надо ли продолжать раскрутку стека.
CC>>__except позволяет решать этот вопрос без RTTI.
E>Этот вариант даже еще хуже чем собственый unwind. В первом случае — у тебя хотя бы весь бойлерплайтный код вынесен в одно место.
Я тебе дал два варианта: вернуть RTTI или сделать через except если твоему коду достаточно всё ловить через аналог catch(...)

E>>>Ты хоть понимаеш сколько малокоректного говнокда из полухаков это стоит ? Такое достойно только зеленого юнца воображающего себя кулхацкером. На самом деле — это даже не смех, а сплошные слезы глядя на этого горе-кулхакера.

CC>>На сколько поинтов выросло твоё ЧСВ при написании этой фразы?
E>Ни на сколько, просто констатирую факт.
Не надо ложной скромности!

E>>>Нормальным разработчикам.

CC>>Под нормальным разработчиком ты явно понимаешь себя.
CC>>+100 к ЧСВ?
Значит угадал.
Re[29]: Достаточно ли знать С без знания С++ для устройства
От: CreatorCray  
Дата: 07.09.14 06:14
Оценка:
Здравствуйте, eskimo82, Вы писали:

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

E>Собрали сборку — ничего не работает. Зайти по ssh невозможно.
E>Будь добр, озвучь свои дальнейшие действия.

Принудительно крэшай через serial debug port, смотри потом в дамп.
Или у вас этой возможности нету?
Re[12]: Достаточно ли знать С без знания С++ для устройства
От: Andrew.W Worobow https://github.com/Worobow
Дата: 07.09.14 08:29
Оценка:
Здравствуйте, CreatorCray, Вы писали:

CC>Userspace тут вообще ни при делах, в DDK свой рантайм и свой компилятор. Драйвера собираются им.


Ага, чествуется эксперт. Извини — без обид, но нет DDK уже как сто лет, есть WDK. И идет он такой с висты.
ИМХА больше тут тереть нечего. О чем мы говорим?
Не все кто уехал, предал Россию.
Re[13]: Достаточно ли знать С без знания С++ для устройства
От: CreatorCray  
Дата: 07.09.14 08:36
Оценка:
Здравствуйте, Andrew.W Worobow, Вы писали:

AWW>Ага, чествуется эксперт.

Ну всё, ты меня раскусил, вот тебе пирожок.

AWW> Извини — без обид, но нет DDK уже как сто лет, есть WDK. И идет он такой с висты.

Да мне пофигу. Я им пользоваться начал ещё когда он назывался DDK. И ставлю я их в пути типа D:\WinDDK\7600.16385.1\

AWW>ИМХА больше тут тереть нечего.

Ну так проходи дальше тогда.

AWW> О чем мы говорим?

Судя по написанному тобой — обо мне.
Re[6]: Достаточно ли знать С без знания С++ для устройства на работу?
От: smeeld  
Дата: 07.09.14 09:03
Оценка:
Здравствуйте, Abyx, Вы писали:

A>у нас тут есть специальный тег для кода, если ты не знал.


Извиняйте, знаю про тег, но он, похоже, не работает: на предпосмотре всё сбилось в одну
строчку, без перевода строк. Разбираться не стал, некогда, отправил так.
Re[29]: Достаточно ли знать С без знания С++ для устройства
От: Хон Гиль Дон Россия  
Дата: 07.09.14 10:13
Оценка: +1
Здравствуйте, eskimo82, Вы писали:

ХГД>>Код в студию сначала. Равно как и версии всего софта, что использовался. Не охота гадать по каким-то мутным сказкам.

E>В этом коде несколько миллионов строк, над ним одновременно работают больше сотни человек. Ты столько прочесть не сможеж.

E>Вот тебе воодная:

E>На устройстве — несколько дырок ефернета, немного юсб и разьем питания.
E>Собрали сборку — ничего не работает. Зайти по ssh невозможно.
E>Будь добр, озвучь свои дальнейшие действия.

Ты, милок, рамсы не попутал? Ты кто ваще такой чтобы мне экзамены устраивать? Усохни.
Одним из 33 полных кавалеров ордена "За заслуги перед Отечеством" является Геннадий Хазанов.
Re[30]: Достаточно ли знать С без знания С++ для устройства
От: BulatZiganshin  
Дата: 07.09.14 15:31
Оценка: :))
Здравствуйте, Хон Гиль Дон, Вы писали:

ХГД>Ты, милок, рамсы не попутал? Ты кто ваще такой чтобы мне экзамены устраивать? Усохни.


вот мы и выяснили какой язык необходимо знать для устройства в рф на работу...
Люди, я люблю вас! Будьте бдительны!!!
Re[31]: Достаточно ли знать С без знания С++ для устройства
От: denisko http://sdeniskos.blogspot.com/
Дата: 07.09.14 15:45
Оценка: 1 (1)
Здравствуйте, BulatZiganshin, Вы писали:


BZ>вот мы и выяснили какой язык необходимо знать для устройства в рф на работу...

Блин, Булат, ну сыграй ты уже в игру тушка-или-чучело, хоть к Р-шняку стукнись, он в Германии сейчас. Больно видеть, как ты на оно исходишь, живя здесь.
<Подпись удалена модератором>
Re[32]: Достаточно ли знать С без знания С++ для устройства
От: BulatZiganshin  
Дата: 07.09.14 15:54
Оценка:
Здравствуйте, denisko, Вы писали:

D>Блин, Булат, ну сыграй ты уже в игру тушка-или-чучело


и что от этого изменится?
Люди, я люблю вас! Будьте бдительны!!!
Re[33]: Достаточно ли знать С без знания С++ для устройства
От: denisko http://sdeniskos.blogspot.com/
Дата: 07.09.14 15:56
Оценка:
Здравствуйте, BulatZiganshin, Вы писали:

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


D>>Блин, Булат, ну сыграй ты уже в игру тушка-или-чучело


BZ>и что от этого изменится?

Мироощущение и пищеварение. Будешь жить в нормальной стране пить пиво и есть колбасу, заниматься работой и не лезть в политику.
<Подпись удалена модератором>
Re[34]: Достаточно ли знать С без знания С++ для устройства
От: BulatZiganshin  
Дата: 07.09.14 16:56
Оценка:
Здравствуйте, denisko, Вы писали:

D>Мироощущение и пищеварение. Будешь жить в нормальной стране пить пиво и есть колбасу, заниматься работой и не лезть в политику.


а вариант что в этой стране всё же научатся варить пиво — даже не рассматривается?
Люди, я люблю вас! Будьте бдительны!!!
Re[35]: Достаточно ли знать С без знания С++ для устройства
От: denisko http://sdeniskos.blogspot.com/
Дата: 07.09.14 17:24
Оценка:
Здравствуйте, BulatZiganshin, Вы писали:

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


D>>Мироощущение и пищеварение. Будешь жить в нормальной стране пить пиво и есть колбасу, заниматься работой и не лезть в политику.


BZ>а вариант что в этой стране всё же научатся варить пиво — даже не рассматривается?

Не обижайся, но как тебе нравится, варить точно не научатся. Точнее пиво по объективным показателям будет не хуже, но твое мироощущение не изменится. Пкм в ближайшие лет > 300.
<Подпись удалена модератором>
Re[36]: Достаточно ли знать С без знания С++ для устройства
От: BulatZiganshin  
Дата: 08.09.14 03:58
Оценка:
Здравствуйте, denisko, Вы писали:

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


http://gordonua.com/news/worldnews/Nemcov-Kto-iz-nas-patriot-a-kto-nacpredatel-Docheri-Putina-zhivut-v-Evrope-doch-Lavrova-v-SSHA--40285.html
Люди, я люблю вас! Будьте бдительны!!!
Re[9]: Достаточно ли знать С без знания С++ для устройства на работу?
От: Трурль  
Дата: 08.09.14 05:24
Оценка:
Здравствуйте, CreatorCray, Вы писали:

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

CC>Если для решения задачи какие то возможности инструмента никогда в жизни не пригодятся — никого не волнует, знаешь ты их или нет.

А вот представь, задача — изменить фунциональность системы в соответсвии с изменившимися спецификациями. А твой предшественник Василий П. тщательно изучал стандарт С++ и методично внедрял в код каждую показавшуюся ему интересной фичу.
Re[10]: Достаточно ли знать С без знания С++ для устройства на работу?
От: CreatorCray  
Дата: 08.09.14 05:35
Оценка:
Здравствуйте, Трурль, Вы писали:

Т>А твой предшественник Василий П. тщательно изучал стандарт С++ и методично внедрял в код каждую показавшуюся ему интересной фичу.

Правильный менеджер выгонит Василия ещё до того как он внедрит каждую фичу. Ибо это типичный синдром "укушенных Александреску"
Re[4]: Достаточно ли знать С без знания С++ для устройства на работу?
От: MasterZiv СССР  
Дата: 08.09.14 15:44
Оценка:
Здравствуйте, Abyx, Вы писали:

R>>99% тех, кто на нем пишет — это те что ниасилили Scala.

A>только C vs C++ не имеет никакого отношения к Java vs Scala.
A>Java и Scala — это разные языки для одной платформы, как например Delphi, С++ и D, или C# и VB.

A>А С — это просто урезанный С++, по этому если ты знаешь С, но не знаешь С++,


Java -- это тоже просто урезанная Scala ...
Re[3]: достаточно
От: MTD https://github.com/mtrempoltsev
Дата: 08.09.14 19:18
Оценка:
Здравствуйте, PMLife, Вы писали:

PML>Знакомые в России не могут нанять хорошего С программиста, платить готовы хорошо, но специалистов на рынке мало.


Аж целых 80 тысяч?
Re[4]: Достаточно ли знать С без знания С++ для устройства на работу?
От: 0BD11A0D  
Дата: 09.09.14 03:04
Оценка: 2 (1) +1 -2
Здравствуйте, Abyx, Вы писали:

A>- предпочитает использование небезопасных конструкций языка


Пришел к нам как-то чувак, который был икспертом в C++. И нашел код, в котором кастились указатели. Почему они кастились, этого я не помню, но была уважительная причина. Скорее всего, они рутились через LPARAM. Важно, как они обратно приводились к Type* — через старый добрый C-cast. Но это же, плять, так небезопасно! Конечно же, надо вставить сиплюсплюсный супербезопасный dynamic_cast<> и проверку на 0. Чего несчастный урод не потрудился выяснить, это что мы собираем проект под платформу, которая не поддерживает RTTI. Как я узнал об этом замечательном рефакторинге? А в посленовогодние праздники написали мне в скайп из европы: йебалайтунг руссиш швайнен программен краш-краш!! Они там с 1 января пытались заюзать новую версию.

Вот такие вот они, безопасные конструкции языка. Что характерно, компилятор, линкер, IDE — никто даже не пискнул.

Затем, в моем личном хит-параде идут любителя заменять небезопасные указатели на ссылки. Это ничего, что объект создается на куче чуть выше по колстеку. Это ничего, что по своей сути родительская и дочерняя функции имеют трехзначную логику. Это ничего, что теперь для вызова функции на стеке надо создавать немалый суррогатный объект, а в его конструктор добавлять детектор суррогатности (зачем выполнять дорогостоящие операции, если объект все равно — пустышка?). Ничего, что в сигнатуру дочерней функции надо добавлять булевский параметр isValid, а поскольку булевские параметры — моветон, заводить enum, выносить его в околокорневой неймспейс. Главное, что теперь все это будет — БЕЗОПАСНО!
Re[5]: Достаточно ли знать С без знания С++ для устройства на работу?
От: CreatorCray  
Дата: 09.09.14 07:20
Оценка:
Здравствуйте, 0BD11A0D, Вы писали:

BDA>Пришел к нам как-то чувак, который был икспертом в C++.

BDA>они обратно приводились к Type* — через старый добрый C-cast. Но это же, плять, так небезопасно! Конечно же, надо вставить сиплюсплюсный супербезопасный dynamic_cast<> и проверку на 0.

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

BDA>Затем, в моем личном хит-параде идут любителя заменять небезопасные указатели на ссылки. Это ничего, что объект создается на куче чуть выше по колстеку.


Это тоже теоретик, гнать его нафиг.
Re[6]: Достаточно ли знать С без знания С++ для устройства на работу?
От: BulatZiganshin  
Дата: 09.09.14 07:51
Оценка:
Здравствуйте, CreatorCray, Вы писали:

CC>Вообще порой думается что и к С и к С++ без ассемблерного и системного бэкграунда нельзя подпускать.


а люди с ассемблерным бэкграундом плюются от него. как например заставить компилятор сгенерить cmov вместо перехода?
Люди, я люблю вас! Будьте бдительны!!!
Re[7]: Достаточно ли знать С без знания С++ для устройства на работу?
От: CreatorCray  
Дата: 09.09.14 08:08
Оценка:
Здравствуйте, BulatZiganshin, Вы писали:

CC>>Вообще порой думается что и к С и к С++ без ассемблерного и системного бэкграунда нельзя подпускать.

BZ>а люди с ассемблерным бэкграундом плюются от него.
У всех разный вкус, я начинал с ассемблера и не плююсь.

BZ>как например заставить компилятор сгенерить cmov вместо перехода?

Эм, взять нормальный компилятор?
Re[7]: Достаточно ли знать С без знания С++ для устройства на работу?
От: Abyx Россия  
Дата: 09.09.14 08:13
Оценка:
Здравствуйте, BulatZiganshin, Вы писали:

BZ>а люди с ассемблерным бэкграундом плюются от него. как например заставить компилятор сгенерить cmov вместо перехода?


а в С как?
In Zen We Trust
Re[8]: Достаточно ли знать С без знания С++ для устройства на работу?
От: BulatZiganshin  
Дата: 09.09.14 08:23
Оценка:
Здравствуйте, CreatorCray, Вы писали:

BZ>>как например заставить компилятор сгенерить cmov вместо перехода?

CC>Эм, взять нормальный компилятор?

назови компилятор, который правильно откомпилирует этот код:

    for (int w1=257; w1<512; ++w1)
    {
        cnt[w1] = INT_MAX;
        left[w1]  = (cnt[r0]<=cnt[r1]? r0++ : r1++);
        right[w1] = (cnt[r0]<=cnt[r1]? r0++ : r1++);
        cnt[w1] = cnt[left[w1]] + cnt[right[w1]];
    }


только пож-та проверенный на деле. генерация cmov сейчас — моя головная боль, поскольку ни интринсика, ни сишных идиом для него нет. может моё си-фу просто слишком солабо по сравнению с твоим?
Люди, я люблю вас! Будьте бдительны!!!
Re[8]: Достаточно ли знать С без знания С++ для устройства на работу?
От: BulatZiganshin  
Дата: 09.09.14 08:25
Оценка:
Здравствуйте, Abyx, Вы писали:

A>а в С как?


точно так же. вообще по моему опыту c++ для оптимизации предпочтительней, поскольку поддерживает темплейты, лямбды и классы
Люди, я люблю вас! Будьте бдительны!!!
Re[5]: Достаточно ли знать С без знания С++ для устройства на работу?
От: Abyx Россия  
Дата: 09.09.14 08:30
Оценка:
Здравствуйте, 0BD11A0D, Вы писали:

BDA>Конечно же, надо вставить сиплюсплюсный супербезопасный dynamic_cast<> и проверку на 0. Чего несчастный урод не потрудился выяснить, это что мы собираем проект под платформу, которая не поддерживает RTTI. Как я узнал об этом замечательном рефакторинге? А в посленовогодние праздники написали мне в скайп из европы: йебалайтунг руссиш швайнен программен краш-краш!! Они там с 1 января пытались заюзать новую версию.


у вас ревью чтоли нету? сразу в мастер коммитите и в продакшен раскатываете?

BDA>Затем, в моем личном хит-параде идут любителя заменять небезопасные указатели на ссылки.

BDA>Это ничего, что объект создается на куче чуть выше по колстеку.
да, это ничего, какая разница что и как создается
BDA>Это ничего, что по своей сути родительская и дочерняя функции имеют трехзначную логику.
и это тоже ничего, но много кода в одном юните это конечно говнокод
BDA>Это ничего, что теперь для вызова функции на стеке надо создавать немалый суррогатный объект, а в его конструктор добавлять детектор суррогатности (зачем выполнять дорогостоящие операции, если объект все равно — пустышка?). Ничего, что в сигнатуру дочерней функции надо добавлять булевский параметр isValid, а поскольку булевские параметры — моветон, заводить enum, выносить его в околокорневой неймспейс. Главное, что теперь все это будет — БЕЗОПАСНО!
что? какой еще суррогатный объект? и главное при чем тут ссылки?
я на всякий случай напомню, что ссылка — это тот же указатель, только иммутабельный и не-нуллабельный. и естественно что все указатели, значения которых не меняются, и которые не равны nullptr можно и нужно заменить на ссылки.
In Zen We Trust
Re[6]: Достаточно ли знать С без знания С++ для устройства на работу?
От: 0BD11A0D  
Дата: 09.09.14 08:37
Оценка: :))
Здравствуйте, CreatorCray, Вы писали:

CC>Это не настоящий С++сник, это просто каску нашёл теоретик.


А кто тут не теоретик? Вы думаете, Abyx такой прямо практик? Вы на его любовь к юнит-тестам посмотрите.

>Надо гнать сцаными тряпками.


Он сам себя выгнал. В смысле, после того нового года никто его не видел. Может, под трамвай, про который любят менеджеры говорить, попал. А может его похитило правительство — Чебурашку писать. Как бы то ни было, запомнился он мне надолго. Такой архетипичный фоннат, что прямо в рамку и на стенку.
Re[9]: Достаточно ли знать С без знания С++ для устройства на работу?
От: CreatorCray  
Дата: 09.09.14 09:35
Оценка:
Здравствуйте, BulatZiganshin, Вы писали:

BZ>назови компилятор, который правильно откомпилирует этот код:


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

Do not do this for predictable branches. Do not use these instructions to eliminate all unpredictable conditional branches, because using these instructions will incur execution overhead due to executing both paths of a conditional branch.
In addition, converting conditional branches to cmovs or setcc trades control-flow dependence for data dependence and restricts the capability of the out-of-order engine.
When tuning, note that all 32-bit Intel® processors have very high branch-prediction rates.
Consistently mispredicted branches are rare.
Use these instructions only if the increase in computation time is less than the expected cost of a mispredicted branch.


По тестам получается что если predictor сработал то CMOV в 2.2 раза медленее. Если не сработал — в 1.2 раза быстрее.
Чем собственно и объясняется нежелание компиляторов его использовать.

BZ>только пож-та проверенный на деле.

Боюсь проверенный будет уж очень старым.

BZ> генерация cmov сейчас — моя головная боль, поскольку ни интринсика, ни сишных идиом для него нет.

Самое забавное что есть несколько способов сказать что вот этот бранч более вероятный, но сказать обратного нельзя никак.

BZ>может моё си-фу просто слишком солабо по сравнению с твоим?

Mine C-fu failed me as well.
Re[25]: Достаточно ли знать С без знания С++ для устройства
От: enji  
Дата: 10.09.14 13:05
Оценка:
Здравствуйте, eskimo82, Вы писали:

E>Простые статики уже лежат проиниченые, а в_atexit функции надо сначала понапихать.


простые статики инитятся стартапом... И если стартапа нету, то там будет некий мусор, имеющийся в памяти после сброса
Re[2]: Достаточно ли знать С без знания С++ для устройства на работу?
От: Kvd  
Дата: 04.01.15 03:55
Оценка:
Здравствуйте, мыщъх, Вы писали:

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


адреса, явки дадите, если не трудно? буду весьма благодарен и не только на словах
Re[3]: Достаточно ли знать С без знания С++ для устройства на работу?
От: мыщъх США http://nezumi-lab.org
Дата: 04.01.15 06:03
Оценка:
Здравствуйте, Kvd, Вы писали:

Kvd>Здравствуйте, мыщъх, Вы писали:


Kvd>адреса, явки дадите, если не трудно? буду весьма благодарен и не только на словах

например, Intel, Sourcefire и многие другие... security.do так же использует си без плюсов. в сша это очень широко распространенное явление. си и линух. линух и си.
americans fought a war for a freedom. another one to end slavery. so, what do some of them choose to do with their freedom? become slaves.
Re: Достаточно ли знать С без знания С++ для устройства на работу?
От: fk0 Россия https://fk0.name
Дата: 04.01.15 12:05
Оценка:
Здравствуйте, ramar, Вы писали:

R>А можно ли быть программистом-системщиком, но знать только С, без С++?


Теоретически, наверное, можно. Но практически -- скорей нельзя. Можно не иметь опыта программирования на C++, например. Но вообще вот так чтобы не знать вообще ничего -- сомневаюсь. Инопланетянином нужно быть что ли.
Re: Достаточно ли знать С без знания С++ для устройства на работу?
От: qulinxao lj.rossia.org/users/qulinxao
Дата: 04.01.15 15:58
Оценка:
Здравствуйте, ramar, Вы писали:

R>А можно ли быть программистом-системщиком, но знать только С, без С++? Вообще, насколько важно знать С++ или достаточно только С? Не только в России, но за бугром тоже. В Америке, я знаю, именно С больше в почете.


можно.

например https://sites.google.com/site/cinterfacesimplementations/ как аналог stl
несравненно явственней, чем в других дисциплинах
Re[13]: Достаточно ли знать С без знания С++ для устройства н
От: Skorodum Россия  
Дата: 04.01.15 23:12
Оценка:
Здравствуйте, smeeld, Вы писали:

Очень сложно выписали, но мне понравилось Тут чувствуется влияние стандарта:

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

Re[8]: Достаточно ли знать С без знания С++ для устройства на работу?
От: Skorodum Россия  
Дата: 04.01.15 23:21
Оценка:
Здравствуйте, CreatorCray, Вы писали:

CC>Ну и по факту, на С пишут такие обормоты, что просто за голову хватаешься.


Такие:



Квалификацию Криса под сомнение не ставлю.
Re[2]: Достаточно ли знать С без знания С++ для устройства на работу?
От: smeeld  
Дата: 04.01.15 23:41
Оценка:
Здравствуйте, uncommon, Вы писали:

> А причина в том, что на С трудно писать хороший код


Это как сделать вывод о том, что cлух у таракана в ногах, на основании того, что, таракан на убегает при стуке
если ему ноги оторвать.

На C можно писать красивейший и лаконичый код, загляните, например, в исходники opensolaris
Собственно, для разработки ядер и системных либ язык и создавался, и идеально подходит для этого до сих пор, инфа 100%.
И на C++ безпроблемно можно вахлять только в песочницах хотелки менеджеров, он для этого и создавался.
Re[3]: Достаточно ли знать С без знания С++ для устройства на работу?
От: CreatorCray  
Дата: 05.01.15 00:06
Оценка:
Здравствуйте, smeeld, Вы писали:

S>На C можно писать красивейший и лаконичый код

S>загляните, например, в исходники opensolaris
Я там вижу много рукопашки, типичной для С.
Это всё можно написать ещё красивее и лаконичнее. Но не на С.
Re[4]: Достаточно ли знать С без знания С++ для устройства на работу?
От: smeeld  
Дата: 05.01.15 00:28
Оценка:
Здравствуйте, CreatorCray, Вы писали:

CC>Я там вижу много рукопашки, типичной для С.


Там и должна быть именно рукопашка, "мы в ядре".
Re[5]: Достаточно ли знать С без знания С++ для устройства на работу?
От: Cyberax Марс  
Дата: 05.01.15 01:02
Оценка: +1
Здравствуйте, smeeld, Вы писали:

CC>>Я там вижу много рукопашки, типичной для С.

S>Там и должна быть именно рукопашка, "мы в ядре".
Это с чего бы? В ядре точно так же работают деструкторы и умные указатели. И даже исключения можно сделать, при желании.
Sapienti sat!
Re[5]: Достаточно ли знать С без знания С++ для устройства на работу?
От: uncommon Ниоткуда  
Дата: 05.01.15 01:15
Оценка: +2
Здравствуйте, smeeld, Вы писали:

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


CC>>Я там вижу много рукопашки, типичной для С.


S>Там и должна быть именно рукопашка, "мы в ядре".


Не должна, а приходится, потому что C. Я не совсем понимаю какой кайф в необходимости делать всё руками? Допустим, добавил еще один kmutex в znode_t и забыл проинициализировать его в zfs_znode_cache_constructor или разрушить в zfs_znode_cache_destructor. Или передал в zfs_znode_cache_constructor указатель не на znode_t, а на какой-то другой тип, и твое ядро очень классно заупсилось после memory corruption.
Re[6]: Достаточно ли знать С без знания С++ для устройства на работу?
От: kaa.python Ниоткуда РСДН профессионально мёртв и завален ватой.
Дата: 05.01.15 01:22
Оценка:
Здравствуйте, Cyberax, Вы писали

C>Это с чего бы? В ядре точно так же работают деструкторы и умные указатели. И даже исключения можно сделать, при желании.


Насколько я помню, желающих это сделать всегда было много, частенько говорили что "можно и есть практически работающая модель". Вот только реально работающих исключений в ядре вроде так и не появилось. Есть реально работающий пример хоть в какой-нибудь операционной системе?
Re[7]: Достаточно ли знать С без знания С++ для устройства на работу?
От: CreatorCray  
Дата: 05.01.15 04:21
Оценка:
Здравствуйте, kaa.python, Вы писали:

KP>Насколько я помню, желающих это сделать всегда было много, частенько говорили что "можно и есть практически работающая модель". Вот только реально работающих исключений в ядре вроде так и не появилось. Есть реально работающий пример хоть в какой-нибудь операционной системе?


Windows, поскольку там традиционно С++ исключения кидались через SEH то в ограниченном сабсете их там можно кидать и ловить. Работает неплохо, хотя реально мало когда надо.
Re[7]: Достаточно ли знать С без знания С++ для устройства на работу?
От: Cyberax Марс  
Дата: 05.01.15 05:06
Оценка:
Здравствуйте, kaa.python, Вы писали:

KP>Насколько я помню, желающих это сделать всегда было много, частенько говорили что "можно и есть практически работающая модель". Вот только реально работающих исключений в ядре вроде так и не появилось. Есть реально работающий пример хоть в какой-нибудь операционной системе?

В Винде в ядре вполне себе работает SEH, который является системой исключений для С и используется везде внутри ядра. Поверх него и C++-ные работают, но их заметно меньше используют.

http://osv.io/ — у них и ядро на С++ написано, исключения они туда добавляют прямо сейчас.
Sapienti sat!
Re[8]: Достаточно ли знать С без знания С++ для устройства на работу?
От: kaa.python Ниоткуда РСДН профессионально мёртв и завален ватой.
Дата: 05.01.15 05:28
Оценка:
Здравствуйте, Cyberax, Вы писали:

C>В Винде в ядре вполне себе работает SEH, который является системой исключений для С и используется везде внутри ядра. Поверх него и C++-ные работают, но их заметно меньше используют.


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

C>http://osv.io/ — у них и ядро на С++ написано, исключения они туда добавляют прямо сейчас.


Я, наверное, не правильно вопрос сформировал. Пример поддержки C++ исключений с полноценной раскруткой стека для более-менее широко используемой операционки (Win, Lin, BSD) есть? Я ни об одном не знаю.
Re[9]: Достаточно ли знать С без знания С++ для устройства на работу?
От: Cyberax Марс  
Дата: 05.01.15 05:49
Оценка: 5 (1)
Здравствуйте, kaa.python, Вы писали:

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

То есть? Исключения С++ вполне работают при использовании MS-ного компилятора. Сам даже использовал.

C>>http://osv.io/ — у них и ядро на С++ написано, исключения они туда добавляют прямо сейчас.

KP>Я, наверное, не правильно вопрос сформировал. Пример поддержки C++ исключений с полноценной раскруткой стека для более-менее широко используемой операционки (Win, Lin, BSD) есть? Я ни об одном не знаю.
Есть для Windows: https://code.google.com/p/ontl/
Sapienti sat!
Re[4]: Достаточно ли знать С без знания С++ для устройства на работу?
От: SkyDance Земля  
Дата: 06.01.15 02:17
Оценка:
CC>Это всё можно написать ещё красивее и лаконичнее. Но не на С.

Будет ли это проще понимать?
Красота С в том, что язык легко понимается даже школьником. Доказано мной. и кодом Doom.
Re[5]: Достаточно ли знать С без знания С++ для устройства на работу?
От: CreatorCray  
Дата: 06.01.15 02:37
Оценка: +2
Здравствуйте, SkyDance, Вы писали:

CC>>Это всё можно написать ещё красивее и лаконичнее. Но не на С.


SD>Будет ли это проще понимать?

Да, разумеется.

SD>Красота С в том, что язык легко понимается даже школьником. Доказано мной. и кодом Doom.

А а безобразность его в том, что в boilerplates вязнут даже профессионалы. Увы.
Re[2]: Достаточно ли знать С без знания С++ для устройства на работу?
От: os24ever
Дата: 06.01.15 03:17
Оценка: -2 :)
U>состояние в глобальных переменных
Тут переход на C++ не помог бы: поля в объектах — те же глобальные переменные. Проблему просто затолкали под ковёр, но она осталась.
Посмотрите на функциональные языки, там нет глобальных переменных: http://fprog.ru/2009/issue1/eugene-kirpichov-fighting-mutable-state/
Re[6]: Достаточно ли знать С без знания С++ для устройства на работу?
От: SkyDance Земля  
Дата: 06.01.15 05:05
Оценка:
SD>>Будет ли это проще понимать?
CC>Да, разумеется.

На этом месте ожидается тег ccode, с примерами того и другого.

CC>А а безобразность его в том, что в boilerplates вязнут даже профессионалы. Увы.


Вне всякого сомнения. Особенно часто такое встречается, если долго писавшие на С++ ВНЕЗАПНО что-то пилят на С. Что уж там, сам ведь такой.
Re[7]: Достаточно ли знать С без знания С++ для устройства на работу?
От: CreatorCray  
Дата: 06.01.15 05:18
Оценка:
Здравствуйте, SkyDance, Вы писали:

SD>>>Будет ли это проще понимать?

CC>>Да, разумеется.
SD>На этом месте ожидается тег ccode, с примерами того и другого.

Из реального кода примеры по понятной причине приводить не могу. А писать примеры долго и потому не интересно.

CC>>А а безобразность его в том, что в boilerplates вязнут даже профессионалы. Увы.

SD>Вне всякого сомнения. Особенно часто такое встречается, если долго писавшие на С++ ВНЕЗАПНО что-то пилят на С. Что уж там, сам ведь такой.

У нас тут полно народу которые кроме С ничего в руки с добрый десяток лет не брали. С++ вообще не знают. Boilerplates everywhere.
Re: Достаточно ли знать С без знания С++ для устройства на р
От: omgOnoz  
Дата: 06.01.15 17:44
Оценка:
Здравствуйте, ramar, Вы писали:

R>А можно ли быть программистом-системщиком, но знать только С, без С++? Вообще, насколько важно знать С++ или достаточно только С? Не только в России, но за бугром тоже. В Америке, я знаю, именно С больше в почете.


Вообще как-то странно в наше время знать только С, без С++. Сомнительная кандидатура ... разве что студент без опыта, но тут знаний много не потребуешь.
Отредактировано 06.01.2015 17:46 omgOnoz . Предыдущая версия .
Re[5]: Достаточно ли знать С без знания С++ для устройства на работу?
От: a.v.v Россия  
Дата: 22.01.15 05:26
Оценка:
Здравствуйте, 0BD11A0D, Вы писали:

BDA>Пришел к нам как-то чувак, который был икспертом в C++.

BDA>Конечно же, надо вставить сиплюсплюсный супербезопасный dynamic_cast<> и проверку на 0.

надо было этого експерта просто уволить нахрен, потому что врать на собеседовании о своей квалификации нехорошо
Re[2]: Достаточно ли знать С без знания С++ для устройства на работу?
От: Anatolix Россия https://www.linkedin.com/in/anatolix/
Дата: 22.01.15 21:51
Оценка: +2 -1
Здравствуйте, Abyx, Вы писали:

R>>А можно ли быть программистом-системщиком, но знать только С, без С++? Вообще, насколько важно знать С++ или достаточно только С? Не только в России, но за бугром тоже. В Америке, я знаю, именно С больше в почете.


A>С не нужен.

A>99% тех, кто на нем пишет — это те что ниасилили С++.

Один из самых известных ниасильщиков Линус Торвальдс. И продолжает неасиливать не только в ядре а вообще, недавно вот очередную поделку на C написал git называется. Не понятно только почему столько программистов на его поделку перешли
Любая проблема дизайна может быть решена введением дополнительного абстрактного слоя, за исключением проблемы слишком большого количества дополнительных абстрактных слоев
Re[3]: Достаточно ли знать С без знания С++ для устройства на работу?
От: smeeld  
Дата: 22.01.15 22:08
Оценка: -1 :)
Здравствуйте, Anatolix, Вы писали:


A>Один из самых известных ниасильщиков Линус Торвальдс. И продолжает неасиливать не только в ядре а вообще


Этот неосилятор, на С++ писал когда все местные осиляторы ещё из скорлуп не повылупливались. Правда тогда ещё не было
настолько же, как сейчас, развитых компиляторов С++, которые позволяют писать на С++ специлизированным синтаксисом,
поэтому на С++ приходилось писать на С. Но многие профи злючие, подобным образом на С++ продолжают писать и сейчас, ибо
такой способ не отнимает тот пласт контроля кодогенерации и управления объектами, который отнимает способ писать на С++,
используя специализированный С++ синтаксис.
Re[3]: Достаточно ли знать С без знания С++ для устройства на работу?
От: BulatZiganshin  
Дата: 22.01.15 23:56
Оценка: +1
Здравствуйте, Anatolix, Вы писали:

A>Один из самых известных ниасильщиков Линус Торвальдс. И продолжает неасиливать не только в ядре а вообще, недавно вот очередную поделку на C написал git называется. Не понятно только почему столько программистов на его поделку перешли


если скажем каждую мою поделку будет сразу подхватывать и развивать тыща бесплатных программистов просто потому что я "крутой", то я себе смогу похволить писать даже на cuda. но вот до этого момента надо просчитывать экономику. возможэно для гита смысл был — в том плане что он сейчас переносим даже на зубные щётки. но это явно не может служить примером для нас, простых смертных
Люди, я люблю вас! Будьте бдительны!!!
Re[4]: Достаточно ли знать С без знания С++ для устройства на работу?
От: CreatorCray  
Дата: 23.01.15 02:32
Оценка: +1
Здравствуйте, smeeld, Вы писали:

S>Этот неосилятор, на С++ писал когда все местные осиляторы ещё из скорлуп не повылупливались.

Где можно ознакомиться с шедеврами гуру?

S>Но многие профи злючие, подобным образом на С++ продолжают писать и сейчас, ибо

S>такой способ не отнимает тот пласт контроля кодогенерации и управления объектами, который отнимает способ писать на С++,
S>используя специализированный С++ синтаксис.
И дык что же мешает ему сейчас так же делать?
Re[5]: Достаточно ли знать С без знания С++ для устройства на работу?
От: smeeld  
Дата: 23.01.15 03:07
Оценка:
Здравствуйте, CreatorCray, Вы писали:

CC>Где можно ознакомиться с шедеврами гуру?


Да хоть здесь, но только просвещённые узрят в том коде всё то, что современная
школота шлёпает C++-синтаксисом на шаблонах и прочих RTTI, задрав мурсальники к небу от гордости.

CC>И дык что же мешает ему сейчас так же делать?


Ну дык и не знаю почему не знаете, что он так же делает и сейчас.
Re[6]: Достаточно ли знать С без знания С++ для устройства на работу?
От: CreatorCray  
Дата: 23.01.15 04:53
Оценка:
Здравствуйте, smeeld, Вы писали:

CC>>Где можно ознакомиться с шедеврами гуру?

S>Да хоть здесь,
Где ознакомится с С++ шедеврами данного гуру?

S>но только просвещённые узрят в том коде всё то

ОМФГ, вот только не надо пафоса.

CC>>И дык что же мешает ему сейчас так же делать?

S>Ну дык и не знаю почему не знаете, что он так же делает и сейчас.
Он разве пишет что либо на С++?
Re[3]: Достаточно ли знать С без знания С++ для устройства на работу?
От: Abyx Россия  
Дата: 23.01.15 09:51
Оценка:
Здравствуйте, Anatolix, Вы писали:

A>Один из самых известных ниасильщиков Линус Торвальдс. И продолжает неасиливать не только в ядре а вообще, недавно вот очередную поделку на C написал git называется. Не понятно только почему столько программистов на его поделку перешли


да, на Си. https://github.com/git/git/commit/e83c5163316f89bfbde7d9ab23ca2e25604af290
только для кучки программ которые только и делают что запускают другие программы больше подошел бы Python, или даже баш.

Почему столько программистов перешли — как раз понятно,
во-первых гитхаб,
во-вторых единственная альтернатива — Mercurial долгое время была сыровата, и имела меньше фич чем Git.

Но в любом случае, ты это всё к чему написал-то?
In Zen We Trust
Re[7]: Достаточно ли знать С без знания С++ для устройства на работу?
От: smeeld  
Дата: 23.01.15 10:48
Оценка: -1 :)
Здравствуйте, CreatorCray, Вы писали:

CC>Где ознакомится с С++ шедеврами данного гуру?


CC>Он разве пишет что либо на С++?


Вот есть такое как "писать на Perl на C" или наоборот "писать на C на Perl".
Так же можно сказать про любые другие,нетривиально отличающиеся, ЯП. Что значат
те фразы знаете прекрасно, если пробовали что серьёзное писать на ЯП, отличных
от только C и C++. На самом деле, ЯП-это определённая идеология. И С++-это Си с
принятыми на уровне синтаксиса средствами соответсвовать определённой идеологии.
Но эта идеология существует с древнейших времён, и возникла с появлением ЯП Си.
Так что этот С++ не более чем Си, упрощённый предоставлением возможностей уровня
синтакиса для автоматизации построения нужных выражений. И когда думают, что пишут
на modern C++, на самом деле, пишут на чистом Си, применяя те самые упрощающие
синтаксические средства. Просто найдите чем отличаются, скажем, Lisp от C++ или C,
и станет очень ясно, что между прогами, написанными на С++14 и С99, по сути, разница
мизерная, заключающаяся только в внешних отличиях текста программы.

ЗЫ по ссылке выше код на gcc asm, но там пишут именно на С++, пусть хоть и синтаксисом ASM-а.
Re[4]: Достаточно ли знать С без знания С++ для устройства на работу?
От: Abyx Россия  
Дата: 23.01.15 13:19
Оценка:
Здравствуйте, BulatZiganshin, Вы писали:

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

гит переносим только на линуксах,
ничего кроссплатформенного там нету, всё гвоздями прибито к Posix и куче линуксовых утилит типа баша.
In Zen We Trust
Re[4]: Достаточно ли знать С без знания С++ для устройства на работу?
От: mrTwister Россия  
Дата: 23.01.15 15:10
Оценка: +1
Здравствуйте, AleksandrN, Вы писали:

AN>Нет, не 100%. Страуструп освоил C++.


Страуструп не пишет на С++, он пишет на английском
лэт ми спик фром май харт
Re[8]: Достаточно ли знать С без знания С++ для устройства на работу?
От: CreatorCray  
Дата: 23.01.15 19:08
Оценка:
Здравствуйте, smeeld, Вы писали:

CC>>Где ознакомится с С++ шедеврами данного гуру?

CC>>Он разве пишет что либо на С++?

S>Вот есть такое <бред поскипан> заключающаяся только в внешних отличиях текста программы.


Подытоживая: фактов нет, гуру таки оказывается ниасилил. О чём и говорилось изначально.
Re: Достаточно ли знать С без знания С++ для устройства на работу?
От: Pzz Россия https://github.com/alexpevzner
Дата: 23.01.15 19:29
Оценка:
Здравствуйте, ramar, Вы писали:

R>А можно ли быть программистом-системщиком, но знать только С, без С++? Вообще, насколько важно знать С++ или достаточно только С? Не только в России, но за бугром тоже. В Америке, я знаю, именно С больше в почете.


Не то, чтобы я совсем не знал C++, но сроду не писал на нем production code. Мне это не мешает.

Hint: я продаю не знание языков, а умение решать определенного рода проблемы.
Re[4]: Достаточно ли знать С без знания С++ для устройства на работу?
От: Pzz Россия https://github.com/alexpevzner
Дата: 23.01.15 19:31
Оценка:
Здравствуйте, Abyx, Вы писали:

A>А С — это просто урезанный С++, по этому если ты знаешь С, но не знаешь С++,

A>то для меня это выглядит так, что ты — программист С++, который

А автомобиль — это урезанный самолет. Поэтому тот, кто ниасилил самолет, водить не умеет и должен ездить на трамвае.
Re[6]: Достаточно ли знать С без знания С++ для устройства на работу?
От: Pzz Россия https://github.com/alexpevzner
Дата: 23.01.15 19:34
Оценка:
Здравствуйте, Abyx, Вы писали:

A>нет, конечно они не совместимы на все 100%.

A>в С есть еще есть опасные вещи типа неявного каста void* в любой тип.

Это — страшилка для девочек с розовыми бантиками. Реально, надо сильно постараться, чтобы на это нарваться.

А вот неявные преобразования между многочисленными целочисленными типами, штука реально опасная. В ваш любимый C++ она перешла в полном объеме.
Re[7]: Достаточно ли знать С без знания С++ для устройства на работу?
От: Abyx Россия  
Дата: 23.01.15 19:50
Оценка:
Здравствуйте, Pzz, Вы писали:

A>>в С есть еще есть опасные вещи типа неявного каста void* в любой тип.


Pzz>Это — страшилка для девочек с розовыми бантиками. Реально, надо сильно постараться, чтобы на это нарваться.


ты мне два раза ответил на один и тот же пост, думаешь я тебе сейчас отвечу?
счя, розовый бантик только надену...
In Zen We Trust
Re[2]: Достаточно ли знать С без знания С++ для устройства на работу?
От: Abyx Россия  
Дата: 23.01.15 19:55
Оценка:
Здравствуйте, Pzz, Вы писали:

Pzz>Не то, чтобы я совсем не знал C++, но сроду не писал на нем production code. Мне это не мешает.


Pzz>Hint: я продаю не знание языков, а умение решать определенного рода проблемы.


перефразируя классика,
"Любую проблему можно решить написанием говнокода, кроме проблемы наличия говнокода."
In Zen We Trust
Re[8]: Достаточно ли знать С без знания С++ для устройства на работу?
От: Pzz Россия https://github.com/alexpevzner
Дата: 23.01.15 19:57
Оценка:
Здравствуйте, Abyx, Вы писали:

A>ты мне два раза ответил на один и тот же пост, думаешь я тебе сейчас отвечу?

A>счя, розовый бантик только надену...

Гы, и впрямь. Ну хоть, оба моих ответа друг другу не противоречат
Re[3]: Достаточно ли знать С без знания С++ для устройства на работу?
От: Pzz Россия https://github.com/alexpevzner
Дата: 23.01.15 20:03
Оценка:
Здравствуйте, Abyx, Вы писали:

A>перефразируя классика,

A>"Любую проблему можно решить написанием говнокода, кроме проблемы наличия говнокода."

Не совсем.

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

Непонятно, почему обсуждая программиста, такой сильный упор делается на том, какой инструмент он освоил, а не что он этим инструментом научился делать.
Re[4]: Достаточно ли знать С без знания С++ для устройства на работу?
От: Kvd  
Дата: 23.01.15 21:02
Оценка:
Здравствуйте, Pzz, Вы писали:

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


Слава б.гу есть еще здравомыслящие люди даже на форуме. Инженерное образование видимо дает себя знать?
Re[4]: Достаточно ли знать С без знания С++ для устройства на работу?
От: Abyx Россия  
Дата: 24.01.15 09:50
Оценка:
Здравствуйте, Pzz, Вы писали:

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


A>>перефразируя классика,

A>>"Любую проблему можно решить написанием говнокода, кроме проблемы наличия говнокода."

Pzz>Не совсем.


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


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

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


я не считаю что это так
In Zen We Trust
Re[5]: Достаточно ли знать С без знания С++ для устройства на работу?
От: Pzz Россия https://github.com/alexpevzner
Дата: 24.01.15 16:53
Оценка:
Здравствуйте, Kvd, Вы писали:

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


Kvd>Слава б.гу есть еще здравомыслящие люди даже на форуме. Инженерное образование видимо дает себя знать?


Я самоучка. Формально, у меня нет инженерного образования.
Re[4]: Достаточно ли знать С без знания С++ для устройства на работу?
От: DreamMaker  
Дата: 24.01.15 17:54
Оценка:
Здравствуйте, smeeld, Вы писали:

A>>Один из самых известных ниасильщиков Линус Торвальдс. И продолжает неасиливать не только в ядре а вообще


S>Этот неосилятор, на С++ писал когда все местные осиляторы ещё из скорлуп не повылупливались.


намекаете на возрастные изменения? возраст берет свое?
In P=NP we trust.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.