[ /tv/ /rf/ /vg/ /a/ /b/ /u/ /bo/ /fur/ /to/ /dt/ /cp/ /oe/ /bg/ /ve/ /r/ /mad/ /d/ /mu/ /cr/ /di/ /sw/ /hr/ /wh/ /lor/ /s/ /hau/ /slow/ /gf/ /vn/ /w/ /ma/ /azu/ /wn/ ] [ Main | Settings | Bookmarks | Music Player ]

No.43511 Reply
File: 599716131.png
Png, 77.78 KB, 317×372 - Click the image to expand
edit Find source with google Find source with iqdb
599716131.png
Предыдущий тред: >>39226
>> No.43515 Reply
>>43511
> Ах, да, и правоверные линуксоиды тут как тут: «всё есть объект, стандарт ++11 моделирует Окружающий Мир»... но это уже несколько другой диагноз, ага.
Но ведь они пишут на C. Зачем в ядре C++?
>> No.43517 Reply
>>43515
Тем не менее, объектов в ядре предостаточно.
>> No.43519 Reply
Господа, где можно прочитать про реализацию связанных списков на основе массивов? Указатели сосут хуи, на массивах получается гораздо быстрее.
>> No.43520 Reply
>>43519
> связанных списков на основе массивов
Тупо юзаешь индексы в том самом массиве вместо указателей, если я правильно понял твой вопрос.
>> No.43521 Reply
Накидайте список для чтения нубу,буду благодарен
>> No.43522 Reply
>> No.43523 Reply
>>43519
Создаёшь два списка. Все элементы массива добавляешь в один список, а другой оставляешь пустым. Первый список — это свободная память. Второй — собственно список для хранения данных. Чтобы добавить элемент, перекидываешь его из первого списка во второй. И наоборот — из второго в первый, чтобы удалить.
Если непонятно, спрашивай ещё.
>> No.43524 Reply
>>43523
Нам показывали интересную реализацию на трех массивах, где был массив данных, массив адресов и массив из одного элемента. Зачем он нужен, я не помню. Рассказывали очень быстро, потому что, как сказали, это для тех, кто заинтересуется, остальным необязательно записывать. И мои записи оказались очень неполными. Заинтересовала низкоуровневость и скорость такого подхода.
>> No.43525 Reply
>>43523
Это полный бред, это вообще не имеет ни малейшего отношения к связному списку. Связный список подразумевает удаление элементов из середины/начала/конца(т.е. из любого места) и так же и в любое место добавление за О(1), то есть, за время приблизительно константное, не зависящее от общего числа элементов. А ещё соединять два списка(при некоторых обстоятельствах) и увеличить длину без долгого перераспределения памяти. Но в отличие от обычного массива в нём нельзя за О(1) найти элемент по его номеру.

В STL связный список - это list, а массив - это vector.

Связный список на массивах подразумевает, что каждый элемент - это запись, состоящая из собственно элемента с данными, номера следующего элемента(в этом же массиве) и номера предыдущего(опционально, можно только следующего). При этом в отдельной переменной требуется хранить номер первого элемента. (В ещё одной и номер последнего, опционально тоже). То есть они расположены беспорядочно, а порядок помнят внутри, кто следующий.
>> No.43526 Reply
>>43525
В чём бред? Как ты будешь добавлять и удалять элементы списка?
>>43524
Про три массива не слышал. Если найдёшь, расскажи.
>> No.43527 Reply
Правильно ли я решил задачу?
> Our binary search makes two tests inside the loop, when one would suffice (at the price of more tests outside). Write a version with only one test inside the loop and measure the difference in run-time.
https://ideone.com/pjXevf

Без вывода промежуточных результатов было трудно понять, какие значения будут иметь переменные low и high в случае, если элемент есть в массиве и он крайний слева/справа/находится где-то еще, и если этого элемента в массиве нет. Вроде бы сейчас программа работает верно.

https://ideone.com/kit5DM
>> No.43530 Reply
>>43525
> Это полный бред
Это не бред, анон. Конструкция того анона действительно позволяет удалять/добавлять элементы за O(1), как и обычный список с элементами в куче. Ты просто не понял идею.
>> No.43531 Reply
>>43530
Из середины? А почему она называется связным? Я впервые про такой слышу.
>> No.43532 Reply
>>43526
> Как ты будешь добавлять и удалять элементы списка?
Путём перестановок номеров следующих и забывания про него.
> Про три массива не слышал. Если найдёшь, расскажи.
В >>43525 это и описано. Три массива или массив записей с тремя полями, это одно и то же.
>> No.43533 Reply
Что содержит переменная массива int a[]? Указатель на первый элемент? Если это так, тогда почему sizeof(a)/sizeof(int) дает точную длину массива?
>> No.43534 Reply
>>43533
> An object of array type contains a contiguously allocated non-empty set of N subobjects of type T.
Т. е. она содержит в себе весь массив.
>> No.43535 Reply
>>43531
> Из середины?
Да хоть откуда. Ну, вернее, с теми же ограничениями, что и у обычного связного списка.
> А почему она называется связным?
Хм. Ну потому что каждый используемый элемент массива содержит в поле next индекс/указатель на следующий (и prev, если делаем двусвязный). Это самый обычный связный список. Просто элементы выделяются не в куче, а в массиве. А второй список, использующий то же самое поле next, пронизывает все свободные элементы массива, чтобы мы могли мгновенно найти свободную ячейку или пометить как освободившуюся. Вот и вся идея.
>> No.43537 Reply
>>43522
Спасибо,щас посмотрю
>> No.43539 Reply
>>43537
"Хакинг, искусство эксплоита"
>> No.43540 Reply
Алсо, Таненбаум: "Архитектура компьютера" и книга про сети.
>> No.43541 Reply
http://ru.stackoverflow.com/
Откуда здесь столько веб-макак и ява-даунов?
>> No.43542 Reply
>>43541
Ну а что сейчас в ходу? Оно и есть.
>> No.43543 Reply
Анон, я пока не могу сам оценить сложность этих задач. Насколько они трудные?
http://pastebin.com/vfVumrQd
>> No.43544 Reply
>>43540
>>43539
Посмотрю,спасибо
>> No.43563 Reply
>>43543
Средней трудности, и совершенно ненужные.
Лучше задачи просмотра дерева каталогов и джойна таблиц из базы решить. Больше пользы будет.
>> No.43565 Reply
>>43540
Я не согласен. Эти задачи дают хорошие базовые навыки программирования. После них обычные просмотры дерева каталогов и джойны тебя уже не запутают так просто. Все кроме первой дают понимание рекурсии хорошее(даже если в программе нет рекурсий и стеков, если ты её понимаешь), это дин. прог., отдельный метод разработки алгоритмов. После них и с деревьями легче будет. Матрицы по мелочи понадобятся, если с графикой что-то будешь делать.
>> No.43566 Reply
>>43565
> Все кроме первой дают понимание рекурсии хорошее
А SICP дает понимание рекурсии плохое?
>> No.43567 Reply
>>43566
Это лучше, так видно, где и зачем её можно использовать. И интуиция лучше развивается.
>> No.43595 Reply
Анон, как правильно заполнять вектор числами из массива? Я вижу, что после выполнения assign вектор содержит какую-то хуйню.

https://ideone.com/0mEjOf
>> No.43596 Reply
>>43595
Оказалось, что sizeof(a) - это хуйня какая-то, а не размер массива. Чем это можно объяснить?
https://ideone.com/8kI4SG
>> No.43597 Reply
>>43596
Всё потому, что при передаче массива по значению проёбывается его размер.
https://ideone.com/rzHPoj
>> No.43598 Reply
Какой в C++ максимальный диапазон индексов массива?
#define SIZE 40000
int seq[SIZE]
работает нормально, а программа с
#define SIZE 65000
int seq[SIZE]
крашится при запуске.
>> No.43599 Reply
>>43598
Ошибся. Из-за опечатки у меня получилось
const SIZE = 650000
Но мне все равно интересно, какой может быть максимальный индекс.
>> No.43600 Reply
Алсо, какая глубина стека на пекарне? Я реализовал квиксорт на стеке отложенных заданий и обнаружил, что массив из 65000 элементов без ошибок сортируется при помощи стека с глубиной 50 (хотя сначала я выставлял глубину 500). Стандартная реализация квиксорта исчерпывает стек уже при длине массива, равной 50000.
>> No.43601 Reply
>>43599
2 метра, вроде. Он настроек компилятора тоже зависит.
>> No.43602 Reply
>>43599
> какой может быть максимальный индекс
size_t - 1

А вот стек не резиновый. И если ты слишком большой массив опишешь в стеке - вполне может упасть. Юзай вектор и не еби мозг себе и нам.
>> No.43603 Reply
>>43602
> size_t - 1
Тьфу, фигню какую-то написал. SIZE_MAX/sizeof(T). Т.е. миллиард с лишним элементов на 32-битке и дохуялиард на 64.
>> No.43604 Reply
>>43601
> Он настроек компилятора тоже зависит.
А если в дополнительных тредах - то и от параметров, которые указали при создании треда...

>>43600
> уже при длине массива, равной 50000
Ты там, случаем, временные массивы на стек не складывал?
>> No.43605 Reply
>>43598
>>43600
С++ не налагает на это никаких ограничений, всё зависит от платформы, железа, компилятора по идее.
>>43602
При чём здесь вектор?
> не еби мозг себе и нам
Нормальный вопрос, чё ты быкуешь тут.
>> No.43606 Reply
>>43605
> При чём здесь вектор?
При том, что вектор выделяет память в куче и не валится от такой мелочи, как массив из миллиона элементов (если код исполняется не на микроконтроллере, конечно). А по удобству работы с ним явно не хуже массива.

Зачем вообще юзать в крестах голые массивы без уважительной причины? Имхо, это моветон и преждевременная оптимизация.
>> No.43607 Reply
>>43606
> При том, что вектор выделяет память в куче
Допёр теперь.
>> No.43608 Reply
Анон, подскажи, почему этот вариант быстрой сортировки зацикливается? На возрастающей последовательности никаких проблем нет, зато на инвертированной последовательности алгоритму не хватает никакой глубины массива.

https://ideone.com/NvWiH1
>> No.43609 Reply
>>43608
Вот код. Пусть будет на моем аккаунте.
http://ideone.com/IEQo2w
>> No.43610 Reply
>>43609
Codestyle твой неоче, зачем ты стек по значению передаешь, почему top = top + 1 вместо top++ или хотябы top += 1?
>> No.43611 Reply
>>43610
Это не очень важные детали, я этот код писал три месяца: немного напишу до логического завершения и берусь за другое или читаю про алгоритмы. Вот так и вышло, что есть отличия типа quicksort с маленькой буквы, а все остальные с большой. В чем там может быть проблема?
>> No.43612 Reply
> При входе в рекурсию или при добавлении задания в стек нужно проверять,
с какой стороны элементов меньше, а с какой - больше, и сразу переходить
к обработке меньшей части, а большую - откладывать. Таким образом можно
гарантировать, что требуемая глубина стека не превысит log N.
Как можно реализовать это в квиксорте на стеке? Неожиданно оказалось, что тот алгоритм, который нам давали, не содержит этих важных проверок.
>> No.43621 Reply
>>43612
> Как можно реализовать это в квиксорте на стеке?
Ну так и реализуй... Пушишь на стек ту, которая больше. Продолжаешь работать с той, которая меньше.
>> No.43631 Reply
Доброняши, а дайте мне хороших уроков по Qt, пожалуйста.
Где можно научиться пользоваться потоками на с++?
И еще вопрос: а что вообще нужно чтобы с сокетами на плюсах играться?
мимо-не-бейте-пожалуйста
>> No.43632 Reply
>>43631
Откатывайся на Сижку.
Там в POSIX API есть и потоки, и файлы и сетевые/сокетные соединения и фсё чё хошь.
>> No.43633 Reply
>>43631
> а что вообще нужно чтобы с сокетами на плюсах играться?
Статья Криса Касперски. Так и называется - играем на сокетах вин апи.
>> No.43638 Reply
File: 1438453305898.png
Png, 116.78 KB, 1147×605
Your censorship settings forbid this file.
r-18
>> No.43639 Reply
>>43631
> потоки на c++
Параллельное программирование на С++ в действии, Энтони Уильямс.
>> No.43640 Reply
>>43638
ebin:DD
>> No.43642 Reply
Анон, посмотри здесь на второй исходник.
http://clc-wiki.net/wiki/K%26R2_solutions:Chapter_4:Exercise_2

Каким образом можно научиться так же охуенно кодить машину состояний? Что требуется для того, чтобы написать качественный алгоритм такого типа? Как продумать все варианты смены состояний и их обработку, чтобы учесть все случаи?
>> No.43643 Reply
>>43642
> Каким образом можно научиться
Берёшь и кодишь машину состояний. Потом вторую. Потом третью. Рано или поздно ты познаешь дао.

Я серьезно, анон. Практика и ещё раз практика.
>> No.43644 Reply
>>43642
Сходил по ссылке и в очередной раз убедился, что сишкоблядство - это диагноз. Сириусли, анон, писать такие простыни из свичей-в-ифах-в-свичах может быть увлекательно и поначалу даже забавно, но ты проклянёшь всё, когда тебе поручат поправить какую-нибудь глупую ошибку или добавить пару новых состояний в похожий кусок говна, написанный другим программистом. Всё это время ты будешь рвать волосы на жопе, а ОО-боги будут ходить у тебя за спиной, показывать на тебя пальцем и весело шутить.
Почитай книгу Фрименов про паттерны ОО-проектирования, главу про состояния. Там ты увидишь правильную реализацию машины состояний, а не высер из одной функции с зашкаливающей цикломатической сложностью.
>> No.43645 Reply
>>43644
ИМХО ООП появилось во многом как ответ на заказчиков, которые не могут написать ТЗ. И как следствие понимать зачем оно о начинаешь только после разъярённых баталий с ними и их бесконечными правками. А потом уже начинаешь всё делать в виде нагромождения слоёв абстракции, чтобы вся прога была как кусок пластилина, зараняя готовясь к дождю из правок. Если программа в будущем не меняется, то конечно можно всё функциями записать и всё. Или даже одним потоком команд.
Плюс монотонное написние каждый день одинакового кода со временем толкает на создание абстракций, тогда когад уже написал одно и то же достаточное число раз, чтобы выявить в этом общее. И вот когда пытаешься выделить всё общее и начинается это всё.
А студентам и новичкам чё? Сотня строк - это уже гигансткая программа и в голове еле помещается. Препод задачу даст или в учебнике - после решения задача всегда в мусорнике. Запускают задачу только один раз на глазах у препода руками самого автора. И тут конечно никому не нужно ООП.
А CMS-мальчики почти ничего не делают дальше чем натянуть вёрстку на CMS и вызвать пару плагинов jQuery. Если плагины и CMS это никак не делают, то уже всё, говорим заказчику, что мы не могём.
>> No.43646 Reply
>>43645
> ИМХО ООП появилось во многом как ответ на заказчиков, которые не могут написать ТЗ
...то есть в 98% случаев (крайне оптимистичная оценка). При правильном подходе к проектированию и написанию добавляются ещё и приятные бонусы в виде простоты повторного использования кода и простоты его изменения.
> А потом уже начинаешь всё делать в виде нагромождения слоёв абстракции, чтобы вся прога была как кусок пластилина...
...или как стройная конструкция из металлических балок, которую в любой момент можно разобрать, перекроить, вывернуть до неузнаваемости и опять собрать. Или заменить какую-то ферму на усиленную, чтобы избежать падений при повышении нагрузки. Или заменить недостроенный модуль на временную деревянную клетку, чтобы уже к вечеру показать заказчику работающий прототип. Выбор за программистом.
> Если программа в будущем не меняется, то конечно можно всё функциями записать и всё.
Такого не бывает. Если это коммерческий продукт, то тут всё очевидно - дырявые ТЗ, непостоянство желаний заказчика и просто мелкие полезняшки для повышения лояльности будут существовать всегда. В домашних наколенных хелловорлдах двигателем изменений будут любознательность и тяга автора к совершенству. Даже одноразовые инструменты в процессе написания, отладки и нескольких десятков "единичных" прогонов ("Ну всё, в этот-то раз всё пройдёт отлично. F5, забиваем данные, ждём... ах ты ж конина, неужели ещё и такое бывает? Ок, вот здесь подопрём костыликом и теперь-то уж оно точно отработает успешно!..") могут несколько раз в корне перемениться.
> монотонное написние каждый день одинакового кода со временем толкает на создание абстракций, тогда когад уже написал одно и то же достаточное число раз, чтобы выявить в этом общее. И вот когда пытаешься выделить всё общее и начинается это всё.
И это замечательный процесс. Гораздо хуже, когда какой-нибудь кодер не задумываясь копипастит какую-нибудь пустяковую функцию везде где ни попадя. А потом начинается погоня за багами в этой функции, которая уже успела прочно укорениться и пустить метастазы в куче проектов.
>> No.43647 Reply
>>43646
> приятные бонусы в виде простоты повторного использования кода и простоты его изменения
Я думаю, что эти приятные бонусы являются одними из основных целей.
> дырявые ТЗ, непостоянство желаний заказчика и просто мелкие полезняшки для повышения лояльности
Для справедливости в этот список нужно добавить объективные и независящие изменения обстаятельств. Те же изменения законов. И изменения форматов. И на рынке изменения могут быть в поведении потребителя и т.д.
>> No.43648 Reply
Анон, дай мне список тем, в которых надо разобраться, чтобы уметь написать качественный криптор.
1) Алгоритмы шифрования - я их знаю кучу, и сложные алгебраические, и совсем простые на битовых операциях.
2) Формат ПЕ-файлов. Что можно почитать?
3) ВинАПИ. Очень объемная тема. Что конкретно нужно знать?
Что еще нужно знать кроме этого?
>> No.43649 Reply
>>43648
1) Строго похуй, как ты шифровать будешь. Тебе нужно будет стаб (декриптор) и ключ спрятать, а внутри подойдет все, что сложнее однобайтового xor.
2) Microsoft PE and COFF Specification, winnt.h, private/ntos/dll/ldrapi.c, дальше статейки, дальше берешь windbg и разбираешься с непонятными моментами.
3) Рихтера почитай, чтобы иметь представление, что вообще в Windows API есть, потом разделы MSDN "Memory Management" и "DLLs, Processes, and Threads". Статейками догонишься (всякие ASLR, SxS, UIPI/UAC опять же).
Учи асм, кодирование инструкций x86, учи математику, читай все, что сколько-нибудь касается темы.
>> No.43652 Reply
File: modexp.jpg
Jpg, 140.08 KB, 1062×879 - Click the image to expand
edit Find source with google Find source with iqdb
modexp.jpg
Расскажите побольше про указатели на метки &&begin. Только что у меня не получилось повторить аналогичный прием - при выполнении произошла ошибка. Эта штука поддерживается всеми сями?
>> No.43656 Reply
>>43652
Это расширение гцц, не пользуйся им. Алсо, криптовать код таким образом - бессмысленная затея. Можно и статический декриптор написать, и просто не дать закриптовать обратно.
>> No.43660 Reply
>>43648
Цель можно уточнить? Ты хочешь спрятать вирус от сканера или написать какую-нибудь защиту от копирования?
>> No.43662 Reply
>>43660
> написать какую-нибудь защиту от копирования
Этим занимается только петушня, в которой нет духа 2003 года, когда все ебанулись по вирмейкерству, и из каждого утюга лезли верасы.
>> No.43663 Reply
>>43662
Петушня 2003 года со своими вирасами скатилась в коммерс, спилась или сторчалась, или сидит, или ушла из коденга.
>> No.43665 Reply
File: archive.zip
Zip, 0.01 KB, 0 files - Click the image to get file
view
archive.zip
Сап. Пытаюсь повернуть кватернионом модельку, моделька херится, всё херится и катится к хуям. ЧЯДНТ?
>> No.43666 Reply
>>43665
> ЧЯДНТ?
Очевидно, ты совсем не смотришь вакансии и средние цены.
>> No.43705 Reply
Анон, как на С/С++ сгенерировать последовательность вещественных чисел из диапазона [0;1)? Линейную последовательность, допустим, сгенерировать довольно просто лень сейчас формулировать идею, а как бы со случайными числами? При этом не должны появляться очень маленькие дроби типа 0.000006987. Последнее не обязательно, но желательно для красоты.
>> No.43714 Reply
>> No.43719 Reply
>>43705
> как на С/С++ сгенерировать последовательность вещественных чисел из диапазона [0;1)
Вот так, например:
std::default_random_engine gen;
std::uniform_real_distribution<float> distr(0, 1);
float rnd = distr(gen);
> не должны появляться очень маленькие дроби
Просто округли до нужного тебе знака.
>> No.43823 Reply
Если у нас есть класс, что содержит методы, которые в коде не вызываются ни разу, то будет ли код этих методов внесен с полученный исполняемый файл? Компилятор - g++
>> No.43826 Reply
>>43823
При максимальной оптимизации - нет.
>> No.43841 Reply
А я поступил с биологии на информатику сразу на пятый курс. Погромирование не знаю, престейших лабов сделать не в состоянии, чую попрут скоро.
>> No.43842 Reply
>> No.43852 Reply
>>43826
Спасибо.

Следующи вопрос. Везде говорят "минимизируйте использование пропроцессора", но у меня есть следующая две ситуации. Первая - есть несколько классов и надо создать 5-10 методов по типу
std::string getPropertyName() {
   return foo("some_string");
}
Как это облечь в шаблоны красиво я не знаю, запилил макросом. Сильно за такой код будуть бить ногами? Или он вполне кошерный?

Вторая ситуация - есть классы, для удобства нужно объявить
class MyClass {}
typedef std::shared_ptr<MyClass> PMyClass;
typedef std::list<PMyClass> MyClassList;
Каждый раз руками писать - лень. Тоже сделал через макрос. Вопрос аналогичный первму случаю.
>> No.43896 Reply
>>43852
> 2015
> typedef
Используй алиасы, Люк!
>> No.43898 Reply
>>43852
Обычно, если надо использовать препроцессор, то у тебя где-то проеб в архитектуре.
Например в первом случае, если твои 5-10 методов это действительно геттеры, которые возвращают константное значение, то я бы сделал базовый класс, в котором в протектеде напиханы эти константы, конструктор их принимает, а геттер возвращает. И каждый класс, которому нужны такие геттеры просто бы наследовал от этого. Пример кода, имена сам получше подберешь:
class Property
{
  protected: 
    const std::string property;
  public:
    Property(std::string p): property(p) {}
    getProperty() const { return property; }
}

