LINUX.ORG.RU

Embedded C: вопросы на собеседованиях

 , ,


4

5

Я знаю, на лоре много сишников и ембедщиков. А проводящих собеседования на работу еще больше.

Так вот, уважаемые отбиральщики мужей у жен специалистов на должность embedded C developer, что вы обычно на собесах спрашиваете?

Особенно интересны вопросы по Сишке с намеком на завалить кандидата — неочевидные или на хорошее знание стандарта.

Знаю, в гугле такого много, но хочется от живых людей примеры, а не от индусов, пиарящих себя и свой сайт.



Последнее исправление: untitl3d (всего исправлений: 3)
Ответ на: +1! от Moisha_Liberman

В один не влезло.

(как же я ненавижу такие вещи, но в С иначе просто нельзя)

Угу, брателло, по ходу, тебя забыли спросить.

Дальше круче. Ну понятно что есть некий API системы. Чувак честно пытается поработать с UART_read()/UART_write(). Логично казалось бы. Но тут дураку дали стеклянный МПХ. Т.е., возможность при отладке заглянуть в сырцы реализации. Разбил, обрезался и предсказуемо обвиняет:

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

Не знаете. Точно. Если долб… (ясно, да?) не понятно, то это внутренности реализации в самой ОС и Вас, милейший, они и близко волновать не должны, т.к. Ваша задача проста – берёте предоставленный API и молча, задраив клюв, реализуете поставленную перед Вами задачу для конкретного процессора, я замечу и не факт что для другого будет точно такая же реализация. За свою реализацию, которая не касается внутренностей ОС, Вы по идее должны получить денег. А уж TI сами как-нибудь разберутся. Они продают своё железо и код миллиардами копий.

Дальше я просто комментировать не буду, материться начну.

Но всё же, исходя и «примера работы» вот этого оленя, я не могу не задать несколько вопросов.

Вот как так получается что при условии того, что люди уже и на Луне побывали (говорят) и на Марс железки отправляют, С++ кому-то нужен в эмбеддед? Не, ну серьёзно? Что, проблема того же Седжвика прочесть? Там и про списки и ещё много про чего написано? Почему этот дятел гундит что-то про С++-библиотеки, которые сожрут место? Он там заботится о «тактах» ниже, но он не понимает что данная ОСРВ по максимуму сделана возможно более лёгкой?

Второй вопрос – если всё-таки прочесть Седжвика, научиться писать очереди сообщений, положим, мы считываем с некоего датчика данные с какой-то периодичностью, складываем их в список и потом в сеансе связи с определённой переодичностью пуляем через радиоканал. Зачем здесь stl и/или бюст? Ну серьёзно? Задача на полчаса работы (лично пробовал), а память и ресурсы забиты каким-то говнищем. Смысл в такой трате ресурсов? Дать возможность работы неосиляторам С? Ну разве что.

В общем, эмбеддингу противопоказаны недо-С++овцы. Которые кроме слов stl и бюст не понимают что всё хорошо применять в меру. А уж в С можно и по-проще и по-круче. Да и нужно на вот таком железе.

Как-то вот так, в общем.

===========================

Господа. Просьба. Учитывая то, что ряд клоунов в данной теме не в курсе цен за работу по рынку, это представители наших соседей с территорий на юго-запад от Москвы, я настоятельнейшим образом прошу их не просвещать по данной теме. Эти калеки не в состоянии даже найти цены за работу на «всем известном сайте». Да, вот настолько они тупы и необучаемы. Хотели бы вы их видеть среди своих коллег? Не думаю. Кроме того, учитывая определённые реалии я так понимаю, скоро они сами на свет-газ-горячую воду-за деньгами полезут. «Оккупанты» (т.е., мы с вами) туда не горим желанием возвращаться и нести всё это с собой. Пока они на сайте не могут найти суммы, но это не под эмбеддинг же писать, рано или поздно найдут. И тут возникнет проблема у руководства. Как правило, в вакансиях пишут о наличии-отсутствии ДМС. Но беда в том, что в России по ветеринарии нет ДМС. А он тут только такой и нужен. =)))

@alysnix, чтобы не плодить комментов, я готов поведать Вам ту хладную историю почему тут эта чихуахерня (блин, никогда не мог это слово написать, но Вы поняли) заливается лаем и норовит мне в штанину вцепиться. Я не зря там выше фразочку ввернул про свою лёгкую скорбь насчёт сдетонировавших пердаков. Это оно мне так в любви объясняется. От ненависти до любви один же шаг… =))) Оно выделяет себе в кровь гормон «попаболил» едва мой ник завидит. =))) Правда, оно бывает изредка, когда мне не лень, посылаемо. Это уже привычно. Дежурные мелочи. =))) Если будет интересно, то напишу отдельным комментом, т.к. один чёрт снесут.

Moisha_Liberman ★★
()
Последнее исправление: Moisha_Liberman (всего исправлений: 1)
Ответ на: В один не влезло. от Moisha_Liberman

я делал прошче.

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

с++ нормальный язык и для ембеда. только не надо там использовать ничего из std и всяких там бустов, rtti и прочего.

то есть в данном случае на плюсах было написано все.

alysnix ★★★
()
Ответ на: В один не влезло. от Moisha_Liberman

С++ кому-то нужен в эмбеддед?

Не все делают сушилки для трусов на базе примитивных процессоров. Например в ПО Lockheed Martin F-35 Joint Strike Fighter 10 млн. строк кода. И оно написано, в большей части на с++. А теперь сними фуражку и подумай почему С не обеспечивает требований военных для misson critical систем на объемах в миллионы строк?

Djanik
()
Ответ на: комментарий от Djanik

А особо веселят байтоебы на Кортексах, у которых за всю жизнь размер проекта не превышал 10 тыс. строк. Но мнение имеют и про stl и про буст. Типичные селюки от программирование, за всю жизнь ничего сложнее какого то сранного радиомодуля со скоростью 60 байт не сделавшие.

Djanik
()
Ответ на: комментарий от Djanik

Например в ПО Lockheed Martin F-35 Joint Strike Fighter 10 млн. строк кода. И оно написано, в большей части на с++.

Видимо поэтому у них то пушка не работает, то радар из-за ошибок в ПО.

почему С не обеспечивает требований военных для misson critical систем на объемах в миллионы строк

С++ тоже не обеспечивает. Что наглядно видно на примере F-35.

monk ★★★★★
()
Ответ на: комментарий от Djanik

А особо веселят байтоебы на Кортексах, у которых за всю жизнь размер проекта не превышал 10 тыс. строк.

С таким подходом что Вы делаете в embedded?

monk ★★★★★
()
Ответ на: комментарий от Djanik

И оно написано, в большей части на с++

а по меньшей - на си… хотя я вообще противник си(ну если только драйвера и только ради пущей переносимости)…но аргументы ваши не очень.

alysnix ★★★
()
Ответ на: комментарий от monk

Я никакакого отношения к embedded не имею. Когда изучала С++ преподаватель рассказывал про различные сферы применения в промышленности. В том числе и про F-35 и марсоход. И почему С++ более применим для создания ответственных приложений.

Djanik
()
Ответ на: комментарий от alysnix

Аргументы не мои, это специалисты Lockheed Martin приняли такое решение. В программировании авионики они точно разбираются.

Djanik
()
Ответ на: комментарий от Djanik

Аргументы не мои, это специалисты Lockheed Martin приняли такое решение. В программировании авионики они точно разбираются.

ПО таких штук - это не только авионика и не столько авионика. может там вся авионика на си написана? там микс и си и плюсов. понятно, что плюсы сверху, си - снизу…как раз там, где авионика.

alysnix ★★★
()
Последнее исправление: alysnix (всего исправлений: 1)
Ответ на: комментарий от monk

Истребитель поставляется в 14 стран мира. Заказчикам было поставлено 700 истребителей пятого поколения F-35, эксплуатируются на 21 базе по всему миру. Обучено более 1460 пилотов и 11 025 единиц обслуживающего персонала, а общий налет F-35 превысил 430 тысяч часов».

Вряд ли заказчиков устроил самолет с неработающей пушкой.

Djanik
()
Ответ на: комментарий от Djanik

Я никакакого отношения к embedded не имею.

Ясно. Просто это реально отдельная ниша, когда лишние 10КБ кода — это более дорогая микросхема, а микросхем тех нужны миллионы. Поэтому байты важны.

И почему С++ более применим для создания ответственных приложений.

Если брать только C++ и C и считать, что все остальные языки внезапно пропали, тогда согласен. Но я бы ответственные приложения писал на Ada или, на худой конец, на Java. Вероятность навернуть всю программу случайной опечаткой всё-таки значительно меньше.

monk ★★★★★
()
Ответ на: комментарий от Djanik

Из-за пушки ввод в эксплуатация на 4 года отложили:

