Айтишники на пенсии

Moderator: sss1

User avatar
M. Ridcully
Уже с Приветом
Posts: 12017
Joined: 08 Sep 2006 20:07
Location: Силиконка

Re: Айтишники на пенсии

Post by M. Ridcully »

Снежная Королева wrote: 17 May 2017 23:44 Кто бы мог подумать, что когда объявляешь массив в C, он заполняется случайным мусором :) Ни один тьюториал или книжка, ну хоть кто-то бы где-то написал! Правда я читала в основном про пакет Rcpp
Гы, указатели оказались не при чём.
Если локальную скалярную переменную не проинициализировать, то то же самое будет.
Правда, в 21 веке принято санитайзерами пользоваться.
Ну и последнее - C и C++ - это всё-таки разные языки. В большинстве случаев в C++ очень мало причин не пользоваться std::vector вместо "голого" массива.
Мир Украине. Свободу России.
ksi
Уже с Приветом
Posts: 10063
Joined: 20 May 1999 09:01

Re: Айтишники на пенсии

Post by ksi »

M. Ridcully wrote: 18 May 2017 01:13 В большинстве случаев в C++ очень мало причин не пользоваться std::vector вместо "голого" массива.
+100, это вообще ИМХО самое важное усовершенствование С++ 11. СК, все массивы делайте только через vector

Если хотите все же понять указатели, то когда будете писать С++ код поставьте целью никогда не передавать переменные по reference. Передавайте вместо этого пойнтеры на эти переменные. Это примерно одно и тоже, но зато поймете, что такое пойнтеры и как с ними работать.
User avatar
Komissar
Уже с Приветом
Posts: 64875
Joined: 12 Jul 2002 16:38
Location: г.Москва, ул. Б. Лубянка, д.2

Re: Айтишники на пенсии

Post by Komissar »

M. Ridcully wrote: 18 May 2017 01:13 Гы, указатели оказались не при чём.
В эпохальном мужском турнире ..эээ... на приз Снежной Королевы победил M. Ridcully.
Физик-Лирик
Уже с Приветом
Posts: 5106
Joined: 19 Oct 2004 01:46

Re: Айтишники на пенсии

Post by Физик-Лирик »

Komissar wrote: 18 May 2017 02:06 В эпохальном мужском турнире ..эээ... на приз Снежной Королевы победил M. Ridcully.
И какой приз получит победитель?
User avatar
Komissar
Уже с Приветом
Posts: 64875
Joined: 12 Jul 2002 16:38
Location: г.Москва, ул. Б. Лубянка, д.2

Re: Айтишники на пенсии

Post by Komissar »

Физик-Лирик wrote: 18 May 2017 03:43
Komissar wrote: 18 May 2017 02:06 В эпохальном мужском турнире ..эээ... на приз Снежной Королевы победил M. Ridcully.
И какой приз получит победитель?
ему еще и приз нужен? 8O
User avatar
Komissar
Уже с Приветом
Posts: 64875
Joined: 12 Jul 2002 16:38
Location: г.Москва, ул. Б. Лубянка, д.2

Re: Айтишники на пенсии

Post by Komissar »

он получит не приз, а указатель на приз!
User avatar
АццкоМото
Уже с Приветом
Posts: 15276
Joined: 01 Mar 2007 05:18
Location: VVO->ORD->DFW->SFO->DFW->PDX

Re: Айтишники на пенсии

Post by АццкоМото »

Снежная Королева wrote: 18 May 2017 01:52 Значит, должно быть в core language прописано.
это и не про core language тоже, скорее про дух языка - не делать то, о чем не просят явно. так-то аффтары библиотеки вполне могли бы обнулить новый инстанс в конструкторе, если бы пожелали. причем я считаю, что в толь специализированной библиотеке это было бы верным решением
Мат на форуме запрещен, блдж!
alex_127
Уже с Приветом
Posts: 7723
Joined: 29 Mar 2000 10:01
Location: Kirkland,WA

Re: Айтишники на пенсии

Post by alex_127 »