class A: public Property
{
   public:
    A(std::string propertyA, ...);
...

A a("a_property", ...);
Ну ты понел. Можно шаблонизировать класс и делать пропертю произвольным типом. Можно значение проперти захардкодить в конструкторе класса и т.д.
>> No.43899 Reply
>>43852
Вторая ситуация: using PMyClass = std::shared_ptr<MyClass>;
>> No.43901 Reply
>>43899
Ты глупый и самоуверенный. Это вообще дело десятое через что он новый тип объявляет.
Он использует короткий макрос как раз чтобы не писать этот бойлерплейт.
>>43852
Минимизировать - значит не использовать там, где можно обойтись шаблонами и прочим. Или где копипаст минимален.
>> No.43902 Reply
>>43901
Прочти Скотта Майерса. Это не десятое дело, хотя бы потому что умные дяди придумали using. Этот "бойлерплейт" позволяет не городить огород:

template<typename T>
struct VasyanList {
typedef std::list<T, VasyanAlloc<T>> type;
};

template<typename T>
class VasyanClass{
private:
typename VasyanList<T>::type list;
};

В то время как алиасы позволяют сразу написать:

template<typename T>
using VasyanList = std::list<T, VasyanAlloc<T>>;
  
template<typename T>
class VasyanClass{
private:
VasyanList<T> list;
};

Разницу чуешь? Где бойлерплейт?
>> No.43904 Reply
File: Paris_Tuileries_Garden_Facepalm_statue.jpg
Jpg, 101.64 KB, 1024×683 - Click the image to expand
edit Find source with google Find source with iqdb
Paris_Tuileries_Garden_Facepalm_statue.jpg
>> No.43938 Reply
>>43901
> Минимизировать - значит не использовать там, где можно обойтись шаблонами и прочим. Или где копипаст минимален.
Это да. Но конкретно в моем случае лучше через макросы сделать? Или пилить "более плюсовыми" средствами, как >>43898-кун говорит? С одной стороны ИМХО с препроцессором кода меньше + он понятнее выходит. С другой - говорят что это некрасиво.
>> No.44608 Reply
Почему API STL - такое говно? Неужели нельзя было сделать vector::erase(int i), чтобы не писать все время erase(v.begin() + i)? Почему нет removeAll(const T& val), и приходится городить огород с v.erase(std::remove(v.begin(), v.end(), val), v.end())? Зачем это фетишистское ололо-другая парадигма с std::sort(v.begin(), v.end()) вместо vector::sort()?
>> No.44610 Reply
>>44608
Языки программирования:
Мэйнстрим (область с заторможенным временем, в которой работает 99% программистов. Время заторможено потому, что в серьезном бизнесе сделать за предсказуемое время важнее, чем быстро. Сейчас в мейнстриме примерно 1975-ый год):
• C (няшная сишка) — самый простой и убогий язык из тех, что используются на практике. Более убогий — только брейнфак. Единственное выразительное средство — копипаст, для автоматизации которого есть даже специальный второй язык-препроцессор. Делает решение любой задачи нетривиальным, так что его решение задач с его помощью может требовать высокой квалификации. Тем не менее, типичная няшаблядь ничего не знает и не умеет. Даже дибиловатый обгвидок знает, помимо гвидопыха, еще и сишку, но сишкаблядь не знает ничего кроме нее. Языком владеют почти все, но только няшаблядь этим знанием гордится, остальные стыдливо скрывают. Также няшаблядь может ошибочно считать что знает C++ или несуществующий язык C/C++. Благодаря C компьютерные программы — самое ненадежное из всего созданного человеком.
• C++ (кресты) — самый сложный и уродливый (и то и другое временно, появился быстро развивающийся соперник) из языков, использующихся на практике, но выразительность его невелика. Усовершенствованная сишка. Сложность использования повышает ЧСВ крестобляди до заоблачных высот, но вменяемая крестоблядь понимает, на каком говне пишет и постоянно пытается себя загипнотизировать. Поэтому любое упоминание крестов в негативном ключе вызывает атомный батхерт крестобляди и обвинения в некоем «неосиляторстве». Насчет неосиляторства крестоблядь, обычно, права — это вообще распространенное явление. Интересно, что до недавнего времени неосиляторами были даже разработчики большинства крестокомпиляторов. Тем не менее, по мере «осиливания» крестов, мнение о них может меняться только к худшему.
• Java (жаба) — кобол нашего времени. Убогий и примитивный, но простой язык. Хорошо подходит для написания зиллионов строк кода быстро-быстро, пока солнце еще высоко. Наряду с крестами — один из самых массово используемых языков.
• C# (сисярп) — зародился в недрах микрософта из-за анальной копирастии Сан и отсутствия стандарта жабы как сплав жабы и сишки, но впоследствии стал самым уебищным, но единственным в мейнстриме ФЯ. Уверенно движется к тому, чтобы отобрать у крестов лавры самого сложного и уродливого языка. 80% программистов на нем знают и используют только его 20% подмножество — жабу. Попытка микрософта насильно осчастливить жава- и крестоблядей для последующего захвата и порабощения, о чем неустанно предупреждают ведущие мозолееды. Кресты двухтысячных.

Немейнстрим (не используются на практике, программисты знающие эти языки, на работе пишут на других, указанных в конце):
• ML (стрелочное эмелеговно) — старейший ФЯ, многое в нем напоминает современные языки, но сделано впервые, а потому криво и уродливо. Уебищность эмеля и его производных часто связывают с практичностью, потому как все языки используемые на практике (мэйнстрим) непереносимо уебищны, что позволяет надеяться на то, что и эмелеговно тоже скоро к ним присоединится. Любой программист на эмеле — будущий программист на хаскеле, который пока боится привыкнуть к хорошему и блевать кровью на работе. Типичная эмелеблядь пишет на работе на крестах или сисярпе.
• Haskell (хаски) — условно современный ФЯ, являющийся, разумеется, говном, но несколько менее вонючим, чем остальное здесь перечисленное. Имеет подмножество Haskell 98 для обучения второкурсников, на котором даже факториалы и фибоначи нормально не напишешь и раковую опухоль, которая его убивает — стандартную прелюдию. Несколько сниженная в сравнении со средним уровнем говенность хаски — основная мишень для критики. Дело в том, что он, по всей видимости, недостаточно уебищен для мейнстрима, да еще и вызывает головные боли и тошноту у знающих его программистов, когда те отрабатывают свой кредитный фокус-покус на работе. Типичная хаскиблядь зарабатывает на жизнь программированием на сисярпе, крестах.
>> No.44612 Reply
>>44608
> Неужели нельзя было сделать vector::erase(int i), чтобы не писать все время erase(v.begin() + i)?
1) Чтобы туда можно было совать итератор, а не только число. Там гораздо больше гибкости. Ты скорее всего не знаешь зачем нужны итераторы и как ими пользоваться. И не надо тут "нинужно", это не php.
2) Эта операция не характерна для вектора. Она медленная. Один элемент будет удаляться за время, пропорциональное длине всего вектора.
> Почему нет removeAll(const T& val)
Но ведь слишком нетривиальная операция. В каком языке ты такое видел? Сделано, чтобы функций было не так много и они были общими.
> std::sort(v.begin(), v.end())
1) Можно запихнуть туда совсем другие последовательности. Гораздо больше применений.

Всё там в STL хорошее, просто ты ничего не понимаешь. Ты вообще пробовал использовать другие структуры данных кроме vector? А использовать итераторы для получения и обработки каких-нибудь данных?
>>44610
В контакте/двач тебе, что ли? Нахуя это говно здесь нужно?
>> No.44613 Reply
>>44612
> 1) Чтобы туда можно было совать итератор, а не только число. Там гораздо больше гибкости. Ты скорее всего не знаешь зачем нужны итераторы и как ими пользоваться. И не надо тут "нинужно", это не php.
Так это STLфаги говорят "нинужно", вот и ты прямо сейчас. Перегрузить метод, чтобы была версия с итератором и версия с индексом, слишком нинужно?
> 2) Эта операция не характерна для вектора. Она медленная. Один элемент будет удаляться за время, пропорциональное длине всего вектора.
Я знаю. Но вот нужна она, и все тут, и хочу писать это просто индексом, без сраного дополнительного begin(). А STLфаги вот опять говорят, что нинужно.
> Но ведь слишком нетривиальная операция. В каком языке ты такое видел? Сделано, чтобы функций было не так много и они были общими.
В божественной Qtшечке. "Было не так много" и "общими" - эталонное нинужно, мне не лень один раз прочесть ман, мне лень постоянно писать erase-remove вместо вызова одного простейшего метода.
> 1) Можно запихнуть туда совсем другие последовательности. Гораздо больше применений.
Перегрузка! Опять нинужно, сделаем один общий метод, а простейшие перегрузки для быстроты и удобства - это для быдла, программист должен писать много кода.
> Всё там в STL хорошее, просто ты ничего не понимаешь. Ты вообще пробовал использовать другие структуры данных кроме vector? А использовать итераторы для получения и обработки каких-нибудь данных?
3+ года опыта. Да, пробовал.
>> No.44614 Reply
>>44613
Ну ок, методов не хватает, но те, которые есть, - хорошие. Нужно ли это всё в либе, которая входит в стандарт языка? Всё таки Qt - стороння либа, а реализация STL зависит от компилятора.
>> No.44615 Reply
Как перевести числа от 1 до 10 в текст в зависимости от выбора?
>> No.44616 Reply
>>44615
sprintf
>> No.44617 Reply
>>44614
> Нужно ли это всё в либе, которая входит в стандарт языка?
Вообще говоря, нужно. Все-таки, кмк, целью стандартной либы является не просто дать ну хоть какой-то инструментарий, а инструментарий удобный, требующий наименьшее количество телодвижений для получения результата. Отсутствие инкапсулированных erase-remove - дикий фейл же.
Ну энивей, есть ли какой-нибудь набор либ, дающий минимальный оверхед над STL, но предоставляющий developer-friendly API?
>> No.44618 Reply
>>44617
Может проще наделать своих обёрток тогда и таскать?
>> No.44627 Reply
File: qwe.PNG
Png, 11.13 KB, 346×611 - Click the image to expand
edit Find source with google Find source with iqdb
qwe.PNG
Объясните, пожалуйста, мне, долбоебу, почему выводятся нули, а не единицы?
>> No.44628 Reply
>>44627
У тебя Test копируется на каждой итерации циклов и кек и кок вызываются над временной копией.

З.Ы. Или это не ц++? Что за язык, анон?
>> No.44629 Reply
>>44628
Похоже на C++/CLI.
>> No.44630 Reply
>>44628
Это M$ Visual C++ видимо.

Вот например как можно зделось на g++ -std=c++11 https://ideone.com/6WgS29
>> No.44631 Reply
>>44628
>>44629
>>44630
Благодарю за помощь, я и представить не мог, что он создает новый объект вместого того, чтобы взять существующий из массива. Это какой-то пиздец, честно, ни в одном языке такого не видел.
>> No.44632 Reply
>>44630
> c++11
Ты используешь его неправильно.
for (auto& t : test) {
    t.kek();
}
for (auto& t : test) {
    t.kok();
}
>> No.44633 Reply
>>44632
Можно и так.
>> No.44715 Reply
Может у кого есть код игры "Cбей самолет" на с++?
Курсач пишу, ничего не могу придумать.
>> No.44716 Reply
File: 1.png
Png, 10.10 KB, 663×1069
edit Find source with google Find source with iqdb
1.png
File: 2.png
Png, 39.46 KB, 649×444
edit Find source with google Find source with iqdb
2.png

>>44715
отклеилось
>> No.44741 Reply
>>44716
Когда мне дают задание через блоксхемы, я эту всю логику делаю через переписывания всей этой блоксхемы через goto, чтоб потом у проверяющих глаза на лоб лезли от чтения этого. Может быть это научит их давать задания не в виде блок-схем
>> No.44746 Reply
>>44632
>>44630
Вместо test.push_back(Test()); лучше всё-таки писать test.emplace_back();, раз уж речь про новые стандарты зашла.
>> No.44747 Reply
>>44741
А что такого? Блоксхемы прекрасно реализуются через конечный автомат с набором функций.
>> No.44748 Reply
>>44741
Что же с тобой будет, когда UML учить начнёте.
>> No.44749 Reply
>>44748
Для использования UML есть основания и у него есть преимущества. У блок-схем - нет. Блок-схемы громоздко выражают строк 5-10 кода, который можно было написать в псевдо-коде. Не понимаю, ому они могут быть нужны кроме как при изучении кодинга впервые.
>> No.44750 Reply
File: Ris136-137.png
Png, 26.94 KB, 874×520
edit Find source with google Find source with iqdb
Ris136-137.png
File: block.png
Png, 34.40 KB, 709×1133
edit Find source with google Find source with iqdb
block.png

>>44747
В блок-схемах нет понятия "функции". Есть просто некие куски "действий", связанных стрелочками, и действия эти могут вообще что угодно менять, там нет понятия области видимости, все переменные глобальные и изменить их можно из любого произвольного места, и есть еще условия, которые куда угодно могут прыгать (примерно как if(условие) goto кудато; else goto кудато-еще;). Таким образом, логичнее всего задачи с блок-схемами делать как одну сплошную функцию с понатыканными метками и с if-goto вместо ромбиков.

Вот еще про goto с блоксхемами https://habrahabr.ru/post/114211/
Есть еще такой как бы язык программирования на блоксхемах (но не совсем) ДРАКОН http://drakon.pbworks.com/w/page/18205503/%D0%93%D0%BB%D0%B0%D0%B2%D0%B0%2016 который компилируется именно в эту лапшу из goto. А писать блоки, связываемые стрелочкам, можно на питоне, си, плюсах и прочем
>> No.44752 Reply
>>44750
Да, там нет понятия "функции", это не мешает ему прекрасно через них реализовываться. Привыкай к тому, что тебе дают задачу, а не ТЗ, и все детали реализации ты придумываешь сам. Всегда можно написать красиво и понятно, даже из блоксхем, без всяких goto в одной функции, было бы желание.
>> No.44753 Reply
>>44752
В ТЗ нет деталей реализации или я чего-то не понимаю в ТЗ. Никогда не видел таких ТЗ. Правда, я вообще никогда не видел серьёзных ТЗ. Всегда или без ТЗ, или с ТЗ "на отстань"
>> No.44758 Reply
>>44753
Да там каждый пишет кто во что горазд, мне и с деталями попадались, что не особо улучшало качество ТЗ.
>> No.44759 Reply
>>44752
> Да, там нет понятия "функции", это не мешает ему прекрасно через них реализовываться.
Можно конечно вынести некие блоки кода в функции, и сами условные переходы делать таким образом, чтобы они попадали на вызов функции, а не просто кусков кода (ну это еще при условии, если нам внезапно не может понадобится из середины функции прыгнуть фиг знает куда, следуя логике блоксхемы). Это даже будет иметь некий смысл, если некие "блоки" или последовательность блоков в блок схеме повторяются. Но от goto это в любом случае не избавляет, а лишь появляются некие дополнительные задачи, написать какую-то функцию, чтобы такие-то переменные передавать в нее. Сам порядок управления (control flow) со всеми этими условиями, если задание дано в виде блоксхемы, легче пилить именно на метках и "if(условие) goto метка;". Это достаточно наглядно показано в примере в той статье на хабре https://habrahabr.ru/post/114211/
>> No.44760 Reply
File: 3b25af0c.jpg
Jpg, 8.74 KB, 200×302 - Click the image to expand
edit Find source with google Find source with iqdb
3b25af0c.jpg
>>44752
> Всегда можно написать красиво и понятно, даже из блоксхем, без всяких goto в одной функции, было бы желание.
ОК, перепиши из этой блоксхемы с хабра без goto чтоб красиво и понятно
>> No.44761 Reply
/s/, проверь, пожалуйста, код и укажи на ошибку. Не умею ничего. Сегодня вечером первый раз в жизни попробовал написать что-нибудь, Hello world получился, а вот калькулятор нет. В смысле программа компилируется, но в ответ выдаёт совершенно непонятные числа. Что я делаю не так?

#include <stdio.h>

int main()
{
   float a, b, c;
   int k;
   printf("Введите первое число: ");
   scanf("%d", &a);
   printf("Введите второе число: ");
   scanf("%d", &b);
   printf(" Введите 1, если вы хотите сложить числа,\n 2, чтобы вычесть из первого числа второе,\n 3, чтобы умножить числа,\n 4, чтобы разделить первое число на второе.\n");
   scanf("%d", &k);
   if (k=1) c=a+b;
   if (k=2) c=a-b;
   if (k=3) c=a*b;
   if (k=4) c=a/b;
   else printf("Вы ретард, аутист и дегенерат. Вводить можно только одно из следующих чисел: 1, 2, 3, 4. Попробуйте снова.\n");
   printf("Ваш результат: %d.\n", c);
   return 0;
}
>> No.44762 Reply
>>44761
Ошибка очень сильно слишком банальная, чтобы спрашивать. Странно, что ИДЕшка не указывает на неё, скорее всего ты игноришь ворнинги. Присвоения в ифах вместо сравнений.
>> No.44763 Reply
>>44762
Заменил = на == в if, но программа адекватно работать не стала. По-прежнему что-то не так. IDE нет, я линуксоид, пишу в Emacs, компилирую в gcc, запускаю в консоли. Может показаться круто для новичка, но Emacs раньше использовал как текстовый редактор и органайзер из-за его чудесного org-mode, а чтобы узнать, как "натравить" gcc на файл с кодом, достаточно тридцати секунд в гугле.
>> No.44764 Reply
>>44761
Во-первых, в scanf %d используется для целых чисел, для флоатов используй %f;
Во-вторых, как тебе сказали выше, присвоение вместо сравнения в if;
В-третьих, у тебя для k = 1,2,3 всегда будет выводится сообщение про аутиста, используй else if вместо if;
В-четвертых, если ты ввел неправильную команду, все равно выведется мусорный результат, используй return 1 после сообщения об ошибке;
В-пятых, опять же в printf %d вместо %f.

И, наконец, никогда, запомни, НИКОГДА не используй условия и циклы без скобок.
>> No.44765 Reply
>>44763
Вся суть этих чудаков. Чтобы натравить gcc достаточно, а что такое стат. анализ мы не знаем. Лучше конвеншены по написанию кода почитай. На Линуксе есть тоже IDE, как минимум QtCreator и что-то от джетбрейнов.
>> No.44766 Reply
>>44763
Если ты используешь gcc, то запускай его с флагами -Werror -Wall.
Можешь еще -Wextra -Wpedantic добавить.
>> No.44767 Reply
>>44764
>>44766
Огромное спасибо! Всё получилось.
>> No.44768 Reply
>>44760
Не знаю, можно ли назвать это красивым http://paste.ofcode.org/NkRunu2RSL5tMyAhQ6CKX5 но уж понятно точно.
>> No.44769 Reply
>>44768
Нет, стало менее понятно и красиво чем тот код с хабра. Получилось как с goto только запутанней. Собстственно, вот тот код с хабра:
if (a)
{
	A;
	goto L3;
}
L1:
if (b)
{
L2:
	B;
L3:
	C;
	goto L1;
}
else if (!c)
{
	D;
	goto L2;
}
E;
Между прочим, switch позволяет прыгать по своим меткам внутрь скоупа. Почему ты этим не воспользовался? Так можно эмулировать goto через switch намного точнее http://melpon.org/wandbox/permlink/BNgIOyXOoavAVtMI
>> No.44771 Reply
>>44768
И да, вот более точный порт goto на switch
#define START 0
#define L1 1
#define L2 2
#define L3 3
     
unsigned int label = START;
  
while (true)
{
	switch (label)
	{
	        case START:
		if (a)
		{
			A;
			label = L3; break;
		}
		case L1:
		if (b)
		{
		case L2:
			B;
		case L3:
			C;
			label = L1; break;
		}
		else if (!c)
		{
			D;
			label = L2; break;
		}
		E;
		return 0;
	}
}
Тернартные операторы мне кстати не очень нравятся, ифы куда понятней. Хотя можно short-circuit evaluation сделать, чтоб еще запутанней было.
Короче, вердикт такой: эти трюки со свичем не делают код более понятным, чем с goto. К тому же goto будет явно быстрее работать, если компилятор не сможет заоптимизировать это как следует. Свичу надо проверять на все возможные стейты перед тем как прыгнуть на свою метку, а в случае if(условие) goto метка, никакого свича вообще не нужно, можно сразу прыгать на метку, не нужно выставлять значение некоей переменной, которую потом свич будет у себя проверять и на основе этого делать переход на свою метку. Т.е. в оптимизации тоже проигрыш.
>> No.44773 Reply
>>44771
> Свичу надо проверять на все возможные стейты
Не всегда. Очень часто оптимизируется в табличный переход.
>> No.44774 Reply
>>44765
CLion платный, про возможность community edition они ничего вроде не говорили. Так что два стула либо QtCreator, либо Eclipse с плагинами.
Хотя вроде еще какие-то совсем простые иде были.
>> No.44777 Reply
>>44773
Branch predictor для табличных переходов ( enwiki://Branch_predictor#Prediction_of_indirect_jumps ) не во всех процах реализован и это будет медленней, чем обычный if(условие) goto метка.
>> No.44778 Reply
>>44771
Ладно, о вкусах не спорят. Я у себя в коде goto видеть не хочу, а к таким switch как к модели конечного автомата привык, если тебе понятнее с goto, то ладно. Вопрос с оптимизацией никого не интересует в 99% случаев.
>> No.44779 Reply
>>44769
Я не воспользовался потому что я написал тупейший перевод блоксхемы в код, там даже состояние init есть, абсолютно бесполезное. Просто пример, как можно легко и непринуждённо переводить схемы в код, без goto.
>> No.44781 Reply
>>44778
Дело не во вкусах. Дело скорее всего в том, что кто-то прочитал в книжках "goto плохо, goto нельзя", преподаватели сказали "goto плохо goto нельзя" и человек в эту догму слепо поверил. Ничего плохого в goto нет, если им не перебарщивать. switch твой мало чем от goto отличается. А от всякой там религиозной неприязни (Дейкстра сказал что considered harmful значит нигде и никогда нельзя это goto использовать) советую избавлять свою голову. Дейкстра писал это в 1968 году во времена фортрана, когда из-за кучи всяких натыканных отовсюду goto и меток, код был трудночитаемый и трудносопровождаемый.
>> No.44782 Reply
>>44779
Этот твой свич - тот же goto, только записанный по-другому, более извращенным способом
>> No.44783 Reply
>>44781
>>44782
Спасибо, не надо меня вербовать в сторонники goto. Мне удобно пользоваться тем, что я написал, мне без разницы, как там что работает в ассемблерном коде так вообще всё одинаково выглядит, разве что кроме switch, для меня это выглядит лучше и понятнее. За 5 лет ни разу не возникла потребность в goto, не исключаю, что может возникнуть в будущем. Так что всё-таки это дело вкуса и есть, мне удобно не использовать goto, менять эту привычку я не намерен разве что принятый в компании стиль потребует.
>> No.44785 Reply
>>44783
Да никто никого не вербует. Пишите как хотите. Просто switch в данном случае вообще ничем и никак не лучше, чем goto.
>> No.44787 Reply
>>44783
И еще такой вопрос. Предположим что есть все та же блоксхем, и там был сделан цикл. И надо уметь из середины цикла куда-то в совершенно левое место уметь выпрыгивать.

for(size_t i = 0; i < 100; i++)
}
   некий_код;
   некий_код;
   if(условие) goto метка;
   некий_код;
   некий_код;
}
for(size_t i = 0; i < 100; i++)
}
  некий_код;
  некий_код;
  if(условие) goto метка;
  некий_код;
  некий_код;      
}
   break используется в цикле для других целей, им прерывается выполнение этого самого цикла. И твоя конструкция со switch уже не будет работать. Придется делать некие усложнения