http://getbug.ru/oshibki-po-samogo-dorogogo-istrebitelya-f-35-zaderzhivaet-ego-vvedenie-v-ekspluatatsiyu-2019-goda/

https://nplus1.ru/news/2016/03/09/f35

Но это не очень помогло:

https://iz.ru/841003/2019-02-01/pentagon-vyiavil-kriticheskie-problemy-u-istrebitelia-f-35

https://inosmi.ru/military/20200312/247037487.html

Сообщается, что в самолетах F-35 были выявлены 883 ошибки проектирования. … Для 273 недостатков были найдены решения, но вопрос о них остается открытым, поскольку, для того чтобы приступить к их исправлению, требуется или больше средств, или больше испытаний.

Это уже не только про ПО, но заказчиков «всё устроило» только потому, что им деваться некуда.

monk ★★★★★
()
Ответ на: комментарий от monk

Но я бы ответственные приложения писал на Ada или, на худой конец, на Java.

на жабе ф35 упал бы во время сборки мусора.

alysnix ★★★
()
Ответ на: комментарий от monk

https://docs.oracle.com/javase/realtime/doc_2.0_u1/release/JavaRTSGarbageCollection.html

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

alysnix ★★★
()
Ответ на: комментарий от alysnix

А когда хорошие технические решения что-то решали? С явой проблема мирового уровня и она неисстребляема.

untitl3d
() автор топика
Ответ на: комментарий от alysnix

Так я и написал, что если доступна Ada, то лучше на ней. В любом случае это лучше, чем когда любая сервисная функция может вызвать UB и обрушить всю программу.

21 сентября 1997 г., во время маневров у побережья Кейп-Чарльз, Вирджиния , член экипажа ввел ноль в поле базы данных, вызвав попытку деления на ноль в диспетчере удаленной базы данных корабля, что привело к переполнению буфера , в результате чего вышли из строя все машины в сети, что привело к отказу силовой установки корабля.

monk ★★★★★
()
Ответ на: комментарий от monk

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

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

alysnix ★★★
()
Ответ на: комментарий от alysnix

В ада деление на ноль не вышло бы за пределы задачи, так как в ней нет UB. И «что привело к переполнению буфера , в результате чего вышли из строя все машины в сети» не случилось бы.

monk ★★★★★
()
Ответ на: комментарий от monk

В ада деление на ноль не вышло бы за пределы задачи, так как в ней нет UB

деление на ноль это аппартное прерывание, что перехватывается осью или рантаймом плюсов, и возбуждается плюсовый эксепшн. если его сам код не перехватывает, то сам рантайм его перехватит последним и будет печатать - division by zero и прекращать задачу. ну типа того. аналогично будет в аде.

задачу прервут по любому, что тут, что там.

alysnix ★★★
()
Ответ на: комментарий от alysnix

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

Судя по всему перехватили и затем сделали UB (переполнение буфера).

задачу прервут по любому, что тут, что там.

В Ада просто прервут. А в Си(++) перед смертью возможны произвольные действия. UB он такой.

Я в школе так операционку MacOS Classic угробил. В программе, которая должна была рисовать движущийся прямоугольник случайно вызвал KillRect дважды к одному и тому же прямоугольнику. А потом, на вопрос Abort/Continue трижды выбрал Continue. Всё повисло, после перезагрузки затребовал загрузочную дискету.

monk ★★★★★
()
Ответ на: комментарий от monk

А в Си(++) перед смертью возможны произвольные действия. UB он такой.

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

alysnix ★★★
()
Ответ на: комментарий от alysnix

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

Да, с делением на ноль всё хорошо. Проблема была, видимо, в UB в обработчике этой ошибки.

а какое-нить обращение по мусорному указателю - ошибочное поведение. работать в принципе можно…пока не возникнет неустранимая ошибка.

Обращение на запись по мусорному указателю может испортить данные любой другой части программы. Для надёжных программ это неприемлемо. Это всё равно что ОС без защиты памяти: любая программа может произвольным образом менять код ОС.

monk ★★★★★
()
Последнее исправление: monk (всего исправлений: 1)
Ответ на: комментарий от alysnix

Не. Я пас. =)

Дело даже не в том, что у меня, в моём сумеречном git лежит парочка своих ОС. Думаю, у любого эмбеддера их не по одной. =) Я свои строгал именно и чисто из академического такого интереса.

Я просто достаточно сильно озадачен по поводу «повторяемости». Т.е., сегодня может быть ARM, завтра MIPS, … В общем, ну его на фиг развлекаться лишний раз на ровном месте. Если мы говорим о чисто эмбеддед, то скорее всего у нас просто дохленький проц, на котором крутится несколько задачек по сбору данных/управлению, плюс какие-то коммуникации. Значит, нам тут нужно что-то мелкое и быстрое.

Самым общеупотребительным вариантом я бы назвал FreeRTOS. И достаточно гибкий проект и достаточно небольшой. Если без особых «наворотов», то там буквально три файла. С наворотами не намного больше. И писать ничего не нужно типа планировщика. Всё есть и портировано практически на все мелкие платформы. Просто реализуем своё функциональное наполнение и всё. В данном случае там всё на С, который по своей сути это портируемый ассемблер и не более того.

Стек TCP/IP так же есть, если он внезапно понадобится. В общем, если не хочется делать лишнюю рутинную работу и долго трахаться с портированием в дальнейшем, то самое оно.

P.S. Ну а про использование абстрактных типов данных (ADT), если уж они действительно понадобятся в проекте для каких-то целей, то это к Седжвику. Там всё расписано. И ни каких stl и бюстов.

Moisha_Liberman ★★
()
Последнее исправление: Moisha_Liberman (всего исправлений: 1)
Ответ на: комментарий от alysnix

Да. В том-то и проблема.

UB - это вообще пугалка от плюсов. в плюсах все смешано в одну кучу - неустранимые ошибки и ошибочное поведение.

В плюсах именно из-за переусложнённости механизма экспешонов такой звиздец и творится. Если в сях дёрнул функцию, она либо что-то сделала, либо возвратила код ошибки и потом, если нужно можно посмотреть чё там за errno, а дальше уже решить падать или исправлять (это если мы говорим про Linux), то в плюсах не будешь в try-catch каждый отдельный вызов функции оборачивать. Как правило, оборачивают группу вызовов и получаем что где-то в пределах этой группы упало, а где именно не ясно, дебажить надо.

Если уж совсем «по-правильному» (чисто примера ради!), то даже printf(); имеет возвращаемое значение и, если мы его хотим проигнорировать, то по идее, надо записать (void)printf(); В случае, если printf(); вернула бы отрицательное значение, я мог бы просто вывести текущее значение errno, которое сказало бы почему у меня не сработал вывод.

На практике да, именно так ни кто не делает, но эта возможность синтаксически есть и в коде она включается куда как проще чем в плюсах.

На плюсах тоже можно так, но тогда смысл плюсов?

С перехватом (маскированием) сигналов тоже просто. На раз-два можно сказать. По сути, тот же SIGFPE это просто одно из состояний процессора. Надо смотреть откуда оно в коде прилетело. И вообще откуда в коде для эмбеддеда взялось деление на ноль. Как правило, на контроллере ему просто неоткуда взяться. Ну нет там каких-то суперсложных вычислений и данные, находящиеся в обработке именно на контроллере всегда проходят валидацию. Даже если система основана на QNX и, собственно, реалтаймовая и не эмбеддед вовсе.

Если говорить о других случаях UB, то это как правило, недостаточно тестированные случаи. Тут TDD в помощь и инструментальные средства. Нарваться на проблемы можно, но это крайне сложно.

По поводу Ada ни чего не скажу. Единственная контора, которая его использует из мне известных, это Пентагон и там чего-то всё не особо весело, судя по «результатам». =))) Думаю, здесь не в языке дело.

Moisha_Liberman ★★
()
Ответ на: Да. В том-то и проблема. от Moisha_Liberman

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

просто надо ставить флаг компиляции -fno-exceptions, и тогда все эксепшены и все что с ними связано, снимает как рукой.

проблемы остаются только там, где явно делают throw, catch, тогда это становится ошибкой компиляции. эти места над переделать. но у тех, кто понимает, таких мест и нет.

alysnix ★★★
()
Ответ на: комментарий от alysnix

Возможно.

просто надо ставить флаг компиляции -fno-exceptions, и тогда все эксепшены и все что с ними связано, снимает как рукой.

Ну, если задача – получить из С++ голый С, то в принципе можно и ексепшоны убрать и вообще «писать на С++ как на С». Но я лучше предпочту «писать на С с ООП» (на С можно даже с ФП писать и тоже до некоторой степени). В конце-концов, классы до некоторой степени можно заменить структурами с callback-функциями (указателями на функции) и жить с этим спокойно.