Снежная Королева wrote: 18 May 2017 01:52
M. Ridcully wrote: 18 May 2017 01:13
Снежная Королева wrote: 17 May 2017 23:44 Кто бы мог подумать, что когда объявляешь массив в C, он заполняется случайным мусором :) Ни один тьюториал или книжка, ну хоть кто-то бы где-то написал! Правда я читала в основном про пакет Rcpp
Гы, указатели оказались не при чём.
Если локальную скалярную переменную не проинициализировать, то то же самое будет.
Правда, в 21 веке принято санитайзерами пользоваться.
Ну и последнее - C и C++ - это всё-таки разные языки. В большинстве случаев в C++ очень мало причин не пользоваться std::vector вместо "голого" массива.
Указатели не при чем, это была совершенно другая проблема. Библиотека Armadillo, если кто знает. Объявляешь матрицу arma::mat somename(4,4); и она заполняется (оказывается) мусором. Документация библиотеки очень хороша, но нигде про такое не написано. Значит, должно быть в core language прописано.
http://arma.sourceforge.net/docs.html
When specifying the size with n_rows and n_cols, by default the memory is uninitialised; memory can be initialised by specifying the fill_type, which is one of: fill::zeros, fill::ones, fill::eye, fill::randu, fill::randn, fill::none, with the following meanings:
fill::zeros = set all elements to 0
fill::ones = set all elements to 1
fill::eye = set the elements along the main diagonal to 1 and off-diagonal elements to 0
fill::randu = set each element to a random value from a uniform distribution in the [0,1] interval
fill::randn = set each element to a random value from a normal/Gaussian distribution with zero mean and unit variance
fill::none = do not modify the elements
User avatar
Komissar
Уже с Приветом
Posts: 64875
Joined: 12 Jul 2002 16:38
Location: г.Москва, ул. Б. Лубянка, д.2

Re: Айтишники на пенсии

Post by Komissar »

alex_127 wrote: 18 May 2017 05:09
Снежная Королева wrote: 18 May 2017 01:52
M. Ridcully wrote: 18 May 2017 01:13
Снежная Королева wrote: 17 May 2017 23:44 Кто бы мог подумать, что когда объявляешь массив в C, он заполняется случайным мусором :) Ни один тьюториал или книжка, ну хоть кто-то бы где-то написал! Правда я читала в основном про пакет Rcpp
Гы, указатели оказались не при чём.
Библиотека Armadillo, если кто знает. Объявляешь матрицу arma::mat somename(4,4); и она заполняется (оказывается) мусором. Документация библиотеки очень хороша, но нигде про такое не написано. Значит, должно быть в core language прописано.
http://arma.sourceforge.net/docs.html
When specifying the size with n_rows and n_cols, by default the memory is uninitialised; memory can be initialised by specifying the fill_type,
все-таки старую выучку не пропьешь: я бы доки не читал, но массив бы от греха подальше пронициилизоровал.
User avatar
АццкоМото
Уже с Приветом
Posts: 15276
Joined: 01 Mar 2007 05:18
Location: VVO->ORD->DFW->SFO->DFW->PDX

Re: Айтишники на пенсии

Post by АццкоМото »

Снежная Королева wrote: 18 May 2017 06:21 Ну вот для не профессиональных программистов хрен поймёшь что означает "memory is uninitialised". Пока не наступишь на грабли.
Так это... может быть, вам оно просто и не надо? Ведь таких и гораздо более сложных (хотя на вид - простых) нюансов в С++ чуть больше, чем дофига. Даже довольно опытный С++ погромист легко может сесть в лужу и отстрелить себе ногу. Левую. Вжик! Я сказал, левую! Вжик! Я сказал, ногу! Вжик! Как-то так.
Мат на форуме запрещен, блдж!
User avatar
Komissar
Уже с Приветом
Posts: 64875
Joined: 12 Jul 2002 16:38
Location: г.Москва, ул. Б. Лубянка, д.2

Re: Айтишники на пенсии

Post by Komissar »

Снежная Королева wrote: 18 May 2017 06:21 Ну вот для не профессиональных программистов хрен поймёшь что означает "memory is uninitialised". Пока не наступишь на грабли.
Мать, ты реально косяка дала. Я и боком погромизму не учился, просто на Бейсике 1000 лет назад чего-то для химии корябал - но даже при моем склерозе я прекрасно понимаю про Initialized.
ksi
Уже с Приветом
Posts: 10063
Joined: 20 May 1999 09:01

Re: Айтишники на пенсии

Post by ksi »

Снежная Королева wrote: 18 May 2017 06:50
Деваться некуда. Нужно было писать R код для диплома, и сами понимаете, R медленный. Все более менее серьёзное на С/С++ пишется. А потом втянулась и даже нравится. Реально в сто раз быстрее выполняется код.
И правильно. С/C++ простой язык если его использовать только для вычислительных чисел. Его легко понять не программисту, вам в самый раз.