for(size_t i = 0; i < 100; i++)
}
  некий_код;
  некий_код;
  if(условие) {do_jump_switch = true, break;};
  некий_код;
  некий_код;      
}
if (do_jump_switch) break; // переход на тот switch
   А если циклы вложены друг в друга, надо по выходу из каждого цикла ее проверять?
Вот например если два вложенных цикла:
for(size_t i = 0; i < 100; i++)
}
  некий_код;
  некий_код;
  for(size_t j = 0; j < 100; j++)
  }
    некий_код;
    некий_код;
    if(условие) {do_jump_switch = true, break;};
    некий_код;
    некий_код;      
  }
  if (do_jump_switch) break; // выпрыгиваем отсюда
  некий_код;
  некий_код;      
}
if (do_jump_switch) break; // переход на тот switch
Разве это можно назвать удобным и читаемым? А если есть две точки выпрыгивания из многократно вложенных циклов в разные места? Все еще считаешь что switch удобней будет?
>> No.44788 Reply
>>44787
С открывающими скобками напутал, но ладно, думаю и так все понятно
>> No.44789 Reply
>>44787
Ну вот собственно на сишке goto в трёх случаях и юзают - выход из пары-тройки вложенных циклов (иначе флагоёбство как в твоём коде), эмуляция исключений (аля goto fail) и FSM внутри одной функции.
>> No.44790 Reply
>>44774
Еще Code::Blocks есть.
>> No.44791 Reply
>>44790
Неуместное упоминание.
>> No.44792 Reply
>>44790
Я вообще в виме, обмазанном плагинами, пишу.
>> No.44793 Reply
>>44787
Нет, ты не понял. Я не говорю, что goto запрещён, в таком случае он осмысленен, просто у меня есть некоторый опыт работы с C++, за который такой ситуации не возникало ни разу, вот и всё. Очень часто можно по ситуации придумать адекватное решение без goto. Я же не спорю с тобой, что goto не нужен совсем, просто веду к тому, что почти всегда можно обойтись без него вполне нормально, что приветствуется
>> No.44794 Reply
>>44789
Ну да, эмуляция исключений это отдельный разговор, в C это очень плохо поддерживается, как по мне, все эти setjmp/longjmp ещё хуже goto.
>> No.44795 Reply
>>44793
> просто у меня есть некоторый опыт работы с C++, за который такой ситуации не возникало ни разу, вот и всё.
Расскажи побольше про свой опыт работы. Под какие ОС, какие задачи приходилось решать? Был ли числодроб какой-нибудь (численные методы, вот это все)? Доводилось ли писать что-нибудь низкоуровневое под микроконтроллеры?
Просто есть такие задачи, где goto будет очень уместен.
>> No.44796 Reply
>>44790
Не знал, что он кросс-платформенный. Но вообще да, тоже неплох.
>> No.44804 Reply
Как разобраться с новыми стандартами и глубинами поюсов? Скажем, STL контейнеры я знаю хорошо, про всякие лямбды, умные указатели и более базовые вещи в курсе. Может, есть какой познавательно образовательный ресурс, где более тонкие вещи собраны и удобно расписаны, чтобы не шариться по cppreference и stackoverflow?
>> No.44805 Reply
>>44794
Исключение в плюсах это довольно тяжеловесный механизм, раскрутка стека вся эта. Без него вполне можно обойтись. В ассемблере так точно можно, восстановив стекфрейм нужный (хранить указатель на нужное место в стеке где стекфрейм который нам нужен). Языки высокого уровня такой возможности не предоставляют напрямую. Хотя есть еще заморочки с современными процами http://www.agner.org/optimize/microarchitecture.pdf
> The P1 has no return stack buffer, but uses the same method for returns as for indirect jumps. Later processors have a return stack buffer. The size of this buffer is 4 in the PMMX, 8 in Atom, 12 in AMD k8, 16 in PPro, P2, P3, P4, P4E, PM, Core2 and Nehalem, and 24 in AMD k10. This size may seem rather small, but it is sufficient in most cases because only the innermost subroutines matter in terms of execution time. The return stack buffer may be insufficient, though, in the case of a deeply nesting recursive function. In order to make this mechanism work, you must make sure that all calls are matched with returns. Never jump out of a subroutine without a return and never use a return as an indirect jump.
>> No.44816 Reply
Есть ли тут настоящие Доброкодеры которые бы мне помогли с простейшей задачей?
Надо написать программу - часы со стрелками на c++, с использованием допотопного WindowsForm.
К сожалению препод все еще использует деревянные счеты и почтовых голубей, поэтому QT, MFC, SFML не вариант.
>> No.44817 Reply
>>44805
Какой смысл без них обходится, если при выпадании исключения уже, всё равно, поздно пить Боржоми, и надо искать ошибку и что-то чинить? И ты никогда не выбросишь больше одного исключения за несколько секунд(миллионы лет с точки зрения процессора и оперативы) времени. Ну и зачем это всё? И что значит "в плюсах это довольно тяжеловесный механизм"? Он где-то эффективнее реализован?
>> No.44818 Reply
>>44816
MFC подопотопнее WindowsForms будет.
>> No.44825 Reply
>>44816
Помочь или написать за тебя?
Вообще часы со стрелками (как те, что в настройках) - это вроде один из стандартных компонентов.
>> No.44827 Reply
>>44825
Ну у меня ничего не выходит, кроме тонн ошибок.
Конечно за меня никто ничего писать не будет.
Думал может у кого есть уже готовое, мало ли, старое от старых лаб и курсачей остаться могло.
Задачи они во всех ВУЗах СНГ одинаковые же, и не меняются с 2004-2007гг.
>> No.44834 Reply
>>44827
> Задачи они во всех ВУЗах СНГ одинаковые же
Ты упорот в хлам.
>> No.44835 Reply
>>44817
> Какой смысл без них обходится, если при выпадании исключения уже, всё равно, поздно пить Боржоми, и надо искать ошибку и что-то чинить?
Ну если исключение это такая внештатная ситуация, и после исключения программа должна упасть, так зачем они тогда вообще нужны? Берем пишем особую функцию, которая все ресурсы освобождает и делает exit(1); без всяких там раскруток стека и прочей ерунды.
А если исключения используются для для управления.... Впрочем, за меня уже по этому поводу написано http://www.stolyarov.info/guestbook#comment-820
>> No.44836 Reply
File: 1280px-CallStackFrame.png
Png, 214.77 KB, 1280×967 - Click the image to expand
edit Find source with google Find source with iqdb
1280px-CallStackFrame.png
>>44817
Проблема еще в дурацком плюсовом рантайме. Если наплевать на это, на ассемблере например можно придумать альтернативный, намного более эффективный способ обработки исключений. Можно изменить способ организации стека, например выделить отдельный стек для адресов возврата, отдельный для локальных переменных. Плюсы и си вообще довольно ограниченные языки, их нельзя назвать ни низкоуровневыми, ни высокоуровневыми, например в них нельзя сделать две точки входа в одну подпрограмму(функцию), нет удобных средств, предоставляющих ХОТЯ БЫ на этапе компиляции возможность работать с AST для нормального метапрограммирования (а не этого плюсового убожества с шаблонами и SFINAE). Вот эти всякие RTTI это вообще отдельный повод для моей нелюбви к плюсам. Типа вот у нас есть статически-типизированный язычок, нормально все, передаем конкретные типы в конкретную функцию которая именно с таким типом может работать. Но нет, это уже не модно, давайте лепить к типам метаинформацию, чтоб как в джаваскриптах можно было писать одну функцию и пусть оно там само думает, что за типы мы куда передали, и в рантайме выкручивается. Нет чтоб как в хаскелях сделать Хиндли-Милнера, чтобы все статически выводилость. И это программисты?
>> No.44837 Reply
>>44835
> Ну если исключение это такая внештатная ситуация, и после исключения программа должна упасть, так зачем они тогда вообще нужны?
Чтобы программа упала, а не продолжила работать неправильно. Потому что продолжить тихо работать неправильно - гораздо хуже.
> Берем пишем особую функцию, которая все ресурсы освобождает и делает exit(1); без всяких там раскруток стека и прочей ерунды.
Нам надо не положить всю программу, а только положить её кусочек и вне кусочка провести обработку ошибок. Ещё как минимум надо сообщение об ошибке вывести. В ряде случаев надо, чтобы программа таки продолжила работать, но какой-то её кусок должен потухнуть. Например, если при обработке каких-то заданий в очереди, одно из заданий упало с ошибкой. Или если упала отрисовка одного элемента.
> А если исключения используются для для управления....
То производительность будет не единственной твоей проблемой. Но ещё и нечитаемый код, делающий непредсказуемые вещи, который потом не дополнить и не исправить, ну ты понял. Исключения - для обработки ошибок. Правда, иногда ошибка - понятие растяжимое, но суть в том, что исключение - это что не должно происходить в твоей программе или её составной части вообще, но произошло.
>> No.44838 Reply
>>44836
> И это программисты?
Да. Остальные люди не лучше.
>> No.44854 Reply
>>44836
Зачем две точки входа в 1 и туже функцию? Не могу представить когда это необходимо. RTTI нужен для динамик каста и отключаеться ключами компиляции https://msdn.microsoft.com/en-us/library/we6hfdy0.aspx для студии. auto для вывода типов на этапе компеляции. Да возможности работать с AST на этапе компиляции реально не хватает. Но шаблоны покрывают 90% из того что требуется остальные 9.9% можно покрыть используя питон и манипулируя с исходниками до компиляции. Что даст отдельный стек для переменных отдельный для адресов возврата? Как узнавать к какой области видимости переменные относятся? А насщет плюсов ты не прав на нем можно забраться очень высоко в плане абстракций, иногда мне кажеться что даже выше чем жавке и питону.
>> No.44855 Reply
>>44854
Извини, я безграмотное быдло и пишу с ошибками: насщет -> насчет
>> No.44866 Reply
>>44854
> Что даст отдельный стек для переменных отдельный для адресов возврата?
Погугли вирус Морриса и как он работал со стеком на тогдашних m68k и VAX.
>> No.44868 Reply
>>44866
Имееш ввиду переполнение буфера с последующей перезаписью адреса возврата? Подобная проблема есть и в современных программах, но так же есть рекомендации как писать код чтобы избежать подобной проблемы. Алсо отдельный стек под адреса возврата не поддреживаемый аппаратно только усложняет подобные атаки но не исключает их.
>> No.44875 Reply
Имеется ли возможность переписывания функций без наследования? У меня есть массив с объектами одного типа, но мне необходимо, чтобы один метод был у всех объектов разный. Как можно поступить? Мне на ум приходит только один вариант: создать еще один класс, а в нем все необходимые функции, и затем через свитч определять, метод какого объекта нужно вызвать, и вызывать метод нового класса, соответствующий данному объекту. Но тут как-то много проблем возникает. Есть ли еще варианты?
>> No.44876 Reply
>> No.44877 Reply
>>44875
Ну и ещё лямбды собственно. Это в С++11 только. До лямбд нередко использовались т.н. функторы - объекты с переопределённым "()". Это имитация лямбд по сути. Ещё есть указатели на функцию - это уже чистый Си.
>> No.44909 Reply
Пишет вам быдлокун из шараги. Немного умею в матан, алгоритмы и электронику, но совершенно ничего не смыслю в прикладном программировании. А очень хотелось бы. На всякий случай имею билдер, qt, VS и RAD, но для меня это просто экзешники в папках, не более. Начинал читать "с++ шаг за шагом" и "QT 5.3; профессиональное программирование на qt". Переписывал примеры со страниц в ide и потом долго возился с библиотеками, компиляторами и еще какими-то штуками, которые порождали ошибки. GUI вообще вызывает приступы паники. На каждой среде свои свистелки, свои библиотеки. Понятия не имею, как подступиться к кодерству.

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

Да, это всё не моё, но мне без этого никак. Жизнь требует знания и умения решать задачи на плюсах.
>> No.44912 Reply
>>44909
Почему VS не используешь? В окнах она, пожалуй, самая дружелюбная к новичкам.
> В зависимости от целей приходится с одной среды на другую прыгать.
Это что за цели такие?
>> No.44914 Reply
>>44912
> Это что за цели такие?
Когда я вообще не знал, как окна делать, возникла потребность строить графики. Девушка из соседней группы рассказала, как это в РАДе смастерить. Курсовые собирал по образу и подобию чужих работ в qt. Билдер сегодня использовал, чтобы брату показать отличия плюсов от их школьного паскаля.
Получается, дело не в целях а в возможности найти полуготовые решения. Допустил неточность, пардон.
> Почему VS не используешь?
Да х его з. Стою просто как осёл между разными стогами сена и не знаю к какому пойти. Ну и еще возникло ощущение, что там в оконных приложениях больше параметров прописывать надо.
>> No.44915 Reply
>>44914
Для графиков к курсовой можно gnuplot попробовать.
>> No.44916 Reply
>>44915
Спасибо.
>> No.44928 Reply
>>44909
Советую выкинуть эти студии и взять GCC или Clang (mingw если винда, но лучше всеж в GNU/Linux окружении). Если нужна иде - бери куте креатор (но для студентолаб оно как правило совершенно не нужно).
>> No.44929 Reply
>>44854
> Зачем две точки входа в 1 и туже функцию? Не могу представить когда это необходимо.
Это необходимо если ты пишешь под микроконтроллер, и тебе надо сделать 2 функции которые делают почти одно и то же и ты видишь, что две функции можно сшить в одну, а другую функцию можно сделать через прыжок в середину функции, сделав при этом нестандартное соглашение вызова(calling convention) и переопределив некоторые переменные, определяющие поток выполнения. Когда у тебя в одной функции заинлайнена другая функция, и ты не хочешь или не можешь(места мало) определять такую функцию по-нормальному, тебе только и остается что прыгнуть по адресу заинлайненого куска другой функции в середину другой функции. И внезапно, это будет эффективно т.к. есть большая вероятность, что тот кусок машинного кода есть в кеше инструкци. Современные компиляторы таких жесктих извратов обычно не позволяют. Хотя я вот видел, что нечто подобное делает оптимизатор Keil, он, если видит две похожие функции, может делать такие переходы в середину другой функции. Но программист в явном виде так делать не может. Процедурное программирование, знаете ли. Кроме того, сам стандарт языка Си (С++ тоже унаследовал это свойство) по стандарту не допускает(не описывает) возможность создания произвольных соглашений вызова (способов передачи аргументов в вызываемую функцию) для каких-либо архитектур. Это дано. В 32-битных виндовсах есть несколько подобных способов, типа stdcall fastcal cdecl, в GCC и MSVC есть специальные ключевые слова чтоб выбирать способ передачи аргументов при вызове функций, но эти способы зашиты прямо в копмилятор, и добавить свои способы я могу только лишь изменив исходный код компилятора или пропатчить бинарник(в случае с MSVC только бинарник патчить). http://www.agner.org/optimize/calling_conventions.pdf вот тут описаны всевозможные соглашения вызова. Кроме того, нет никакого унифицированного способа, описывающего правила манглинга. Кроме того, механизм обработки исключений опять таки нельзя никаким образом описывать чтоб создать свой собственный легковесный механизм исключения, который бы был вот при таком-то случае более оптимальный чем тот, который по-дефолту вшит в тот компилятор, который я решил использовать.

Цитата:
> Если бы, к примеру, исключения символизировались не типом объекта, как это сделано в C++, а, например, адресом в памяти (то есть делаем глобальную переменную произвольного типа, в ней же храним информацию об обстоятельствах исключения, а кидаем не "объект произвольного типа", а адрес этой переменной, и ловим исключение не по типу, а путём указания глобальной переменной, отвечающей за данный вид исключения), реализация стала бы проще в разы, и рантайм бы в разы уменьшился. Вон на уровне чистого Си есть setjmp и longjmp, они, по ходу, вообще ничего в программу не втаскивают, и, больше того, даже не являются средством языка, обычные библиотечные функции, правда их реализация зависит, конечно, от платформы и компилятора, но это уже детали.
Конец цитаты.

