Это копия, сохраненная 27 сентября 2020 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.
Пожалуйста, пользуйтесь https://ideone.com/#, https://wandbox.org/ или https://pastebin.com/ для вставки кода, если он длиной больше нескольких строк или содержит [i] или ∗.
Что читать:
- Brian Kernighan, Dennis Ritchie "The C Programming Language": http://www.cypress.com/file/56651/download
- Stephen Prata "C Primer Plus, 6th Edition" (2014): относительно свежая, знает про C89/C99/C11, описывает различия, объемная (около тысячи страниц), годная, с вопросами, упражнениями и ответами. Читать после K&R или до.
- Zed A. Shaw "Learn C the Hard Way" (2015): годное пособие для гуманитариев для гуманитариев!
- Немного примеров хорошего стиля: http://www.oualline.com/books.free/style/index.html
- ООП, например: http://www.cs.rit.edu/~ats/books/ooc.pdf
- Стандарт ISO/IEC 9899:1999 (C99): http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1256.pdf (драфт)
- Стандарт ISO/IEC 9899:2011 (C11): http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf (драфт)
- Черновик стандарта ISO/IEC 9899:202x (C2x): http://www.open-std.org/jtc1/sc22/wg14/www/docs/n2385.pdf
- man/Dash/zealdocs
Чем компилировать:
- Очевидный GCC.
- clang: оче годно, батя рекомендует.
- Intel C++ Compiler: оптимизации, тысячи их.
- Visual Studio Community Edition: внезапно этим стало можно пользоваться, особенно с тулсетом clang/C2. Поддержка C11 на уровне "есть все, что тебе понадобится в реальном проекте плюс кривая библиотека". Анализатор кода в комплекте.
- Pelles C (шиндоуз онли): поучиться, вкатиться в C11 (стандарт полностью реализован, имеются в том числе threads.h и прочие stdatomic.h), но количество багов в оптимизаторе и редкие апдейты напрочь отбивают желание собирать этим что-то сколько-нибудь серьезное.
- TCC: очень маленький компилятор с багами и поддержкой C99. С ключом -run умеет компилировать код в память и запускать его, что позволяет писать скрипты прямо на сишечке.
Что еще почитать:
http://c-faq.com/
FAQ из comp.lang.c. Древний, но все еще актуален.
Samuel P. Harbison, Guy L. Steele Jr. "C: A Reference Manual, 5th Edition" (2002)
Ебаный пересказ стандартов C89 и C99 (включая стандартную библиотеку). Для не осиливающих стандарт в оригинале. Читать в качестве подготовки к собеседованиям (есть задачник с ответами) и для ознакомления с масштабами пиздеца перед написанием своего парсера/компилера.
Peter Van Der Linden "Expert C Programming. Deep C Secrets" (1994)
"Си: грязные истории". Смехуечки, немного объяснений, чем обусловлены особенности языка, всем известные подводные камни кто там ругал косяки в JS? у нас в сишечке их гораздо больше, просто они лучше спрятаны, немного байтоебли и непонятно откуда взявшаяся глава про старинные плюсы. Читать в качестве сказки на ночь (на пару вечеров хватит).
Richard M. Reese "Understanding and Using C Pointers. Core Techniques for Memory Management" (2013) - почитать, вкатиться в указатели.
Ben Klemens "21st Century C: C Tips from the New School" (2012)
Paul Deitel, Harvey Deitel "C for Programmers with an Introduction to C11" (2013)
Stephen G. Koch@n "Programming in C (3rd Edition или 4th Edition, если найдется)" (2014)
MISRA Ltd. "Guidelines for the Use of the C Language in Critical Systems" (2013)
Набор рекомендаций по написанию надежного кода на C (промышленный стандарт). Читать - однозначно, следовать - вдумчиво и без фанатизма. Также можно посмотреть https://www.securecoding.cert.org/confluence/display/c/SEI+CERT+C+Coding+Standard и http://web.archive.org/web/20190213011655/homepages.inf.ed.ac.uk/dts/pm/Papers/nasa-c-style.pdf
Еще более длинный список: http://www.iso-9899.info/wiki/Books#Learning_C
https://github.com/kozross/awesome-c
Онлайн-утилиты:
- https://godbolt.org/ - Compiler Explorer позволяет посмотреть выхлоп компиляторов для введенного куска кода (больше полусотни разных версий компиляторов).
- http://cdecl.org/ - С Gibberish ↔ English помогает читать сложные сишные декларации.
Прошлые треды:
- №54: http://arhivach.ng/thread/535256/
- №55: http://arhivach.ng/thread/543511/
- №56: http://arhivach.ng/thread/563333/ >>1660319 (OP)
>а нужно ли читать кнута?
У Кнута очень специфичный стиль изложени, весьма дотошный. Самая топ книга - Кормен и Ко. Но если анальник в терминальной стадии - можешь и Кнута.
Спасибо
>Именно Кнута необязательно, но что-нибудь по алгоритмам все равно почитай, Седжевика того же.
Двачую. Его Algorithms in C годная книга (ну или была ~10 лет назад, когда я её прочитал).
Я бы сказал так: сначала любая книга по алгоритмам, а потом, по мере необходимости, с интересующими темами точечно в Кнута, как в справочник.
Диванные кукаретики в интернете и википедия пишут, например, что int - это как минимум 16 бит. Википедия ссылается на стандарт, но пруфов я там не нашел. Может в стандарте прописаны только минимальные и максимальные численные значения, которые должны вместиться в int, а собственно реальное количество бит для этого зависит строго от реализации может на каких-то числовых представлениях 65535 каким-то хуем может вместиться и не в 16-бит, хуй его знает, и википедия банально вводит в заблуждение?
> минимальный размер типов данных
Да, прописан. 5.2.4.2.1 "Sizes of integer types".
> Their implementation-defined values shall be equal or greater in magnitude (absolute value) to those shown, with the same sign. И дальше листинг.
> о абсоютном размере типа (8бит или 16 и т.п.).
Зачем это тебе? У тебя есть sizeof, есть CHAR_BIT (если ты достаточно поехавший), считай сам, скомпилируется в константу.
> может на каких-то числовых представлениях 65535 каким-то хуем может вместиться и не в 16-бит
Ну вот когда изобретешь такое, тогда и приходи с претензиями к комитету. А пока у нас в 6.2.6.2 описаны все разрешенные представления интов.
Мне это интересно сугубо в любознательных целях. Читал, что поехавшие на собеседованиях иногда доебываются до терминологии, что мол в стандарте описаны только минимальные численные значения, который должны поместиться в тип данных, но не минимальный размер типа в битах.
Но действительно, учитывая 6.2.6.2, один хуй это ничего не меняет.
Стыдно признаться, но Прата более доходчево объясняет для ньюфага. КиР, конечно, заебись как прородители языка. Но непонятно для начинающих.
А чего стыдного-то? к&р написан для программистов, чтобы новый язык показать, а прата для вкатывальщиков. Всё так и должно работать.
Да то, что я пока КиР читал, пришлось шкрябать по всему интернету в поисках понимания тех или иных вещей. Зато стал понимать многие вещи, которых не знал.
Нужно решить олимпиадную задачу, используя перебор с возвратом.
https://pastebin.com/CsqvPBKQ
Как я понял нужно найти количество элементов в доминирующем множестве заданного графа. Но как реализовать вообще хз. Есть какие-то идеи?
Си отлично заходит первым языком. Первый язык совершенно не обязательно досконально изучать ведь.
А так он как раз то, что нужно новичку, на мой взгляд: во-первых, выглядит очень солидно — по-програмистски; во-вторых, скобочки понимать куда проще, чем пробелы считать; в-третьих, все базовые вещи можно реализовать, на большинство вопросов "как это работает в компьютере?" ответить.
Какие у тебя претензии к нему, как к первому языку? Какой ты предпочитаешь?
Я бы посоветовал классический бейсик с номерами строк. Он самый простой и вдобавок близкий к ассемблеру, к тому как компьютер работает на самом деле. Когда освоится со структурой кода - переходами goto, gosub, return, научится писать программы, тогда уже можно си, там с одной стороны уже чужеродные говно-абстракции в виде функций, но зато работа с памятью как положено.
Ну и зачем ты тролякаешь? Если нечего сказать не нужно пукать, надо молчать.
Паскаль это то же самое что си, только деревянное. Можно учить и то и другое, разницы нет. Паскаль даже лучше, будет меньше тупых вопросов по синтаксису, а то в си можно одно и то же написать десятью способами. Для обучения программированию только мешает.
Тем более здесь есть много чего надо довести до ума. Сразу цели намечаются, а не какое-то абстрактное изучение.
Разбираться можно где есть документация - на винде, там всё стандартизировано и документация божественная. А в линуксах куча рандомного говна и документации нет.
О, ты-то мне и нужен. Как мне добавить пробел в начало без перезаписи всего файла?
>Какие у тебя претензии к нему, как к первому языку? Какой ты предпочитаешь?
Первый язык должен давать максимальный фан и быстрые практические результаты. В свое время это был бейсик, сейчас питон какой-нибудь.
А ты мне не нужен, и скорее всего никому с такими загонами, только нахуй послать.
Файл - это отмеченные магнитной головкой байты на поверхности магнитного носителя. Как ты представляешь себе добавление символа или середину? Типа, ты вставляешь свой пробел, а остальные символы в ужасе двигаются в бок?
Не забывай, тут тред си, а не общий тред раздела. Питоны и прочие скрипты можешь в анус засунуть, или выкатывайся. Программирование в контексте си совсем не то что под этим словом подразумевают обычно.
Иди нахуй, шизик
Так си и даёт. Написал, скомпилировал, и вот у тебя уже исполняемый файл. Где лучше рузультаты? в скриптовых языках? Ну что такое скрипт? Это тебе нужен какой-то другой исполняемый файл, чтобы этот скрипт читать и выполнять, а что там в нём происходит? Непонятно. На каком языке он написан? Не на питоне. Ну и в чём интерес? Так можно и html себе первым языком выбрать, вот уже где самый быстрые практические результаты!
И что, от этого данные хранятся по-другому? Нет. В си это нельзя сделать, нужно пердолить руками конкретную файловую систнму.
>нужно пердолить руками конкретную файловую систнму
Ну так я его и задал специалисту по виндоусу.
>Какие головки, 50 лет уже всё через три абстракции.
Вот именно, абстракции "файл" уже больше 50 лет и она устроена даже не как дисковые накопители, а как пикрелейтед.
Ну твой вопрос нерешаемый. Файлы хранятся как набор кластеров, смещения которых лежат в таблице ФС, поэтому в теории ты можешь дописать кластер (на пару килобайт) и переписать все записи в ФС, но добавить 1 символ нереально. Точно так же как в книгу ты можешь вклеить страницу, можешь вырвать страницу и вклеить новую, но добавить 1 символ - нет. Если тебе такое нужно, нужно делать внутри файла свою собственную ФС, как сделано в формате ворда doc. Но это технологии 80-х, сейчас любой файл проще переписать
НТФС проблемы.
Он написал как, но ты прочитать не можешь, просто кукарекающий дебил, которому все должны.
Использование переменных с типами где указано количество бит (uint8/16/32_t) не решает эту проблему, чтобы не забивать себе голову этим?
КриптоПро
> Использование переменных с типами где указано количество бит
Они опциональные, обязательны только least/fast/max, и это имеет смысл, потому что если у тебя 9-битовые char, ты никак не можешь сделать typedef unsigned char uint8_t, стандарт требует ровно 8 бит для uint8_t.
Там описаны отношения размеров типов между собой, причем не в виде коэфициента, а в виде сравнения >= <=, если мне память не изменяет. В зависимости от архитектуры абсолютные значения могут менятся, но отношения должны оставаться неизменными
В нем несколько подпроектов тоже со своими CMakeLists.txt
И там и там есть options
Можно ли сделать так, чтобы опции подпроектов не отображались, когда пользователь запускает gui-шный вариант, но не меняя файлов зависимых подроектов? Могу менять только основной у проекта.
Двачую. Мимо-инженер.
CodeBlocks
Охранную систему с распознованием движения.
Code::Blocks
Code Blocks
На бумаге. Заебали.
Black Cocks
cannot find Scrt1.o
cannot find crti.o
Таких файлов у меня нет. Пишут что это потому что у меня установлен gcc только для 64, а скомпелировать он пытается в 32. Как скомпелировать?
target: x86_64-linux-gnu
gcc version 7.4.0
Нет, дело не в битности. Эти файлы - часть глибц (у некоторых glibc-devel). Как ты поставил умудрился поставить компилятор без глибц, демон? Попробуй поставить glibc-devel или сказать gcc -L/usr/lib. Не поможет - неси gcc -v filename.c, или сам смотри, где оно их ищет и не находит.
Заебался я пролистывать прату между главами, захотел разделить PDF по главам.
Ищу в Гугле split PDF windows 10.
Во первых, почти все они онлайн, во-вторых ставят вотермарки, в третьих те которые можно установить - бесят антивирус.
По совету Анона в предыдущих тредах, учу прату через wsl Debian.
Заебавшись найти простую сука прогу для PDF разделения, решил попробовать через wsl.
Скорее по приколу, ведь всем известно что в Линекс нужен пердолинг даже чтобы посмотреть число.
Установил pdftk. В командной строке набрал что нужно.
Хуяк.
Готово.
3 минуты.
Включая поиск в Гугле.
Ещё раз: 3 минуты. Просто. Без Троянов. Без ебли. Без зондов. Без говна. ОНО ПРОСТО РАБОТАЕТ, АНОН.
Сказать что я ПРИХУЕЛ, это ничего не сказать.
Естественно, что на Линукс я не готов перейти, я его ещё не понимаю. Но это просто пиздец, я в шоке.
Ты наверное будешь смеяться, но я реально заебался искать решение такой простой проблемы.
Я не проверял.
Факт в том, что я долго искал под шин и за 3 минуты нашел под дебиан.
Попробуй погуглить, и продаться сквозь тонну говна.
>Естественно, что на Линукс я не готов перейти, я его ещё не понимаю. Но это просто пиздец, я в шоке.
Детский лепет. Ты перейди на линукс, вот тогда узнаешь что такое настоящий пиздец и шок.
Детский лепет. Ты попробуй стать разработчиком и при этом НЕ перейти на линукс, вот тогда узнаешь что такое настоящий пиздец и шок.
Разработчик чего? В тырпрайз галере ты никуда не переходишь, на чем скажут, на том и пишешь, как полагается рабу.
Ну я на работе пишу под линукс, и в гробу я его видал. Домашние проекты только под виндоус.
сразу в вим переходи
С подключением. Этот шиз тут постоянно висит
Показательно как ничтожная чмошка без личности за себя говорить не может, а воображает толпу за которую прячется. Говну всегда нужна чужая опора.
Выглядит интересно. Надо будет почитать.
Ваш пегдак?
Как я понимаю:
size_t - это счетчики циклов, размерности массивов
ptrdiff_t - это адресная арифметика
показательно, как ничтожная чмоха пытается говорить смелые высказывания от своего имени на анонимном форуме.
this, как он вообще собрался опираться на себя
ptrdiff_t практически никогда не нужен, это технический тип, использующийся при сравнении указателей. size_t - да, все так. Если вдруг понадобится size_t со знаком, то у некоторых платформ есть ssize_t, а где нет - можешь самостоятельно определить.
Котаны, посоветуйте учебник по C/C++, где объясняется как устроена память, вызовы и так далее по списку. Внутреннее устройство таких простых вещей как определение переменной, функции, вызов функции и др. Заранее благодарю.
Может быть, я до середины дошел.
Где-то на первых страницах есть РАСШИРИТЕЛЬ для твоей мамки, но я не вчитывался.
>Только программирование в среде WINDOWS даст вам возможность почувствовать все преимущества использования защищённого режима работы процессоров.
Есть кто-то кто работает используя С?
Пишете драйвера для Линукса?
Расскажите о себе.
Как учились.
Сколько лет.
Область трудоустройства.
Почему выбрали программирование.
Если ты еще здесь, напиши еще раз пожалуйста.
Спасибо.
пишу вполне себе прикладной софт, не дрова: мультиплатформа/гуй/любой каприз.. Учился хорошо, 30+
Выбрал не именно программирование, это скорее одно из, что интересно в смежных областях.
После Си наоборот мозги стали лучше все понимать и другие языки легче даваться, те же плюсы. Качество кода заметно возросло. Поэтому и плаваю туда обратно в зависимости от проектов.
На мой взгляд, лучший язык для обучения студентов профильных специальностей.
Ты даже не представляешь насколько прав.
Си - не первый язык куда я хотел вкатиться.
Сначала меня убедили с++ сектанты а на деле - хеллоувордщики и макаки что можно ПРОСТО ПИСАТЬ НА КРЕСТАХ И ООП-КОД И НЕ ПАРИТЬСЯ.
При этом макака не способна объяснить что такое int argc, char *argv[] в main.
Потом с# пробовал, хорошо продвинулся в изучении, пока не поймал себя на том, что просто заучиваю фичи языка синтаксиса. На крестах та же херня, кстати.
Потом пытался в модный хачкель пиздец и стыд нахуй это нужно было. Джаваскрипт + джава не зашли, потому что я досконально не понимал каким образом они выполняются на моем компьютере.
В конце концов вернулся к изучению сишечки вспомнить молодость, я счастлив.
Хочешь байтоебства с МК? Ныряй без проблем, всё концептуально уже знаешь.
Хочешь сложных абстракций? Ныряй в С++, база есть, все поймешь.
Сколько времени я убил, вместо того чтобы вникать в сишечку! А ведь мне уже почти 40, ебать..
>После Си наоборот мозги стали лучше все понимать
Нечего добавить.
Исповедь неосилятора итт.
> я досконально не понимал каким образом они выполняются на моем компьютере
Который даже сишку не осилил, потому что не может прочитать и понять исходники движков.
А ты можешь умник бля? Ты же сам нихуя не знаешь, ты обычный любитель-вкатоид, но сидишь и рассказываешь что-то про кресты и сисю с умным видом
>ДОСКОНАЛЬНО
Да ты и щас не понимаешь, спросить у тебя — и напукаешь что-то невнятное про ЭЭЭ НУ ТАМ БИЗОН КОНПЕЛЯЦИЯ ОПТИМИЗАЦИЯ МАШИННЫЙ КОД
>концептуально уже знаешь
нихуя ты не знаешь
>сложных абстракций
Блядь какой же кринж нахуй
Когда-то давно я писал о том, что после K&R можно прочитать дизайн и эволюцию, а затем йоба книги типа Мейерса и Саттера
Да, это был ты, добра тебе
>Глянул в оглавление там всё же есть глава про РАСШИРИТЕЛЬ для твоего бати.
А для моей мамки шлюхи есть? А то не сдохнет никак.
Я постоянно испытываю дикую попаболь при сборке библиотек/бинариесов из исходников.
Постоянные ошибки, постоянные гуглёжки, как меня уже это достало.
Подскажите куда копать что бы овладеть мастерством компилирования исходников? Желательно бы ещё статейки накидать.
Заранее целую.
Юзай make
Ну вот к примеру как-то так:
fwrite(source,
sizeof(char),
sizeof(source),
(кондишен какой-то) ? stdout : файлик на винте
);
Не уверен, что правильно всё написал и пока не проверял.
Но допустим, помимо файлика и вывода, я хотел бы ещё писать и в буфер. Ну разве файловый указатель не идентичен адресу в памяти и его нельзя заменить?
Алсо была мысль сделать нечто такое через сисколлы, но я боюсь, что мне придётся через инлайны регистры править, да и асму я почти не знаю
>В смысле?
>size_t write (int fd, void* buf, size_t cnt);
Как получить fd для куска памяти, а не для файла/потока?
я уже понял, что никак
write() же пишет исключительно в последние.
Например pipe() даёт тебе fd на кусок памяти. Да и довольно много других функций.
> Но допустим, помимо файлика и вывода, я хотел бы ещё писать и в буфер
fmemopen(), но оно не везде есть. Можешь свою обертку написать.
Ты понимаешь как они работают эти дескрипторы, трубки и процессор вообще?
http://man7.org/linux/man-pages/man7/pipe.7.html
>Например pipe()
Спасибки.
>>685582
>Ты понимаешь как они работают эти дескрипторы,
дескрипторы для идентификации файла в процессе, очевидно же.
>трубки
Вот сейчас курю. Из того что выкурил, понял что пайп имеет два дескриптора - для записи и чтения для других процессов. Читается/записывается по фифо. Вот только я безнадежно туп и всё равно не знаю, как из указателя на получить это ФД.
>и процессор вообще?
А что тут надо понимать?
>дескрипторы для идентификации файла в процессе, очевидно же.
https://www.opennet.ru/docs/RUS/lpg/node6.html#SECTION00730000000000000000
>как из указателя на получить это ФД
Если у тебя указатель, то зачем тебе fd? У тебя уже сырая память, просто пиши туда и всё.
Я его уже послал туда, где он должен был быть перед тем как задавать вопросы.
если разрабы конкретной либы не озаботились приложить файлик CMakeLists.txt то просто возьми другую аналогичную либу
Позаботились, но когда я прописываю make/cmake мне в ебало прилетает 1000 ошибок, а я хз как их исправлять, и что делать.
OpenSSL
Я пытался три часа её скомпилировать.
make слал меня нахуй, говоря что FILES NOT INCLUDED!
cmake высрал что мне что угодно, но не статические либы.
В итоге спустя пару часов нашёл в интернете уже скомпилированную статику и с ней начал работать.
а ты точно все внимательно читаешь?
https://wiki.openssl.org/index.php/Compilation_and_Installation
Ну с шиндоузом не могу помочь, а что если a) тебе и не нужно собирать, под шиндоузом разве нет либархивов b) ещё как вариант во всяких докерах крутиться?
>Reproducible 1.1.x builds with latest MinGW-w64/GCC, 32/64-bit, static/dynamic libs and executable.
Всё там есть, заканчивай ебаться со сборкой.
Если самому ебилды не писать, то там ведь нихуя знать про это не нужно.
>Я постоянно испытываю дикую попаболь при сборке библиотек/бинариесов из исходников.
Просто расслабься и прими дилду в свой анус. С годами он будет разработан настолько, что ты будешь лениво собирать все это говно часами, посматривая правым глазом сериальчик. А деньги при этом платятся как за полноценное программирование
Какую дилду, этот клоун не знает различия make и cmake, не читал ридми по сборке, зато уже умудрился насобирать 1000 ошибок где-то и насторочить на дваче. Настоящий программист, задатки гения.
Возможно просто макака.
Ты типичный комплексующий задрот. Только от таких можно услышать подобную хуйню.
Но у него верная мысль озвучена, чтобы собрать проект, нужно почитать ридми.
Недавно смотрел видос, где опытным разработчикам!, на серьезных щах, объясняют, почему скорость обработки массива различна, в зависимости от порядка обработки строк и столбцов.
Я тогда охуел, это же базовые понятия.
Твой коммент поставил все на свои места.
Да что ты нахуй вообще несёшь, ты обычный любитель-долбоеб, а самомнение у тебя как у системной макаки с 10 летним стажем минимум. При том что я сомневаюсь что ты вообще понимаешь о чем ты пишешь, что-то о том что не мог понять что-то про аргументы, что-то про скорость обработки массивов. Сядь книжку по крестам почитай какую а не обсирай свои штаны тут
Почему?
Чем бы девственники ни тешились. Если жизнь не для них, пусть хотя бы положняки C++ зубрят и свою хуйню оптимизируют.
У нормальных людей - не тупой, у тупых - задрот.
У нормальных - критика, у тупых - комплексы.
Типичный дебил, настоящий, необучаемый, навсегда, ибо вместо исправления своих недостатков занимается их защитой и оправданиями, разворачиваним стрелок.
>Я тогда охуел, это же базовые понятия.
Это low context и high context культуры. Цивилизованные люди используют low context, потому что проще сказать, чем выяснять, что собеседник знает, а что нет.
У пидоршек high context - скажешь человеку то, что он знает, он ОБИДЕТСЯ и подумает, что ты считаешь его ТУПЫМ, а если это делает лектор - это вообще пизда. Потом довольный прибежит на двач, рассказывать, какие все тупые, а он, задротик, умный.
>У нормальных - критика, у тупых - комплексы.
Мань, ты типчная токсичная форумная крыса, которая занимается не "критикой", а форумным самоутверждением. Ты думаешь это не видно?
>типчная токсичная форумная крыса
Как что-то плохое, и это вообще не отменяет того факта, что он всё правильно говорит.
>Как что-то плохое
Примерно как ссать в подъезде
>и это вообще не отменяет того факта, что он всё правильно говорит.
Этот пердеж не является разговором
Ну давай объясняй в чем отличие скорости обработки таких массивов, строк и столбцов. Объясни мне как меняется скорость, если я сначала буду вычислять столбцы->строки или же строки->столбцы.
Если поменять их местами все равно не будет эффекта на кэш цпу, если не считать размеры.
Прикольно, не знал что для этого явления есть определения, хотя сам замечал такое
фикс* "может быть различна"
Олимпиадные задачки.
А то тёмное поле, у людей процесс компиляции сложнее чем сама программа, а я ничего про это не знаю.
Просто ознакомиться — что угодно, хоть туториал на Ютубе, зверь не так сложен как кажется.
На сайте гну. Вообще make - очень универсальный инструмент, для многих задач сгодиться, неплохо бы иметь такой под рукой и уметь им пользоваться. У тебя на скрине скорее не про make, а про автотулзы это другое
typedef struct {
int depth;
} pizda;
typedef struct {
int length;
pizda p_pizda;
} hui;
pizda eot;
pizda p_eot = &eot;
eot.depth = 22;
hui op = {5, p_eot};
Почему запуская этот кусок в gdb я могу обратиться к члену структуры pizda структуры op типа hui как (op.p_pizda), так и (op->p_pizda)? Однако если обратиться вторым способом к op в исходном коде, то, понятное дело, возникает ошибка на этапе компиляции. В чём здесь заключается магия дебагера?
> пердолинг из интел мануала на 10к страниц
> это же ентри лвл, каждый нюфаня должен знать
Ох лол. Я практически уверен, что итт лишь 1.5 человека осилило черную магию мануалов.
есть ли в простом си обработка исключений TRY CATCH?
oн на этo ни oдин гoд пoтратит
Нет, есть сигналы для низкоуровневых (всякий неверный доступ к памяти и деление на ноль) и setjmp/longjmp для эмуляции программных. В винде есть __try/__except, но это расширение компилятора.
пoнял, спасибo
троллейбус из хлеба .jpg
Оба
Чувствую себя как на пикрелейте.
Очень сильно помог godbolt.
Всем добра!
молодец.
ваще с указателями проблема, что их часто объясняют на примере указателя на локальную переменную, и ты такой: "нахуя это говно нужно, если можно с самой переменной работать". Когда начинаешь фигачить структуры, становится понятнее. Ну и если хоть чуток разобрать (по сути) любой ассемблер, оказывается, что указатель - просто адрес, разыменовывание - получение данных по адресу(ну, с добавлением оффсета, если доступ к полю структуры).
Опытные сидят в емейл-тредах обсуждения патчей к линуксу. Раз ты здесь, ты недалеко ушёл от остальных.
Можно ли код по ссылке: https://ideone.com/TSjp9U как-то улучшить? В идеале, чтобы меньше циклов требовалось и меньше жрало.
Мне надо сформировать строку вида <S:X1,Y1;X2,Y2;Xn,Yn;> , где Xn - порядковый номер переменной, Yn - значение переменной.
GCC 7.2.1
Или скажите, где могут с такой проблемой помочь.
Зачем лезть в код, если ты даже самым элементарным не пользуешься? Ты оптимизации хочешь или поиграться?
У МК мало ресурсов.
Код целиком я ещё не дописал и он на стадии отладки, так что опции оптимизации могут ещё говна подкинуть.
Писал как есть, т.к. почти не знаю ничего.
Вообще, посмотрел бы как это НАДО сделать, а не так, как получилось у меня.
Хочешь оптимизации — используешь опции оптимизации компилятора. Так оно работает. Ты ещё скажи, что ты взялся это на С писать, потому что он "оптимизированный", а на своём языке даже оптимизации не пробовал включать?
Ладно, чувак, забей.
Может кто ещё что подскажет. А нет, то и так должно работать скорее всего.
>Пиздец ньюфаги в треде.
чо ты такой токсичный? челик разобрался с темочкой, сделал маленький шажок, хули бы не поддержать? нет, блядь, придёт пердоля, козыряя своим сомнительным багажом знаний. ссал тебе в рот.
>как_есть_ножом.жпг
Ну-у, если ты так хочешь знать, то...
https://ru.wikihow.com/правильно-пользоваться-вилкой-и-ножом
> В идеале, чтобы меньше циклов
У тебя всего один цикл. Из твоего примера вообще непонятно, зачем он нужен. И switch case можно выкинуть. Но я не знаю, может предполагается, что в var_tosend данные могут идти непредсказуемо и его размер не определён.
>зачем он нужен
>Мне надо сформировать строку вида <S:X1,Y1;X2,Y2;Xn,Yn;> , где Xn - порядковый номер переменной, Yn - значение переменной.
> В идеале, чтобы меньше циклов
Машинных циклов, если быть точнее.
>в var_tosend данные могут идти непредсказуемо и его размер не определён
Именно так. Код - функция-конструктор, формирующая строку для отправки.
>>690326
Что это за ахинея?
В смысле, почему всё пишется в разные массивы?
Потому что не знаю, как разом преобразовать переменную и записать в конец одного строкового массива.
Так бы я преобразовывал переменные и писал сразу в один массив.
snprintf преобразует разношёрстные переменные по заданному формату, а strcat склеивает строки.
Если я билдю проджекты из 17 файлов поочередно в консольке вместо мейка, то получается, что ем с ножа?
Вот именно!
Есть один момент, на который убил много времени.
В книгах объясняют, что если, например есть массив arr[2][3]; то arr это адрес первого элемента массива, то есть - &arr[0][0]. Фактически, это действительно так, но это пиздецки сбивает с толку, так как при разименовывании надо всегда учитывать тип!
На самом деле arr это &arr[0], a вот arr[0] это уже адрес arr[0][0].
> Потому что не знаю, как разом преобразовать переменную и записать в конец одного строкового массива.
Может, увеличить значение указателя на строковый массив?
Ты же в тред не приходишь:
>двач, как быстрее билдить 17 файлов? руки кстают стрелку вверх нажимать
>используй мейк
>мейкоблядь закукарекала!
бля форматирование пошло по пизде спасибо абу
Посоветуйте статический анализатор кода, чтобы проверял misra c ну и остальное проверял там, чтобы говна в коде не было.
Пока что немного погуглил и подумываю насчёт PVS Studio.
>твердо и четко где-то прописан минимальный размер типов данных?
Не, нихуя, везде по разному. В одном канпиляторе у тебя будет long int 24 бита, в другом 32 бита, к примеру.
По этой причине в misra c не рекомендуется использовать оригинальные типы, а вмето них нужно использовать типы указанием размера uint16_t, uint32_t и так далее.
Можно подкулючить библиотеку typedef для этого.
Записываю в него строку через gets(s).
Суть в чём? Если ввод в консоле больше 10-ти знаков идёт ошибка, как поставить какую-нибудь защиту от этого? Чтобы он инорировал остальной ввод или что-нибудь такое?
нет, не посмотрю. скажи решение. конкретное и прямое. очевидно что я сюда уже блядь после того как пол дня гуглил.
Если бы ты хотя бы 1 ебаную справку открыл, то наткнулся бы на fgets.
прoсти, я идиoт. спасибo бoльшo за пoмoщь
прочитал всю. кроме приложений. и упражнений половину книги сделал. как решить проблему?
Нет. Я уже разoбрался, анoны. printf'ом сделал посимвольный вывод двухмассивов, у первого массива нулевой элемент единице равен нахуй. Не знаю почему, но короче ваши функции гавно ебаное
>Нет уж, я заебался книги читать, 2 года я читал книги, хочу кодить, заебало.
Когда тебе нужно использовать неизвестную тебе функцию из стандартной библиотеки, прочитай один, сука абзац в стандарте про эту функцию, ну или в man. Дали им мануалы - читай, нет блядь, говно жрут. Наберутся "знаний" их своего эгрегора, лол.
>причём не функция гавно, а я еблан
Аксиома программирования. Нужно преподавать на первом уроке в школе, так чтобы всю жизнь помнили.
Есть еще важное следствие-тест. Если ты пробуешь использовать функцию, но она "не работает" и ты ищещшь другую на замену, значит ты необучаемый дебил, залетышь чуждый программированию. Просто съеби в таком случае, ты дефективен на генетическом уровне.
Никто не помнит?
Хммм... Где бы в этом треде мог быть список полезных сайтов? Даже предположить сложно..
Поэтому и не читаем, что там насрано и нихуя нет обычно (в нашем случае).
>Был охуенный сайт, где можно было вбить код на Си с нагромождением пойнтеров и т.п., и тебе расшифровывали, что на что указывает и т.п.
https://www.godbolt.org ?
ну чё ты наехал, невнимательнoсть. ну и я не кoдер ни разу, этo пoбoчнoе явление скажем так, не oснoвнoй рoд занятий.
Это разве не задание из K&R?
>stdint.h
Да, точно, она, забыл как называется.
>Такой метод является кроссплатформенным.
Вот поэтому и рекомендуют использовать такие типы, чтобы не ломать башку, сколько битов в переменной.
>Вот поэтому и рекомендуют использовать такие типы, чтобы не ломать башку, сколько битов в переменной.
Остается возможность соснуть с endianness.
char buffer[100];
size_t nb = 0;
snprintf(buffer + nb, countof(buffer) - nb, "%s %d %f", "a", 100, 1.23);
nb += strlen(buffer + nb);
snprintf(buffer + nb, countof(buffer) - nb, " %с %s\n", 'x', "hello");
nb += strlen(buffer + nb);
...
buffer[(nb < countof(buffer)) ? nb : nb - 1] = '\0';
Все было бы проще, не будь snprintf в сишке сломана нолик в конец не всегда пишет, возвращает не число записанных символов, а требуемый размер буфера, чтобы влезло все. Поэтому лучше всего для такого сделать обертку вокруг snprintf, которая заодно и на ошибки проверит (snprintf и отрицательное значение вернуть может), и нолик в конце не забудет, и флажок примет, считать ли недостаточный размер буфера ошибкой - для имени файла или каких-то критичных данных очевидно да, а для отладочных логов очевидно нет.
Лол. Вот и я наебался. Короче, вот это терминирование нулем, которое в конец уехало, надо после каждого snprintf делать.
Я вот его примерно так вот представляю. Покрякал и улетел.
Благодарю, поправил - работает.
https://pastebin.com/w1qXaQw7
.intel_syntax noprefix
.text
.section.text.startup,"ax",@progbits
.p2align 4,,15
.globlmain
.typemain, @function
main:
xoreax, eax
ret
.sizemain, .-main
.ident"убунта"
.section.note.GNU-stack,"",@progbits
Факт: ГЦЦ на третьем уровне оптимизации удаляет к хуям собачьим всё то, что не связано со стримами и файлами.
Хоть я и не шарю в авр, но тут такая лютейшая хуйня в плане алгоритма, что я даже не знаю с чего начать.
Во-первых, после отпускания кнопки, ты больше никогда не зайдёшь в условие if ((PIND & 0b00000001) == 0b00000001), потому, что оно будет false.
Во-вторых, даже если ты будешь держать кнопку нажатой, то по истечение таймера, у тебя всё равно будет светить (ну или дохуя часто моргать), так как после сброса порта в 0 он опять поставится в 1.
В использование таймера я даже не вникал, ну его нахуй.
Надо вычленить совпадение в отдельную строку.
Подобрал подходящий паттерн: ^.,.,[0-1]$
Как его скормить в регэксп для моих целей? Или можно выкрутиться по-другому?
То, что не содержит сайдэффектов. Если хочешь затестить оптимизацию, компилируй отдельные функции или пиши результаты в volatile-переменные.
>>694088
Можешь явно стейтмашину забабахать. Заводишь comma_index = 0, встретив запятую - инкрементируешь, пишешь символы в columns[comma_index], для comma_index == 2 дополнительно проверяешь каждый символ isdigit. Зачем для такой ерунды тащить регэкспы - непонятно.
>>694096
Очередной дебил, который перепутал сосач с форумом для девочек. Какая принципиальная разница, писать foo/bar или hui/pizda?
На плеббите не апвоутнули?
ты понимаешь что ты поехавший?
Чо это наглая соплячка у деда из кармана пиздит?
Анон, посоветуй какую-нибудь обертку-фронтенд (хз как правильно) над gdb, чтобы было удобно юзать, можно консольную, можно гуи. Стандартный из под консоли все-таки сильно неудобный.
Можно наверное иде какую-то легкую, но я вимовый линуксодибил, так что не оч хочу. Еще было бы неплохо если оно как-то для асма неплохо работало, но это опционально. Ну или что-то такое спецом под асм.
Есть файл name.txt, в нём две строки до 64 символов латиницей или цифр, или их комбинаций, допустим:
stroka1
stroka2
Надо эти строки прочитать из файла и занести в два отдельных массива.
Хульп, плиз.
Вы только посмотрите на этого маминого капиталиста.
Проснись, буржуа, ты обфрилансился в портки.
>>696432
>>696523
Ладно, чел, извиняй. Думаю, оба были не правы.
Пригорел ты конкретно, конечно, но вот развешивать ярлыки не стоит.
Хрен с ним с кодом, возможно бы справился и со словесным описанием алгоритма.
Можно прочитать содержимое файла посимвольно, через fgetc, пока не встретишь \n но это будет долго.
Функция fgets читает символы, пока не встретит \n или конец файла.
"В случае успешного чтения строки, возвращается указатель на массив, в который помещены считанные данные (возвращается аргумент s)."
Можно прикрутить счётчик и на каждый инкремент копировать указатель на массив, возвращаемый функцией, через strcpy в нужные массивы?
fgets() бери. Только это говно должно записать ещё и ньюлайн, так что на место ньюлайна просто ставь '\0'.
Вместо ЕОФа оно тебе сам нуль захуярит.
Тебе нужно просто два раза подряд вызвать fgets с двумя разными массивами в аргументе.
fgets(arr1, 64, file);
fgets(arr2, 64, file);
struct information
{
char name[LEN_NAME + 1];
char manufacturer[LEN_MANUFACTURER + 1];
unsigned cost;
unsigned amount
} good[LEN_STRUCT];
Как этот массив передать в функцию по указателю? Если написать
func(good); (обычный массив, по идее)
то компилятор ругается: "использование имени типа не допускается"
Так у тебя и получается, что передаётся ссылка на ссылку указатель на указатель, конечно, но в с всё равно ссылок нет, так что покс
А как правильно? Прост я всегда, если у меня массив был a[5], передавал в функции как func(a), прототип - func(a[5])
Кому в 2к20 может понадобится Си?
Только байтаёбам разве что, которые пишут прошивки для мк за еду, и то, даже оттудова его скоро вытеснят плюсы.
Зачем его учить нормальным людям сейчас?
А нет, ошибочка, я писал по памяти пост, у меня всё-таки у меня там struct information goods[100]
Делай, короче, через тайпдефы. Ничего хорошего у тебя из быстрого-прототипирования-на-коленке не выходит всё равно.
Узнать, в чём космический смысл учить Си.
Программирование ведь учат ради того, чтобы зарабатывать бабки, а не джаст фор лулз.
Вот мне и интересно узнать у людей, зачем они выучили Си.
>Ладно, чел, извиняй. Думаю, оба были не правы.
>Пригорел ты конкретно, конечно, но вот развешивать ярлыки не стоит.
>
Лоол, ну реально задают вопрос из экзамена уровня хлебушка, ты отвечаешь. Збс.
Я про то что ты тайпдеф проебал. Как тебе помогать вообще, если ты изтрёх постов с кодом в двух ошибся? Переспрашивать тебя каждый раз, точно ли ты то скопировал?
Не, ну окей, я думал, он не так важен для понимания проблемы. Но скрины-то точно иллюстрируют проблему
В первом посте good было названием массива, а на скриншоте good — название типа.
>Узнать, в чём космический смысл учить Си.
Си охуенный лаконичный язык в котором нет ничего лишнего и который можно полностью объять разумом.
>Программирование ведь учат ради того, чтобы зарабатывать бабки, а не джаст фор лулз.
Тебе ничего не мешает знать несколько языков. Как для того чтобы зарабатывать бабки, так и для души.
> который можно полностью объять разумом
В котором ~200 прекрасно документированных способов прострелить себе ногу, см. https://gist.github.com/Earnestly/7c903f481ff9d29a3dd1
Чем больше погружаюсь в эту волосатую кроличью нору, тем больше я понимаю, что зря мы всем миром хоронили Дельфы. Кроме более компактного синтаксиса, всё остальное в Си, кажется, сосёт. Как будто весь язык создан, чтобы в каждой функции было удобно писать в регистры или показывать фокусы с двоичной арифметикой на флоатах. Простой код для Си слишком плебейский.
Делфи конкурент скорее С++, там не просто ООП, а две несовместимых объектных системы (class и object), есть исключения. Идеи делфей развились в C# с уходом главного разработчика в микрософт.
> ~200 прекрасно документированных способов прострелить себе ногу
Пролистал список, автор не отличает unspecified от undefined. При этом большая часть списка либо очевидна сразу, либо становится очевидна после прочтения пятой главы стандарта (там рассказывают про абстрактную машину, для которой ты на сишке пишешь). Остаются только всякие мелочи со стандартной библиотекой, которые действительно нужно исправлять.
Ну, не Дельфы так Паскаль. Просто ощущается, что между Си и Крестами не хватает среднего звена: компилируемого языка без UB и дремучего синтаксиса, но с ассоциированными методами типов, дженериками и, наверное, управлением памяти через счетчик ссылок. Переход с Си на Кресты выглядит для новичка, как проститутка с плёткой и страпоном в подарок на совершеннолетие.
Я понимаю, что автор привирает для разведения паники и там три четверти выглядит очевидно, но! Это все равно две сотни мин, на которые можно напороться в конце рабочего дня, когда в голове уже шум, а все мысли только о жрачке и сне. Это как заводы сто лет назад: везде капало горючее масло и крутились открытые шестерни, но в то время покалеченных рабочих можно было выкинуть на улицу. Сейчас за уязвимый и нерабочий код можно огрести штраф на сумму контракта.
Такой язык просто не нужен. В 90-е на том некрожелезе (страшно подумать, у меня видюха быстрее самого быстрого суперкомпьютера из 90-х), был смысл экономить биты и не писать на Java либо C# тот софт, который писали на делфях. Сейчас же смысла вообще ноль.
А сейчас, где смысл есть, нужны профессионалы, а не новички.
Лично мне нужна замена Си - простой язык, заточенный под системный софт и interop с языками более высокого уровня, но без ебли с совместимостью с 70-ми годами прошлого века. Есть куча штук типа zlib, libjpeg, libuv и прочего, в написании которых Си неудобен, а Кресты - оверкилл. Опять же, возвращаясь к Дельфам - сборка проекта в миллион строк без ебли с зависимостями - это, блядь, непередаваемо охуенно. Писать всякий FIND_HUI в CMakeLists я люто ненавижу, не говоря уже о том, что лечить сломанные зависимости на дркгом языке - пытка.
Р..раст?
С одной стороны ты прав. Я читал в бложике одного чувака, он как-то решил одну свою консольную тулзеньку питоновскую переписать на расте. Потом сравнил производительность, ну и короче выяснилось, что только через 35-40 лет использования эта разница в производительности отобьет время, которое он потратил на переписывание. Но с другой стороны, когда менюха в варкрафт рефордже тормозит сильнее, чем сама игра, а все потому что близарды решили сэкономить и наняли вебмакаку, которая написала меню на электроне, я начинаю думать, что индустрия заходит куда-то не туда. Железо становится все мощнее, а плохо написанный софт весь этот рост мощностей нивелирует.
Пиши на си с классами и не еби мозг
На шарпе можно писать приложения, которые будут менее производительнее аналогов на С/С++ только в случае если на сях/плюсах программу писал хороший специалист, что в случае этих языков большая редкость. Поэтому зря ты его рядом с жабапарашей ставишь.
С утилитами на питоне-ноде проблема в том, что их неудобно разворачивать. Тебе помимо самой утилиты надо разворачивать среду для её запуска, вот это главная проблема, сложность.
Производительность... В подавляющем большинстве задач не актуально, у тебя просто в одном случае ресурсы железа используются на 10%, в другом случае на 1%. Есть ли реальный смысл экономить, вкладывая много труда?
Тебе нужно решить проблему, ты её решаешь. На ноде можно быстро разработать и запустить довольно сложное приложение, которых просто 20 лет назад не делали, точнее делали, но это были ОЧЕНЬ дорогие в разработке приложения. И всё равно с меньшими возможностями.
Сорта говна. Да, шарп быстрее жабы, но все равно тормозное дерьмо. С нормальными прграммами сравнивать нелепо. Эта хрень годится только для одноразовых утилиток вроде скриптов, чтобы запустил раз, закрыл и забыл.
Наиболее сложное ПО под винду сейчас на шарпе пишут.
>Сорта говна. Да, шарп быстрее жабы, но все равно тормозное дерьмо
Скажи это игорям на Unity.
Так в том числе про это он и говорит. Шарп не дает никаких преимуществ перед плюсами от слова совсем. Кодил много лет на С/С++/С#
У шарпа единственное преимущество, что его хорошо отрекламировали. Поэтому теперь, когда крупная фирма хочется взять прогеров на такой проект, где их нужно много, но предполагается сильная текучка кадров - вот там он заходит. Т.е. очевидный интерпрайз, для которого собственно он и был разработан как альтернатива яве.
>не дает никаких преимуществ
В том то и дело, что даёт. Он не навязывает тебе необходимость ебаться с задачами, которые можно сделать за пару минут. Речь про задачи которые не требуют максимальной производительности. При этом если у тебя возникают задачи, которые требуют максимальной производительности, то в таких случаях можешь и поломать голову, покрутить указателями, поманипулировать структурами и байтами. И самое главное - он не даёт тебе обосраться, при этом в плюсах даже в пустяковом месте можно закопать говно, которое испортит всё приложение. И всё это в обмен на ничтожный процент от скорости выполнения и увеличения потребляемой памяти.
>У шарпа единственное преимущество, что его хорошо отрекламировали
Сразу видно "много лет" кодящего и не следящего за обновлениями. Премущество шарпа в том, что его быстро и постоянно развивают, открой dev блог майков и посмотри на количество изменений которое внесли в C# с момента когда ты перестал на нём кодить.
Зачем это говно в качестве "клея", когда есть какой-нибудь питон/лисп/ваш любимый язык нейм?
>Премущество шарпа в том, что его быстро и постоянно развивают
Твой до диез существовал хуй знает сколько лет до появления кора, если я не ошибаюсь лет 15, в итоге на сервере его попросту не было, по факту была штука для десктопа. Зачем теперь коре на сервере, когда есть джава, я даже не знаю. Короче активно развивали, но не туда.
> В том то и дело, что даёт. Он не навязывает тебе необходимость ебаться с задачами, которые можно сделать за пару минут.
В том то и дело, что плюсы точно также. Да, если брать Си, то там уже есть проблемы, что новички в сложных проектах будут себе остреливать что-то. В плюсах этого нет.
> Премущество шарпа в том, что его быстро и постоянно развивают, открой dev блог майков и посмотри на количество изменений которое внесли в C# с момента когда ты перестал на нём кодить.
Я не переставал на нем кодит, писал же, что на всех трех работаю. Ну есть там частые обновления, что нормально для молодого языка. В других двух все устаканилось и выпускают раз в пару лет. Это вот вообще не показатель.
> Премущество шарпа в том, что его быстро и постоянно развивают
А недостаток в ограниченной применимости - за пределами корпоративщины он нахуй не нужон, в том числе микрософту - даже Скайп они новый сделали на Электроне.
У Шарпа просто нет киллер-фич, ради которых стоило бы терпеть прожорливый рантайм и заточенность под экосистему шындовса. Даже у пет-проектов типа Зиги или Ви есть вау-эффект, а о Шарпе можно только унылую презентацию в паверпоинте сделать, на тему "чуть более лучше, но это не точно".
>>697608
> В плюсах этого нет.
Ой, не пизди, пожалуйста. Новичок может получить контузию, попытавшись осмыслить какую-нибудь хуету на Бусте.
>молодого языка
>язык появился в 2000, на 5 лет позже жавы
В голос.
>>697630
>даже Скайп они новый сделали на Электроне.
Скайп на электроне появился еще до .NET Core, и другой возможности сделать кроссплатформенное приложение тогда не было. И появится она только через пару месяцев, сейчас инструмент (.NET MAUI) для создания таких приложений находится на стадии превью.
Вот именно это называется "не стоит на месте и развивается", они повернулись лицом к опенсорсу, они делают упор на нужные вещи.
Да 2 года назад шарп был всего лишь альтернативой Java, но сейчас эта жаба даже и рядом не стоит.
Ты треплешь как маркетолох рекламный, который программ не писал. Кому нужен язык, на котором сегодня пишешь, а завтра он уже устарел, наклепали нового. Это параша рака самая настоящая, типичное скриптовое вебговно. Зачем это дерьмо в ситреде? Иди толсти в другом месте, свинья.
>если на сях/плюсах программу писал хороший специалист, что в случае этих языков большая редкость
Насколько же петушиная манипуляция, не могу предоставить аргументы - выдумаю статистику.
> другой возможности сделать кроссплатформенное приложение тогда не было.
И тут мы понимаем, что знаем дотнет лучше его евангелиста.
Тебе аргументы нужны для осознания того, что более сложный инструмент требует больших навыков от того кто им пользуется, и чем больше этих требований, тем меньше будет хороших специалистов для конкретного инструмента? Это очевидно для всех кроме тебя.
>>697830
И тут ты называешь замену электрону, которую можно также скомпилировать один раз и запускать в любой системе.
>И тут ты называешь замену электрону, которую можно также скомпилировать один раз и запускать в любой системе.
Электрон так не работает?
> И тут ты называешь замену электрону, которую можно также скомпилировать один раз и запускать в любой системе.
Слово из семи букв. Угадаешь, или будешь крутить барабан?
Но какая разница? Javafx уже 12 лет, Swing-у уже больше 20 лет. Кроссплатформенными они были с самого начала, но за всё время я так и не видел сколько-нибудь популярного софта на их основе.
Кмк, тут ещё играет роль самомнение программистов: качество софта на манагед языках ограничено сверху, сделать супер-быстро и супер-круто на них не получится. Вряд ли кто на досуге хочет писать сразу говно. Наверное, исключение в виде Электрона держится потому, что писать под него - это типа паралимпиады и проходит по статье расходов на дайверсити.
>Тебе аргументы нужны для осознания того, что более сложный инструмент требует больших навыков от того кто им пользуется, и чем больше этих требований, тем меньше будет хороших специалистов для конкретного инструмента
Опять петушиная хуйня. Если убрать все петушение, у тебя написано: "по-моему, С++ более сложный для написания более быстрого софта".
Что, конечно же, неправда. С++ более сложный язык, но ровно потому, что в нем zero overhead абстракции везде, и писать более быстрый код на нем проще.
> zero overhead абстракции везде
> писать более быстрый код на нем проще
Так может говорить только человек, никогда не видевший, как в дизасме сишная строка конвертируется в std::string, которая конвертируется в QString, которая передается в функцию, которая делает из строки QByteArray, у которого просят data() с изначальной, блять, сишной строкой. Три ебаных страницы преобразований, чтобы сделать НИХУЯ. И это в крестах повсюду.
А ещё эта самая нулевая стоимость абстракций выглядит насмешкой, когда у тебя ассемблерный код короче, чем определение хитровыебанного итератора.
Да, я такого никогда не видел, потому что ты это придумал только что.
Расскажи это опенсорс сообществу.
Где почитать про смысл троеточия в дефайне? Я нашёл про # и про ##, но про ... ничего нет почти, mingw выдаёт "operand of fold expression has no unexpanded parameter packs" когда я пытаюсь что-то с многоточием сделать - но эта ошибка со скопированным текстом почти даже не гуглится, а все ссылки которые есть ниже про темплейты плюсовые.
В идеале мне нужно ker(1,2,asd) превратить в <1] <2] <asd], то есть обернуть каждый из параметров в говно и убрать запятые, количество параметров заранее неизвестно и это должно быть кодом, а на текстом.
Это возможно как-то хотя бы?
>QString
>в крестах
Кутэ - не кресты, а левый парашный DSL для тормозной говнопараши. Считай это аналогом джаваскрипта, не ошибешься в главном.
Почитай главу C Primer Plus про препроцессор.
> В идеале мне нужно ker(1,2,asd) превратить в <1] <2] <asd], то есть обернуть каждый из параметров в говно
Нееш... Не делай так, возьми внешний кодогенератор, если собираешься собирать выражения по кускам. Но ты можешь, конечно, сделать так: https://ideone.com/F5ANke
> Где почитать про смысл троеточия в дефайне?
В троеточие попадают все "лишние" параметры макроса (которым не нашлось имени перед троеточием). В теле макроса ты можешь получить эти параметры одним куском, вместе со всеми ихними запятыми, сказав __VA_ARGS__. Чтобы получить один конкретный, нужна магия.
> #, ##
# преобразует аргумент макроса в строку. ## склеивает два токена в один (иногда).
>Наверное, исключение в виде Электрона держится потому, что писать под него - это типа паралимпиады
>му-хрю нинужна
Мелкомягкие написали на элекиютроне иде vscode, которая охуенна.
А как можно получить нативность в языке программирования без всяких там байтовых машин, если разные аппараты использовали разные порядки?
мимо-нюфак
Я не об этом. Я прекрасно понимаю, что типы первого порядка таковы, чтоб их реализация на ассемблере под архитектуру была самой прямолинейной. Но почему в стандарт не завезут возможность не класть 14-байтовые структуры по 16-байтовой сетке? Как опцию? Чтоб можно было писать
typedef NiCeStAnDaRdDeFiNeDpAcKeDaTtRiB struct {
uint8_t sych_size_in_nm;
uint32_t erokha_size_in_nm;
} huetred_t;
huetred_t ∗borda = calloc(n, sizeof(huetred_t));
fread(huetred, sizeof(huetred_t), n, borda);
printf("%u\n", borda[7].eroha_size_in_nm);
а не
#define SZ_HUETRED 5
#define SYCH_SIZE_IN_NM(p) (∗(uint8_t∗)p)
#define EROHA_SIZE_IN_NM(p) (∗(uint32_t∗)((char∗)p+1))
#define HUETRED_BY_IDX(borda,idx) ((char∗)borda+idx∗SZ_HUETRED)
huetred_t ∗borda = calloc(n, SZ_HUETRED);
fread(huetred, SZHUETRED, n, borda);
printf("%u\n", EROHA_SIZE_IN_NM(HUETRED_BY_IDX(borda, 7)));
Если где-то опечатался, не обессудь.
Так исторически сложилось - Си изначально разрабатывали под машину PDP-7 с 18-битным словом, на байты индустрия окончательно перешла только в 80-е. То, что в C99 для типов отдельный хидер - дань совместимости со всяким архаичным говном.
>uint32_t eroha_size_in_nm;
>fread(borda, sizeof(huetred_t), n, fborda)
>fread(borda, SZ_HUETRED, n, fborda)
конечно же
>дань совместимости
так пусть просто сделают не хэдер, а keyword-ы ...8/16/32/64t зашьют, МНЕ ТАК ПРИЯТНЕЕ БУДЕТ)
В то время у всех уже были свои кейворды под типы фиксированной ширины, чаще всего - разные по названию, всегда - зависиящие от компилятора. Вынесение стандартных кейвордов в хидер позволяло не ломать старый код. Насколько Си обратно совместим, я как-то увидел сам, скомпилировав древний Дристон 30-летней давности под современный микроконтроллер.
По сетке всё кладется, потому что теоретически есть платформы, которые могут читать-писать только выровненные по слову данные. Если паковать всё по байтам, ты получишь штраф на доступ к полям - их придется выделять из слова сдвигами и and-ами - и нарушение атомарности доступа к словам. Короче, если знаешь, что делаешь - используй битовые поля или расширения компилятора.
Просто современный С, куча бы народу перешло. Rust вообще не то
По-моему, Си не улучшают, т.к. сами стандартизаторы языка считают, что лучше б он сдох. Иначе трудно объяснить, почему в ни в C18, ни C20 нихуя нового нет. Тут уже впору говорить не об удобном Си, а о легковесном Расте.
Потому что в С уже есть все, что нужно. Добавлять всякий синтаксический сахар никому не нужно. Также у них есть перед глазами пример С++, когда в язык пихают фичи и он превращается в кошмар.
Беда C++ не в обилии фич, а в совместимости с C и вывертах шаблонов. Если бы Кресты использовали дженерики вместо шаблонов и будь у них более удачный синтаксис - была бы у народа к ним вечная любовь. А так, оба языка будто специально хотят выставить программиста дураком.
> теоретически есть платформы, которые могут читать-писать только выровненные по слову данные
Почему теоретически? Есть ARM 32-битный, есть PowerPC, есть SSE в том же x86 со всеми его movaps.
Обычно нинужно. Например, чтобы намекнуть, что это указатель на единственную переменную типа int, а не на массив.
Как такое обыгрывают гуру?
Вижу два подхода:
1) для A использовать другой конетйнер - ассоциированный динамический массив, но это чуть ударит по скорости обхода всех элементов и времени обращения к конкретному элементу. Т.е. по сути вместо ссылки на элемент A будем хранить некий хеш-id, по которому будем обращаться.
2) Умные указатели:
хранить в каждом элементе A такой же динамический вектор на те элементы B, которые его используют, чтобы при каком-то изменении структуры A, элемент мог бы обратиться к нужным элементам B и перезаписать им указатели уже на новые элементы или просто занулить.
> хидер
Лол какая мариванна тебя так научила транслитерировать слово "хедер", когда можно использовать русское "заголовок"?
какая тебе разница как он говорит, его понимают - этого достаточно
если лично ты не понимаешь - это только твои проблемы
Да потому что C это не про файлы. В софте мелких микроконтроллеров они крайне редко применяются. Зато код на них легко переносится.
alo yoba eta ty!?
Может, это просто ресурс. Банальный пример - это загруженная картинка.
Нет, можно заменить и другим контейнером, для этого в пункте 1 и описал, что замена на ассоциированный динамический массив. Но не хотелось бы сильно замедлять обход по ссылкам на следующие элементы и хранить единым блоком в памяти как в векторах.
3) Глупые указатели: в каждый элемент А добавляем номер первого элемента B, который на него ссылается. В каждый элемент В добавляем номер следующего элемента B, который ссылается на тот же элемент А.
интересный вариант.. наверное самый лучший пока что..
Мм, спасибо, то что нужно.
>Я хуй знаю, что еще с этим сделать.
Питоновский with краду.
Просто балуюсь, но вроде удобно получилось, почти как родные for или if - буду в своих проектах использовать. Осталось только порядок развернуть.
Там внутри if(...;true) где в первой секции создаются временные объекты, аналог __leave__ вызывается в их деструкторах. Ещё думал как сделать аналог as через дефайн или синтаксис типа with(c=a,b), но так и не придумал - впрочем, он не очень и нужен.
А ещё сейчас пришло в голову глядя на std::tuple, что возможно это можно чисто через шаблон сделать - я просто не очень по шаблонам, мягко говоря - и твой подход мне понятнее.
Вряд ли. Это просто список владельцев объекта. А индексы вместо указателей позволяют экономить место.
Ну тут место не экономится, а скорость изменения. За счет такого подхода при изменении вектора А, нужно только изменить его самого и в одном элементе вектора B изменить указатель. Но если все хранить в А, тогда надо менять всех владельцев, ссылавшихся на А.
А, ну это называется indirection :)
https://en.wikipedia.org/wiki/Zero-copy
https://lwn.net/Articles/752188/
Расшаренные буфера нинужны.
Вангую примерно об этом был спор двух старых пездюков линуса и таненбаума.
Если ты пилишь микроядро, архитектурно дрова будут общатся с ядром и юзерспейсом сообщениями, а такая абстракция почти наверняка предполагает расшаренные буфера.
В чем проблема моего вопроса, лолват? Ядро Линукса написано на Си, я думаю, здесь есть аноны, которые шарят в системном программировании в среде Линукса.
>Какой IPC между ядром и юзерспейсом самый быстрый в Линуксе
ioctl+device file i/o
Другого нет.
Как засунуть .dll внутрь Portable EXE?
Чтобы был один цельный екзешник, и чтобы он не просил dll-ку,
чтобы её не надо было закидывать рядом, а чтобы она была внутри его кода?
Слышал про какие-то .rc-файлы, где dll-файл можно в виде resource как-то привинтить,
но чёт не пойму нифига.
STATIC LINKING
> IPC между ядром и юзерспейсом
IPC --> между процессами
Между процессами оче здорово работают пипы.
> Сигналы покатят?
Не используй сигналы для этого.
Аноны, какой тулзой собирать проект из нескольких .so? Раньше вполне устраивал make, но вот решил замахнуться на что-то по-больше и этот самый make уже порядком заёбывает, так как каждая либа собирается со своим собственным набором флагов в собственных директориях. Если все за Cmake, то где можно почитать про написание своих сценариев, где всё по-нормальному разъжёвывается?
gyp -> ninja?
Удваиваю вопрос. Самому пришлось ебацца с ентими .rc, тот еще опыт...
2 случая
Или ты черпаешь структурой заранее известные бинарные данные из файла не проебав при этом оконечность или ты оптимизируешь под килобайты оперативы (мк/8 бит компы), в остальных случаях ты получишь невыровненный доступ.
А ты не знал, что процессы в пространстве ядра могут обмениваться данными с процессами, которые исполняются в пространстве пользователя? Это троллинг такой или что?
Если ты пилишь микроядро, дрова у тебя будут примерно сбоку.
https://yarchive.net/comp/linux/kernel.html
> Как засунуть .dll внутрь Portable EXE?
Никак. Т.е., теоретически было в интернетах несколько проектов, которые рипают код из длл и делают obj, но там куча нюансов, из-за которых на практике скорее всего будут проблемы.
> где dll-файл можно в виде resource как-то привинтить
Вот так можно, но это тоже не беспроблемный костыль. Пишешь name RCDATA "mydll.dll" в .rc, компилируешь rc/windres filename.rc, с полученным filename.res/.o линкуешься. При старте делаешь FindResource/LoadResource/CreateFile куда-нибудь во временную директорию/WriteFile данных из ресурса, грузишь LoadLibrary, получаешь указатели на функции GetProcAddress. Никакого связывания через таблицу импортов, конечно же, иначе твоя программа просто не запустится.
>процессы в пространстве ядра
Какие процессы нах, есть треды ядра, в которых делают copy_to_user, copy_from_user.
Из API операционной системы. Это же основы синхронизации потоков. Мьютексы и Семафоры на этом строятся.
#ifndef %HEADERNAME%_H
#define %HEADERNAME%_H
...
#endif / %HEADERNAME%_H /
? Про всякие распространенные в использовании вещи, типа make, и паттернов, наподобие вышепредставленного, и зачем они вообще нужны?
Спасибо.
Все с тобой понятно.
Нет, Маня, это IPC. Почитай про те же netlink sockets и не выебывайся, если ты не шаришь в этом.
Описание по ссылке.
Вкратце: функция принимает uint8_t звёздочка. А надо подсунуть массив char.
https://pastebin.com/wstdHFRZ
Твоя функция обёртка получает те же типы данных, что и обёртываемая? Какой в ней смысл тогда? Что она делает?
В обёртке ещё пара вспомогательных функций запихано. Они не относятся к обёртываемой функции.
Разве изменение типов принимаемых аргументов функции-обёртки поможет?
При подстановке напрямую варнинг: pointer targets in passing argument 2 of 't_data_recieve' differ in signedness [-Wpointer-sign]
При касте (void *) ошибок нет, но в терминале мусор.
Возможно, при подстановке напрямую на предупреждение можно забить. Я стараюсь исправлять любые понятные варнинги. Не пробовал.
Если что - прилечу на жопной тяге.
(sizeof(insigned long)) потом умножение
Не используй sizeof в выражениях, которые вычисляет препроцессор, он не умеет:
#if sizeof(int)==4
Обычно CMAKE вычисляет sizeof и создаёт директиву препроцессора типа SIZEOF_INT
мимопроходил из крестотреда
>>704560
Код не мой, это qemu https://www.qemu.org/ .
Просто обычно он у меня без проблем компилировался, это на дебиан пересел сейчас, после чего появилась эта ошибка. Видимо от компилятора тоже зависит, может здесь gcc староват 8.3.
обосрался - обтекай :-)
тоже мамкино оптимизаторство? Ведь компилятор же просто sizeof() на препроцессировании хуйнёт заместо макроса.
И по поводу дейта элайнмент, я сделал правильный вывод, что все примитивы желательно подстраивать под машинное слово, ну или в х64 использовать хотя бы 4 байта?
алсо такая хуйня возникает из-за того, что ЦПУ быстрее высчитывает адреса посредством битового сдвига, верно же?
>тоже мамкино оптимизаторство
Да. Иногда улучает читаемость.
>дейта элайнмент
Значения указателей должны быть выравнены:
char buf[100];
int p = (int )buf <--------- ГРОБ ГРОБ КЛАДБИЩЕ
>все примитивы желательно подстраивать под машинное слово
Желательно использовать int, в среднем по больнице он быстрее других типов или требует меньше кода.
>ЦПУ быстрее высчитывает адреса посредством битового сдвига
Нет. Не путай с выражениями a, там компилятор всунет умножение, если sizeof(*a) не степень двойки.
Это снова я.
Нет, чувак, массив char - выходной буфер, в него пишутся данные: в моём случае я по логическому анализатору вижу, что говно на другом конце проводов отправляет верные данные в виде ASCII символов в HEX формате (байты).
Т.е. отправляется, например, 00031 = 30 30 30 33 31.
А на принимающей стороне вместо этого выводится мусор, типа левых символов.
Сейчас полазию по либе.
https://pastebin.com/5UTeM6mH
Отправить, сука, получилось - а принять - борода.
Не одинаковая верхнее проверяет только первый бит, при чем он может быть равен единице только если i = 0, при всех остальных i верхнее условие гарантировано не выполняется. Чтобы они были равноценны нужно как минимум ==1 заменить на > 0 и !=1 на ==0. Может еще что поправить, лень вглядываться.
Просто на всякий случай спрошу. Ты понимаешь как работает SPI и то, что приёмник и передатчик выталкивают друг у друга данные из буферов и по кругу их гоняют?
Походу у тебя проблема не с типами. Замени char recvbuf[129]; на uint8_t recvbuf[129]; и всё делов-то, а потом обрабатывай и кастуй этот массив как хочешь после приёма.
Скорей всего у тебя проблемы с настройкой модуля SPI или с алгоритмом работы. Ты можешь с уверенностью сказать, что настройки модуля и алгоритм работы реализованы корректно?
>Ты понимаешь как работает SPI
Честно - не очень. Не беспокоит до тех пор, пока работает.
>Ты можешь с уверенностью сказать, что настройки модуля и алгоритм работы реализованы корректно?
У меня две SPI шины - одна на 10 МГц, другая на 30 МГц. Обе имеют одинаковые настройки, за исключением скорости, и используют те же функции для отправки и приёма, разделённые spicarrier. так вот, на низкоскоростной висит несколько микросхем - с ними всё нормально.
У слейва на скоростной шине я отключил приём и оставил только передачу. Скрин с анализатора, слейв шлёт корректно.
Да алгоритм, вроде, немудрёный:
1) Мастер шлёт данные каждые 100мс, проверяя флаг от прерывания на чтение;
2) получил мастер прерывание, сперва чтение, потом передача;
3) го ту п1.
(там звездочки после инт были, двач их съел)
Потому что адрес char buf[] может быть невыравненным для инта.
На x86 работать будет, но медленнее.
>Нет. Не путай с выражениями a, там компилятор всунет умножение, если sizeof(*a) не степень двойки.
Так и вы вроде также говорите. Если размер - степень двойки, то вычисление адреса происходит через логический сдвиг влево shr, иначе через слоупочную mul.
> через слоупочную mul
Не такая уж она и слоупочная, latency три такта, и ту можно скрыть, считая в это время что-то другое. Алсо, вычисления адреса часто делается через цепочку add и lea, это тоже относительно быстро.
>>705243
> алсо такая хуйня возникает из-за того, что ЦПУ быстрее высчитывает адреса посредством битового сдвига
Нет. Одна из причин заключается в том, что процессор не читает каждый байт напрямую из памяти, он читаем блоками, и читает обычно в кэш. А у кэшей есть границы. И если твой дворд пересекает границу кэшлайна, то процессору фактически нужно делать две выборки из кэша (заодно и вероятность того, что данных в кэше не окажется возрастает вдвое), потом выкидывать лишнее и объединять результаты. На все это требуется время. А ведь кроме кэшей есть еще и механизм трансляции виртуальных адресов, где тоже есть границы и все перечисленные проблемы. Пересек границу страницы - пиздец, тормоза.
Выравненные данные от этих проблем избавлены, потому что и границы блоков кэша, и границы страниц - все это выравнено сильнее, чем может быть необходимо процессору. Например, кэшлайн 64 байта, а максимум, что хочет процессор с AVX - это 32 байта для всяких там vmovaps.
Если в конце есть что нибудь вроде \0 в строках — то берёшь размер указателя и итерируешь пока не найдёшь конец.
Если нет — никак.
пробовал такое:
-O0 -fno-delete-dead-exceptions,
но он всё равно вырезает нахуй
Там скорее надо не куки чистить, а localStorage. В консоле браузера скажи localStorage.clear() или, если жалко закладки и отметки постов, десериализуй localStorage.store из жсона, удали оттуда кэши всякие, сериализуй и запиши обратно.
>Так и должно быть?
В теории - нет, на практике - да. Суть в том, что компилятор не знает, что происходит в asm-коде, так что сохраняет переменные из регистров в память, а после - обратно.
Не знаю куда обратиться, думаю что здесь самое то.
В midnight commander, mcedit, некорректно отображает подсветку синтаксиса.
Именно что некорректно, а не выключена.
Например:
В самом конфигурационном файле Syntax, есть include c.syntax, в котором, например, int обозначен как yellow, но все что должно быть жёлтым или коричневым - белое.
Сделай статик ссылку на функцию/класс.
Если у тебя было x=c/10,y=c%10, то кунпелятор это заменит на одно умножение.
div() не эквивалентна паре x/y, x%y, если x<0 || y<0
Ассемблер сразу нахуй, пиши портабельный код.
>так что сохраняет переменные из регистров в память, а после - обратно
Вот кстати получил БИНАРНОЕ ДЕРЕВО с этой хуйни.
Им(конпеляторам) Родина дала более оптимальный апи64, юзай регистры сразу - не хочу, хочу из пустого в порожнее переливать.
А, кстати, забыл сказать ещё одну возможную причину. Учитывай, что компилятор может оптимизировать деление и остаток в более дешёвые битовые операции.
>Родина дала более оптимальный апи64
Ты про registercall?
http://ftp.altlinux.org/pub/people/mike/elbrus/docs/elbrus_prog/html/
На сайте АО «МЦСТ» появилась новость о доступности руководства по эффективному программированию на платформе Эльбрус; в нём также содержится глава с описанием системы команд «Эльбрус», ранее не публиковавшейся. Книга выпущена под лицензией Creative Commons (CC-BY 4.0) в форматах HTML (архив) и PDF;
> глава с описанием системы команд «Эльбрус»
Значит, можно написать свой компилятор? GCC или Clang сможет портироваться на эльбрус взамен их проприетарного поделия?
>Ты про registercall?
угу. не понимаю, почему нельзя сразу с регистрами работать. даже если аргументов дохуя, то и "свободных" регистров в х64 тоже предостаточно.
>даже если аргументов дохуя
Потому что их очень редко бывает дохуя. В конвенции вызовов x64 на винде передаются в регистрах до 4 целочисленных и 4 с плавающей запятой, в юнихах до 6 int и 8 fp. Этого более чем достаточно для большинства задач, т.к. при большем количестве параметров их обычно упаковывают в struct или объект, который в обычный регистр не влезет.
>то и "свободных" регистров в х64 тоже предостаточно
Если использовать больше регистров для аргументов, не останется места для того, что бы разложить по регистрам локальные переменные. При этом эти аргументы могут активно не использоватся (а если будут, то компилятор может их в регистр переместить уже сам).
Вообще, одна из самых важных причин, почему нет - представь оверхед от сохранения всех этих переменных из регистров, если тебе из той функции нужно будет вызвать другую, да ещё и не с теми аргументами. А такое сплошь и рядом. Так что оставь это для узконаправленных компиляторов вроде icc, которые в это таки могут; а для компиляторов общего назначения общепринятая конвенция будет лучше в большистве случаев, и нет смысла их плодить, как былые 32-битные.
> который в обычный регистр не влезет
Поэтому структуры компилятор отлично раскладывает по нескольким регистрам. Алсо вы тут обсуждаете ABI, но забываете о том, что ABI - это внешний интерфейс. Если функция не торчит наружу, или если торчит, но код собирается с LTO, тогда компиляторы на эту ABI не смотрят и могут творить лютую дичь.
Это директива
Исходник на 3*n байт длинее
>программирование под Эльбрус
Нахуя, если весь их маркетинг уже пару лет строился на том что они эмулируют х86?
Хрю хрю
Почему ничегоненужный? Нужный, но нахуя было делать ставку на дохлого коня? Пидораха - филиал Зазеркалья?
Что, кроме МЦСТ никуда больше трудоустроиться не удалось?
Ты бы хоть залогинился или трип-код завёл, чтобы всем было удобнее.
А ты чего так рвешься, перемога обернулась зрадой? Байкал вполне няшный, в отличии от дырявых буржуйских поделок.
Ну это ты зря. Главная вувузела предыдущих итераций Эльбруса - Бабаян - в своё время сгребла своих толковых студентов в охапку и свалила в Интел. Эльбрус делает тебя успешным!
Кофе носить, мамкины съебаторы на большее не способны.
Байкал - это и есть буржуйская поделка, готовые ядра MIPS и ARM со своим обвесом. Рашка в 90-е что-то там лицензировала для полного цикла производства - DEC Alpha, по-моему - но как обычно бабло освоила и нихуя не сделала.
>бабло освоила и нихуя не сделала
Ох уж это либирашье вретии1111 Вы там сюда со Швабра набижали что ли?
А что за Плеббит? Оттуда можно скачать свежие русофобские методички?
Нет, я агент США под прикрытием. Меня твоей мамаше внедрил лично Обама, от него у меня большой чорный хуй чтобы большой чорной струёй ссать в мытищинских подъездах. Но я его прячу в звёздно-полосатых трусах, так что не понимаю, как ты меня вычислил??
https://ru.wikipedia.org/wiki/Baikal-T1
>Baikal-T1 — процессор семейства Baikal, созданный российской фаблесс компанией Baikal Electronics с использованием двух 32-битных процессорных ядер P5600 архитектуры MIPS32 Release 5 от компании Imagination Technologies[1].
https://en.wikipedia.org/wiki/Imagination_Technologies
>Imagination Technologies Group plc is a global semiconductor and software design company, owned by the Chinese Canyon Bridge Capital Partners. With its global headquarters in Hertfordshire, in the United Kingdom its primary business is in the design of PowerVR mobile graphics processors (GPUs), networking routers (based on MIPS CPUs),[3] and its Pure consumer electronics division.
Это, блядь, очевидно НЕ БУРЖУЙСКАЯ ПОДЕЛКА.
Кстати поясните нахуя МЦСТ свой ёбаный путь, когда, например, VIA делает процы на x86-x64? В чём суть?
Проприетарщина не нужна.
Пять стадий:
1) Физлицам не продаем.
2) Нет компилятора.
3) Компилятор есть, но забагованный.
4) А документацию мы вам все равно не дадим.
5) Ебись оно конем.
>Кстати поясните нахуя МЦСТ свой ёбаный путь
Потому что делать что-то толковое задача не стояла с самого начала - у МЦСТ уже были свои наработки, и кого волнует, что они говно. Они в этом не одиноки, между прочим - IBM уже ГОДЫ не может найти лохов, которые возьмутся оптимизировать всякую ебанину типа NumPy и FFMpeg под SIMD их POWER8.
>Кстати поясните нахуя МЦСТ свой ёбаный путь, когда, например, VIA делает процы на x86-x64? В чём суть?
Вроде как в качестве отмазки говорили что-то про сертифицирование процессоров для нужд гос. структур. Для иностранных процов это дорого. Своё вроде-как дешевле.
Компилятор проприетарный, документация неполная.
Нет, документация скорее всего краткий обзор. Полезной инфы почти нет.
Весь IBM POWER держался на вывертах политики лицензирования Oracle с оплатой по числу процессорных сокетов. Пока можно было напихать больше всех ядер в один проц - всё у них было збс, сейчас x86 их по этому показателю обгоняет и малина накрылась. Такшта ничего толкового сейчас в этой архитектуре нет.
Ядро буржуйское. А поделка в целом НАША, гречневая.
>Кстати поясните нахуя МЦСТ свой ёбаный путь, когда, например, VIA делает процы на x86-x64? В чём суть?
Потому что хуй86 это легаси говно на легаси говне, и все ради того, чтобы запускать шиндошс. Выпускать RISC процессор на купленной архитектуре нормальное решение
А блядь, про МЦСТ вопрос, я думал про байкал.
У МЦСТ свой путь из-за Бабаяна, он обещал дать всем посасать и перегнать всех со своим эльбрусом, а дальше как обычно это превратилось в эпический долгострой. При этом МЦСТ это московский центр спарк технологий, то есть еще одна лиценизуемая хуитка, SPARC
Большая часть этого легаси - заморочки с кодированием инструкций и полей в специальных регистрах. Никого за пределами разработчиков ОС и компиляторов это не касается. В Интел сидят толковые разработчики - в 90-х было полно ебаной дичи типа load delay slot-ов и нерабочего register scoreboarding-а, но они такого не допускали.
Я вот сейчас листаю патенты Babaian-а 20-летней давности, и оказывается, что современный Эльбрус на них и основан. Вот только дать посасать он может только Малинке предыдущих поколений, вот незадача. И да, я Спарк перепутал с Альфой, извините.
>Никого за пределами разработчиков ОС и компиляторов это не касается.
А это ты зря. Выкрутасы с декодерами касались всех, кто хотел холодный и экономичный компутер. Говенный x87 касался всех, кому нужна была производительность с ПТ. Ну и т.д.
Если посмотришь на другие архитектуры, почти у всех инструкции фиксированной ширины 4 байта, в то время как у x86 75% инструкций в 2-3 байта (данные от 2011 года). Когда 4КБ кэш инструкций считался большим, это был крутой выигрыш. С декодированием инструкций в середине 90х всё было збс, были процы Cyrix, которые делали это без микрокода, иногда быстрее самих Интелов. Вот x87 был неудачным решением - его, походу, с калькулятора срисовали.
Да, у x86 компактный код, и это хорошо для кэша.
Да, декодеры ели большинство команд x86 без выборки микрокода.
Но, чтобы декодировать x86 в темпе 1-3 команды на такт, декодеры приходилось делать очень сложными, отсюда расход энергии.
Знаешь, ты, наверное, прав - на фото выделен декодер на 4insn/cycle, чтобы выполнять 20, как сейчас, он, наверное, должен разожраться, как свинья. Ещё я бы отметил миллипиздрическое число регистров: если в 80-х это было оправдано - у ARM2 весь АЛУ выглядел, как насадка на блок регистров, то сейчас это явная лажа. А вот было ли это причиной фэйла Атомов для мобил я даже гадать не буду, знаний не хватает :(
Просто интересно стало.
Да
Кстати, а можно как-то выборочно проэкспандить такую надмозговую хуету? Ну, чтоб адекватные макросы оставить.
Вот зачем соль на рану сыпешь? Я всеми силами пытаюсь отвлечься от токсичных мыслей про эту клоунскую систему. Мне, блядь, повестке в этой ебучей Украине пришла. А я ебал терять работу.
>Кстати поясните нахуя МЦСТ свой ёбаный путь, когда, например, VIA делает процы на x86-x64? В чём суть?
Потому что штеуд запретил навсегда лицензировать хуй86 кому бы то ни было еще кроме лизочки писечки и собственно via.
Если бы штеуд разрешал пилить х86 этим бы не то что МЦСТ этим бы 3/4 производителей чипов бы занимались шутка ли такое-то легаси.
Это копия, сохраненная 27 сентября 2020 года.
Скачать тред: только с превью, с превью и прикрепленными файлами.
Второй вариант может долго скачиваться. Файлы будут только в живых или недавно утонувших тредах. Подробнее
Если вам полезен архив М.Двача, пожертвуйте на оплату сервера.