В С++ напрягает то, что его стандарт разнесло за последние годы так, что у меня подозрения что из-за синтаксического сахара у С++ уже синтаксический диабет начался. А вся эта беда требует своей поддержки в рантайм, так что и рантайм тут тоже жиреет.

С тонкий, лёгкий, стройный. Собственно, это и подкупает.

Moisha_Liberman ★★
()
Ответ на: Возможно. от Moisha_Liberman

А вся эта беда требует своей поддержки в рантайм, так что и рантайм тут тоже жиреет.

Это говорит о том что про С++, его стандарт и «жирный» рантайм тебе Сара по телефону напела.

anonymous
()
Ответ на: комментарий от anonymous

Таки да! =)))

Это говорит о том что про С++, его стандарт и «жирный» рантайм тебе Сара по телефону напела.

Открываем стандарт С++ (pdf, ISO/IEC JTC1 SC22 WG21 N 3690 Date: 2013-05-15) Смотрим. 1374 страницы ровным счётом.

Открываем стандарт С++ (pdf, Working Draft, Standard for Programming Language C++ Document Number: N4868Date: 2020-10-18) Смотрим. 1857 страницы.

Теперь смотрим С. C99 – WG14/N1256 Committee Draft — Septermber 7, 2007 ISO/IEC 9899:TC3. 552 страницы. Ажно 2007 год.

C11 – December 2, 2010 ISO/IEC 9899:201x 696 страницы. 2010г.

За семь лет и так «крупненький» стандарт на С++ раздуло на 483 страницы. За 3 года тоненький С раздуло на 144 страницы. 483/7 = 69 и 144/3 = 48 условных страниц в год.

Вам таки надо было слушать тёту Сару, которая всегда говаривала – «если Ви таки не хотите щоби Вас разнесло, не надо жрать после шести и курить возле бензоколонки».

Moisha_Liberman ★★
()
Ответ на: Таки да! =))) от Moisha_Liberman

И дальше.

Так же я могу позавидовать Вашей… незамутнённости. Видимо, Вы действительно не читали стандартов. И на С++ в том числе.

Потому что фраза собеседника типа – *просто надо ставить флаг компиляции -fno-exceptions, и тогда все эксепшены *

Говорит о том, что собеседник зачем-то – Ну, если задача – получить из С++ голый С, то в принципе можно и ексепшоны убрать

Получает из С++ С. Просто потому, что механизм exceptions является неотъемлемой частью стандарта С++. Откройте первую же ссылку в данном комменте и убедитесь в этом на стр. 386 в разделе 15. Exception handling. Можете открыть и вторую ссыль, там тоже про экспешоны есть.

И нет. Ни какие бредни упоротых преподов из местечковых ГПТУ, которе кто-то и зачем-то назвал ВУЗами, здесь не канают.

Moisha_Liberman ★★
()
Ответ на: И дальше. от Moisha_Liberman

Как люди делают.

Пробежимся по известным проектам.

LittleKernel. Операционка, на основе которой гугль теперь пилят свою Фуксию. Изначально создана именно для embedded, в отличие от fuschia, которая вообще-то не для него.

Уже упоминавшаяся в треде FreeRTOS. Опять С. А дальше – uOS/II, rt-thread, smx, contiki (это по большей части для IoT, но ядро тут С, проверял лично), TKkernel. Это только то, с чем я работал и работаю лично. И это всё С, знаете ли…

Moisha_Liberman ★★
()
Ответ на: Как люди делают. от Moisha_Liberman

Наконец.

Про runtime я даже и говорить ничего не буду, и так времени чуть больше на Вас потратил, чем Вы заслуживаете. Если Вы не понимаете что сказанное в стандарте должно поддерживаться в рантайме в более-менее полном объёме, то это уже значит что мне нужно заниматься Вашим пост-ГПТУшным образованием. А мне лень. Честно. Да и денег от Вас я за это не получу.

Пардон, но нет. Вы ненужны ни для чего, касающегося embedded programming, ни в каком количестве. Вам просто незачто платить денег, даже оскорбительных для нормального спеца 50-60т.р. в месяц.

Точка, пожалуй.

P.S. Сознательно разделил на несколько сообщений. Можете комментировать любое. Вперёд.

Moisha_Liberman ★★
()
Ответ на: Таки да! =))) от Moisha_Liberman

Это говорит о том что про С++, его стандарт и «жирный» рантайм тебе Сара по телефону напела.

За семь лет и так «крупненький» стандарт на С++ раздуло на 483 страницы. За 3 года тоненький С раздуло на 144 страницы. 483/7 = 69 и 144/3 = 48 условных страниц в год.

Я ему про рантайм, он мне про стандарт. Понимать написанное можем? А мойша, или слабо? И поэтому 69 станичек в год это уже капец как сложно?

Говорит о том, что собеседник зачем-то – Ну, если задача – получить из С++ голый С, то в принципе можно и ексепшоны убрать

Ути пути, мойша играется в демагога. Если из С++ убрать эксепшоны, то останется еще куча вещей.

Но если пойти по твоему пути и начинать говорить всякую херню, то вот тогда можно утверждать что ни одна прошивка для МК на С не написана, сигналов, то и нетути. А стандарт С их требует. Раздел сам найдеш? Также стандарт требует что б функция printf умела форматировать в том числе и float/double. Cознавайся мойша, не выключаешь поддержку форматирования плавучки? Все ташишь в МК ? Или как, трепло?

Да и денег от Вас я за это не получу. Конечно не получишь, я ж не лошара какой-то, которому можно тупо по ушам ездить.

anonymous
()
Ответ на: комментарий от anonymous

Ну, коль скоро Вы такой...

бестолковый и неугомонный, давайте я Вас ещё в дерьмецо ткну. Мне не сложно, да и сборка идёт долгая.

Итак.

Я ему про рантайм, он мне про стандарт.

Хмм… Т.е., батенька, Вы в глазоньки изволите долбиться, как я правильно понимаю? =))) Я же Вам по-русски написал:

Если Вы не понимаете что сказанное в стандарте должно поддерживаться в рантайме в более-менее полном объёме, то это уже значит что мне нужно заниматься Вашим пост-ГПТУшным образованием.

Судя по Вашим же цитатам, вроде видели. А выводов не, сделать не смогли?

Вот сейчас под руками аналог уже упомянутого в треде сс1310, правда, сс1352. Там я не могу глянуть, т.к. там просто нет отдельного С++ рантайма.

Давайте глянем на х86_64. Система тщательно и со вкусом оптимизирована по ключам компиляции и линковки. Так что, откосить тут не получится. У нас стандартными runtime libraries будут glibc и libstdc++.

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

Чтобы любой заинтересованный мог повторить то же самое, я всё буду делать по шагам.

Итак, С-вариант:

/* gcc 1.c -o 1 */
#include <stdio.h>

int main() {
	printf("%s\n", "Hi, anonymous woodpecker!");
	return 0;
}

C++ вариант:

/* g++ 2.cpp -o 2 */
#include <iostream>

using namespace std;

int main() { 
    cout << "Hi, anonymous woodpecker! =)))" << endl;
    return 0;
}

Теперь смотрим ldd 1:

        linux-vdso.so.1 (0x00007ffff4bc7000)
	libc.so.6 => /lib64/libc.so.6 (0x00007f94545e5000)
	/lib64/ld-linux-x86-64.so.2 (0x00007f94547d2000)

Далее смотрим ldd 2:

        linux-vdso.so.1 (0x00007ffd633d4000)
	libstdc++.so.6 => /usr/lib/gcc/x86_64-pc-linux-gnu/11.2.0/libstdc++.so.6 (0x00007f68f7068000)
	libm.so.6 => /lib64/libm.so.6 (0x00007f68f6f2f000)
	libgcc_s.so.1 => /usr/lib/gcc/x86_64-pc-linux-gnu/11.2.0/libgcc_s.so.1 (0x00007f68f6f14000)
	libc.so.6 => /lib64/libc.so.6 (0x00007f68f6d5a000)
	/lib64/ld-linux-x86-64.so.2 (0x00007f68f72b0000)

С какого перепою здесь болтаются вызовы сишного рантайма? Да с такого, что плюсовый рантайм, как я и сказал выше, на нём и основан. И его поэтому использует.

Но мы же хотели на размер рантайма посмотреть? Извольте:

C++:

-rwxr-xr-x 1 root root 2165312 июл 30 14:49 libstdc++.so.6.0.29

C:

-rwxr-xr-x 1 root root 1794208 авг 18 22:39 libc-2.33.so

То есть, даже при условии того, что С++ рантайм использует С-рантайм, один пень размеры плюсового рантайма больше. Какие были бы размеры, если бы плюсовый рантайм жил сам по себе и без сишного, я Вам сразу могу сказать – приплюсуйте к плюсовому сишный и возрадуйтесь. Вот эта разница и есть «цена» Вашего плюсового стандарта. Потому как системные вызовы в Linux можно и на С спокойно сделать, а не как на С++ через анус.