Кроме того, стандартом никак не предусмотрено чтобы можно было описывать правила упаковки структур (#pragma pack например, но это - специфичные расширения компилятора). Даже нет никакого общепринятого правила выравнивания полей структур для одной конкретной архитектуры т.е. в разных компиляторах для одной архитектуры они могут быть разными. http://www.viva64.com/ru/b/0009/ (вот тут http://www.agner.org/optimize/calling_conventions.pdf это тоже описывается). А еще.. всего не упомянуть, чего мне не хватает. Например я хочу уметь выставлять чтоб стек у меня рос не вверх а вниз, сделать несколько стеков с разной гранулярностью, в одной пусть хранятся байты, в другом 4-байтовые числа, в третьем можно хранить адреса возврата например, чтобы их нельзя было переписать из-за возможного переполнения буфера, и все это чтобы ASLR чтобы.

Кроме того, нет никакого способа влиять на то, что компилятор считает UB а что не считает. Например если происходит переполнение знаковой переменной в цикле, все может быть очень плохо. В clang даже придумали особый механизм который бы ловил UB-ы, для этого есть опция -fsanitize=undefined http://melpon.org/wandbox/permlink/sxhPQXOCEDtM42pS
Я еще много могу понаписывать, но думаю достаточно. Все это я к тому, что нормальным низкоуровневым языком ни Си ни плюсы считаться не могут. Впрочем, нормальными высокоурвневыми языками их тоже считать нельзя.
Про выравнивание данных и гранулярность - http://konishchevdmitry.blogspot.com/2010/01/blog-post.html
> RTTI нужен для динамик каста и отключаеться ключами компиляции https://msdn.microsoft.com/en-us/library/we6hfdy0.aspx для студии. auto для вывода типов на этапе компеляции.
RTTI как и динамик каст - не нужен. Это всякие там жаваскрипты могут себе такое позволить. Но вроде как у С++ немного другая ниша, зачем в него тащить динамическую типизацию? Впрочем, я уже запутался. В последних стандартах туда вообще черт знает что понапихивали, лямбды какие-то, constexpr-ы. Бардак какой-то.
A auto это просто статический вывод типов самим компилятором на основе того, как именно его проинициализировали, я не вижу в этом ничего плохого.
> Да возможности работать с AST на этапе компиляции реально не хватает. Но шаблоны покрывают 90% из того что требуется остальные 9.9% можно покрыть используя питон и манипулируя с исходниками до компиляции.
> А насщет плюсов ты не прав на нем можно забраться очень высоко в плане абстракций, иногда мне кажеться что даже выше чем жавке и питону.
Что-то я не понимаю, откуда все эти цифры 90% 9.9% ? С потолка? Ну возьмем достаточно простую задачу: допустим что надо мне считать в бигинтах, и хочу я читать формулы из stdin от пользовалетя вида x=ac+bc и чтоб был eval() который бы генерировал машинный код по этой формуле (без всяких стековых калькуляторов, мне надо чтоб быстро) и чтобы оптимзировало на уровне арифметических преобразований, например выражение x=ac+bc превращало в x=c*(a+b), выражение sqrt(a^2) становилось abs(a) и так далее, и компилировал бы чтобы в машинный код, чтобы я мог через эту формулу применить к множеству чисел. Пользователь дает таблицу
a=123, b=342, c=456;
a=777, b=333, c=666
....
и программа должна посчитать x для каждой строки, притом сделать это быстро. Таблица может быть задана в каком-нибудь двоично-сериализованном виде, не обязательно в виде строк. Надо чтоб работало в виндовсе, масосх, андроиде и на айпэдах всяких(на ARM). Как это сделать? Какими плюсовыми средствами предлагаете решать эту задачу? Нет таких средств, надо самому костылить какой-то JIT (тащить LLVM и куски компилятора с его кучей абстрактных представлений ради калькулятора попросту неоправданно). А какой-нибудь жабаскрипт или лисп эту проблему решает запросто, там есть eval(). Может это будет не так эффективно, как если кто-то будет городить кастомный JIT и писать опкоды в исполняемый сегмент памяти, потом оттуда что-то вызывать, зато это будет БЫСТРО и ИЗ КОРОБКИ. Разве высокоуровневый язык должен требовать таких выкрутасов? Высокоуровневость плюсюв это миф. Но и низкоуровневым его назвать у меня язык не поворачивается. Язык Си еще можно с натяжкой назвать языком среднего(но ни в коем случае не низкого) уровня, а плюсы, плюсы вообще вне этих категорий. Это язык фиг-знает-какого-уровня, это сишка, которую подперли кривыми ООП-костылями, шаблонами(почти-препроцессором, который однако встроен в компилятор,).
Ах да, Александреску придумал что на этих шаблонах можно метапрограммировать, лол. Ну это примерно как если б я нашел у себя кусок битого стекла от бутылки и придумал что этим можно как увеличительным стеклом пользоваться. И пофиг что при это неудобно, можно порезать себе руки, что оно плохо фокусирует, и что обычное увеличительное стекло, не говоря уже о микроскопе, работает куда лучше.


Кстати, насчет указателей в отдельном стеке, эта идея не нова.
Даже был такой процессор https://geektimes.ru/post/205168/

Цитата
> В 432-ой была реализована защита укзателей, что конечно же, очень правильно. Однако все указатели хранились в отдельном сегменте. Назывался он program reference table. Машина контролировала, что находиться в этом сегменте могут только указатели. И нигде, помимо него, указателей больше не могло быть. Я почитал их бумаги. Они говорят, что всё это очень здорово, но очень неудобно указатели в отдельном сегменте держать.
> Указатели должны рассылаться как обычные данные. Мы так и сделали. У нас указатели – просто данные. А 432-ая держала указатели в отдельном сегменте. Это приводило к ужасным результатам. Например, для индексации массива требовалась трёхадресная операция. Нужно было указать три операнда: положение указателя на массив в поинтерном сегменте, положение индекса в сегменте данных и снова смещение в поинтерном сегменте, по которому требовалось записать результат. Но самое ужасное даже не это, а то, что при входе в процедуру, у операционной системы запрашивалось четыре сегмента! Два сегмента для параметров: поинтерный и скалярный. И два сегмента для локальных данных: тоже поинтерный и скалярный.
Конец цитаты.

Подобный подход может навсегда похоронить всякие там переполнения буфера и кучу других подобных способов похакать ваше приложение из-за ошибки в алгоритмах. Там еще в той статье описывается модель с тегами для разных типов и прочее
>> No.44930 Reply
>>44929
> сделав при этом нестандартное соглашение вызова(calling convention) и переопределив некоторые переменные, определяющие поток выполнения.
Кривовато написал. Чтобы это понять, надо уметь читать (и желательно писать) на ассемблере. Суть в том, что надо записать в нужные регистры и нужные места в стеке некоторые переменные, и прыгать в середину некой функции, чтоб это все сработало так, будто бы эти значения были выставлены самим тем предшествовавшим куском кода функции, в середину которой мы прыгаем.
>> No.44931 Reply
>>44837
> Чтобы программа упала, а не продолжила работать неправильно. Потому что продолжить тихо работать неправильно - гораздо хуже.
Чтобы программа упала, надо чтобы она упала.
> Нам надо не положить всю программу, а только положить её кусочек и вне кусочка провести обработку ошибок.
Откуда гарантии, что ошибка, вследствии которой возникло исключение, не испортила память где-нибудь еще? Есть какие-то гарантии изолированности? Например ошибочный кусок кода мог где-нибудь глубоко подпортить стек или хип, после чего корректная работа программы после исключения вообще невозможна. Так почему бы просто не упасть? Или предлагаешь в отдельном треде запускать любой код, в котором потенциально может быть ошибка? Тогда зачем вообще исключения и их обработка, просто прибить тред и все
>> No.44932 Reply
>>44931
Точных гарантий, естественно, нет. По-твоему, если ты пароль вводишь неправильно, то должен весь комп перезагружаться? Или если нет места на диске, то торрент-клиент должен вырубиться? И скайп при потере подключения тоже должен закрываться?
> Или предлагаешь в отдельном треде запускать любой код, в котором потенциально может быть ошибка?
Ты в курсе про классы и функции? Прикинь, они позволяют писать изолированный код. Может и не абсолютно гарантированно, но тем не менее. Если всё делать грамотно, то практически.
> мог где-нибудь глубоко подпортить стек или хип
Можно подумать, что весь твой код на сотни тысяч строк состоит из одних портянок на асме, которые лезут в свой собственный стек что-то ковырять. Это был бы полный космос или я чего-то не понял.
>> No.44933 Reply
>>44932
> По-твоему, если ты пароль вводишь неправильно, то должен весь комп перезагружаться? Или если нет места на диске, то торрент-клиент должен вырубиться? И скайп при потере подключения тоже должен закрываться?
Т.е. исключения бросаются не на случай программной ошибки (например когда кто-то неправильно написал код расчета траэктории самолетика и там что-то на ноль поделилось) а на случай, который впринципе может произойти, и то что он произойдет -- не означает что в программе закрался баг? А почему б такие случаи не проверять обычным условием?
> Ты в курсе про классы и функции? Прикинь, они позволяют писать изолированный код. Может и не абсолютно гарантированно, но тем не менее. Если всё делать грамотно, то практически.
Ну окей, если у меня произойдет переполнение индекса когда я заполняю массив, аллоцированный в хипе, мне эта изоляция поможет? Вот позаписывается там мусор куда-то, потом сработает другая функция, которая использует данные, аллоцированные в том испорченном месте, потом что-то где-то поделится на ноль или произойдет еще что-нибудь нехорошее, и будет исключение. Отлично! Тот код, перед тем злополучным делением на ноль, мог еще что-нибудь напортить в памяти. И это не разгрести никак, исключения тут не помогут.
А работа с массивом (или там std::vector) с проверкой границ на каждый чих - она попросту неэффективна. Пилите тогда уже какой-нибудь верификатор, который бы доказывал невозможность из одной функции испортить данные, которые будут использовать какие-то другие функции
> Можно подумать, что весь твой код на сотни тысяч строк состоит из одних портянок на асме, которые лезут в свой собственный стек что-то ковырять. Это был бы полный космос или я чего-то не понял.
Да пусть в хип лезут, в хипе тоже есть что подпортить.
>> No.44934 Reply
>>44933
> А работа с массивом (или там std::vector) с проверкой границ на каждый чих - она попросту неэффективна
ВЫ ВСЁ ВРЁТИ!!!! команда сравнения занимает один такт всего-навсего
>> No.44935 Reply
>>44933
> std::vector
Range-based циклы можно в этих большинстве циклов использовать. Т.е. получится проверка границ не на каждый чих. Да и вообще тебе экономия на спичках важнее корректности работы программы?
>> No.44936 Reply
>>44934
> команда сравнения занимает один такт всего-навсего
А, ну да, особенно если мне надо много этих проверок делать, и если мне надо чтоб мне компилятор это векторизовал
> Range-based циклы можно в этих большинстве циклов использовать.
Это может быть не ranged-based цикл
> Т.е. получится проверка границ не на каждый чих.
А в плюсах в этом std::vector есть Array Bounds Check Elimination http://www.ssw.uni-linz.ac.at/Research/Papers/Wuerthinger07/Wuerthinger07.pdf
> Да и вообще тебе экономия на спичках важнее корректности работы программы?
Привести примеры, когда это будет не экономией на спичках? Ну например какие-нибудь драйверы, системные библиотеки, кодеки. Или если ты пишешь что-то реалтаймовое под микроконтроллер и у тебя тупо нет времени делать эти тупые проверки.
>> No.44938 Reply
>>44936
В линупсах и для микроконтроллеров пишут драйверы не на крестах, а на сишке (в которой нет std::vector, поэтому ты будешь пердолиться с указателями как твоей душе угодно). На крестах же пишут ынтырпразный код, для солидных компаний, поэтому проверки на границы подразумеваются как данность, за попытку их обхода к тебе подойдет тимлид или прожект менеджер и, недовольно качая головой, скажет: "Что ты творишь, Антон, уволиться захотел?".
>> No.44939 Reply
>>44938
Хотел бы я посмотреть на драйвер видеокарты например, с проверками на границы массива. (драйвера на плюсах пишут, да)
(и под микроконтроллеры тоже можно на плюсах писать)
>> No.44940 Reply
>>44938
И кстати, зачем плюсы в ынтырпрайзе, если есть сишарп и жава?
>> No.44941 Reply
>>44939
Только что склонировал репу git://anongit.freedesktop.org/nouveau/xf86-video-nouveau, нихера не плюсы, чистая сишка.
>> No.44942 Reply
>>44934
Не капсболди ну.
>>44933
Ок, не юзай эксепшены. Вообще тогда. Или юзай для обработки ошибок или вообще не юзай. Всё лучше чем алгоритмы с эксепшенами.

Под ошибкой понимается ситуация, которая является внештатной с точки зрения одного изолированного куска программы, какого-то модуля или функции.
> А работа с массивом (или там std::vector) с проверкой границ на каждый чих - она попросту неэффективна.
Это ещё нужно доказать бенчмарками. В итоге у тебя в 99% это даст прирост скорости в пару наносекунд или даже вообще не даст в ряде случаев. Особенно смешно будет, если в итоге окажется, что проц большую часть времени ждёт жёсткий диск, как это бывает у некоторых программ.
Но даже и так обработка исключений не серебряная пуля, но количество проблем с ней уменьшается, тем не менее.

На бордах всегда так много любителей сэкономить пару тактов и байтов, а в жизни потом, с-ка, встречаешься с таким... Не могут правильно обращаться со структурами данных, делают безумные вещи со строками и регулярками, генерируя и парся восемь раз одно и то же, мемлики, не могут создать индексы. std::vector с проверкой границ потом виноват во всём.
>> No.44943 Reply
>>44940
Всё это уже сотни раз обсуждалось.
>> No.44944 Reply
>> No.44945 Reply
>>44944
Все равно драйверов на плюсах единицы, то что их можно на их писать, не говорит что на них пишут какое-то значимое кол-во.
>> No.44954 Reply
>>44933
В современных интеловских процессорах есть такая штука как Intel MPX, это, например, mov с одновременной проверкой на границы. Специальные пары регистров для границ, все дела. Насчёт производительности не знаю, но явно быстрее чем до этого.
>> No.44955 Reply
>>44954
И? В любом случае эти проверки будут медленней, чем их отсутствие. И вообще, есть куча процессоров(армы, мипсы всевозможные для встраиваемых применений), где этого нет и скорее всего никогда не будет.
>> No.44956 Reply
>>44955
> В любом случае эти проверки будут медленней, чем их отсутствие.
Не в любом.
>> No.44960 Reply
>>44956
Т.е. с лишними проверками на каждом шаге может быть быстрее или с такой же скоростью как без них? Ну может конечно, если создатели процессора так специально сделают, лол. Но здравый смысл подсказывает мне, что проверки ну никак не смогут ускорить т.к. это дополнительные лишние операции на каждом шаге. В лучшем случае оно будет с такой же скоростью работать(если кому-то не придет в голову мысль специально замедлять когда кто-то без проверок делает, только зачем?). Короче, надо посмотреть на то, как это все реализовано схемотехнически и на уровне микрокода, а так смысла в разговоре об этом нет никакого.
>> No.44961 Reply
>>44960
Почти всё вокруг работает медленнее чем проц. в каких-то случая проц будет большую часть времени сидеть без дела и ждать, пока данные тянутся из оперативной памяти или с диска. Если программа работает с диском, то проц может почти постоянно простаивать. Плюс конвеер или ядра могут в какой-то момент вдруг помочь. Ты чёрта с два предскажешь, как будет в итоге. В результате может вообще ничего не выгореть, если тебе не повезёт.
>> No.44963 Reply
>>44715
А что сложного написать самому?
Рисовать можно в SFML или SDL, если с openGL лень возиться.
>> No.44975 Reply
>>44961
> Почти всё вокруг работает медленнее чем проц. в каких-то случая проц будет большую часть времени сидеть без дела и ждать, пока данные тянутся из оперативной памяти или с диска.
А в каких-то - нет. У меня вот браузеры Firefox и Chrome влегкую могут 100% процессора нагрузить (Chrome может даже все ядра нагрузить т.к. там по процессу на вкладку). Если туда еще эти проверки на границу добавить - представляю как там все затормозится. Или возьмите какие-нибудь современные игры, которые тоже довольно-таки сильно нагружают процессор. Или возьмите например dwarf fortress который тоже очень требовательный к процессору, особенно когда куча всякого бегает(кошки расплодились, была такая проблема в старых версиях). Или что-нибудь числодробительное. Полно ПО которое упирается именно в процессор.
Я считаю что сам подход "обезопасить код добавляя куда попало проверки" - ущербный. Решать проблему с ошибками надо через автоматическое доказательство теорем, всякие там STM солверы которые бы математически доказывали, что вот в таком-то случае индекс никогда не выйдет за границы выделенной памяти, т.е. код полностью безопасен и его можно использовать. Для C(но не для C++) есть Frama-C, о возможностях можете судить например по вот этому видео https://www.youtube.com/watch?v=J_xgbO5-32k
Есть еще всякие coq, agda - которые "proof assistants based on dependent type theory". Если сильно постараться, можно даже теорему Ферма доказать через это(она уже доказана человеками), и потом например написать код, который пытается через перебор с бигинтами опровергнуть теорему Ферма, и посредством этого доказательства можно доказать, что вот этот перебирающий код в принципе никогда не завершится, т.е. решить проблему останова в частном случае(в общем случае она, как известно, нерешаема).
>> No.45061 Reply
File: NqA7QIV.jpg
Jpg, 60.19 KB, 1024×1192 - Click the image to expand
edit Find source with google Find source with iqdb
NqA7QIV.jpg
Котаны, помогите с решением задач, пожалуйста

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

2)Написать функцию инициализирующую двумерный массив целых пользовательскими значениями.

3) Написать функций mystrcpy(), mystrcat(), mystrlen(), mystrcmp() (две на выбор), которые будут работать аналогично библиотечным функциям strcpy(), strcat(), strlen(), strcmp().

4) Написать функцию, рекурсивно вычисляющую сумму ряда вида Σ 2x/x!, где х принимает дискретные значения от 0, до 20 с шагом 1.
>> No.45062 Reply
>>45061
Помогли.
>> No.45063 Reply
>>45062
А чего ты хотел? Во-первых, доска относительно безлюдна, и за полчаса тебе вряд ли накидают ответов и решений. Во-вторых, задачи простые, шаблонные и откровенно скучные, поэтому их решение не принесёт анону никакого удовлетворения и удовольствия. Зачем в таком случае их решать?
>> No.45064 Reply
>>45061
Звучит как выройте мне яму или прополите мне огород.
>> No.45065 Reply
>>45063
Я даже не понял, это анон сам иронизирует над нами или это другйо анон над ним иронизирует. С написания поста прошло сраные полчаса, нудные ясельные задачи и абсолютно никакого старания и вникания анона. Та вы оборзели? За такое берут деньги. И не одна, а четыре задачи. Хорошо, что за всю группу не надо решать.
>> No.45066 Reply
>>45065
Какой ещё другой анон? Он просил котов помочь?
Просил? Просил. Ну вот, это коты ему так помогли.
>> No.45068 Reply
>>43511
Этот мужик на картинке я, лол.
>> No.45471 Reply
Реквестирую какой-нибудь нормальный учебник по OpenGL. В гугл просьба не посылать, так как гигантское количество туториалов написаны чересчур по-уебански либо по старым версиям, которые сейчас уже не нужны. Учитывая, что я почти не разбираюсь в этом, хотелось бы, чтобы совет дал тот, кто в этом разбирается, и имел дело с изучением. Заранее спасибо.
>> No.45472 Reply
>>45471
Лучше брать официальную документацию технологии на их сайте и совмещать её с теоретическим учебником по теме, который бы мог учить в более оторванной от конкретики форме.
>> No.45473 Reply
>>45471
Алсо, есть же у них и на сайте книги:
https://www.opengl.org/documentation/books/
То что советуют сами OpenGL - это всегда самое лучшее, что есть по OpenGL.
>> No.45474 Reply
>>45472
>>45473
Спасибо. Странно, что я не догадался до такого.
>> No.45551 Reply
>>43511
Есть какой-то способ перехватывать события от evdev в linux input, и блокировать только определенные типы событие? Все остальные передавать дальше по цепочке в неизменном виде.
Пример:
мышка генерит события перемещения курсора и нажатия на кнопочки. Можно перехватить и заблочить события нажатия на кнопочки, а все остальное передать дальше?
>> No.45569 Reply
Крестобоги, выручайте. Частью программы должна быть функция, переводящая число из десятичной системы в двоичную. Написал это: http://pastebin.com/U7wjR5Za

Хочу проверить, например, на числе 19. Компилируется без ошибок, но вывод у программы пустой. Что происходит и где моя ошибка?
>> No.45570 Reply
>> No.45571 Reply
>>45569
> unsigned int mod;
> while (mod != 0)
Инициализация где? Нормальный компилятор как минимум варнинг выдавать должен.
>> No.45572 Reply
>>45569
https://ideone.com/wZ9tNY я делаю особую, ассемблерную магию.
>> No.45623 Reply
Как часто мне доводилось наблюдать людей, которых вроде как бы учили C++ в вузах, а на деле оказывается, что они даже C не знают. Например, если показать им, как можно делать callback, передавать в функцию указатель на другую функцию, их реакция обычно "ого, а разве в C так можно делать?". Очень часто они не понимают, чем отличается массив указателей на массивы от двухмерного массива, адресной арифметики. А ведь это и к плюсам и к Си относится. Я уж не говорю о том, чтобы спрашивать что-то про устройство vtable(таблиц виртуальных методов). Складывается впечатление, что их там только учат использовать STL, типа всяких vector, list, притом сами они реимплементировать с нуля эти контейнеры не осилят. Доколе?
>> No.45624 Reply
>>45623
Что значит доколе? Любому мало мальски нетривиальному занятию надо обучаться. Не бывает так, что вчера человек ничего не знает о программировании вообще и C++ в частности, а сегодня, хоп, и готов сеньёр девелопер.
>> No.45625 Reply
>>45624
В униках они дрочат залупу, а работодатель - учи. А потом почему в России одна нефть.
>> No.45626 Reply
>>45625
Мне кажется профессиональному программированию в университетах и институтах не обучают в принципе, с этим пора бы уже смириться.
>> No.45627 Reply
>>45626
Нигде не учат. Берёшь книгу и штудируешь. И, сдаётся мне, относится это не только к программированию.
>> No.45628 Reply
>>45627
Книжки тоже ничему не учат.
>> No.45629 Reply
>>45628
Книжки учат отлично. Но брать можно только авторитетные проверенные книги. И потом, ясен пень, надо всё прочитанное отработать упражнениями, сидя у себя дома перед компом.
>> No.45632 Reply
Вы все чмошники. Изучаю C++, копая программы из упражнений в ида про, по ходу увлекаюсь реверсом. Продолжайте дальше ныть на образование, неувлеченные немотивированные чмошники.
к:тоску видевшей
>> No.45633 Reply
>>45632
как грубо, вернись на оранжевый форум, пожалуйста

Я, например, получил такое образование физик-теоретик, Московский университет, которое никогда не светит большинству профессиональных кодеров и 99 % анонов. Тем не менее абсолютно всё, с чем сталкиваюсь на работе и использую, осваивал сам. Нет, это не сложно, просто это другое. Даже учитывая появление сейчас модных CS-факультетов ситуация кардинально не изменится, по тому что там будут продолжать учить, если угодно, теоретической информатике как науке, а в реальной жизни в последствии ты будешь получать деньги за высокоразвитые "мартышкины скиллы", то есть умение писать без ошибок или с минимальным их количеством в синтаксисе, знание различных библиотек, фреймворков, технологий и умение всё это совмещать в одном проекте.
>> No.45634 Reply
>>45633
За гомологии пространств хотя бы пояснить сможешь, картофан?
>> No.45635 Reply
>>45634
Максимально на пальцах для тебя.

Заводишь (ко)цепной комплекс, заводишь последовательность отображений между пространствами/группами в нём, и n-ая группа (ко)гомологий -- это фактор ядра n-го отображения по образу (n+1)-го.

Если что-то непонятно -- спрашивай.

Но я сильно удивлён этому вопросу ни с того ни с сего в треде, посвящённому C++. Если это оффтоп в попытке затроллить меня, вновь посоветую уйти от нас на оранжевую борду.
>> No.45647 Reply
Зачем могкт понадобиться указатели на функции?
Что с нии полезного сделаешь?
>> No.45648 Reply
>> No.45649 Reply
>>45635
> оранжевая борда
проиграл
>> No.45651 Reply
>>45647
Примерно тоже самое, что с функторами в С++(объектами с переопределённым ()) или с лямбдами.
>> No.45694 Reply
>>45651
На пальцах, специально для меня. Что такое функторы и лямбды?
>> No.45697 Reply
>>45694
Лямды, они же функции обратного вызова (с т.ч. практики программирования, не с т.ч. теоретической математики) - это функции, которые хранят в переменных и могут передавать в качестве параметра или возвращать в качстве возвращаемого значения. Это нужно, чтобы делать многозадачные функции, которые могут где-то внутри какие-то произвольные вещи делать.
В крестах было три способа делать их, есть лямбды на уровне синтаксиса в С++11, есть их имитация через переопределение оператора (), есть синтаксис родной для С.
>> No.45774 Reply
Вот смотрите. Есть у меня опенгл. В нем я создал 2 шейдера:
"in vec3 VertexPosition;"
"in vec3 VertexColor;"
"out vec3 Color;"
"void main() {"
"Color = VertexColor;"
"gl_Position = vec4(VertexPosition, 1.0);"
"}"
и
"in vec3 Color;"
"out vec4 FragColor;"
"void main() {"
"FragColor = vec4(Color, 1.0);"
"}"

Затем я задаю координаты точек и цвета для них. И нужные переменные привязываю с помощью функций:
glBindAttribLocation(programID, 0, "VertexPosition");
glBindAttribLocation(programID, 1, "VertexColor");

Затем идет типичный цикл отрисовки, в котором присутствуют следующие функции:
glVertexAttribPointer(0, 3, GLFLOAT, GLFALSE, 0, (void*)0); //первый ноль указывает на VertexPosition
glVertexAttribPointer(1, 3, GLFLOAT, GLFALSE, 0, (void*)0); //1 указывает на VertexColor

Вроде все должно идеально выполниться, как и написано в туториале. Но хуй. Треугольник как был черный, так и остался. Что здесь не так? Если надо, я могу весь код программы показать. Заранее спасибо.
>> No.46058 Reply
Нужна рекурсивная функция, которая выполнится N раз, на каждом шаге получая в аргументы результат своего выполнения. Как вообще вызывать функцию, получающую от самой себя аргументы? Читал про рекурсивные функции у K&R, читал про рекурсивное вычисление факториала, но там всё не то.

Вопрос скорее даже по C.
>> No.46059 Reply
>>46058
Отбой вопросу, разобрался без этого изврата.
>> No.46134 Reply
Почему возникает ошибка "Невозможно открыть заголовок QValueList" в Qt?
>> No.46135 Reply
>>46134
<Ванга-мод>
QValueList.h not found
</Ванга-мод>
>> No.46138 Reply
>>46135
Да, а почему он не найден?
>> No.46145 Reply
>>46138
Компилишь Qt3 код в 4м кьюте. Гугли.
>> No.46153 Reply
Ламерский вопрос можно?

Вот пример хэш-функции для пользовательского класса:

struct Record {
string name;
int product_code;
};

struct Rhash {
size_t operator()(const Record& r)
{
return hash<string>()(r.name) ^
hash<int>()(r.product_code);
}
};

unorderedset<Record, Rhash> myset;

Что это за синтаксис:
> hash<string>()(r.name)
?

Зачем столько скобок? hash - функциональный объект, как я понял. Первые скобки - это конструктор безымянного объекта? А вторые - operator()? Или что?

Я запутался.

Во всех примерах так, а я такого раньше не видел.
>> No.46154 Reply
>>46153
Первые скобки - это перегужаемый оператор. Это перегрузка операторов. В С++ () - это тоже оператор, который можно вызвать от объекта. Он потому и называется "функциональный объект", что у него () перегружен. Не знаю, как ты ещё это понял. На месте `()` могло стоять `=`, `[]` или ещё что-то.
>> No.46155 Reply
>>46153
> Первые скобки - это конструктор безымянного объекта? А вторые - operator()?
Да.
>>46154
Не пиши на доброчане когда пьяный.
>> No.46156 Reply
>>46155
> Не пиши на доброчане когда пьяный.
Ну бывает.
>> No.46232 Reply
Почему `const char a1[3] = "ixs";` выдает ошибку из-за отсутствия места под нулевой символ, а `const char a1[3] = {'i', 'x', 's'};` — нет?
>> No.46233 Reply
>>46232
В строках же ещё терминальный символ, нет? Так что там с ним четыре выходит.
>> No.46234 Reply
>>46233
Ну, да, так а во втором случае его получается нет? И при этом при желании его можно задать, дописав `'\0'`?
>> No.46235 Reply
>>46234
> так а во втором случае его получается нет?
Разумеется, его там нет. В обычных массивах же его нет.
>> No.46236 Reply
>>46235
Ясно, спасибо. А зачем он тогда вообще нужен, если в обычных массивах конец массива значит и без него успешно определяется?
>> No.46237 Reply
>>46236
Он нужен для работы с строками, потому что строка это масив символов с терминатором, очевидно же.
мимо
>> No.46238 Reply
>>46237
Ну, ладно.
>> No.46239 Reply
>>46236
> в обычных массивах конец массива значит и без него успешно определяется
Разве? Как?
>> No.46240 Reply
>>46239
Действительно, похоже никак. Ну тогда все ясно.
>> No.46268 Reply
File: 14720935908570.jpg
Jpg, 60.89 KB, 604×406 - Click the image to expand
edit Find source with google Find source with iqdb
14720935908570.jpg
>>46232
У тебя конпелятор слишком заботливый. Гнусный не ругается.
>> No.46269 Reply
>>46268
Не ругается, говоришь?