Кстати, насчет инициилизации переменных. Тут есть еще такой момент: в С++ ведь есть классы. И с ними абсолютно теже самые проблемы, что и с переменными насчет инициидизации, только хуже. Например, если у вас есть класс ClassA и вы в своей функции написали


Code: Select all

int n;
ClassA instance_class;
Первая строчка вы знаете почему плохая, там не написано n=0. Но вторая ничем по существу не отличается от первой - там создается объект instance_class который тоже нельзя использовать, потому что внутри этого объекта ничего путного не лежит. Там лежат начальные значения, определенные в конструкторе для этого объекта. И может получиться так, что вы "забудете" про это и передадите instance_class дальше в какую-то фунеции, которая начнем с нимм работать, как будто он живой обхект. Даже будет что-то счтаться, но только совсем не то, что вам нужно! Это таже самая проблема по-существу.

Тут есть выход - делать все по Сшному. Работать не с самими обхектами, а с их поинтерами. Это выглядит так:

Code: Select all

int n = 0;
ClassA * p_instance_class= NULL;
...
p_instance_class = new ClassA () ;
init (p_instance_class );

Получается такая вещь: вы вначале отводите пойнтер под будущий объект и заполняете его нулем. Если после этого вы в како-то момент передадите этот пойнтер дальще, внутрь другой функции, то где-то просто будет краш и вы это сразу увидите. А когда реально придет время, что вы готовы наполнить instance_class meaningful значениями, то вы делаете это как в последних двух строчках. В результате у вас нет ситуации, как в первом коде, когда обхектinstance_class вроде живой, но meaningless. Здесь он (вернее его пойнтер) будет не meaningless, а конкретный NULL, что и означает, что он не проициилизирован.
User avatar
АццкоМото
Уже с Приветом
Posts: 15276
Joined: 01 Mar 2007 05:18
Location: VVO->ORD->DFW->SFO->DFW->PDX

Re: Айтишники на пенсии

Post by АццкоМото »

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

Не читайте советские газеты и ksi, просто ради чистоты сознания
Мат на форуме запрещен, блдж!
User avatar
Alexander Troyansky
Уже с Приветом
Posts: 5753
Joined: 15 Aug 2008 00:52

Re: Айтишники на пенсии

Post by Alexander Troyansky »

partner_ca wrote: 18 May 2017 18:12
ksi wrote: 18 May 2017 14:40
Тут есть выход - делать все по Сшному. Работать не с самими обхектами, а с их поинтерами. Это выглядит так:

Code: Select all

int n = 0;
ClassA * p_instance_class= NULL;
...
p_instance_class = new ClassA () ;
init (p_instance_class );
Не согласен. Это неудобно и не в духе С++
Для инициализации придумали конструктор.
Да и использовать динамическое выделение объектов на ровном месте без особой надобности - превед фрагментации памяти, которая лечится только "всеми мыслимыми и немыслимыми наворотами"
I would hope that a wise white man with the richness of his experiences would more often than not reach a better conclusion than a latina female who hasn't lived that life
User avatar
fruit6
Уже с Приветом
Posts: 4207
Joined: 10 Jan 2004 01:22
Location: n-sk -> MD -> VA

Re: Айтишники на пенсии

Post by fruit6 »

Было бы странно ожидать от ученых экспертных советов по разгрузке вагонов программингу. Программиррование для них, в общем случае, настолько скучно и просто, что некоторые настоящие ученые, которых я знаю, напрочь отказываются от подобной херни. Один даже уехал из Омерики лет 13 назад, когда получил карту как ученый, но его сократили с ученой работы и из вариантов было только программирование на с++.
ksi
Уже с Приветом
Posts: 10063
Joined: 20 May 1999 09:01

Re: Айтишники на пенсии

Post by ksi »

АццкоМото wrote: 18 May 2017 18:13 Очередной вывих мозга от нашего "шпешалиста" - завести никому не нужный указатель пораньше, держать его нулем без всякой цели три часа до реального создания инстанса, чтобы потом случайно все-таки использовать, проанализировать крэшлог и порадоваться, какой умный, что быстро нашел проблему

Не читайте советские газеты и ksi, просто ради чистоты сознания
Что, снова оно, пипиc .. :D ?