Я могу даже больше сказать – именно из-за размеров сишного рантайма и появились такие альтернативные glibc проекты как newlib, uClibc, musl. Про плюсовый рантайм даже и не говорят, заметьте. Ну, по крайней мере, в трезвом уме и здравой памяти.

На ARM смотреть соотношения будем? =)))

сигналов, то и нетути.

Каких там сигналов нетути, бестолковый Вы мой? =))) Если прошивка написана даже с заменой glibc, то сигналы там будут. Если там использована иная библиотека и ясно сказано что она POSIX-compatible, то сигналы там тоже будут. Вот исходник от TI для сс13*/сс26*. Реализация сигналов в той же TI-RTOS отличается и от Linux-реализации и от FreeRTOS-реализации. Это просто у Вас мозгов нетути чтобы это понять.

Дальше.

Также стандарт требует что б функция printf умела форматировать в том числе и float/double. Cознавайся мойша, не выключаешь поддержку форматирования плавучки?

Скажите, Вы дурак от Бога или Вас таким жизнь сделала? =))) Не, ну серьёзно? А это ни чего что на контроллере считать с плавающей точкой что-либо, это махом быть уволенным? Ну просто потому, что это непроизводительный расход крайне ограниченных вычислительных ресурсов? Да и аппаратной поддержки операций с плавающей запятой в проце может не оказаться и тогда придётся считать всё в soft float. Нормально? Вы вообще в своём уме? =))) Может, Вам санитаров вызвать? Суровых и с галоперидолом?

Как Вас беспокоит наличие math.h, если в стандартной библиотеке реализация функций для работы с плавающей запятой есть и её ни кто никуда не убирал? Просто ею не пользуются. Ну, стараются не пользоваться, если только не дол… (не Вы лично) автор прошивки.

Вот например, поддержка операций с плавающей запятой для musl. Кто её отключает? Зачем? Вы где такой код видели, что у Вас родился такой идиотский вопрос? =)))

Из стандартной либы ничего не убирается. Это не эксепшоны из С++ выкидывать. =)))

P.S. Вы точно имеете какое-то отношение к программированию встраиваемых систем? А то у нас тут уже был один пОциент. Посмешила, да… =)))

Moisha_Liberman ★★
()
Последнее исправление: Moisha_Liberman (всего исправлений: 1)
Ответ на: Ну, коль скоро Вы такой... от Moisha_Liberman

Хмм… Т.е., батенька, Вы в глазоньки изволите долбиться, как я правильно понимаю? =))) Я же Вам по-русски написал:

Если Вы не понимаете что сказанное в стандарте должно поддерживаться в рантайме в более-менее полном объёме, то это уже значит что мне нужно заниматься Вашим пост-ГПТУшным образованием.

У тебя, мойшечка, непомерно раздутое ЧСВ. Вот Страуструп говорит, что с++ это язык с «zero cost abstractions» (гули, если непонимаеш). И вот поэтму-то именно что рантайм какраз таки НЕ ДОЛЖЕН поддерживать стандарт в более-менее полном объеме, а как раз таки НАОБОРОТ, в идеале в рантайме вообще ничего не должно быть, что не использует конкретная программа. Поэтому свое ценное мнение про то что кому и сколько должен рантайм засунь себе поглубже в …

А стандарт должен поддерживать компилятор (библиотека стандартная), фирштейн. Можешь своим скудным мозгом осознать разницу между компилятором(тулчейном) и программой (с или без рантайма)?

Вот тебе маленький пример:

//g++ ./main.cpp -o 2

#include <cstdio>

template<int N>
struct LoseCount {
    int moisha_suck_times() {return N*2;}
};

int main()
{
    printf("Hello Loser! Moisha suck %i times. \n", LoseCount<25>().moisha_suck_times());
    return 0;
}

$ ldd ./2
        linux-vdso.so.1 (0x00007fffc5992000)
        libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f5dc44d0000)
        /lib64/ld-linux-x86-64.so.2 (0x00007f5dc46b5000)

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

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

anonymous
()
Ответ на: комментарий от anonymous

Мало прочесть книгу.

Надо её ещё и понять. Чего Вы не удосужились сделать.

Показываю:

Вот Страуструп говорит, что с++ это язык с «zero cost abstractions» (гули, если непонимаеш).

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

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

Дословно:

What you don’t use, you don’t pay for. And further: What you do use, you couldn’t hand code any better.

Т.е., то, что Вы не используете (операции с плавающей запятой в моём примере выше), Вы не должны в коде платить за это. Не будет вызовов, накладных расходов. Однако, вторая часть фразы – для того, что Вы используете, лучше код не написать, как раз объясняет почему в runtime поддерживаются все необходимые сущности языка. Потому что лучше сущностей из стандартной библиотеки в случае их использования, Вы не найдёте.

Так что зачем было изобретать колесо заново, не ясно. С уже есть и делает ровно то же, что Страуструпу пришлось объяснять отдельно. Да, С++овцы частенько тупы неимоверно. Не отнять. =)))

И вот поэтму-то именно что рантайм какраз таки НЕ ДОЛЖЕН поддерживать стандарт в более-менее полном объеме, а как раз таки НАОБОРОТ, в идеале в рантайме вообще ничего не должно быть, что не использует конкретная программа.

То есть, в идеале, две наших программы на С++ должны иметь две разные рантайм библиотеки? Я Вас правильно понял? То есть, Вы настолько тупы, что утверждаете что каждая отдельная программа в моей или любой другой системе должна иметь свою, отдельную от других, рантайм библиотеку? Милейший, Вы ещё тупее чем я даже надеялся! =)))

На практике этого и не было и нет. Попытки кодерасить на чём-то похожем на С++ не в счёт.

перепутал рантайм и стандарт/реализацию стандарта.

Да Ви чьтооо? Теперь к Вашему говнокоду. =)))

Я понимаю почему Вы в «коде» на типа С++ использовали printf(). Тем самым Вы решили малость соптимизнуть и увернуться от созданной специально для Вас, Козлов, стандартной runtime library, т.е., от libstdc++ в нашем случае. Но тут же нарвались на стандартную runtime C library, libc.so.6. Вот про то и речь как раз. Как вы там ни выкручивайтесь, а от стандартной рантаймовской С-либы увернуться ой как не просто. =))) Да и смысла особого нет, с ней удобнее. Если не писать на С++ конечно и не изобретать колесо.

И да, как раз в стандарте прописаны эти самые cin, cout, cerr, которые Вы отказались использовать в своём говнокоде. Во второй ссылке, стр. 1379, параграф 29.4.3 Narrow stream objects и чуть ниже, но Вам это уже не поможет.

По поводу Вашего говнокода. Иногда я понимаю «Царя С++» (Царём С я его не называю, он сишник примерно как Вы С++овец).

Понимаете, за суржик, аналогичный продемонстрированному Вами, на собесах в более-менее серьёзную контору, Вас до дверей будут гнать ссаными тапками. И будут правы. Просто потому, что вот эта вот «разнузданная кодерастия», да ещё и с отключёнными эксепшонами, это признак того, что человек просто дятел новогодний. И он не в состоянии грамотно писать ни на С, ни на С++. Вы думаете что Вы увернулись от libstdc++, сунули вместо cout сишную printf() и молодец? Да нет, у Вас просто говно в коде. На С писать Вы не умеете, стандарт С++ не для Вас, С++овцев писан, вот и приходится выкручиваться. Тут всё понятно.

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

Не продолжайте пожалуйста дальше, я уже понял что Вы судак.

Moisha_Liberman ★★
()
Ответ на: Мало прочесть книгу. от Moisha_Liberman

мойша, ты в очередной раз обосрался, и вот этой вот простыней не прикроешся :) .

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

Ну и твое мнение про Сраутрапа - это показатель. Какая-то срань рязань пытается казаться умнее создателя языка программирования. П-ф-ф.

anonymous
()
Ответ на: комментарий от anonymous

Кисо обиделось? =)))

Ну утри слёзки, тупенькое… Злой дядя сишник пришёл и нассал в вашу песочницу? Бывает, чё. Жизнь жестока и несправедлива. И не всегда эксепшоны спасают. Особенно, если их ещё и отключить… =)))

Moisha_Liberman ★★
()
Ответ на: Кисо обиделось? =))) от Moisha_Liberman

Злой дядя сишник пришёл и нассал в вашу песочницу

злой дядя сишник пришел и обоссал себя на глазах изумленной публики. И самое печальное - он считает это нормой.

Ой, а что это, он еще и говно свое жрет.

Нет, это уже слишком!

anonymous
()
Ответ на: комментарий от anonymous

Дадада...