$ gcc ./lal.cc
./lal.cc: In function ‘int main()’:
./lal.cc:4:24: error: initializer-string for array of chars is too long [-fpermissive]
const char a1[3] = "ixs";
^
$ cat ./lal.cc
#include <stdio.h>
int main()
{
const char a1[3] = "ixs";
//char a1[] = "ixs";
printf("%s\n", a1);
return 0;
}
>> No.46275 Reply
>>46269
Стаковерфлоу говорит, что ты забыл про '\0', который терминирует строку.
>> No.46276 Reply
>>46275
Не важна кто там что на СО говорит, факт что гцц ругается.
>> No.46280 Reply
>>46276
> гцц ругается
gcc ругается потому, что строка не влезает в массив.
> Не важна кто там что на СО говорит
Важно то, что посоны с СО правы.
>> No.46282 Reply
>>46280
Ты мугичкой чтоли читаешь?

>>46268
> Гнусный не ругается.
>> No.46283 Reply
>>46275
Слышал звон.
>> No.46292 Reply
>>46232
Потому что "ixs" - там нуль-терминированный символ, который не влазит. А в случае {'i', 'x', 's'} все влазит. В то же время, если компилировать с "ixs" сишным компилятором, никаких проблем нет
>>46268
> У тебя конпелятор слишком заботливый. Гнусный не ругается.
Если компилировать как плюсы - ругается
>> No.46367 Reply
http://pastebin.com/ML5BYfJ4
Почему при вызове элемента B, находящегося в массиве типа A вызывается функция базового класса? Тип же B, она просто обязана перезаписаться. Как исправить? В сишарпе все нормально работает.
>> No.46368 Reply
>>46367
https://ideone.com/27qJ2d

Почему? А потому что vector<A> кастует экземпляры подкласса B к A. Плюсы и сисярп имеют мало общего, это два совершенно разных ЯП.
>> No.46369 Reply
>>46368
Спасибо, я понял.
>> No.46872 Reply
Надо с SFML написать игру. Если честно, то ничего не понял, в чем заключаются правила. Может поясните?
Суть: «Вращающий квадрат». Дан квадрат размером 4 х 4 клетки, в которых с помощью датчика случайных чисел расставлены буквы от А до Р. Упорядочить буквы в квадрате по алфавиту. Квадрат имеет подквадраты, которые можно вращать по часовой стрелке на одну клетку. Подквадраты имеют размер 2 х 2 и указываются номером левой верхней клетки.
>> No.46873 Reply
File: Untitled.png
Png, 4.58 KB, 400×400 - Click the image to expand
edit Find source with google Find source with iqdb
Untitled.png
>>46872
Очевидно же.
>> No.46874 Reply
File: 1.png
Png, 14.62 KB, 667×556
edit Find source with google Find source with iqdb
1.png
File: 2.png
Png, 8.93 KB, 503×230
edit Find source with google Find source with iqdb
2.png

>>46873
Ок, спасибо, разобрался, но пишу в Builder'е. Пикрелейтед - функция для перемещения матрицы 2х2 в зависимости от кнопки на 90 градусов. И теперь для каждой кнопки нужно прописать следующие значения переменных:

кнопка 1: row=0, column=0;
кнопка 2: row=1, column=0;
кнопка 3: row=2, column=0;

кнопка 4: row=0, column=1;
кнопка 5: row=1, column=1;
кнопка 6: row=2, column=1;

кнопка 7: row=0, column=2;
кнопка 8: row=1, column=2;
кнопка 9: row=2, column=2;

Вопрос: как это делается, как не прописывать вызов функции для каждой кнопки, а засунуть все это в цикл или что-то подобное?
>> No.46898 Reply
Доброано помоги. Как реализовать динамический массив с переменной длиной, через маленькие массивы с постоянной длиной, связанные в список, так, чтобы потом можно было без особых проблем добавлять, удалять и обращаться к элементу с конкретным индексом?
>> No.46902 Reply
>>46898
Это хеш-таблица обыкновенная.
>> No.47282 Reply
Когда выделяешь указателям на массив память с помощью new, и удаляешь её c помощью delete, где хранится размер массива? Оно ведь где-то записано, ведь компилятор, когда он выделяет и удаляет память, должен знать, что память от сих до сих занята. Почему нельзя получить значение размера массива средствами C++? Я вот читаю учебник, но чёта там вообще этот момент не раскрывается.
>> No.47283 Reply
>>47282
Это всё зависит от конкретного компилятора, размер хранится где-то глубоко в кишках и недоступен простым смертным. Но для подобных манипуляций есть например std::vector.
>> No.47285 Reply
>>47283
У меня задача из разряда числодробилок. Вектор будет работать чуть-чуть, но медленнее.

Как лучше всего создать динамический трёхмерный массив? С точки зрения наиболее высокой скорости вычисления.
>> No.47286 Reply
>>47285
Ну я не знаю, создай структуру, в которой будет указатель и размер, делов-то.
>> No.47287 Reply
>>47286
Да это понятно. Я спросил, чтобы понять, как это работает, потому что вроде бы значение размера массива есть, но узнать его почему-то нельзя. И почему в Ц++ так сделано, не понятно.
>> No.47288 Reply
>>47287
Так оператор "new", он же просто-напросто вызывает функцию "malloc()", и только-то.
А в ней не предусмотрено хранение длины (прав доступа и других полезных данных), т.е. в этой части C++ всё как в 60-70 годы.
>> No.47290 Reply
>>47288
> и только-то
И вызывает конструктор.
>> No.47291 Reply
>>47285
> У меня задача из разряда числодробилок. Вектор будет работать чуть-чуть, но медленнее.
Не будет.
"Преждевременная оптимизация - корень всех зол".
Сперва воспользуйся профайлером, потом оптимизируй.

> Как лучше всего создать динамический трёхмерный массив?
Как динамический одномерный.
>> No.47301 Reply
>>47291
> Как динамический одномерный.
Но тогда при доступе к каждому элементу будет выполняться две операции целочисленного умножения и ещё минимум 2 операции сложения. Не слишком ли высоки издержки?
>> No.47302 Reply
>>47301
> Не слишком ли высоки издержки?
Чтобы узнать, высоки издержки или нет, ты должен использовать "профайлер" (profiler) - инструмент, который определяет, сколько именно времени твоя программа тратит на вычисление каждой конкретной функции. Если профайлер покажет тебе, что на функцию доступа к трехмерному массиву программа затрачиват 50% времени от всего времени своей работы (или даже 10%) - тогда, конечно, эти издержки высоки и хранение массива нужно будет оптимизировать.
На практике, даже в совершенно числодробильных задачах доступ к массиву будет занимать ничтожную долю времени (<<1%). Поэтому можно уверенно считать, что издержки пренебрежимо малы, до тех пор, пока не доказано обратное.
>> No.47303 Reply
>>47301
Нет, эти издержки настолько малы, что на современных архитектурах процессоров они даже могут вообще не появиться из-за тонкостей работы кешей и конвееров. Попытка подрезать пару таких операций тут и там вообще не гарантирует хоть какого-то даже очень малого ускорения, может даже стать рандомно медленнее. Это всё работает гораздо сложнее чем просто "послдовательность операций, каждая из которых ест сколько-то времени"
>> No.47434 Reply
>> No.47569 Reply
суп анон , у меня проблемка с stdin, пытаюсь читать из него при помощи fread из потока читается только когда наберается количество запрашивамых байт, после чего запрашиваю еще в цикле , опять же freadом , вопрос, как определить конец ввода в потоке, есть ли у него какой буфер?
>> No.47601 Reply
>>47569
http://cppstudio.com/post/1641/

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

P.S. Всегда твой анонимус.
>> No.47606 Reply
Создаю объект:
angle = new ModelAngle();
fprintf(stderr, "angle = %X\n", angle);

В его конструкторе:
ModelAngle::ModelAngle()
{
fprintf(stderr, "ModelAngle = %X\n", this);
}

И что ж я вижу?
ModelAngle = 1F31160
angle = 1F31180