А по делу? Объект может реально наполняться содержанием (что сплошь и рядом в вычислительных задачах) в глубинах многочисленных if и while. А может так получиться, что код туда не зайдет, а вы думали что зайдет. Там создать вы его не можете из-за скопа. Когда будем создавать объект?
User avatar
АццкоМото
Уже с Приветом
Posts: 15276
Joined: 01 Mar 2007 05:18
Location: VVO->ORD->DFW->SFO->DFW->PDX

Re: Айтишники на пенсии

Post by АццкоМото »

ksi wrote: 18 May 2017 18:39
АццкоМото wrote: 18 May 2017 18:13 Очередной вывих мозга от нашего "шпешалиста" - завести никому не нужный указатель пораньше, держать его нулем без всякой цели три часа до реального создания инстанса, чтобы потом случайно все-таки использовать, проанализировать крэшлог и порадоваться, какой умный, что быстро нашел проблему

Не читайте советские газеты и ksi, просто ради чистоты сознания
Что, снова оно, пипиc .. :D ?

А по делу? Объект может реально наполняться содержанием (что сплошь и рядом в вычислительных задачах) в глубинах многочисленных if и while. А может так получиться, что код туда не зайдет, а вы думали что зайдет. Там создать вы его не можете из-за скопа. Когда будем создавать объект?
Не утруждайтесь ответами. Я устал с вами спорить. Это так же безнадежно, как пытаться выдавить из ммодел связанную мысль.

ЗЫ. А за "оно" буду жамкать морковку, хамло необразованное
Мат на форуме запрещен, блдж!
ksi
Уже с Приветом
Posts: 10063
Joined: 20 May 1999 09:01

Re: Айтишники на пенсии

Post by ksi »

partner_ca wrote: 18 May 2017 18:43 Тогда, когда он нужен.
Нужен он будет позднее, во многих местах данной функции. Логическое место, где у вас есть доступ к данных, которые позволяют его наполнить содержанием, находиться в другом месте функции, под всякими if. Как и где создавать объект?
ksi
Уже с Приветом
Posts: 10063
Joined: 20 May 1999 09:01

Re: Айтишники на пенсии

Post by ksi »

АццкоМото wrote: 18 May 2017 18:47
ksi wrote: 18 May 2017 18:39
АццкоМото wrote: 18 May 2017 18:13 Очередной вывих мозга от нашего "шпешалиста" - завести никому не нужный указатель пораньше, держать его нулем без всякой цели три часа до реального создания инстанса, чтобы потом случайно все-таки использовать, проанализировать крэшлог и порадоваться, какой умный, что быстро нашел проблему

Не читайте советские газеты и ksi, просто ради чистоты сознания
Что, снова оно, пипиc .. :D ?

А по делу? Объект может реально наполняться содержанием (что сплошь и рядом в вычислительных задачах) в глубинах многочисленных if и while. А может так получиться, что код туда не зайдет, а вы думали что зайдет. Там создать вы его не можете из-за скопа. Когда будем создавать объект?
Не утруждайтесь ответами. Я устал с вами спорить. Это так же безнадежно, как пытаться выдавить из ммодел связанную мысль.

ЗЫ. А за "оно" буду жамкать морковку, хамло необразованное
А разве не вы первый предложили меряться вот ими самыми :D ? Это не ваше :D
И таки давайте вы достанете свой и мы приложим к нему пипкомерку. Я уже сказал, с моим Си-шным кодом в мире были проданы сотни миллионов дивайсов, скорее ближе к миллиарду. И они работают. Предьявите свои достижения, прежде чем развивать свои инсинуации про мой "простейший уровень"
Я наоборот все время пытался перевесит разговор в деловое русло обсуждение конкретных вопросов, но вы решили идти ва-банк и применить "пипкомерку"! Видит бог, это не моя вина :D ! Помогите CK, я поставил вполне нормальный вопрос, неужели у вас такого не было в вашей практике?
User avatar
АццкоМото
Уже с Приветом
Posts: 15276
Joined: 01 Mar 2007 05:18
Location: VVO->ORD->DFW->SFO->DFW->PDX

Re: Айтишники на пенсии

Post by АццкоМото »

ksi wrote: 18 May 2017 19:03 А разве не вы первый предложили меряться вот ими самыми :D ? Это не ваше :D
Ok, если вы не понимаете, почему предложить померяться письками не есть оскорбление, а вот назвать собеседника "оно" - очень даже, то вам доходчиво объяснит модератор. Всего вам недоброго
Мат на форуме запрещен, блдж!

Return to “Пенсии”