Понятно. По теме сказать нечего, вот и остаётся вопить «ты абасрался!!!11адын-адын». =)))

Ну стойте и вопите, мне-то что? Мне от Страуструпа детей не рожать. А в коде выше уже всё написано и другого не придумать. Инторнет-то всё же помнит… =)))

Впрочем… Про Страуструпа и макросы! Чуть не забыл! Извольте полюбопытствовать

Macros do not obey the C++ scope and type rules. This is often the cause of subtle and not-so-subtle problems. Consequently, C++ provides alternatives that fit better with the rest of C++, such as inline functions, templates, and namespaces.

Но тут есть опять проблема – кто-то в говнокоде выше наотрез отказался использовать namespace std. И кто же это мог быть? Кто у нас тут Страуструпа Родину не любит? =))) Ненене… Я Вас Родину Страуструпа учить любить не буду. =)))

Moisha_Liberman ★★
()
Последнее исправление: Moisha_Liberman (всего исправлений: 1)
Ответ на: Кисо обиделось? =))) от Moisha_Liberman

Ты слишком смешон. Хотя представляю, как ты это пишешь, и представляешь себя королем.

Обратись к психологу. Комплексы можно вылечить.

Каштан.

anonymous
()
Ответ на: комментарий от anonymous

Иэххх... Каштан...

Обратись к психологу. Комплексы можно вылечить.

С++ у психолога не лечится. Это вам, парни, к психиатору. Действительно, в вашем «исполнении» С++ это забавное недоразумение, затянувшееся на годы и изрядно перебаламутевшее индустрию. =)))

Moisha_Liberman ★★
()
Ответ на: комментарий от anonymous

Ты слишком смешон.

царь был потешным, а этот - унлое говно, которое даже не может осознать на какой вопрос/аргумент отвечает.

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

Значит когда с С надо влезсть в МК то неиспользование, например, флоатов - это крутое мастерство сишника. А когда я ему показываю подобный трюк с С++ оно ноет что это «не по правилам».

Короче, унылое, закомплексованное чмо.

anonymous
()
Ответ на: Иэххх... Каштан... от Moisha_Liberman

затянувшееся на годы и изрядно перебаламутевшее индустрию. =)))

опять рязанская рвань рассуждает про индустрию и «приличные» фирмы.

Откуда тебе знать что-то про индустрию и приличные фирмы?

anonymous
()
Ответ на: комментарий от anonymous

Вам не понять. Я и не надеюсь. =)))

Зато мне известно про ООП вообще ровно то, что о данной парадигме говорил некий Степанов Александр Александрович, по совместительству создатель STL, упомянутой так не кстати в данном треде:

«Я уверен, что ООП методологически неверна. Она начинает с построения классов. Это как если бы математики начинали бы с аксиом. Но реально никто не начинает с аксиом, все начинают с доказательств. Только когда найден набор подходящих доказательств, лишь тогда на этой основе выводится аксиома. Т.е. в математике вы заканчиваете аксиомой. Тоже самое и с программированием: сначала вы должны начинать развивать алгоритмы, и только в конце этой работы приходите к тому, что вы в состоянии сформулировать чёткие и непротиворечивые интерфейсы. Именно из-за этой неразберихи в ООП так популярен рефакторинг - из-за ущербности парадигмы вы просто обречены на переписывание программы, уже в тот самый момент, когда только задумали её спроектировать в ООП-стиле».

Я же вам убогим написал – хотя бы Седжвика потрудитесь прочесть, если упоротый в хлам препод вам про него ничего не говорил. Там про алгоритмы. Точно. Я сам читал. =)))

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

Мде… Не один я как выясняется уверен что ООП и, как следствие, С++ в рамках данного треда полное говно вызывает сочувствие. Да ещё и с таким «исполнением» как у вас… =)))

Там длинная статья, можно просто на цитаты растащить, ага. =)))

Moisha_Liberman ★★
()
Ответ на: Вам не понять. Я и не надеюсь. =))) от Moisha_Liberman

Зато мне известно про ООП вообще ровно то, что о данной парадигме говорил некий Степанов Александр Александрович, по совместительству

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

А может тебе Дейкстру процитировать про goto? Или сам найдеш?

Я же вам убогим написал – хотя бы Седжвика потрудитесь прочесть,

Читал Algorithms in C++, Parts 1-4: Fundamentals, Data Structure, Sorting, Searching. Отличная книга, рекомендую.

Мде… Не один я как выясняется уверен что ООП и, как следствие, С++

А вот разработчики gcc и clang/llvm уверены в С++. Поэтому повторюсь, мнение тупого ЧСВешника никому не интересно.

anonymous
()
Ответ на: комментарий от anonymous

Да где Вы и где С++? =)))

Вы мечетесь мелким бесом.

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

То Вы вместо стандартных namespace std и плавно вытекающего из него того же cout втюхиваете printf() чтобы не нарываться на свою же, С++-стандартную библиотеку и тут же вляпываетесь в сишную стандартную либу, не понимая что если уже есть сишная, то на фиг тогда нужна жирная плюсовая. Смысл изобретения этого колеса так и не ясен.

То Вы апеллируете к Святому Мнению Старуструпа насчёт «zero cost abstractions» и когда Вам объясняют что Страуструп дятел и до него уже всё было и работало, Вы оскорбляетесь – Какжи! Самжи! Старуструпжи!. Да он такой же дятел как и Вы, приходится констатировать. Только он пишущий, а Вы – пытающийся читать. Вы вообще зачем книги читаете, если органически не усваиваете там написанное?

То Вам говорят что сам создатель STL как-то не в восторге от ООП, но Вы этого типа «не поняли» и делаете вид что Вы там какие-то шиблоны жи использовали… =)))

У Вас в итоге получается я знаю что. Я бы это назвал «напёрсточное программирование». Кручу-верчу, чёта вымутить хочу. Вместо написания качественного кода, поддерживающего строгие реализации согласно стандартов (утверждённых именно комитетами по станадртизации языков, а не придуманных Вами только что и на ходу) Вы на ровном месте выкруживаете себе проблем. Показанный Вами суржик это вообще говнокод, а не С++. Даже близко. Нет там у Вас С++. С, кстати, тоже нет, но это не для средних умов – на С писать.

В общем, да. Чё только люди не придумают чтобы на С не писать. Просто 146%.

Moisha_Liberman ★★
()
Последнее исправление: Moisha_Liberman (всего исправлений: 2)
Ответ на: Да где Вы и где С++? =))) от Moisha_Liberman

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

мойша в 13:37

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

мойша в 11:27

Вот когда ты пиз…ш ? а мойша?

То Вы вместо стандартных namespace std и плавно вытекающего из него того же cout втюхиваете printf()

А тут мойша нам показывает свою очередную тупость. мойша! printf - это и часть стандарта С++. Или шо, для танкиста слишкам много букав? не дочитал?

anonymous
()
Ответ на: Вам не понять. Я и не надеюсь. =))) от Moisha_Liberman

Запретная любовь к «крестам» в embedded лечится тяжким трудом, покаянием и молитвой. Надо просто поставить человека перед фактом - вот те, мил чек, SDK c тулчейном, кодом и либами стандартной либы и стартапа, примером хелловорлда, описанием регистров контроллеров SoC. Где не будет экцепшенов, STL и т.п. Топящие за C++ просто не работали в этом поле и не прочувствовали специфику. Брать их и учить или ну его нафиг?

Был у нас Epson s1c3305 (для принтеров, наверное, сделанный, начальство нахватило по случаю). В либе не было даже работы с heap-ом, всяких malloc, calloc, free. Только статические блоки памяти, адреса которых генерились и прописывались define-ми. Но в стартапе вызывалась __init_heap, если указатель на нее не NULL. Пришлось самому писать работу с heap-ом. Где был бы плюсовый new без malloc-а, чтоб развести бодягу с объектами в хипе?

Та же песня и с Windows WDM драйверами ядра, UEFI, Linux. Нету там хипа, есть пулы памяти и свои функции для выделения блоков там. Любитель крестов может для начала написать свои врапперы для malloc и т.п. Нет ни одной функции стандартных либ в UEFI, это голый код с точкой входа DriverEntry, никаких экспортов и импортов DLL. Что сам написал, то и жри, а писать такое проще и понятнее на C.

Никакой обработки structured exception-ов. Если обычное приложение системы на try регистрирует обработчик catch и система присылает exception на обработку, то в embedded таких механизмов просто нет. Для WDM исключение= BSOD, для UEFI=зависание.

А разработчики ядра Linux дураки? Зачем, например, на C++ городить базовый класс «драйвер», наследовать от него свой драйвер со своими функциями-обработчиками, чтобы компилятор создал таблицу вирт. функций. Можно в C в несколько строк инициализировать структуру драйвера указателями на свои функции. Гораздо проще и короче.