Ну и при удалении:
Error in `./a.out': double free or corruption (out): 0x0000000001f31180

Почему адреса не совпадают?
>> No.47639 Reply
>>47606
полностью код давай
>> No.47687 Reply
File: TsT.png
Png, 8.13 KB, 664×327 - Click the image to expand
edit Find source with google Find source with iqdb
TsT.png
>>47606
хмм, у меня совпадают
''
#include <stdlib.h>
#include <stdio.h>

class TestObj{
public:
TestObj();
~TestObj();
};

TestObj::TestObj(){
printf("InConstruct = %X\n",this);
}

TestObj::~TestObj(){

}

int main(){
TestObj *Tb = new TestObj();
printf("Out construct = %X\n",Tb);
return 0;
}
''
>> No.47688 Reply
>>47601
Не не помогло, приходится считывать по байту и проверять на символ перевода строки чтоб прекратить сканирование , видимо все таки перевод коретки не помечает stdin eofом
>> No.47689 Reply
File: 148977764521.jpg
Jpg, 75.31 KB, 550×400 - Click the image to expand
edit Find source with google Find source with iqdb
148977764521.jpg
>>47606
и правда скинь полный код класса
>> No.47690 Reply
File: TsT.png
Png, 8.14 KB, 662×328 - Click the image to expand
edit Find source with google Find source with iqdb
TsT.png
>>43511
#include <stdlib.h>
#include <stdio.h>

class TestObj{
public:
TestObj();
~TestObj();
};

TestObj::TestObj(){
printf("InConstruct = %X\n",this);
}

TestObj::~TestObj(){

}

int main(){
TestObj *Tb = malloc(sizeof(TestObj));
printf("Out construct = %X\n",Tb);
return 0;
}

смотрите маллок тоже вызывает конструктор , каким образом это происходит? разве он не просто память в куче выделяет ?
>> No.47692 Reply
>>47688
Тебе до EOF или до EOL читать надо? Для первого делай `fread` и смотри, что он возвращает. Для второго есть `fgets`: читаешь и проверяешь последний символ на '\n' ( http://man7.org/linux/man-pages/man3/fgets.3.html ).
>> No.47693 Reply
>>47690
У меня gcc, clang на Ubuntu и VS2017 не вызывают. Алсо, все три не компиляются из-за того, что `malloc` возвращает `void *`, и нужен явный каст.
>> No.47694 Reply
File: 149367520233.jpg
Jpg, 109.00 KB, 453×600 - Click the image to expand
edit Find source with google Find source with iqdb
149367520233.jpg
>>47692
> Тебе до EOF или до EOL читать надо? Для первого делай `fread` и смотри, что он возвращает.
я так и делал но программа зависает пока в потоке не наберется запрашиваемое количество байт, я просто пытался сделать что то как раз вроде fgets только ручками.

>>47693
ааййй сории, это я печенько, я забыл пересобрать и поэтому запускал старый проект с new, maloc ничего и правда не выделяет
>> No.47700 Reply
>>47694
> пока в потоке не наберется запрашиваемое количество байт
...или не встретится EOF. Что логично.f

Можешь посмотреть, как это в том же glibc сделано: https://code.woboq.org/userspace/glibc/libio/iogetline.c.html#38
>> No.47726 Reply
>>47700
> ...или не встретится EOF. Что логично.f
в том то и есть прикол , что в stdin не встречается EOF

> Можешь посмотреть, как это в том же glibc сделано
не обьясняй , я ничерта ни понимаю что там из под этих подкастов вызывается и чтоот куда берется
>> No.47727 Reply
>>47726
Ctrl+D, не?
>> No.47803 Reply
Подскажите нубу как подключить и использовать cpputest https://github.com/cpputest/cpputest к проекту на qt.
Заранее благодарен.
>> No.47809 Reply
>>47803
сам спросил сам отвечаю
в ProjectName.pro добавить строку
LIBS+= -lCppUTest -lCppUTestExt

в main.cpp подключить

#include <CppUTest/CommandLineTestRunner.h>

в функцию майн

return CommandLineTestRunner::RunAllTests(argc, argv);

далее создать папку test и в ней файл Test_MyCode.cpp важно начинать файл с слова Test

внутрь Test_MyCode.cpp

#ifndef TESTSERIALPORTH
#define TESTSERIALPORTH

#include "CppUTest/TestHarness.h"
#include "CppUTestExt/MockSupport.h"

TEST_GROUP(MockDocumentation)
{
void teardown()
{
mock().clear();
}
};

void productionCode()
{
mock().actualCall("productionCode");
}

TEST(MockDocumentation, SimpleScenario)
{
mock().expectOneCall("productionCode");
productionCode();
mock().checkExpectations();
}

#endif // TESTSERIALPORTH

да если у вас убунта саму библиотеку ставить так sudo apt-get install cpppunit
>> No.47874 Reply
File: CPP_missingtool.PNG
Png, 43.16 KB, 683×560 - Click the image to expand
edit Find source with google Find source with iqdb
CPP_missingtool.PNG
Установил QtCreator, вместе с ним установился mingw. Ну норм, mingw вещь полезная. Теперь хочу писать на С++ без использования Qt. В Netbeans с С++ плагином указал путь к установке mingw, которая идет в комплекте с Qt. Пишет пикрилейтед. Я так понял, нужен msys2? ( http://www.msys2.org/ ). Он будет доставлять свой билд mingw? Мне куча билдов mingw не нужно, я запутаюсь...

Может, в Qt Creator можно не использовать Qt и Qmake?
>> No.47875 Reply
>>47874
Можно создавать проекты руками и компилить руками, а QtCreator только править файлы. Например.
>> No.47878 Reply
>>47874
> Теперь хочу писать на С++ без использования Qt. В Netbeans с С++ плагином указал путь к установке mingw, которая идет в комплекте с Qt.
Лол, а "Новый проект без использования Qt" в Creator'е ты не сумел найти?
>> No.47977 Reply
Есть вот такой вот код:

m_Handle = CreateFile(
port->c_str(), // Name of the Port to be Opened: Example: "\\\\.\\COM10"
GENERICREAD | GENERICWRITE, // Read/Write Access
0, // No Sharing, ports cant be shared
NULL, // No Security
OPEN_EXISTING, // Open existing port only
FILEFLAGOVERLAPPED, // overlapped/nonoverlapped IO. might be worth setting to 0
// or FILEATTRIBUTENORMAL or FILEFLAGOVERLAPPED
NULL); // hTemplate must be NULL for comm devices
if(mHandle == INVALIDHANDLE_VALUE) {

char errcode [30];
uint8_t lngth = sprintf(errcode, "Error opening port: %05d", GetLastError());
throw ConnectionException( new string(errcode, lngth) );
}

Вот эта запись throw ConnectionException( new string(errcode, lngth) ); не приведет к memory leak? Я потом не удаляю явно объект std::string ...
>> No.47978 Reply
File: dc_code_cpp.JPG
Jpg, 62.20 KB, 1109×336 - Click the image to expand
edit Find source with google Find source with iqdb
dc_code_cpp.JPG
Есть вот такой вот код:

m_Handle = CreateFile(
port->c_str(), // Name of the Port to be Opened: Example: "\\\\.\\COM10"
GENERICREAD | GENERICWRITE, // Read/Write Access
0, // No Sharing, ports cant be shared
NULL, // No Security
OPEN_EXISTING, // Open existing port only
FILEFLAGOVERLAPPED, // overlapped/nonoverlapped IO. might be worth setting to 0
// or FILEATTRIBUTENORMAL or FILEFLAGOVERLAPPED
NULL); // hTemplate must be NULL for comm devices

if(mHandle == INVALIDHANDLE_VALUE) {

char errcode [30];
uint8_t lngth = sprintf(errcode, "Error opening port: %05d", GetLastError());
throw ConnectionException( new string(errcode, lngth) );

}

Вот эта запись throw ConnectionException( new string(errcode, lngth) ); не приведет к memory leak? Я потом не удаляю явно объект std::string ...
>> No.47979 Reply
File: dobrochan_code2.PNG
Png, 12.84 KB, 409×327 - Click the image to expand
edit Find source with google Find source with iqdb
dobrochan_code2.PNG
Передаю в конструктор одного класса экземпляр-ссылку другого класса, чтобы потом использовать внутри. internal_C1 нигде в ходе работы не потеряется (см. картинку)?
>> No.47980 Reply
File: dobrochan_code2_V2.PNG
Png, 14.35 KB, 489×379 - Click the image to expand
edit Find source with google Find source with iqdb
dobrochan_code2_V2.PNG
>>47979
Придумал трюк с malloc при передачи экземпляра. Так можно?
>> No.47982 Reply
>>47980
Чому нет? Только помни про срезку при передаче потомка по указателю базового класса.
>> No.47992 Reply
>>47982
что за >срезку при передаче потомка по указателю базового класса
>> No.47997 Reply
>> No.48097 Reply
File: 1494880499884.png
Png, 37.33 KB, 208×212 - Click the image to expand
edit Find source with google Find source with iqdb
1494880499884.png
Граждане , почему _rotl и прочии указаны в скобочках как будто это обьявление указателей на функции, это что и правда указатели , тогда почему без звездочки ? это из stdlib.h

attribute((cdecl)) attribute((nothrow)) unsigned int (_rotl)(unsigned int, int) attribute((const));
attribute((cdecl)) attribute((nothrow)) unsigned int (_rotr)(unsigned int, int) attribute((const));
attribute((cdecl)) attribute((nothrow)) unsigned long (_lrotl)(unsigned long, int) attribute((const));
attribute((cdecl)) attribute((nothrow)) unsigned long (_lrotr)(unsigned long, int) attribute((const));
>> No.48098 Reply
>>47977
Если ConnectionException не уничтожает эту строку, то да будет утечка. Смотри код конструкторов\деструктора.
>> No.48099 Reply
>>47979
Потеряется если ты отдашь его куда-нибудь в виде указателя и там он будет удален.
>>47980
Не копируй не PODы c помощью memcpy.
https://stackoverflow.com/questions/26227965/memcpy-a-non-pod-object#26228269

И вообще, new в большинстве случаев не нужен, а когда нужен используй uniqueptr<T> и sharedptr<T>.

>>48097
rotl скорее всего создан через typedef. Например: typedef *void handle;
>> No.48100 Reply
>>48099
> rotl скорее всего создан через typedef. Например: typedef *void handle;
проблема в том что _rotl это функция , как она может быть создана через typedef&
>> No.48101 Reply
File: таблица-символов.png
Png, 2.98 KB, 249×113 - Click the image to expand
edit Find source with google Find source with iqdb
таблица-символов.png
>>48097
ну и еще вопрос прицепом , почему при компиляции в модуль с main функцией добавляется еще какаято _main, и она валяется неопределенной. При компиляции простого файла без маина такого не наблюдается. компилятор GCC

с майном
.file "main.c.prepr"
.def ___main; .scl 2; .type 32; .endef
.text
.globl _main
.def _main; .scl 2; .type 32; .endef
_main:
LFB0:
.cfi_startproc
pushl %ebp
.cfidefcfa_offset 8
.cfi_offset 5, -8
movl %esp, %ebp
.cfidefcfa_register 5
andl $-16, %esp
call ___main
movl $0, %eax
leave
.cfi_restore 5
.cfidefcfa 4, 4
ret
.cfi_endproc
LFE0:
.ident "GCC: (GNU) 5.3.0"

и простой файл

.file "test.c"
.text
.globl _Funck1
.def _Funck1; .scl 2; .type 32; .endef
_Funck1:
LFB0:
.cfi_startproc
pushl %ebp
.cfidefcfa_offset 8
.cfi_offset 5, -8
movl %esp, %ebp
.cfidefcfa_register 5
movl $0, %eax
popl %ebp
.cfi_restore 5
.cfidefcfa 4, 4
ret
.cfi_endproc
LFE0:
.ident "GCC: (GNU) 5.3.0"
>> No.48102 Reply
>>48100
Да я понял, что хуйню сморозил. Это просто объявления функций с именами взятыми в скобки.
>> No.48104 Reply
>>48102
и зачем они так обьявили , ладно попробую завтра так же обьявить , посмотрю что копилятор скажет
>> No.48250 Reply
File: STL.png
Png, 2.35 KB, 947×286 - Click the image to expand
edit Find source with google Find source with iqdb
STL.png
>>43511
Аноны, йА пасрал!!!
>> No.48276 Reply
File: Пасрал-тоже.png
Png, 14.10 KB, 635×453 - Click the image to expand
edit Find source with google Find source with iqdb
Пасрал-тоже.png
>>48250
и йА посрал!!!
>> No.48294 Reply
почему Netbeans не хочет работать с mingw32-make? Он требует make с комплекта msys2, тогда как cmake работает только с mingw32-make.
>> No.48296 Reply
File: 42.png
Png, 2.47 KB, 837×232 - Click the image to expand
edit Find source with google Find source with iqdb
42.png
>>48250 >>48276
А вот сейчас чуть потолок не рухнул чесслово.
>> No.48327 Reply
>>48296
воу , что это вообще ?
>> No.48328 Reply
>>48327
Ассемблер это, MIPS судя по всему.
>> No.48330 Reply
>>48328
Да, йоссемблёр с отступами.
>> No.48331 Reply
>>48296
а рядом это код на сях чтоли ? который закоменченый
>> No.48333 Reply
>>48331
А это типа псевдо-язык такой...
Ну не транслируетьса команда "BZ" в современные я/п, т.е. вообще, от слова совсем.
>> No.48335 Reply
>>48333
А что ты на MIPS асемблере пишеш такое?
>> No.48336 Reply
>>48335
Играюсь, чтобы не терять опыт. Единственное, где может пригодиться такое — начальный загрузчик, вытаскивающий в память DOS-подобный загрузчик ядра операционной системы (они должны быть написаны на других языках). Больше, наверное, нигде не понадобится.
>> No.48343 Reply
>>48336
а почему MIPS? Я думал MIPS архитектура испльзуется для всяких поточных устройств типо видиокарт
>> No.48345 Reply
>>48343
Нет никакой разницы, я ж не буду на работе это использовать (а тем более в этой стране).
Шрифты в электронной книге понравились, да и всё.
>> No.48346 Reply
>>48345
ну ладушки
>> No.48388 Reply
Как реализовать в консольке? Вот например указываю я каталог на винде, прога его мониторит. Я меняю имя файла, или размер, ну короче меняю параметры, а прога моментально выдает отчет об изменении. Если винапи использовать, то какие функции? Я ньюфаг в этом просто.
>> No.48393 Reply
>>48388
Думаю что тебе надо делать File System Filter Driver
>> No.48394 Reply
>>48388
Google, win32 file tree change notification
>> No.48395 Reply
Я так понимаю, std::shared_ptr<...> можно не удалять явно как обычный указатель? Это не будет утечкой памяти?
>> No.48396 Reply
>>48395
Да вроде бы смысл в том, чтобы нулём его затереть, и тогда указатель и область в куче исчезнут одновременно.
>> No.48420 Reply
>>48395
Да. Содержимое шаредптра грохнется тогда, когда грохнутся все инстэйнсы этого птра.
Тобишь:
{
...someshit...
{
std::sharedptr<Foo> shared = std::makeshared<Foo>();
shared->DoMagic();
}
..при выходе из скоупа выше - Foo грохнется.
...someothershit...
}

Но юзать именно шаредптр не рекомендуется, т.к. размазывается понятие владений объектом. Лучше юзай std::uniq_ptr.
>> No.48482 Reply
File: a1ctumblroyj24mY0F21qhttpto3raw.gif
Gif, 749.62 KB, 700×700 - Click the image to expand
edit Find source with google Find source with iqdb
a1ctumblroyj24mY0F21qhttpto3raw.gif
Чем занимаются С++ программисты? Кроме системного программирования. Что это в точности, кстати говоря?
>> No.48483 Reply
>>48482
> > Чем занимаются С++ программисты?
Программируют же, чем еще.
Что программируют? Да все, что хочешь.
>> No.48484 Reply
>>48482
Язык == инструмент.
Плюсы достаточно низкоуровневый, со всеми выходящими отсюда плюсами и минусами (быстро, но иногда нужна куча кода и много способов выстрелить в ногу).
Что можно делать? Да что угодно.
>> No.48485 Reply
>>48483
>>48484
Вопрос был не "что можно делать", а "что делают".
Неужели везде требуется супероптимизация и никому не жалко на это ресурсов?
>> No.48486 Reply
>>48485
Что можно делать, то и делают.
Пишут игры, бакэнд, всякий шлакософт. Всё как и в других языках.
Решают поставленные задачи.

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

Еще раз повторюсь: язык == инструмент. Это как спрашивать "Что делают отвертками на минус? Кроме сбора шкафов?"
>> No.48487 Reply
>>48486
Да, денег и времени. Подозреваю, что при равном скилле одинаковые проги на плюсах и пайтоне будут написаны за разное время.

Отвертка хороша для сборки шкафа, но когда тебе нужно обставить всю квартиру лучше использовать шуруповерт, который значительно ускорит процесс, хотя можно и каждый винтик в ручную закручивать.
>> No.48488 Reply
>>48487
а можно использовать уже собраые шкафа и столы , библиотеки то на что.
>> No.48489 Reply
>>48488
Это да, но ведь не каждый хороший шкаф пролезет в дверной проем.
>> No.48490 Reply
>>48487
> использовать шуруповерт, который значительно ускорит процесс
Добро пожаловать в C++11, C++17 + сторонние либы.

В данном случае другой язык == другой инструмент. Шурупы можно забивать микроскопом, но зачем?
>> No.48495 Reply
>>48490
Так я про это и спрашиваю. Плюсы как раз на микроскоп похожи.
>> No.48496 Reply
File: 15178744802.jpg
Jpg, 628.62 KB, 715×1000 - Click the image to expand
edit Find source with google Find source with iqdb
15178744802.jpg
>>48495
ну а что тебе нужно делать , что ты за приложения делать собираешся, на чем раньше писал? в сях можно сделать все необходимые структуры данных, есть все для организации ветвления , всякое ооп, и доступ к апи системы + стандартная библиотека для всякого стандартного ввода вывода , что еще нужно? к слову и микроскопом можно научиться виртуозно забивать шурупы , при этом еще и контролировать им же качество забития. расскажи побольше что тебе от сей нужно , и мы расскажем что там есть
>> No.48499 Reply
>>48496
В сях и плюсах никогда не будет по крайней мере три вещи:
1. GC
2. JIT
3. Типизация Хиндли-Милнера, вывод типов, вот это всё
>> No.48500 Reply
>>48496
Ни на каких, не считая лаб на С и Жабе, ну и чуть-чуть на некоторых других. Просто пытаюсь понять, что меня ждет, если я захочу стать СПП программистом. Мне нравится идея, что можно все оптимизировать и программа будет работать в джва раза быстрее, чем на чем-либо другом.
>> No.48503 Reply
>>48499
чел JIT используется на интерпритируемых языках
>> No.48507 Reply
>>48499
GC есть в виде сторонних библиотек или собственной реализации
>> No.48508 Reply
>>48500
Нам нужен готовый красивый продукт, который хотим развивать. Так просто это не осметить. Нужно встречаться и разговаривать о затраченном времени. Мы вам перезвоним.
>> No.48515 Reply
>>48508
Ну, это с любым языком так, наверное.
>> No.48518 Reply
>>48503
> чел JIT используется на интерпритируемых языках
Java это интерпретируемый язык?
>> No.48519 Reply
>>48507
> GC есть в виде сторонних библиотек или собственной реализации
Толку от этих сторонних библиотек, если стандартные контейнеры написаны без оглядки на их существование?
С тем же успехом можно заявлять, что GC есть например в ассемблере, там ведь тоже можно ручками реализовать подсчет ссылок и прочее подобное. Программистам на Java и C# никакие библиотеки не нужны, все уже встроено в сам языковой рантайм.
>> No.48525 Reply
>>48518
Java да
>>48519
Ну не используй стандартные контейнеры
>>48515
Что да то да. К слову если ты хочешь "профессионально" то скорее тебе и правда стоит обратить свое внимание на Java и C# и perl, сейчас только на этом помоему и работаю всякие програмисты, по причинам нинимальных трудозатрат (начальство это ну очень любит, да и не только) на производство своего "продукта".

Ну а если ты хочешь делать свои задротские програмки, вылизывать их до блеска упиваться своими произведениями, управлять своим железом, писать свои операционки, то добро пожаловать в C. И запастись книжками по той архитектуре на которой ты будешь работать , ну то есть знать свое желазо. Этот вариант естественно как хобби я рассматриваю.
>> No.48536 Reply
>>48519
Да и черт с ним, GC нинужен же. Нормальный нимакака пишет вполне безопасный код, плюс в серьезном проекте автоматом будет valgrind.
>>48525
> К слову если ты хочешь "профессионально" то скорее тебе и правда стоит обратить свое внимание на Java и C# и perl, сейчас только на этом помоему и работаю всякие програмисты, по причинам нинимальных трудозатрат
Не смеши мой automotive. Плюсы живее всех живых, и дохрена востребованы, ведь они не жрут ресурсы аки быдлокод с GC, и при этом позволяют делать что душе угодно.
>> No.48541 Reply
>>48525
> Java да
На самом деле нет. Точнее, не совсем. Исходный код на Java компилируется в Java-bytecode, и вот потом уже этот байткод может интерпретироваться. Но, если под интерпретируемостью понимать то, что какой-то там байткод интерпретируется, C++ тоже интерпретируемый, ведь там тоже исходный код компилируется в некий байткод (точнее, в инструкции целевого процессора) и центральный процессор это дело интерпретирует.
И интерпретируемость с JIT не имеет прямой связи. Не всякий интерпретируемый язык (не всякий язык, для которого реализован интерпретатор) обзавелся JIT-ом и не всякий компилируемый язык не имеет в составе JIT.
>> No.48542 Reply
>>48541
И да, если в некотором языке есть JIT, он уже не совсем интерпретируемый
>> No.48543 Reply
File: -.jpg
Jpg, 46.15 KB, 604×403 - Click the image to expand
edit Find source with google Find source with iqdb
-.jpg
>>48541
о нееет филосовствованияя
>> No.48544 Reply
>>48543
Я понял: филососфией люди называют тот уровень практических знаний, который они не в состоянии оценить на предмет истинности/ложности в силу своей слабой компетентности.
>> No.48550 Reply
>>48544
> филососфией
> практических знаний

ты где головкой то так ушибся ?
>> No.48551 Reply
>>48544
Скорее не могут применить, а не оценить истиность.
>> No.48552 Reply
>>48541
чтож, я и правда не понимаю, для меня компиляция это перевод кода непосредсвенно в маш код (хоть и определение у него другое) , я работал и работаю только с низкоуровневым софтом, поэтому не совсем понимаю для чего этот JIT вообще нужен, но обьсните мне тогда , для чего бы JIT понадобился бы C, вот за чем он там нужен, что бы он делал ?
>> No.48609 Reply
Меня уже заебло!!! Я скачал штук 8 сборок визуал студио с рутрекера. Некоторые просто не трогаются, некоторые не устанавливаются, потому что им нужен нет.фреймворк (он есть, но блять какой-то конфликт и установка не начинается). Некоторые просто хуевые сборки и потому не работают. Я скачал эклипс, долго разбирался в нем. Оказалось, что к нему нужен еще отдельно компилятор какой-то мингв или как его суку. Ебался с какими-то пас-вариаблс в винде, чтоб все это пыхтело потное говно. Кое как заинстолил, но оно компилит через раз и какие-то проблемы с библиотеками дефолтными (не получается в файл выводить данные, хотя в консоли вывод без проблем работает).
Мне просто нужна залупа, чтоб на плюсах писать небольшие консольки для математических методов, диффуры там числено решить всякие, без всяких там наворотов.
Сейчас буду пытаться кьюти еще пробовать и может эклипс заново переустановлю с нуля. Анон, что-нибудь мне можешь посоветовать? Я понимаю, что тут все очень крутые программисты и вообще "ололо не можешь среду установить куда тебе код писать собака", но доброчан же.
>> No.48610 Reply
File: medmainos2.gif
Gif, 62.61 KB, 529×530 - Click the image to expand
edit Find source with google Find source with iqdb
medmainos2.gif
>>48609
> чтоб на плюсах писать небольшие консольки для математических методов
Watcom + MED Editor.
>> No.48611 Reply
>>48609
А тебе обязательно на плюсах это делать? Если нет, то есть Пайтон, он должен подойти лучше и работать методы из написанных профессионалами библиотек будут почти наверняка работать лучше и быстрее, чем самописные. А может тебе вообще только результат нужен? Тогда есть вообще есть вольфрамальфа.
А так, можешь CodeBlocks попробовать, там, на сколько я помню, все должно работать из коробки.
>> No.48614 Reply
>>48609
Зачем с рутрекера тянешь? Visual Studio Community же! Ну и QtCreator на винде бодро запускается. И CodeBlocks уже посоветовали. А эклипс не мучай, он уже мертв.
>> No.48616 Reply
>>48611
>>48610
>>48614
Спасибо! Мне больше алгоритмы важны, чем результат, поэтому вольфрам не подходит. Питон не нужен, потому что я иногда делаю не себе, большинство только плюсы умеют читать возле меня.
Нашел кьюти креатор, у них на сайте автоматический онлайн инстоллер есть, качаю. Думаю все заработает теперь.
>> No.48617 Reply
>>48616
А ты сторонние библиотеки будешь использовать? А то на винде проблематично собирать C/C++ либы (по сравнению с юниксами); помню как мучался со сборкой GSL, в итоге запустилось только половина трактора. Так что возможно лучше взять Питон или там C#, благо он на плюсы сильно похож.
>> No.48618 Reply
>>48617
Мм, ни разу такого не делал. Погуглил, GSL очень круто выглядит. Может чуть позже заморочусь, на сишарп опыт есть в принципе.
>> No.48619 Reply
File: Безымяывынный.png
Png, 292.25 KB, 2646×1024 - Click the image to expand
edit Find source with google Find source with iqdb
Безымяывынный.png
>>48609
попробуй notepad++(просто блокнот с подсветной(ну на самом деле не просто но не суть)) и mingw или cygwin (наверно лучше cygwin, но у меня и то и то работает (а вообще какая между ними разница кто нить знает ?)). Ну и почитай в интернетике про GCC (про ключи -x -o -I и тд). Студию я и метровой палкой бы не советовал, у меня с ней неприятный личный опыт... удачки
>> No.48620 Reply
>>48619
> Я скачал эклипс, долго разбирался в нем. Оказалось, что к нему нужен еще отдельно компилятор какой-то мингв или как его суку
Не, Notepad ему не подойдет.
>> No.48670 Reply
>>48609
Используй GNU Emacs. Это лучший вариант.
>> No.48747 Reply
Ищу парочку плюсоебов на разные проекты разных размеров и долгосрочности.

Первый: нужно знание реверсинга, алгоритмов шифрования, умение копипастить из декомпилятора иды про в вижал-студию так, чтобы собиралось и даже работало. З/п от 100000 руб в мес в зависимости от навыков. Вакансия резиновая, реверсеров и тех, кто нареверсенное будет воплощать в дллки надо много.

Второй: куте/плюсы/андроид. Да, все три вместе. Да, на плюсах и куте под андроид. Если такие извращенцы есть, то очень нужны еще вчера. Надо разработать прототип одной хреновины, плачу 100-200к в зависимости от всяких разных условий.
>> No.48754 Reply
File: 1474966900_y1.jpg
Jpg, 71.73 KB, 700×528 - Click the image to expand
edit Find source with google Find source with iqdb
1474966900_y1.jpg
>>48747
> Ищу парочку плюсоебов на разные проекты разных размеров и долгосрочности.
>> No.48802 Reply
File: Untitled.png
Png, 38.95 KB, 1456×676 - Click the image to expand
edit Find source with google Find source with iqdb
Untitled.png
Надеюсь я зашел туда, все-же "с" подобный язык.
Есть одна ардуина которая принимает данные через serial, хотя пожалуй это не важно, на картинке в левой части вывод а в правой то как serial plotter ардуиновой ide этот вывод истолковывает. Как можно сделать так что-бы вместо красной линии были значения по горизонтали, синяя осталась как есть, а после того как синяя дойдет до конца она опять начинала с начала а не продолжалась? serial plotter вообще предоставляет такие возможности? Наверное так себе вопрос задал, но надеюсь понятно.
Будет нище спектроанализатор, по вертикали децибелы а по горизонтали мегагерцы.
>> No.48887 Reply
>>48747
Бамп.
Если вдруг есть люди, которые просто хотят писать на плюсах просто в рамках ТЗ, без всяких там KPI и прочей бюрократии, милости просим.
Любителям дрочить на технологии, паттерны и вообще вставать в позу "я щитаю правильным только так, а иначе я нихуя делать не буду!" не беспокоить.
Походу надо забить найти профессионалов и нанять за еду еще студентов и выпускников. Они хоть и тупые и нихуя не умеют, зато стараются, делают что им говорят и не выебываются.
>> No.48888 Reply
File: 603x339_307715.jpg
Jpg, 31.71 KB, 603×339 - Click the image to expand
edit Find source with google Find source with iqdb
603x339_307715.jpg
>>48887
Отправил резюме. Надеюсь, дойдёт.
>> No.48889 Reply
>>48887
Плюсы знаю на уровне "никак", готов работать за нихуя целыми днями. Из языков знаю python и lua, понимаю ООП и есть пару говно-игр в консоли, но хочу выучить плюсы. Я подхожу?
>> No.48899 Reply
File: sample_738041921b222a04f3032a9cafe846756d024bab.jpg
Jpg, 158.29 KB, 850×850 - Click the image to expand
edit Find source with google Find source with iqdb
sample_738041921b222a04f3032a9cafe846756d024bab.jpg
>>48888
Мы получили Вашего голубя с биографией, сэр. Мы Вам отпишем, тоже птицей.
>> No.48966 Reply
File: ikonnikov_-_funkciya_forma_obraz_v_arhitekture_198.png
Png, 631.79 KB, 544×700 - Click the image to expand
edit Find source with google Find source with iqdb
ikonnikov_-_funkciya_forma_obraz_v_arhitekture_198.png
Я правильно понимаю, что стоит везде, где только можно, использовать интеллектуальные указатели и всячески избегать встроенных? Или это только для управления динамической памятью? Каковы подводные камни в таком подходе? А то как-то слишком хорошо и удобно получается.
>> No.48979 Reply
>>48966
> Всегда создавайте интеллектуальные указатели в отдельной строке кода; ни в коем случае не делайте это в списке параметров, чтобы не произошла небольшая утечка ресурсов, связанная с определенными правилами выделения памяти спискам параметров.

https://msdn.microsoft.com/ru-ru/library/hh279674.aspx

ну а вообще это судя по всему как создавать локалные переменные только не в стеке а в куче, но можно и пользоваться инкапсулированным обычным указателем (интересно если его овободить до удаления интелектуала , интелектуал загнется на деструкторе ?).

Мне эта штука еще лет 10 наверно не прегодится хехе
>> No.48980 Reply
>>48966
Смотря какие. sharedptr нужен для специфических случаев. uniqueptr как правило нужен для джуниоров-макак, которые забывают сделать delete и не умеют в valgrind, либо в редких случаях создания никому не принадлежащих объектов на куче с возможностью вылета из кода до строки с delete.
Так как макак много, то макакам советуют использовать смарт поинтеры везде.
>> No.48981 Reply
>>48979
> интересно если его овободить до удаления интелектуала , интелектуал загнется на деструкторе ?
Если я правильно понял, что тут написано, то Липпман грит, что это ведет к неопределенному поведению, и вообще не рекомендует пользоваться встроенным указателем, вытащенным из интеллектуального.

>>48980
Так какие минусы у использования uniqe-ptr везде? Кроме того, что это недостаточно свэг? Сильные потери производительности? По ссылке выше написано
> Доступ к инкапсулированному указателю с помощью перегруженных операторов интеллектуального указателя * и -> осуществляется ненамного медленнее, чем доступ к необработанным указателям напрямую.
Занимаемый объем памяти тот же, что и у обычного указателя.
>> No.48982 Reply
>>48981
Так, а если мне не нужно совобождение памяти при выходе из зоны видимости , ели у мення на данную память ссылаются несколько указателей из программы, не означает ли это то что он при выходе из зоны видимости освободит память на который ссылается другой указатель и при обработке второго указателя у меня случится исключение или чего хуже доступ к какой либо иной информации?
>> No.48987 Reply
>>48981
> Так какие минусы у использования uniqe-ptr везде?
Худший контроль lifetime'а. Оверхед. Некопируемость. Динамические библиотеки.
> По ссылке выше написано
На заборе тоже написано. Например, при простейшей реализации -> потребует вызова двух методов вместо одного: больше засирается стэк и удваивание операции. Правда, можно заинлайнить.
>> No.48989 Reply
>>48982
Не слушай >>48987, он неадекват, как-то много тут их завелось.
Юзанье unique_ptr - хорошая практика, помогает избежать утечек памяти и обращений к уже удаленным объектам, трахоебенья с делитами при выходе из зоны видимости и пр.
Если возникает необходимость использовать shared_ptr, то, скорее всего, косяк в архитектуре программы. При шаред птрах становится нихрена не понятно кто владеет объектом~, и кого за него пиздить~.
weak_ptr - не встречал ни одного оправданного использования, на ум приходят только крайне специфические и костыльные варианты.

Насчет быстродействия - да, unique_ptr быть может чутка медленнее, вообще будет зависеть от компилятора и звезд на небе, и тормозить софтина будет точно не из-за них. Но если тебя это смущает, то нахер плюсы, переходи на асм, там такого точно не будет.
>> No.48990 Reply
>>48989
48982кун
> Не слушай >>48987, он неадекват, как-то много тут их завелось.
чилл плиз

> Если возникает необходимость использовать shared_ptr, то, скорее всего, косяк в архитектуре программы.
я вообще не пользуюсь shared_ptr, я пользуюсь классическими указателями. Тут я спрашиваю чтобы выяснить зачем они собственно нужны кроме как для того чтобы лишний раз не писать free or delete.

> Но если тебя это смущает, то нахер плюсы, переходи на асм, там такого точно не будет.
Собственно я и так плюсами не пользуюсь, в основном С , иногда asm.

ps:и вообще профессионально не занимаюсь программированием, для меня это скорее хобби, и поэтому особо практичность в разработке не интересует(хотя от лекции бы не отказался), а интересует принципы и механизмы как сделать чтобы работало хорошо, а не как сделать быстро чтобы работало нормально.
>> No.48991 Reply
>>48990
> Тут я спрашиваю чтобы выяснить зачем они собственно нужны кроме как для того чтобы лишний раз не писать free or delete.
Ускорение разработки, уменьшение количества ошибок, лучший контроль памяти, etc.
>> No.48992 Reply
>>48991
понято,сяп
>> No.49019 Reply
>>48990
> Собственно я и так плюсами не пользуюсь, в основном С
Осторожно интересуюсь: а ты еще здесь?
>> No.49025 Reply
>> No.49027 Reply
>>49025
Посовету че-нить по Вин АПИ для чистой сишки, чтобы и почитать, и "скачать-бесплатно-без-смс-и-регистрации". И оптимальный конпелятор для 32-битных приложений, GCC под венду идет в пакете MinGW, а там интернет-инсталлятор, и он не хочет ставиться на 32-битные некромашины.
>> No.49029 Reply
>>49027
> Посовету че-нить по Вин АПИ для чистой сишки, чтобы и почитать, и "скачать-бесплатно-без-смс-и-регистрации".
MSDN
> И оптимальный конпелятор для 32-битных приложений, GCC под венду идет в пакете MinGW, а там интернет-инсталлятор, и он не хочет ставиться на 32-битные некромашины.
https://mingw-w64.org/doku.php у меня нормально ставится и работает на 32-битной XP. Или у тебя там что-то древнее XP?
>> No.49035 Reply
>>49027
> Вин АПИ
Нинужна
> GCC под венду идет в пакете MinGW, а там интернет-инсталлятор, и он не хочет ставиться на 32-битные некромашины.
Вместе с QtCreator вполне ставится же. Про другие IDE см. п. 1.
>> No.49039 Reply
>>49027
ну винапи я изучал по интернетам + как сказал >>49029 MSDN. с проблемой установки mingw не сталкивался, хотя вроде бы ставил на 32x win7.
>>49035
> Нинужна
ну хз
>> No.49117 Reply
File: 654654.JPG
Jpg, 19.42 KB, 646×303 - Click the image to expand
edit Find source with google Find source with iqdb
654654.JPG
`#include<stdio.h>
int main(void)
{
int incorr,resp[9],marks[4];
for (int i=0;i<10;++i)
{
scanf("%i",&resp[i]);
switch(resp[i])
{
case (1):
++marks[0];
break;
case (2):
++marks[1];
break;
case (3):
++marks[2];
break;
case (4):
++marks[3];
break;
case (5):
++marks[4];
break;
default:
++incorr;
}
}
printf("\n\n\n\n");
for (int i=0;i<5;++i)
printf("%i %i\n",i+1,marks[i]);

printf("in corr %i\n",incorr);
}`
Что не так? Проблема с 3 и 5. Прошу не бить за тяпляп код.
>> No.49119 Reply
>>49117
Я конечно, не силен в сях, но разве не нужно сначала обнулить массивы при инициализации? Алсо у тебя размеры массивов 9 и 4 и в циклах идет обращения за границы массивов.

#include<stdio.h>
int main(void)
{
int incorr, resp[10], marks[5];

for (int i=0;i<5;++i){
marks[i] = 0;
}

for (int i=0;i<10;++i){
scanf("%i",&resp[i]);
switch(resp[i])
{
case (1):
++marks[0];
break;

case (2):
++marks[1];
break;

case (3):
++marks[2];
break;

case (4):
++marks[3];
break;

case (5):
++marks[4];
break;

default:
++incorr;
}
}
printf("\n\n\n\n");

for (int i=0;i<5;++i)
printf("%i %i\n",i+1,marks[i]);

printf("in corr %i\n",incorr);
}
>> No.49120 Reply
>>49119
Спасибо анон, обнулил массивы и с 3 проблемы решились. 5 до сих пор живет своей жизнью:)
За границы не выходит, ибо неравенство строгое
>> No.49121 Reply
>>49120
Как это не выходит, если в первом цикле у тебя 10 проходов, а массив на 9 значений? В этом же цикле есть
case (5):
++marks[4];
break;
хотя marks[4] не существует, ибо у тебя размер массива 4, т.е. marks[3] будет последним элементом.
Во втором цикле такая же фигня.
>> No.49122 Reply
>>49121
массив не на 9 значений, а от 0 до 9, то есть индексов.
также и с marks[4] от 0 до 4 целых пять индексов
>> No.49123 Reply
>>49122
фикс
то есть 10 индексов
>> No.49124 Reply
>>49122
Окей, не значений, а элементов. Попутал.

> также и с marks[4] от 0 до 4 целых пять индексов
Это на каком языке? На Си, при объявлении массива arr[4], в нем всего 4 элемента, это arr[0], arr[1], arr[2], arr[3]. А arr[4] - это уже выход за границу массива.
Если я правильно помню, про объявлении массива int[9] выделяется память размера int умноженная на 9 (на значение в квадратных скобках) т.е. для 9 int'ов. В коде же обращение идет к элементам с нуля? поэтому крайним элементом будет элемент [8].
>> No.49125 Reply
>>49124
Спасибо, анон. Ты прав, я все совершенно иначе понял, когда учил матчасть. Компилятор - скрытный убийца. Даже и не предупредил о том, что я за границы массива вылез
>> No.49126 Reply
>>49125
Бывает. Думаю можно поднастроить компилятор на более строгий вывод предупреждений. Смотри в доках компилятора. У gcc есть -Wall.
>> No.49268 Reply
Нужна помощь. Хочу писать фронтенд, web страницы на c++. Соответственно мне нужно как-то собирать webassembly и подключать его на страничку. Помогите запустить.
В докеры умею на начальном уровне.(Оно не связанно но хотелось бы)
Нагуглил вот такую штуку https://github.com/ltfschoen/wasm-test
но совершенно не понимаю что делать.
>> No.49278 Reply
>>49268
> Хочу писать фронтенд, web страницы на c++.
Но зачем?
>> No.49289 Reply
>>49268
> докер
> c++
Докер не для плюсов делали. Не смущает, что все твои системные сервисы на плюсах и сях с гордо поднятой головой живут безо всякой изоляции и чрутов по большей части?
А если бы их туда поселили, ты бы взвыл.
>> No.49290 Reply
>>49268
Достал emscripten, прочёл из-под него маны, собрал пример.
>> No.49291 Reply
>>49268
А вообще докер - это рак в IT от истинных ценителей крузиса. Каждого докеростроителя надо принудительно сажать хотя бы на машину с 1-2 гб памяти и 5-10 гб на харде. Как у меня было, когда я поставил ubuntu.
Враз перестанут клепать свои жирнообразы и забивать болт на стабильность.

Достали эти ублюдки с макбуками, своим вечным "а вы докиньте ещё памяти и всё заработает", глючными ORM'ами, жабьими IDE от JetBrains, хромом даже если рядом хромиум стоит и жирнющими фронтендами, выкачивающими мегабайты на каждый чих. И требованиями поставить "вон ту хайповую вещь".

По два-три менеджера очередей, три БД, причём обязательно надо хранить 10-20 пар настроек в БД на сервере, а не локально, Новый Хайповый Формат Данных с библиотекой к нему, зависимости, которые за день не разрулишь, глючные врапперы, логи, забивающие БД под завязку. Это нормально.
>> No.49299 Reply
>>49291
Преимущества, которые всё это даёт с лихвой перевешивают плашек цену за 12гб памяти. Докинь памяти и всё заработает! Нет, а какие реальные контраргументы у тебя того, что мы "достали"?

Отдельная тема насчёт жирнющих фронтендов -- это действительно достали. Вообще фронтенд в каком-то странном состоянии.
>> No.49301 Reply
>>49299
> Преимущества

Невероятной красоты архитектура, для поддержки которой нужен специально обученный зверь и которая постоянно падает просто трущихся частей в разы больше payload`a. Что же может пойти не так??
Которая зависит от полчищ васянов с докерхаба, вшивающих майнеры в каждый пакет?
Которая будет вбирать в себя тонны запиненных, старых либ, пока это говно мамонта не выкинут?
Жрущая память как не в себя?
Изумительные гайдлайны уровня "один процесс — один контейнер", генерирующие тонны трафика по сети через менеджер очередей вот эти вот два-три менеджера очередей, которые ещё и забиться могут, вызывайте it-сантехников прочищать, когда можно было просто взять и заюзать локальный IPC? А ещё бешеный оверхед по памяти, но он и так уже по сути есть.
Или, может быть, конечный результат — преимущество? Очередное SaaSS-убожество, созданное для того, чтобы понабрать вагонами товар людей, между делом утыкав своё SaaSS телеметрией своей и чужой, чтоб выдавала трафика в два раза больше полезного, перемолоть в своей очередной бигдата-платформе и продать дальше? А нужен ли тебе вот про зряплату тут говорить не надо, это по части использования и людям этот очередной мегареволюционный SaaSS-проект? Думаю, нет.
Или взять сорт оф другое преимущество — чудесная ориентированность на облачные вычисления, они же butt computing? Спавним один зоопарк сервисов, цепляем к нему специально обученного зверя — девопса тот самый зверь, который умеет всё, а на практике вместо сантехника и костылеподпорщика, спавним больше контейнеров богу контейнеров, а потом оказывается, что парк умер и пора съезжать на очередной Amazon. Дальше чудесным образом размазываем сервисы по половине Интернета, профит. Угадай, кто будет всё это защищать? Никто.