bugs-bunny
()
Ответ на: комментарий от bugs-bunny

Надо просто поставить человека перед фактом - вот те, мил чек, SDK c тулчейном, кодом и либами стандартной либы и стартапа, примером хелловорлда, описанием регистров контроллеров SoC. Где не будет экцепшенов, STL и т.п. Топящие за C++ просто не работали в этом поле и не прочувствовали специфику.

Еще один ЧСВ-шник, который думает что прочитать даташит на атмегу8 это что-то запредельное для человека овоившего стандарт С++.

Если ты не так туп как мойша, то пойми простую вещь: в С++ можно точто также байтоё-ть как и в С, а если нет маллока (который тоже часть стандарта С++), то либо не пользовать его ваще. Работать на статическивыделенной памяти и плейсмент new. Либо так же как и на С сделать себе этот маллок (но пять же, по надоности).

А разработчики ядра Linux дураки?

А разработчики gcc дураки?

А пройдет лет 5-ь и в ядре появиться раст вообще. что тогда запоете?

anonymous
()
Ответ на: комментарий от bugs-bunny

Ну дык!

Запретная любовь к «крестам» в embedded лечится тяжким трудом, покаянием и молитвой.

В граните! =))) Кто б спорил-то… =))) Но тут, сдаётся мне в диспуте выше, ещё и определённый… особый такой… колорит примешивается. И он ни как не связан с С++, а с таким… особым отношением к жизни.

Нет ни одной функции стандартных либ в UEFI, это голый код с точкой входа DriverEntry, никаких экспортов и импортов DLL. Что сам написал, то и жри, а писать такое проще и понятнее на C.

В предшествующих UEFI стадиях (SEC, PEI, DXE) их тоже нет. Впрочем, UEFI runtime (да чтож такое-то, опять runtime) начинается в самом конце DXE, потом уже BDS идёт. Но и там плюсов нет, да…

А разработчики ядра Linux дураки?

Тсссс… Коллега! Тут где-то апологеты Страуструпа и прочих разработчиков clang/llvm бродят. Не говорите этого при них, я Вас умоляю… =)))

Moisha_Liberman ★★
()
Ответ на: комментарий от anonymous

С Вашими аналитическими спсобностями...

А разработчики gcc дураки?

И что с ними не так? Они бросили пилить gcc?!? Когда??? Почему новости на главной не висит?!?

Ччёрт, у меня аж глаз задёргался!

А пройдет лет 5-ь и в ядре появиться раст вообще. что тогда запоете?

Я Вас умоляю! Я бы не рисковал предсказывать результат умножения 2х2… Вы крайне сильно рискуете! Поверьте моему опыту! =)))

Moisha_Liberman ★★
()
Последнее исправление: Moisha_Liberman (всего исправлений: 1)
Ответ на: комментарий от bugs-bunny

Топящие за C++ просто не работали в этом поле и не прочувствовали специфику. Брать их и учить или ну его нафиг?

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

естественно везде эксепшены не использовались, rtti тоже, они в эмбеде не нужны.

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

и вы будете писать на плюсах, хоть с множественным наследованием.

каким образом на си работать со строками например? чтобы написать типа

string ls = «ssss» + some_other string + «hhhh»

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

alysnix ★★★
()
Последнее исправление: alysnix (всего исправлений: 1)
Ответ на: Ну дык! от Moisha_Liberman

Тсссс… Коллега! Тут где-то апологеты Страуструпа и прочих разработчиков clang/llvm бродят.

Ой, опять мойша пишет что хочет. А че разрабов gcc забыл? Так удобней прибрехивать?

anonymous
()
Ответ на: комментарий от anonymous
printf - это и часть стандарта С++. 

Дано: МК без экрана.

Какой printf, cout? Вместо него в либу могут воткнуть stub c чистой совестью, чтоб у вас только собиралось. Вы сначала запилите этот printf, чтоб куда-нибудь в UART строчил, притащите сами код _vsprintf или как его из другой системы. А потом пользуйтесь на здоровье.

bugs-bunny
()
Ответ на: С Вашими аналитическими спсобностями... от Moisha_Liberman

А разработчики ядра Linux дураки?

А разработчики gcc дураки?

И что с ними не так? Они бросили пилить gcc?!? Когда???

мойша, они его на С++ перевели. для сборки надо С++11 компилер. С они бросили. Или тебе прям все надо разжовывать?

anonymous
()
Ответ на: комментарий от alysnix

Стоп.

каким образом на си работать со строками например? чтобы написать типа

Три вопроса, если позволите:

  1. Есть ли в С строки?

  2. Является ли «работа со строками» определяющей для эмбеддинга? Если нет, то почему?

Moisha_Liberman ★★
()
Ответ на: комментарий от anonymous

Я задал не тот вопрос.

мойша, они его на С++ перевели. для сборки надо С++11 компилер. С они бросили.

Я задал вопрос – бросили ли разрабы gcc пилить С? Ненадо ничего придумывать. Итак, бросили они пилить С или нет? Волнуюсь. Жду ответа.

Moisha_Liberman ★★
()
Ответ на: Стоп. от Moisha_Liberman

Есть ли в С строки? Является ли «работа со строками» определяющей для эмбеддинга? Если нет, то почему?

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

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

в си есть строковые константы. и указатели на char. а также понятие си строки. и набор примитивов ля сравнения строк, конкатенации и все такое.

alysnix ★★★
()
Ответ на: комментарий от alysnix

каким образом на си работать со строками например

я за время работы на си понял, что конечный размер строки (на самом деле массива char) надо знать заранее или ты что-то делаешь не так

untitl3d
() автор топика
Ответ на: комментарий от alysnix

Не. Вот не соглашусь.

Про мобилы совсем не соглашусь. И с Nokia N900 работал и сейчас Sailfish OS именно что в кармане. В Seilfish/Aurora там вообще голый Linux с очень тоненькой прослойкой в виде Qt. Поищите, я писал на форуме.

Про ведроид даже молчу. Там ART/Dalvik это тоже прослойки, но слегка потолще, чем в Sailfish для Qt. А ядро так вообще собирается как линуксовое. И сырцы там тоже линуксовые, с некоторыми изменениями в части модулей ядра.

Так что, нет. Контроллеры сейчас это именно что контроллеры.

Moisha_Liberman ★★
()
Ответ на: комментарий от bugs-bunny

Дано: МК без экрана. Какой printf, cout? Вместо него в либу могут воткнуть stub c чистой совестью, чтоб у вас только собиралось. Вы сначала запилите этот printf, чтоб куда-нибудь в UART строчил, притащите сами код _vsprintf или как его из другой системы. А потом пользуйтесь на здоровье.

От чебурашка, а еще эмбеддером зовешся. Всего-то надо свою реализацию int _write (int fd, char *ptr, int len) слепить, что б плевалась байтиками в UART.

anonymous
()
Ответ на: комментарий от anonymous

Вы б зарегались?

А то я не знаю кого на … в игнор, короче отправить. Слишком тупы или слишком трусливы?

И да, где ответ на вопрос? Вопрос задан прямо. Ответ где? =)))

Moisha_Liberman ★★
()
Последнее исправление: Moisha_Liberman (всего исправлений: 1)
Ответ на: комментарий от anonymous

ЛОЛШТА?!? =)))

Всего-то надо свою реализацию int _write (int fd, char *ptr, int len) слепить, что б плевалась байтиками в UART.

А где же class UART { } и вот это вот всё? Почему не на С++?

Moisha_Liberman ★★
()
Ответ на: Вы б зарегались? от Moisha_Liberman

Вот когда ты пиз…ш ? а мойша?

И да, где ответ на вопрос? Вопрос задан прямо. Ответ где? =)))

Ну таки и где ответ на прямой вопрос?

А то я не знаю кого на … в игнор, короче отправить.

просто ты такое чмо, что с тобой ни один приличный регистрант не будет общатся.

anonymous
()
Ответ на: комментарий от untitl3d

я за время работы на си понял, что конечный размер строки (на самом деле массива char) надо знать заранее или ты что-то делаешь не так

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

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

в плюсах ты всегда прибьешь локальный указатель, всегда отпустишь мьютекс, и при этом напишешь красиво. и все такое.

alysnix ★★★
()
Ответ на: ЛОЛШТА?!? =))) от Moisha_Liberman

А где же class UART { } и вот это вот всё? Почему не на С++?

тов. прапорщик иди в жо.. , ой проспись.

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

anonymous
()
Ответ на: Не. Вот не соглашусь. от Moisha_Liberman

Так что, нет. Контроллеры сейчас это именно что контроллеры.

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

люто защищенный сотовый телефон.

люто защищенный сетевой коммутатор.

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

alysnix ★★★
()
Последнее исправление: alysnix (всего исправлений: 1)
Ответ на: ЛОЛШТА?!? =))) от Moisha_Liberman

А где же class UART { } и вот это вот всё? Почему не на С++?

ты бы поинтерисовался у крутого С эмбедера чего это он такой элементарцины не знает?

И да как там с ответом на прямой вопрос?

Вопрос напомнить?

anonymous
()
Ответ на: комментарий от anonymous

Я? Да никогда.

Пока я не увидел никакого С++ кода. Сорян. А вот нарушения стандарта у Вас – сплошь и рядом. Так что… Как Вы понимаете, вопрос не во мне…

Moisha_Liberman ★★
()
Ответ на: комментарий от anonymous

Извините.

с тобой ни один приличный регистрант не будет общатся.

По-моему, я так был резок и неловок… Больно жёстко задвинул? Но и Вы тоже хороши – должны же были бы знать что на вазелин, а уж тем более на любрикант, Вам надо таки ещё и заработать, как говорится… =))) И приходить со своим. =)))

Moisha_Liberman ★★
()
Ответ на: Я? Да никогда. от Moisha_Liberman

Вопрос:

ты бы поинтерисовался у крутого С эмбедера чего это он такой элементарцины не знает?

Ответ мойши:

Пока я не увидел никакого С++ кода. Сорян.

тов. прапорщик, ты совсем дурачек?

А вот нарушения стандарта у Вас – сплошь и рядом.

какого стандарта? какого пункта? Ась, балабольчик?

anonymous
()
Ответ на: А можно названия? от Moisha_Liberman

А то вдруг мне несколько знакомы данные изделия?

первый проект даже в вики есть :) остальные - закрытые, для органов

не не хочу светится.

alysnix ★★★
()
Ответ на: комментарий от anonymous

хорош ругаться-то вам всем. обменивайтесь знаниями.

когда-то каждый не знал ничего и только писался/какался в пеленки.

…а теперь - смотри-ка - по клавиатуре долбит, и всяко разно что-то там делает.

alysnix ★★★
()
Ответ на: Извините. от Moisha_Liberman

По-моему, я так был резок и неловок… Больно жёстко задвинул?

Да, коза сильно блеяла.

anonymous
()
Ответ на: комментарий от alysnix

мокша тут я. а вы стало быть..оттуда?

палево … ;)

anonymous
()
Ответ на: комментарий от anonymous

[code] От чебурашка, а еще эмбеддером зовешся. Всего-то надо свою реализацию int _write (int fd, char *ptr, int len) слепить, что б плевалась байтиками в UART. [/code]

А fd это stdout? Или надо получить из open("/dev/ttySx… для UART? Т.е. еще немного файловой системы к себе притащить. Ну не считая, что и UART неплохо бы для начала завести и/или драйвер экрана. Так вот этого всего производитель BSP по умолчанию не предложит.

bugs-bunny
()
Ответ на: комментарий от alysnix

Да тут бессмысленно.

С ними точно обмениваться нечем.

Я понял что за контора. =))) Не, критиковать не буду, т.к. ну… просто не буду. Хотя, сказать есть что. Не без этого.

А вот по поводу месторождения этих «умников», я уже задолбался «намекать». Честно. Там это специфичное всё.

Moisha_Liberman ★★
()
Ответ на: комментарий от anonymous

Такой костыль каждый дурак слепит. fd там ниочем. Появится ФС - придется переписывать.

С atmega8 дел не имел. Имел с MIPS3912; ARM Samsung S3C2450, NXP LH7A400; Модификация Z80 под SoC; Epson s1c3305.

А либу для работы с FAT12/16/32 c LFN и разными локализациями я написал в своей жизни. Занимала около 50КБ, таскали по проектам. Там скорее были функции типа fopen/fwrite - FSOpenFile(«/EEPROM/data.bin»…).

bugs-bunny
()
Ответ на: комментарий от bugs-bunny

Тссс... =)

Ну я же не зря предложил через класс решить проблему. Не упрощайте же им жизнь, ну что же Вы делаете… Они же сейчас поймут что к чему. И… перестанут жрать говно писать на С++.

Moisha_Liberman ★★
()
Ответ на: комментарий от bugs-bunny

Такой костыль каждый дурак слепит.

Вот именно, что каждый дурак. Поэтому то я и удивился когда ты начал пересправшивать как такое сделать.

fd там ниочем.

fd там, как дань уваженя стандарта, «знаток».

Появится ФС - придется переписывать.

ваще не вопрос, появитьяс ФС - учтем и её.

anonymous
()
Ответ на: комментарий от anonymous

Ну? Чё прищурились-то? =)))

Сидят такие… грустные… =)))

какого стандарта? какого пункта?

Да хоть вот – Embedded C: вопросы на собеседованиях (комментарий)

И да, как раз в стандарте прописаны эти самые cin, cout, cerr, которые Вы отказались использовать в своём говнокоде. Во второй ссылке, стр. 1379, параграф 29.4.3 Narrow stream objects и чуть ниже, но Вам это уже не поможет.

Какого именно стандарта? А ссылки там выше есть. Да хоть вот этого – стандарт С++ (pdf, ISO/IEC JTC1 SC22 WG21 N 3690 Date: 2013-05-15)

Вы прямо так спрашиваете как будто хотя бы какой стандарт на свой С++ хотя бы читали и как будто Вам есть какая-то разница чё Вам нарушать, ага… =)))

ваще не вопрос, появитьяс ФС - учтем и её.

ЛОЛШТА?!? Что Вы собрались там «учитывать», о умишком скорбный, если для рассмотрения локальная ФС vs. коммуникации (а UART это коммуникации) Вам необходимо помнить что локальаная ФС это всегда, во всех случаях безопасна для контроллера. А коммуникации всегда, во всех случаях небезопасны для контроллера. Как в Вашу пустую черепную коробку попыталась закрасться сама мысль о том, чтобы хотя бы как-то объединить мясное и молочное в одной посуде локальную ФС и коммуникации (тот же UART) в пределах одного класса?!?

Вас где, в каком ГПТУ так изуродовали попытками научить хоть что-то программировать-то, а? Кто тот титан мысли, которому надо поставить памятник ввиду Вашей полной и окончательно-бесповоротной бесперспективности в части ембеддинга? =)))

Moisha_Liberman ★★
()
Последнее исправление: Moisha_Liberman (всего исправлений: 2)
Ответ на: комментарий от anonymous

Попрошу без намёков...

На Вашего коллегу… Если можно. Хотя, кто Вас, анонимов разберёт. Вы все на одно… лицо. И не лицо. Можно сказать, групповая жопа форума. =))) Уж на групповой интеллект не тянете точно. Просто 146%.

Moisha_Liberman ★★
()
Последнее исправление: Moisha_Liberman (всего исправлений: 1)
Ответ на: Ну? Чё прищурились-то? =))) от Moisha_Liberman

мойша, ты походу даже не прапрщик, ты ефрейтор из сройбата.

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

Давай, последний шанс даю исправиться. Конкретную фразу которая в обязательной форме обязывает меня использовать cout?

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

The C++standard library also makes available the facilities of the C standard library, suitably adjusted to ensure static type safety.

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

необходимо помнить что локальаная ФС это всегда, во всех случаях безопасна для контроллера.

Вот это надо в гранит. Цитаты самовлюбоенных придурков.

anonymous
()
Ответ на: комментарий от anonymous

Бууугага! =)))

У меня не получилось донести

Это когда же Вы пытались мне что-то там донести? После того, как я Вас носом ткнул в Embedded C: вопросы на собеседованиях (комментарий) в тот факт, что при использовании в libstdc++ именно сишного рантайма, возникает вопрос нахрена же тогда нам плюсовый рантайм? И Вы до сих пор «несёте»? Да Вы уже даже и обтечь бы должны были бы за столько-то времени. Даже если не поняли что именно я Вас и окатил в исходниках.

Ещё раз – плюсовый рантайм при таких раскладах не нужен вместе с Вами. Извините, но это факт.

Конкретную фразу которая в обязательной форме обязывает меня использовать cout?

Конкретная фраза – это стандарт, мой недалёкий друг (и «друг» здесь не более чем обращение). Либо Вы пишете код с соблюдением его требований и положений, либо Вы говнокодите на суржике из плюсов и С, не понимая ни того ни другого ни даже нахрена этот стандарт вообще написан. Зачем тогда его писать было? Чтобы аноним с ЛОРа от него царственно отмахнулся что ли? Ну тогда да, плюсы на фиг не нужны. И со стандартом и без и вместе с Вами. До кучи, чё уж тут мелочиться-то…

Вот это надо в гранит. Цитаты самовлюбоенных придурков.