Отличные преимущества. Нечего сказать.

> Нет, а какие реальные контраргументы у тебя того, что мы "достали"?
Сперва найди реальные аргументы за докер. В твоём посте их не видно. 12 гб памяти — это зажирательство. Более того, много кто больше 8 не может. Вместо 8 можешь поставить 4 или 2.

>Докинь памяти и всё заработает!

Классика! Садись на пеку с двумя гигабайтами. Можешь ещё вспомнить, что не у всех новенький макбучек (или что у тебя там) и забитый до отказа планками сервер дома. И не все хотят выбрасывать старое железо сразу по приходу нового, да. Это немного в другую степь, но суть та же.

Переведи всю систему на докер. Берёшь, значит, весь зоопарк демонов. Весь списочек. Докеризируешь один процесс - один отдельный контейнер, жульничать не надо и живёшь. Результат, я думаю, будет налицо.

Насколько ещё помню, со стабильностью у докера проблемы таки были. То есть, поставить и забыть не получится. Оно, правда, и так из-за особенностей не получится.

> Отдельная тема насчёт жирнющих фронтендов -- это действительно достали. Вообще фронтенд в каком-то странном состоянии.

И вот этот весь цирк тебе докерохайп не напоминает никак? Те же люди с такими же привычками точно так же хором в гробу видели здравый смысл. И на память, точно так же плодят сущности, конечный результат в той же плоскости различия есть, но главный вектор — SaaSS, да и публика часто пересекается, если человек не только фронтом занимается.
>> No.49303 Reply
>>49301
> для поддержки которой нужен специально обученный зверь
А для поддержки тех же самых 2-3 менеджеров очередей(почему 2-3, а не одного?), несколькиз субд и прочего-прочего, что населяет контейнеры, только вытащенного из контейнеров, уже не нужен отдельный зверь? Если вытащить всё из контейнеров, и засунуть так в одну машину, то проще становится?
> которая постоянно падает
Как так? Почему это?
> Которая зависит от полчищ васянов с докерхаба, вшивающих майнеры в каждый пакет?
Раз васяны плохие, то надо все программы писать заново? Человечество существует, чтобы кодеры писали одно и то же тысячи раз? А повторное использование не нужно? И этот аргумент также работает против вообще всех сторонних пакетов и библиотек.
> когда можно было просто взять и заюзать локальный IPC
Если я всё правильно понимаю, то можно настроить докер-контейнеры запускаться внутри одной машины и гнать всё через IPC, не эмулируя сеть. `driver: host` по идее это должен давать. Но всё равно, конечно, есть оверхед.
> Очередное SaaSS-убожество
Я знаю SaaS, а что такое SaaSS? А почему конечный результат -- это SaaS именно? Что-то я вообще потерялся. Любое серверное приложение может быть так устроено.

> Сперва найди реальные аргументы за докер
За докер -- в первую очередь для разработки, в проде то можно и без него. У нас вот прод на AWS(правда это ж почти то же самое), а докер на локале/тесте. Докер позволяет зафиксировать всю инфраструктуру в виде конкретных сервисов и их конфигов в файлах проекта, так что всё гамузом умещается в репозиторий гита. И всё можно сразу развернуть одной командой. Так что нет ситуаций с особенными "серверами-снежинками", которые потерялись и их не воспроизвести никак.

> 12 гб памяти — это зажирательство. Более того, много кто больше 8 не может. Вместо 8 можешь поставить 4 или 2.
Всё равно без докера всё это нужно. На IDE нужно дофига памяти. А плюшки IDE напряму выливаются в улучшение продуктивности. Это и удобная трассировка, и автоматическое нахождение простейших косяков, и навигация через использование/определение. А это статический анализ кода на каждый чих, естественно он будет много жрать ресурсов. Он сложный дофига.

> Садись на пеку с двумя гигабайтами.
Пересаживайся с пеки с двумя гигабайтами на иглу одобрения коллегами. Зачем мне на неё садиться? Может, мне ещё какой-нибудь шкафчик из 70-х попробовать?

> И вот этот весь цирк тебе докерохайп не напоминает никак? Те же люди с такими же привычками точно так же хором в гробу видели здравый смысл.
Ну, тут стремление сделать овер много функциональности за как можно меньше времени и денег. Заказчики не готовы доплачивать за то, чтоб их фронтенды работали были супер-оптимальными. И всё равно фронтенды не такие плохие у нормальных сайтов, да и от js вообще сложно что-то добиться.
>> No.49444 Reply
Анон, а какой ты используешь софт и ОС при работе с крестами?
>> No.49445 Reply
>>49444
Винда - Студия или вижуал код (кому что больше нравится) + симэйки, если прет.
Линух - вим/нано + симэйк. Можно еще QtCreator поюзать, если не хочется слишком извращений.
>> No.49451 Reply
>>49444
Под виндой и линухом Qt Creator, альтернатив-то и нет. Если что по-быстрому в виртуалке справить, то и geany сойдет. Ну или nano, если все совсем плохо. Гуглотесты для тестирования, ну а ревьюировать и прочая - сервер с дженкинсом/герритом под гитом, хоть он и ублюдочен по сравнению с ртутью (щито поделать, кастомер дебил).
>> No.49462 Reply
>>49444
Писал не на крестах, а на Си и не то, что особо много, но всё же.
Под виндой приходилось использовать выжал студию. Большой, громоздкий, тормозящий комбайн, как по мне. Видел до него Dev-C++, жалко, что тот помер в восьмом году, был относительно удобен. Люди с него переползали на CodeBlocks или CodeLite, или wxDev-C++.
На линуксах пользовался одно время Geany и nano сначала с шеллскриптом сборки, а потом с простенькими make-файлами, хотел освоить autotools игрался с m4 ещё как-то, но не срослось и сишечку тыкать перестал, а желание вкатиться, пусть и слабенькое, осталось.
Потом решил со скрипом перейти на емакс и перешёл. Писал под раздвоенным screen: слева ман, справа код, m-x woman не зашёл или я тогда про него не знал.
>> No.49463 Reply
>>49462
Таки да, не помню, почему, но на винду с линуксов проще было пару кусочков кода собрать tcc.
>> No.49467 Reply
>>49444
Линух.
Сублим. Скрипт на питоне для сборки маленьких проектов на том же питоне/ссях, и мейкфайлы/ручками g++ для чего-то посерьёзнее.
Какое-то время кушал VSCode, о котором остались хорошие впечатления, но пару раз съедал всю память, отчего перебрался на лёгкое.
Есть желание освоить вим из-за того, что это, мать его, монстр, но руки не доходят.
>> No.49468 Reply
>>49444
Использую vscode. Без автокомплита, подсказок и прочих перделок. Исключительно блокнот с подсветкой синтаксиса и деревом файлов слева. Раньше для тех же целей использовал атом, но перестал, т.к. он плохо работал с sshfs. Sshfs нужен, потому что код лежит и собирается на сервере с прыщами, а у меня локально макос. Система сборки cmake, собираю и тестирую из терминала.
>> No.49478 Reply
>>49467
Освой емакс.
>> No.49479 Reply
>>49444
Сижу на бубунте, а редактор обычно Qt creator. Связал свою жизнь с Qt ,потому выбор не велик. Да и софтина таки годная, всё что надо есть и не кушает лишнего. Иногда, если какая простенькая без Qt то обычный блокнот (с подсветкой синтаксиса и сё такое. Обычный для линухи блокнот) а собираю в терминале. (。・ω・。)
>> No.49481 Reply
>>49303
Я нашёл заново этот тред, потому что снова тут проездом. Этот холивар хорошо было бы вынести в тред снизу, рядышком. Я понимаю, что прошло полгода, но всё-таки напишу своё гневное письмо.

> (почему 2-3, а не одного?)
Потому что в реалиях, вокруг которых ведёт разговор, используют то, что имеет больше всего лайков на Твиттере. Один менеджер уступил like cap другому и наши смузихлёбы полезли впиливать в новые куски кода новый менеджер очередей, а поскольку переписывать лень — старый остался рядом. Или если у нас война альфачей, топящих каждый за свой менеджер, а тебе надо использовать код из двух команд.

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

Кстати да, СУБД в контейнеры вменяемые люди не суют. Догадайся, почему.

> Как так? Почему это?

Написано в спойлере: трущиеся части и переусложнение.

> Раз васяны плохие

Надо либо пользоваться пакетами дистрибутива (им я верю больше васянов), либо опакечивать либы самому. Nix в помощь.
Аргумент не работает против сторонних библиотек. Сторонние библиотеки с васянством — вещи разные.

> Если я всё правильно понимаю, то можно настроить докер-контейнеры запускаться внутри одной машины и гнать всё через IPC, не эмулируя сеть.
Тогда не нужен будет ни докер, ни твои любимые менеджеры очередей. Ни тонны оверхеда по сети. А если и надо разнести компоненты, они будут побольше и всё равно оверхеда будет меньше.

> SaaSS
Service as a Software Substitute. Сама суть любого куска кода, который вполне можно было исполнять локально или в p2p-режиме, а не как то, что мы видим сегодня: walled gardens и прочие мокрые письки.

> За докер -- в первую очередь для разработки, в проде то можно и без него.
Удобно разрабатывать в немутабельном окружении с обязательно пересборкой?
> Докер позволяет зафиксировать всю инфраструктуру в виде конкретных сервисов и их конфигов в файлах проекта, так что всё гамузом умещается в репозиторий гита. И всё можно сразу развернуть одной командой.
Это называется помойка и наплевательство на совместимость. Ждём дыр из-за невероятно старых компонент.

> Всё равно без докера всё это нужно. На IDE нужно дофига памяти. А плюшки IDE напряму выливаются в улучшение продуктивности.
Не пользуюсь IDE, ЧЯДНТ?

> Пересаживайся с пеки с двумя гигабайтами на иглу одобрения коллегами.
Как только коллеги достанут распберри, так сразу. Странно, что в плюсотреде мне пишут про то, что 2 Гб — это мало.

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

> Ну, тут стремление сделать овер много функциональности за как можно меньше времени и денег.
Вы AWS платите. Денег-то много будет, но платить свою цену за это будете не вы, а ваши заказчики, как только сбагрите проект.

> Заказчики не готовы доплачивать за то, чтоб их фронтенды работали были супер-оптимальными. И всё равно фронтенды не такие плохие у нормальных сайтов, да и от js вообще сложно что-то добиться.

Сказал, видимо, в том числе и фронтендер. Забирай мой Galaxy Ace из первых и мой китайфон тоже забирай с двумя гигами памяти. Монитор на 1024x768 тоже бери. До тебя и таких, как ты, с ними было всё хорошо. Можешь ещё познакомиться с программой wget, с помощью которого можно было взять и сдампить сайт. Ещё вот у меня был монитор на conky и шеллскрипте с curl и xmllint с grep. Всему этому в эре нынешних фронтендов приходит конец, как и моей памяти при использовании лисы.
>> No.49492 Reply
>>49481
Я тоже вдруг сюда снова заглянул. Приятно продолжить.

> Потому что в реалиях, вокруг которых ведёт разговор,
Это справедливый комментарий, но он даже ещё больше оправдивает применение докера. 2-3 менеджера очередей в нём поддерживать проще. 2-3 менеджера очередей без докера -- это ещё хуже. Но всё-таки это как-то тупо. Я согласен, что кодеры действительно не всегда рационально ведут себя с зависимостями. Но Докер то не виноват в 2-3 менеджерах. Он в причинах у тебя не фигурирует. Он только помогает облегчить страдания с 2-3 менеджерами.

> Если надо, бери админа.
Отдельный зверь и админ -- это же одно и то же.

> Нет лишних сущностей
Да по-любому там что-то будет. Не Докер, так Ansible или Chef. Или Cobler. Или Teraform. А если не будет, то как после смерти сервера его возвратить обратно, что всё было точно так же? Или сделать второй такой же. Сервера "снежинки" -- это хорошо, что ли?

> Service as a Software Substitute
Понял. Да, часто это выглядит странно. Во многом справедливо. Но вот удобно зато, что ставить на ком ничего не надо. Но мне кажется, что здесь в засилии веб-приложений в чём-то сама винда виновата. На неё сложно поставить какой-нибудь мусор так, чтобы не сломалось всё к херам из-за малварей и прочего. С Андроидом и его приложениями в Гугл Плее как-то проще. Вот надо сконвертить видос с ютуба. Проще реально использовать сразу веб-апп для этого, чем скачивать экзешник и запускать его. Хотя бы потому, что экзешник может убить комп потенциально.
Я пошёл в веб-кодеры изначально потому, что вакансий было много, деньги хорошие, а в десктопных приложениях рынок потеснее.

> Удобно разрабатывать в немутабельном окружении с обязательно пересборкой?
Вот на php было удобно, так как он на каждый чих запускается и умирает. Перешёл на node.js. Вообще стал меньше любить Докер сразу же. Много проблем. Сейчас вся тима запускает ноду в докере, но я лично у себя перенастраиваю всё так, чтобы запускать её впрямую. Но с другой стороны все субд, редисы и прочие менеджеры всё равно проще поднять и юзать из докера. Потмоу что их всё равно пересобирать не надо. Запустил, что надо, и всё.

> Это называется помойка и наплевательство на совместимость. Ждём дыр из-за невероятно старых компонент.
Компоненты обновлять надо, да. Но это должно происходить сначала на деве, а потом плавно перетекать на стейджинг и потом в прод. Это должно контролироваться. Совместимость авторы никаких компонент не хотят обеспечивать. Что я могу сделать? Только заморозить и обновлять с тестированием и плавным движением к проду. Вообще не очень понял аргумент про помойку, если честно. А как без этого вообще не забыть, что какой-то очередной менеджер нужно не забыть поставить? Плюс все конфиги надо тоже сохранить и сразу накатить автоматически.

> Не пользуюсь IDE, ЧЯДНТ?
Не используешь чудеса статико-лингвистического анализа кода. Он может быстро находить какие-то проблемы и двигаться по коду. Найдёт, где переменная не определена и т.п. Я очень люблю свою IDE и знаю много фич и хоткеев из неё.

> Как только коллеги достанут распберри, так сразу.
Я не запускаю IDE и Докер под Распберри и не предлагаю никому. Но на девелоперской машине, где ты пишешь код, должно быть полно оперативы. Это хорошо для продуктивности. Пусть на целевой платформе будет мало памяти. Пусть на твоей машине, где ты кодишь, её будет много.

> Достаточно тебе достать недорогой мобильник и посчитать свободную память, вспомнив то, что люди открывать много-много приложений любят.
Да. Там тоже не стоит докер запускать. Но он же больше для девелоперской машины и для серверов. А ты когда-нибудь запускал docker-compose up у себя на мобиле? Я надеюсь, что -- нет.

> Вы AWS платите. Денег-то много будет, но платить свою цену за это будете не вы, а ваши заказчики, как только сбагрите проект.
А так они будут куче админов платить. Дешевле не будет. На зарплаты сотрудникам денег куда больше уходит, чем на какие-то там AWSы. Ты свою зарплату на число коллег умножь. И про ПФР с НДФЛ не запудь. Огого! Когда узнаешь, что такое ПФР, уже оператива вообще больше никогда в голову не придёт.

> Сказал, видимо, в том числе и фронтендер. Забирай мой Galaxy Ace из первых и мой китайфон тоже забирай с двумя гигами памяти. Монитор на 1024x768 тоже бери. До тебя и таких, как ты, с ними было всё хорошо. Можешь ещё познакомиться с программой wget, с помощью которого можно было взять и сдампить сайт. Ещё вот у меня был монитор на conky и шеллскрипте с curl и xmllint с grep. Всему этому в эре нынешних фронтендов приходит конец, как и моей памяти при использовании лисы.
Да, в том числе. Соболезную, но я мало что могу сделать.