Да. Вы тут на много уже наговорили. Только хронический дятел типа Вас не понимает что загрузка того же образа ОС (или прошивки, похрен) с локальной ФС всегда намного безопаснее чем загрузка ОС или прошивки по сети. Если не мучать Вас долго, а по привычке опять погрузить в говно (не понимаю – Вы мозохист чтоли?), то вот Вам описание потенциальных проблем с загрузкой по PXE. Что Вам нужно обеспечить для безопасной загрузки:

  1. Устройство должно выполнить DHCP-запрос.

  2. DHCP-сервер должен назначить валидный IP и дать корректные параметры PXE. Т.е., кто-то (Вы что ли?) должен гарантировать что DHCP-сервер именно безопасный и даёт корректный адрес. И параметры PXE те, что надо, а не Вася-the_hacker их Вам присунул.

  3. Устройство должно по UDP с сервера TFTP слить себе образ. Кто (Вы что ли?) гарантирует что этот образ валиден и не был подменён на сервере или не было угона по пути? Да ни кто этого на все 146% не может этого гарантировать.

Таким образом, Вы даже не понимаете что подписанный образ, предназначенный для загрузки с локальной ФС и образ, загружаемый по сети для дальнейшей загрузки в устройство, это образы с различной степенью доверия. Я даже не говорю о дополнительных методах, применяемых в локальном устройстве для обеспечения безопасности. TEE там всякие, Trust Zones, корни доверия там всякие (root of trust) и прочее, что известно специалистам. Это в Вашем случае для Вас будет настолько сложно, что окончательно вынесет Ваш межушный ганглий и оставит тараканов в Вашей голове без дома. Я буду нести моральную ответственность за их гибель на холоде и сквозняке, продувающем Вашу голову через уши. =)))

Moisha_Liberman ★★
()
Последнее исправление: Moisha_Liberman (всего исправлений: 1)
Ответ на: Бууугага! =))) от Moisha_Liberman

Либо Вы пишете код с соблюдением его требований и положений, либо Вы говнокодите на суржике из плюсов и С, не понимая ни того ни другого

В С++ заботятся о совместимости с С именно для того, чтобы можно было писать как на С если в каком-то случае это удобнее…

Ничего такого нет, чтобы использовать С функции в С++. Вся STL по возможности не переизобретает своё, а использует С функции если они есть…

fsb4000 ★★★★★
()
Ответ на: комментарий от fsb4000

Да это-то понятно.

Тут посыл с моей стороны был несколько иным. Если посмотреть на слова Степанова (выше там я привёл ссылку на небезызвестную статью), то написание кода для прошивки сводится к двум вещам:

  1. Продумываем (проектируем!) алгоритмы. Ну, например, того же обмена данными. Что нам там понадобится – очередь? Список? В общем, определяем что именно нам нужно.

  2. Реализуем их.

Всё просто. И ни какого С++. По сути, я добивался ответа на вопрос – нужен ли С++ для случая вполне себе небольшой кодовой базы проекта. Я даже приводил примеры самих по себе ОС (выше было) с которыми работал и видел как они устроены изнутри. Там по большей части опенсорс.

Мои подопытные так и не осилили в этом признаться. При этом использовали суржик прямо на ровном месте, в упор «не замечая» того, что жирнющий плюсовый рантайм в таком случае не требуется.

Это блестяще характеризуется поговоркой – чё только не придумают чтоб на С не писать. Ну, собственно, и всё.

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

Moisha_Liberman ★★
()
Последнее исправление: Moisha_Liberman (всего исправлений: 1)
Ответ на: Бууугага! =))) от Moisha_Liberman

Это когда же Вы пытались мне что-то там донести?

Ты шо укурок, совсем мозги пропил, в предидущем сообщении. Я прям кусок из стандарта процитировал.

Повторить?

Вот пожалуйста, все для имбецилов:

The C++standard library also makes available the facilities of the C standard library, suitably adjusted to ensure static type safety.

Да. Вы тут на много уже наговорили. Только хронический дятел типа Вас не понимает что загрузка того же образа ОС

как всегда, любимый премчик демагогов, натануть сову на глобус и не принимать во внимание контекста. А контекст, то был про копеешные контроллеры и про вывод( ВЫВОД) данных в уарт. Про получение данных пока разгавора не было. Зато мойша себе придумал, сабе ответил.

с локальной ФС всегда намного безопаснее чем загрузка ОС

тут мы видим, как очередной раз обосравшись, мойша стараеться прикрыть свои кучи портянками текста.

А куда же делась вот эта категоричность:

необходимо помнить что локальаная ФС это всегда, во всех случаях безопасна для контроллера.

А, засранчик? как это так за пол часа «всегда, во всех случаях» скромненько превратилась в «намного безопаснее»?

anonymous
()
Ответ на: Да это-то понятно. от Moisha_Liberman

При этом использовали суржик прямо на ровном месте, в упор «не замечая» того, что жирнющий плюсовый рантайм в таком случае не требуется.

Ах тыж врунишка. «Не заметили». Тебя же этим рантаймом в твою ефрейторскую морду и ткнули. А теперь оказывается, это ты всегда так говорил.

anonymous
()
Ответ на: комментарий от anonymous

Вы по обыкновению несёте херню.

и не принимать во внимание контекста.

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

А куда же делась вот эта категоричность:

А она ни куда и не девалась. Если бы Вы знали что именно скрывается за всеми остальными латинскими буковками которые я там написал, Вы бы даже не думали насчёт того, что локальная ФС всегда и в любом случае безопаснее чем загрузка ОС или прошивки по сети. Даже если учесть то, что буковки, значения которых Вы не понимаете, разительно отличаются от PXE.

Но да, Вам не дано. Вы и с С++ не нужны, в «безопасности» Вы на хрен не нужны тем более.

Moisha_Liberman ★★
()
Последнее исправление: Moisha_Liberman (всего исправлений: 1)
Ответ на: Проверяем. =))) от Moisha_Liberman

мойша, ну нехорошо же так врать :)

Мои подопытные так и не осилили в этом признаться. При этом использовали суржик прямо на ровном месте, в упор «не замечая» того, что жирнющий плюсовый рантайм в таком случае не требуется.

Твоя цитата №1

Вот сейчас под руками аналог уже упомянутого в треде сс1310, правда, сс1352. Там я не могу глянуть, т.к. там просто нет отдельного С++ рантайма.

Давайте глянем на х86_64. Система тщательно и со вкусом оптимизирована по ключам компиляции и линковки. Так что, откосить тут не получится. У нас стандартными runtime libraries будут glibc и libstdc++.

Твои цитвты из поста по ссылке.

И где же тут про суржик, про то что С++ рантайм оказывается необязателен?

Мойша - мелкая крыса.

anonymous
()
Ответ на: Вы по обыкновению несёте херню. от Moisha_Liberman

А она ни куда и не девалась.

девалась, девалась. жучара.

А что там, кстати. уже осознал убогонький, что printf входит в стандарт С++? или еще стандартом тебе по твоей крысиной морде повозить?

anonymous
()
Ответ на: комментарий от anonymous

просто ты такое чмо, что с тобой ни один приличный регистрант не будет общатся.

Я как-то пообщался. Ну не знал 🤣

Потом подпись поставил, что просто «пустомеля с ЧСВ»

А чё молчим-то? Тут «Аврору» на бета-тест предлагают, и, вроде, даже мобильное устройство выдают! (комментарий)

Привёл мне с «умным» видом ссылку на устаревшую информацию с сайта МТС. И задвигал, что смартфонов с VoLTE на рынке трудно найти - всего несколько штук. Дефицит лютый.

Он эксперт в вопросах, а я серверный олень.

Пустомеля есть пустомеля.

fornlr ★★★★★
()
Последнее исправление: fornlr (всего исправлений: 1)
Ответ на: комментарий от jhonathan

Макос классик

Сургут

Что не так? В школе у нас были в одном классе Pentium 60 и 90 и с турбо паскалем, а в другом Macintosh c Mac OS 7.6 и Think Pascal (прикольная штука с автопереносом строк по синтаксису).

monk ★★★★★
()
Ответ на: комментарий от jhonathan

84-го года? Посмотрел, они при выходе стоили $2,500. Думаю это стоимость дома.

Так в школу они где-то в 96-м попали. Думаю, к тому моменту подешевели. Хотя наличие CD-ROM и звука на макинтошах у нас было, а на пентиумах нет. Преподаватель рассказывал байки, что на макинтошах бесконечное количество точек на дисплее (аргументировал тем, что на DOS/Windows есть putpixel, а на макинтошах нет, а круг запрашивает вещественные числа для центра и радиуса). И каталоги там можно было прятать, сделав имя " " и прозрачную иконку :-).

monk ★★★★★
()
Ответ на: комментарий от monk

Преподаватель рассказывал байки, что на макинтошах бесконечное количество точек на дисплее (аргументировал тем, что на DOS/Windows есть putpixel, а на макинтошах нет, а круг запрашивает вещественные числа для центра и радиуса).

:))) А он хорош!

lv ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.