А вот что вы хотите? Вот я блять открыл hh.ru. Почему в вакансиях на Java и C# требования выше в разу, а зарплата меньше на 30%? Джавист должен выучить все паттерны и иметь опыт и вышку. Плюсовец должен знать матан, иметь степень, опыта лет 20. И вакансий одна-два. А на фронтов и нодовцев тысячи вакансий, баснословные зарплаты в сотни рубасов в месяц. Лишь бы докер знали с кубами.

Я за полгода разочаровался в докере. А за 5 лет в индустрии вообще разочаровался в программировании и во всей индустрии. Программы пытаются управлять пользователями, а не пользователи программами. Все делают говно за минимально время по секундомеру. Всем похуй на UX, безопасность, бекапы, HA. Я ни в одном проекте не отношусь к целевой аудитории, ведь всё делается для сферических идиотов, которые рулят и разруливают. Кодеры сознательно наёбывают заказчиков по срокам. Вообще блять одна из самых богопротивных профессий.
>> No.49493 Reply
>>49492
Алсо. Тут были упоминания макбуков. А вот по иронии Докер известен как раз тем, что на Маке он херово работает! У меня коллега из-за этого даже перешёл с Мака на Убунту, так как в тиме юзали Докер. Вот так вот.
>> No.49494 Reply
>>49492
> Это справедливый комментарий, но он даже ещё больше оправдивает применение докера... Он только помогает облегчить страдания с 2-3 менеджерами.
Вместо того, чтобы убрать помойку, вы её поддерживаете. Когда-нибудь помойка съест вас.
> Но Докер то не виноват в 2-3 менеджерах.
Как бы сказать, косвенно виноват. Микросервисная архитектура откуда протекла? Оттуда. Оттуда же и потекло всё это.

> Отдельный зверь и админ -- это же одно и то же.
Не одно и то же, отдельному зверю вменяют ещё и кодинг (считай, написание подпорок и костылей) в обязанности, обзывая девопсом.

> Да по-любому там что-то будет. Не Докер, так Ansible или Chef. Или Cobler. Или Teraform. А если не будет, то как после смерти сервера его возвратить обратно, что всё было точно так же? Или сделать второй такой же. Сервера "снежинки" -- это хорошо, что ли?
Может и не быть. Это всё привычки. Честно говоря, все эти баззворды мне не приходилось использовать, но я подозреваю, что это какие-нибудь переусложнённые декларативные вещи, где шаг вправо/влево карается расстрелом. Можешь меня поправить.
> А если не будет, то как после смерти сервера его возвратить обратно, что всё было точно так же?
Самое простое — держать бэкапы. Второй точно такой же можно взять и развернуть из бэкапа, настроив по минимуму. Можно держать у себя список пакетов и/или базовый образ системы и развёртывать по необходимости. Почему для этого нужно держать какой-нибудь баззворд, я понять не могу.

> Но вот удобно зато, что ставить на ком ничего не надо.
Удобство — это когда забиваешь канал, твои данные тебе не принадлежат, а ко всему прочему надо платить? Странные у вас представления об удобстве.
> Но мне кажется, что здесь в засилии веб-приложений в чём-то сама винда виновата. На неё сложно поставить какой-нибудь мусор так, чтобы не сломалось всё к херам из-за малварей и прочего.
Вы поменяли одну малварь на другую. Мой плеер вполне умеет и с ютуба, и много откуда и брать видео, и конвертировать. VLC называется. Слышали?
> убить комп потенциально
Вы так говорите, будто кто-то об этом задумывается. Если кто-то и задумывается о не том экзешнике, этот человек полезет искать программы из проверенных мест. Про безопасность и вебаппы вам же расскажет любой пользователь NoScript или хотя бы зашедший на panopticlick, не говоря про обладателей старых версий IE.
> Я пошёл в веб-кодеры изначально потому, что вакансий было много, деньги хорошие, а в десктопных приложениях рынок потеснее.
Теперь вы поддерживаете то, что вам не нравится самому, судя по последнему абзацу.

> Вот на php было удобно, так как он на каждый чих запускается и умирает.
Я сомневаюсь, что это во всех случаях. Не пользовался ни нодой, ни PHP.
> Но с другой стороны все субд, редисы и прочие менеджеры всё равно проще поднять и юзать из докера.
Получается, для этого докер не нужен, потому что есть пакетный менеджер. Или свой инстанс на отдельном хосте, который тем более не надо ставить много раз.
Вы так и не сказали про немутабельное окружение, обычно ведь с докером правят код и в целом образ, не пользуясь тем же REPL и не тыкая в инстанс. Получается, ваш скриптовый язык взял и по мановению волшебной палочки превратился в компилируемый. Мне даже кажется, что какую-нибудь софтину на плюсах пересобирать с make на случай факапа быстрее, чем обкатывать ваши скрипты в контейнере.

> обновлять надо
Забьют.
> на деве, стейджинг, прод
Я не знаю, чем тут поможет докер. Я даже не знаю, зачем, если ты хочешь заморозить образ, нужен именно докер, а не чрут, если уж надо стрелять из пушки по воробьям.
> не хотят обеспечивать
Вы же перекатились на ноду, вот вам и совместимость с беганьем по самым хайповым библиотекам. Неужели в этом море нет людей, держащих стабильный API?
> Вообще не очень понял аргумент про помойку, если честно.
Этот аргумент был раньше и давно, >>49291 просто им кричит. Две-три СУБД, менеджера, whatever — не помойка?

> Не используешь чудеса статико-лингвистического анализа кода. Он может быстро находить какие-то проблемы и двигаться по коду. Найдёт, где переменная не определена и т.п. Я очень люблю свою IDE и знаю много фич и хоткеев из неё.
Мой редактор умеет двигаться по коду, сбоку прикручен линтер, со временем ставший не очень-то и нужным. Жрёт меньше типичной IDE на Java и работает одинаково хорошо что на пеке, что на мобильнике, что на распберри. Может жить как в гуях, так и в консоли, фич в нём мне всех не осилить, так как их много и он относительно легко скриптуется, хоткеи особо не тружусь запоминать, так как редактор их мне подсказывает, если я взгляну куда положено. Прямо сейчас пишу в нём этот текст. ЧЯДНТ?

> Я не запускаю IDE и Докер под Распберри и не предлагаю никому. Но на девелоперской машине, где ты пишешь код, должно быть полно оперативы. Это хорошо для продуктивности. Пусть на целевой платформе будет мало памяти. Пусть на твоей машине, где ты кодишь, её будет много.
Это хорошо только для запила жирных вещей, которые не запустить ни на мобильнике, ни на распберри. Если ты зажрался, то вместо того, чтобы думать об эффективности, ты заставишь всех остальных покупать по десять планок памяти, что я и вижу в твоих словах.

> Да. Там тоже не стоит докер запускать. Но он же больше для девелоперской машины и для серверов. А ты когда-нибудь запускал docker-compose up у себя на мобиле? Я надеюсь, что -- нет.
Девелоперы бывают разными. Кто-то вполне себе уживался с ноутбуком с двумя-четырьмя гигабайтами, уехав далеко от дома. Без докера, как ты понимаешь. И с жирным браузером, хоть как-то, но уживался. У кого-то может и не быть денег на зион с двенадцатью гигами у себя дома, как и на макбук.
У меня на мобиле есть чрут-окружение. Вполне себе кусочек докера.
> запускал
Прикинь, нет. И где-либо ещё тоже не запускал.

> А так они будут куче админов платить. Дешевле не будет. На зарплаты сотрудникам денег куда больше уходит, чем на какие-то там AWSы. Ты свою зарплату на число коллег умножь. И про ПФР с НДФЛ не запудь. Огого! Когда узнаешь, что такое ПФР, уже оператива вообще больше никогда в голову не придёт.
Я не понимаю, чем куча админов, девопсов и AWS лучше кучи админов, честно говоря.

> Да, в том числе. Соболезную, но я мало что могу сделать.
Поэтому ты будешь сам лепить SPA за SPA. Наверно.

> А вот что вы хотите? Вот я блять открыл hh.ru. Почему в вакансиях на Java и C# требования выше в разу, а зарплата меньше на 30%? Джавист должен выучить все паттерны и иметь опыт и вышку. Плюсовец должен знать матан, иметь степень, опыта лет 20. И вакансий одна-два. А на фронтов и нодовцев тысячи вакансий, баснословные зарплаты в сотни рубасов в месяц. Лишь бы докер знали с кубами.
Ты открыл hh.ru. Честно говоря, баснословные зарплаты в разных местах разные.

> Я за полгода разочаровался в докере. А за 5 лет в индустрии вообще разочаровался в программировании и во всей индустрии. Программы пытаются управлять пользователями, а не пользователи программами. Все делают говно за минимально время по секундомеру. Всем похуй на UX, безопасность, бекапы, HA. Я ни в одном проекте не отношусь к целевой аудитории, ведь всё делается для сферических идиотов, которые рулят и разруливают. Кодеры сознательно наёбывают заказчиков по срокам. Вообще блять одна из самых богопротивных профессий.

Тут мне нечего сказать. Ты выбрал как раз клёпку SaaSS, ты её и получил. Вот и всё. Можно сделоть тред отвратительного ойти или перекатиться в тред поиска альтернатив. Тебя вон докер поддостал, судя по
> Вообще стал меньше любить Докер сразу же.
А меня докер пока не коснулся. Коснётся — напишу сюда простыню бугурта про то, как одни люди решили заменить пакетный менеджер докером потому, что его пиарят все вокруг. И так далее.
>> No.49495 Reply
>>49493
У меня в голове живёт штамп тусовки хипстеров-яблочников, плевавших на стабильность, жрущих то, у чего больше лайков и имеющих обширный js-бэкграунд. Пока что он вполне себе подтверждался, из тех людей, что я знаю IRL, за докер и перекрывающиеся в тусовке технологии топят в основном яблочники. Костыли для всего этого пишут, естественно, не они. Your mileage may vary.

Штамп прорисован вот в этих постах и очень хорошо:
>>49301
>>49291
>> No.49496 Reply
Сап. Есть замечательный плеер mpv и, к сожалению, менее замечательное андроид приложение https://github.com/mpv-android/mpv-android, которое строится на libmpv. Мне бы очень хотелось его переписать с использованием всех самых новых технологий, но для этого нужно сделать андроид либу с использованием С++ и JNI. Если кого-то заинтересует создание такой либы - распишу подробнее,
>> No.49497 Reply
>>49496
А можно старых? Ну, для совместимости.
>> No.49523 Reply
>>49494
> Не одно и то же, отдельному зверю вменяют ещё и кодинг (считай, написание подпорок и костылей) в обязанности, обзывая девопсом.
Но девопс -- это и есть админ. И админы и без этого могут кодить.

> Самое простое — держать бэкапы.
А как так делать бекапы, чтобы их сразу же можно было развернуть в один клик на машине с потенциально другим железом? И чтоб сразу заработало.

> , настроив по минимуму.
Надо, чтоб без настройки, чтобы уже было настроено. Там могут быть конфиги нгинха и прочего на километры

> список пакетов
И конфиги. И расположения этих конфигов. И какие-то поднятые свои программы.

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

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

> Ты открыл hh.ru
А мне по знакомствам надо было?
>> No.49531 Reply
>>49523
> девопс
Админу кодинг на языке программирования в обязанности не вменяется. И куча остальных вещей, которые на него взгрузили, особо ценник не повысив, тоже.
> как делать бэкапы ... и чтоб сразу заработало
tar +- chroot, шеллскрипты. На вкус.
"чтоб сразу заработало" смахивает на фразу про Большую Кнопку из /s/ другой, мёртвой борды. Ясно ведь, в каком контексте её используют?
> с потенциально другим железом
bash, distro~bootstrap. Обычно такой задачи не стоит. Я не видел людей, массово выкидывавших x86 и переходящих на какой-нибудь ARM. Подозреваю, что подавляющая масса докерообразов в основном собираются под amd64 даже если это не так, конечного набора архитектур, как в дистрибутиве, нет, не было и не будет и поэтому под тезис о "потенциально другом железе" тут работает в пользу того, что и должно заниматься менеджментом пакетов — полноценных дистрибутивов с полноценными ПМ.
> в один клик
Оговорочка по Фрейду. Вы таки дома на какой системе живёте?
> Надо, чтоб без настройки, чтобы уже было настроено. Там могут быть конфиги нгинха и прочего на километры
Энджой ёр дыры в безопасности. За вас настраивать кто-то другой не будет. А если и будет, то сделает это из рук вон плохо.
> И конфиги. И расположения этих конфигов. И какие-то поднятые свои программы.
Это уже в архив или в строчку git clone $project; cd $project; make; make install в одном маленьком скрипте никак не помещается?
Если у вас с бойлерплейтом проблемы, можно использовать функции, например
installfromgit () { git clone $1 $2; pushd $2; if [ -z "$3" ]; then make; make install; else sh -c "$3"; fi; popd};
installfromgit git://githost.example/killer-project.git killer-project "X=Y sh install.sh"
...
> На пакетном менеджере сложно поставить разные инстансы субд с разными настройками и разных версий под разные проекты, чтобы они не пересекались.
Ещё раз, как я говорил, если у вас в архитектуре по десять БД, очередей и всего остального, то эта изумительной красоты архитектура — помойка. Что самое интересное, с самого начала мою истерику по поводу сотен БД вы назвали небывальщиной, или я что-то путаю?
На Nix/Guix можно. В разные префиксы совать можно. В чруты разные, если уж стрелять из пушки по воробьям, можно. Вы же тянете весь комбайн.
> Да не
А вы дайте пруфы своего "Да не". Четыре буквы и скрипт снизу vs сборка чрут-образа, секс с неймспейсами, оверлейной ФС, костылями для того, чтобы вытащить ресурсы наружу и загадить таблицу того же фаервола плюс непрозрачный контейнер, который обязан состоять ровно из одного процесса.
> А мне по знакомствам надо было?
А вот это хз. Я не специалист по рынку. Но вакансии "всё в одном" должны наводить на мысли. Всё в традициях одного укросайтика на итальянском домене.

Что-то мы по третьему кругу всё идём.
>> No.49532 Reply
>>49531
Там после popd в функции семиколон не стоит, забыли.
>> No.49533 Reply
>>49531
> шеллскрипты
Ну это уже почти то же самое. Но они типа должны быть удобнее.
> Я не видел людей, массово выкидывавших x86 и переходящих на какой-нибудь ARM.
Не настолько другим. Я не так выразился. Просто я к тому, что на другой материнке уже операционка может не загрузится, и её надо заново ставить.
> Оговорочка по Фрейду. Вы таки дома на какой системе живёте?
Дома на винде, на работе работаю на Линухе(дома я не работаю)
> Энджой ёр дыры в безопасности.
Ну обновлять это уже отдельно. Но вот надо просто поднять. А обновить чуть потом. Обновить всё равно легче, заново не настраивая.
> Ещё раз, как я говорил, если у вас в архитектуре по десять БД
Ну так я разрабатываю на одной машине несколько не связанных проектов. У них у каждого вся архитектура совершенно иная.
>> No.49686 Reply
File: qt.png
Png, 32.51 KB, 1200×880 - Click the image to expand
edit Find source with google Find source with iqdb
qt.png
Там это, Qt скурвился.
https://valdyas.org/fading/software/about-qt-offering-changes-2020/
https://www.qt.io/blog/qt-offering-changes-2020
Речь идет о неприятных изменениях в условиях лицензии и распространения. Сам до конца не въехал пока, поэтому не буду пытаться пересказать своими словами.
>> No.49848 Reply
Здравствуйте. Вопросы больше про Си, но тем не менее:
1) NULL это всегда и везде 0х0000? Или зависит от либ/архитектуры?
2) Сейчаc читаю LDD для протухших ядер, и там везде после kmalloc() мемсетится нулями весь выделенный ломоть памяти. Зачем?
>> No.49849 Reply
>>49848
> NULL это всегда и везде 0х0000?
Нет. Хотя реальных архитектур ты можешь и не встретить. http://c-faq.com/null/varieties.html
> Сейчаc читаю LDD для протухших ядер, и там везде после kmalloc() мемсетится нулями весь выделенный ломоть памяти. Зачем?
Видимо чтобы нельзя было прочитать какие-то ценные данные, которые там были до этого.
>> No.49850 Reply
>>49686
Какие-нибудь KDE просто форкнут и начнут паралельно пилить, не проблема.
>> No.49894 Reply
>>49686
Вроде бы никто не мешает использовать старые версии, напрмер 4, для десктопа там есть все, что необходимо, и чуточку больше.
>> No.49895 Reply
>>49850
Лицензия исключает любые форки, но есть отдельный договор с Free Software Foundation о том, что Qt никогда не станет закрытым и только платным. Конечно, Qt может перейти полностью на GPL и коммерческую лицензию со следующей версии.
>> No.49896 Reply
>>49894
Если ты не знаешь откуда скачать старые версии https://download.qt.io/archive/qt/
>> No.49995 Reply
>>43511
На пикче программист-сапожник, как обычно
>> No.50039 Reply
>>43511
Доброкодер, как писать драйвера для линукса или для винды на простые устройства, такие как периферия и старые принтеры и сканеры? С чего начать? Я абсолютный нубас в теме железок.
>> No.50040 Reply
>>50039
Для венды:
* В.П. Солдатов: Программирование драйверов Windows - не уверен, что актуальна для современных версий венды, но вроде бы в драйверах ничего особо не меняли кроме требования анальных подписей на всё подряд. В крайнем случае можно начать с неё, а остальное (что поменялось) поискать на сайте Microsoft;
* Сам не пробовал, но рекомендуют почитать "Four-F - Драйверы режима ядра" - это как я понимаю цакл статей, который расрывает подноготную;
* Книгу Марка Руссиновича "Внутреннее устройство Windows" - не совсем про драйверы, но полезная книга для любого продвинутого вендузятника.

Для линукса:
* Драйверы устройств в Linux (Linux Device Drivers. Jonathan Corbet, Alessandro Rubini, and Greg Kroah-Hartman).
>> No.50068 Reply
File: hqdefault.jpg
Jpg, 34.00 KB, 480×360 - Click the image to expand
edit Find source with google Find source with iqdb
hqdefault.jpg
>>43511
Мне иногда кажется, что С++ язык инженеров-программистов, которые точно знают, что делают и какие у этого последствия. Я уже десять лет работаю в небольшой компании, где пользуясь С++ делают что-то похожее на пикрелейтед. Долго объяснять весь список этих великих мелочей, но это портит не только общую работу, но и отношение к ней. При этом любая критика полностью отвергается аргументами о великом профессионализме главных программистов и туповатости критикующих.
>> No.50083 Reply
>>50068
Типичный фидбек неосилятора. Попробуй PHP.
>> No.50111 Reply
File: 2021-10-01-15-38-39-Скриншот-экрана.jpg
Jpg, 168.37 KB, 1059×865 - Click the image to expand
edit Find source with google Find source with iqdb
2021-10-01-15-38-39-Скриншот-экрана.jpg
>>50083
> Типичный фидбек неосилятора
Янеосилил пикрелейтед и его отладку.
> Попробуй PHP
Ненавижу отсутствие строгой типизации и скудные стредства отладки.
>> No.50118 Reply
>>50068
Воспринимай с++ как творчество. Ты можешь сделать всё что можно и нельзя. Сравнив красоту вседозволенности с++ с другими гарбадж коллекторными помойками, ты познаешь суть полноценного высокоуровневого погроммирования
>> No.50121 Reply
File: 5e35d1823a4ee079a785.jpg
Jpg, 121.08 KB, 533×575 - Click the image to expand
edit Find source with google Find source with iqdb
5e35d1823a4ee079a785.jpg
>>50118
> Воспринимай с++ как творчество
> вседозволенности с++ по сравнению с другими гарбадж коллекторными помойками
> ты познаешь суть полноценного программирования
Так-то да
>> No.50122 Reply
File: Vincent_van_Gogh_-_Self_Portrait_with_Bandaged_Ear.jpg
Jpg, 167.52 KB, 724×798 - Click the image to expand
edit Find source with google Find source with iqdb
Vincent_van_Gogh_-_Self_Portrait_with_Bandaged_Ear.jpg
>>50118
Но все-таки если речь идет о крупном рабочем проекте, где это творчество напрямую касается не только тебя, надо быть аккуратнее. Кроме творчества на работе есть еще отладка, поддержка, анализ чужого кода, как это работает вцелом и в частности. Не от скуки же появились методологии и парадигмы.
Похоже у меня бугурт, дедлаин и бугурт.
>> No.50123 Reply
>>50122
А в чём бугурт? Не мудри с шаблонами сильно, пиши комментарии в трудных для быстрого понимания местах, не плоди ub (а если плоди то отмечай это где-то) и выделяй время на рефактор. Вроде стандартная рабочая практика
>> No.50125 Reply
>>50123
В том, что стандартная рабочая практика почти всегда почти полностью вытесняет творчество. Если изучить все стандарты и всё сделать правильно, то в конце внезапно окажется, что все сложности и тонкие места стали незаметны. Что код негде оптимизировать, потому что нагрузки слишком низкие. Что сложности задачи не хватило для обоснования серьёзных абстракций. И что нетривиальные ходы зачастую вообще попадают под запрет и их сворачивают на код ревью.
>> No.50128 Reply
>>50111
> Янеосилил пикрелейтед и его отладку.
На первый взгляд ничего сложного нет в пике, но по рукам за такое я бы надавал.
Нахера макросом этот треш?
Почему не вынести иф с А наружу всех ифов?
Все ифы с С, на else if'ы, чтоб не сравнивать тонну раз.
Ифы с С можно поглубже утащить, и вообще придумать что-нибудь классное с кастами.
Если Е - просто резалт, то вначале выставить в тру, если проебались по всем веткам - выставить фолс.
Делитать элементы из листа, в форе пол листу, вроде тоже не хорошая идея (но тут могу ошибаться).

Это из того, что сразу можно сказать.

> скудные стредства отладки.
Иногда отладка возможна только по логам.

>>50125
> стандартная рабочая практика почти всегда почти полностью вытесняет творчество
Сильно зависит от компании и решаемых задач.
Если надо что-то максимально оптимизировать и вылизать, то в ход идут любые велосипеды и эксперименты.
Я всё хочу в драйверописательство с велосипедостроительством попробовать податься, с надеждой чутка ускорить работу всего.
>> No.50165 Reply
>>50128
> Я всё хочу в драйверописательство с велосипедостроительством попробовать податься, с надеждой чутка ускорить работу всего.

А что конкретно ускорить хочешь?


Password:

[ /tv/ /rf/ /vg/ /a/ /b/ /u/ /bo/ /fur/ /to/ /dt/ /cp/ /oe/ /bg/ /ve/ /r/ /mad/ /d/ /mu/ /cr/ /di/ /sw/ /hr/ /wh/ /lor/ /s/ /hau/ /slow/ /gf/ /vn/ /w/ /ma/ /azu/ /wn/ ] [ Main | Settings | Bookmarks | Music Player ]