Pull to refresh

Comments 86

buxley,
А сколько строк кода в движке Хабра?
Сколько строк текста всего написано на Хабре в виде постов?
на Хабре примерно 120к постов и 7.5млн коментов (моя кривая выгрузка). количество строк не считал
road vehicles — Does the source code of the software for a high-end car contain on average around 100 million lines of code? — Skeptics Stack Exchange
Один из комментариев:
Ford has said that the F150 pickup has 150 million lines of code.

According to the New York Times:

Twenty years ago, cars had, on average, one million lines of code. The General Motors 2010 Chevrolet Volt had about 10 million lines of code — more than an F-35 fighter jet. Today, an average car has more than 100 million lines of code.

So, even if the car isn't particularly high end, it could have that many lines.

According to Embedded Systems Security: Practical Methods for Safe and Secure Software (2012):

One of the first embedded systems within an automobile was the 1978 Cadillac Seville's trip computer, run by a Motorola 6802 microprocessor with 128 bytes of RAM and two kilobytes of ROM.…
In contrast, even the lowest-end automobile today contains at least a dozen microprocessors; the highest-end cars are estimated to contain approximately 100 microprocessors. With infotainment systems running sophisticated operating systems such as Microsoft Windows and Linux, the total embedded software content can easily exceed 100 million lines of code.

Если верить подчеркнутому тексту, при подсчете приплюсовали всё, что могли, включая исходные коды Windows и Linux. :) Правда, насчет Windows у меня есть сомнения.

Если они посчитали к автомобилю все строки того, что там крутится в мультимедиа на андроиде, то это ни о чём сравнение. Тогда уж и строки кода на стороне всяких серверов, которые это обслуживают, можно плюсовать. Интересно сколько кода именно участвуют в непосредственном управлении в реальном времени.

В следующем посте закидывал картинки. habr.com/ru/company/itelma/blog/475576/#comment_20896408
Если вам интересно именно непосредственно управление (именно функциональный минимум без которого задача не решается) — смело это все на 20 делите…
Нда, Хабр что-то неторт совсем становится :(
Вот соглашусь. Мало того, что в статье ни строчки технической информации, да к тому же ещё и явная ложь. Ну не может быть в авто столько кода. Даже со всеми тестами и прочей обёрткой. Просто потому, что чтобы код писать нужны программисты. А на них нужно тратить деньги. Можно легко сравнить бюджет IT у MS и у конторы типа Jeep. А дальше делаем выводы:
или у Jeep потрясающе дешевые программисты.
или крайне неэффективный код, написаный copy-paste
или Jeep не делает современных автомобилей
или у них весь код куплен и общий для всей автоиндустрии
или статиситка в статье — брехня.

Склоняюсь к последнему.
В статье есть ссылки, откуда данные. Если у вас есть ссылки на другие данные — предоставьте.
Это вы серьезно? Вот, например, пруф Но не на сайт производителя, без объяснения, что и как подсчитывалось. Ну да, взяли Linux, установили пару библиотек и собственный код — получилось 100500 миллионов строк.
Согласен с вами, что пруфы местами слабенькие, а местами оооочень слабенькие. Но хоть какие-то. То есть не «из головы», а проведена минимальная оценка публикаций на эту тему. Как я писал в комментах ниже, я бы с удовольствием посмотрел на качественную аналитику от доверенных экспертов. Возможно, частично, что-то проясниться из обсуждения здесь. (например, количество строк кода в движке Хабра).

А статья 2007 года Манфреда Броя "Engineering Automotive Software". — из рецензируемого журнала.
Ну не может быть в авто столько кода.
Есть мысль, что дело во множественном заимствовании. Код для нового авто не пишут с нуля, как это возможно делали для Шаттла, Хаббла или F-35, всё таки каждый из этих проектов уникален настолько, что заимствовать можно что-то фундаментальное, да и то, с большой осторожностью. А автомобилей много, код постоянно заимствуется, и наверняка обрастает разного рода #ifdef CAR_MODEL. Т.е. например, модуль управления круиз-контролем написан так, что поддерживается вообще весь модельный ряд, надо только дефайном при сборке выбрать модель авто. Но это не точно.
там есть ещё такой весёлая штука как MISRA которой не умеют пользоваться, и не критичные рекомендации принимают за ошибки и всеми силами исправляют, в итоге из кода вычищаются все switch-case, даже тривиальные функции дробятся на десяток таких и обвешиваются вообще всеми возможными проверками во всех ветках (даже там где именно переменная не используется) и прочий ад в стиле «заставь дурака богу молиться».
А почему бы и нет? Иначе зачем там такая рекомендация.
Си исходник нейронки до MISRA пара сотен строк, несколько десятков килобайт
после — сотни мегабайт или гигабайт.
Быстродействие тоже катастрофически падает (а это не та задача где допустимо кадр просчитывать часами и днями).
Одна из причин — нельзя использовать указатели, но константы нельзя передать через стек т.к. его не десятки мегабайт. В итоге все весовые коэффициенты захардкожены в тексте программы, да да все десятки миллионов того же resnet50.
Другой пример — нельзя передавать функцию по указателю, в итоге всё обрастает копиями одного и того же кода с разными параметрами, для 3х3 ядра по 27 каналов, для 7х7 ядра по три канала и тд и тп.
И всё из за невнимательного чтения стандарта в котором сказано что в именно таких исключительных случаях не обязательно соблюдать. Стандарт то хороший, но компании не хотят из за возможных юр проблем и на фоне «растерзания Тойоты» как это называют японцы вообще не хотят чтоб были любые предупреждения или даже hint и рекомендации ЛЮБОГО стат анализатора.
UFO just landed and posted this here
как и ответил выше каментом
habr.com/ru/company/itelma/blog/475448/#comment_20880038
да именно на стыке юристов, социума и варнингов анализаторов к стандарту они боятся последствий. А оптимизировать по быстродействию как-то надо даже если стандарт под это не заточен вообще.
Я считаю что это ещё один способ экономической войны — MISRA-C как способ не пускать никого в юр поле в стык индустриальной имплементации ML.
То есть вы склоняетесь к copy-paste? Попробую разрушить такую теорию.
Представьте себе, что где-то в середине такого кода находят критичный баг. Как его править?
Находим баг, правим, прогоняем тесты по всему поддерживаемому модельному ряду, отзываем авто, бесплатно перепрошиваем. Но это сценарий очень серьёзного провала. Не понимаю, что изменится, если тот же критичный баг вы найдёте при любом другом подходе проектирования. Факт в том, что чаще всего авто от модели к модели не имеют настолько разительно разницы, что появляется необходимость писать всё с нуля. Поэтому я предположил, что код заимствуется. Если есть заимствование запчастей (даже между различными вендорами), почему вы исключаете заимствование кода внутри хотя бы одного вендора? Да я и как бы не настаиваю, сказал же, что это не точно.
Проблема начнётся на стадии «правим». Для того, чтобы обойти весь код, сделанный copy-paste, надо много времени. Это деньги. Бюджет, в пересчёте на единицу строки кода, небольшой. Выходит, что:
либо ошибок мало, потому, что программисты талантливые
либо ошибки не правят и машины едут забагованные
либо число строк в статье брехня.
Я опять склоняюсь к последнему.
UFO just landed and posted this here
Наверняка, считают не кол-во строк «актуального» кода, который будет скомпилирован, а размер всего дерева с кучей 3rd-party, legacy и прочего балласта.

Что-то из разряда «сделали систему распознавания знаков — посчитали строчки кода всей OpenCV».

Подозреваю, что больше половины — просто код одной или нескольких OS

Ещё сверху один или несколько браузеров, и готово.

UFO just landed and posted this here
не верится, кажется в авто происходит двойной учет.
софт изолирован и работает на сотне разных контроллеров, но использует одни и те же стандартные библиотеки. Если несколько стандартных библиотек умножить на кол-во контроллеров то так и получится много строк.
UFO just landed and posted this here
Вот Вы сейчас описали 98% проектов на которых мне довелось поработать :D
— Помнишь, Маша, в меня стреляли, я при смерти был, а ты со мной всё время была? А помнишь, когда я обанкротился и денег совсем не было, а ты все равно рядом была? А первый мой инфаркт? Ты ж всё время от меня не отходила. Знаешь, что я думаю?
— Что, дорогой?
— Что ты, Маша, мне несчастье приносишь!
Я как-то предложил в компании поощрять тех, кто смог добиться сокращения количества строк кода. Там меня на смех подняли. Зато сейчас одно и тоже в коде пять раз делается разными способами потому, что 5 разных человек писали и каждый свою функцию хочет использовать.
А в советское время на космических проектах премии лишали, если у тебя в программе находилась функция, которая уже написана в проекте, а ты ее не использовал.
Немного некорректное сравнение. Это так же, как сравнивать количество строк кода в Вашем доме. Навигация — полноценный Линукс на борту, Мультимедиа — еще один девайс на Линуксе. Кода, отвечающего за сам функционал автомобиля (управление двигателем, кузовной электроникой, активной и пассивной безопасности) — не так уж и много. Это я, как automotiv разработчик в недавнем прошлом говорю. А так — да. Залить во все компоненты фирмаврь — до суток по CAN уходило. Сейчас немного по другому делают…
ЗЫ: Пока писал, комментариев к статье еще не было. Опоздал.
Я бы тоже с удовольствие посмотрел на качественную аналитику с разделением различных систем: что в движке, что на фарах, что на прикуривателе, а что на автопилоте…
Вот прям в строках не скажу, про объемы бинарников: контроллер двигателя / коробки — единицы мегабайт флеши, сотни килобайт ОЗУ. Больш'ая часть из этого — таблицы коэффициентов и параметров режимов. Да, софт для них не пишется, а рисуется (матмодели в Симулинке или закрытом фирменном ПО) с последующим синтезом в Си код. Боди (кузовная электроника): 1 — 2 мегабайт флеши, разбросанные по нескольким контроллерам. Мелочевка всякая — килобайты. А вот медиасистемы всякие, со встроенной полноценной ОС — это код самой ОС и приложений…
UFO just landed and posted this here
А какие, кстати, есть альтернативные метрики? Колмогоровская сложность? «Удельная плотность алгоритмических смыслов»?
Альтернативные метрики чего? Качества, сложности, отказоустойчивости, количества функций, удобства поддержки, удобства кастомизации, скорости…?
Размера проекта, проделанной работы.
На флоте тоже мерятся «водоизмещением», хотя этот параметр ой какой кривой.

Я отлично понимаю, что и в пару килобайт можно впихнуть то, что индус на гигабайт не сделает.
То, что считать строки кода — это глупо, согласен на 146%. А вот про сравнение кода на Python и C — я б не был так категоричен — зависит от требований и приоритетов.
UFO just landed and posted this here
UFO just landed and posted this here
Чтоже там за строки такие… сколько приходилось переписывать с питона, перла, R… правда не на С, но на С++, строк не намного больше становилось… Если отбросить строки с "{}" то +- такой же объем, за такой же функционал, но при этом производительность выростала на порядки. Правда в R коэффициент был похуже, там всё-таки было много особенностей с лаконичными конструкциями.
Кардиостимулятор, конечно.
Предлагаю к подсчёту количество строк, например, в ядре KolibriOS
и для справки указать в какой размер файла они транслируются :)
Прошивка ауди s4 от 97 года легко читается в ida. Даже баг находил. Какие там 100млн. Понимаю, что речь про современные авто, но всё же…
А вы добавьте Android Auto, например.
Android Auto как раз скорее всего немного добавляет. По сравнению с самостоятельными системами со своей навигацией и мультимедиа.

Расскажите-ка, как это в Windows XP Service Pack 1 кода меньше, чем в NT4?
Учитывая, что каждый сервис пак 100% собирается из того же дерева исходных кодов, что и основная операционная система ??? Инфа 100ка


Про микобактерий тоже интересно. Весь днк можно одной очень длинной строчкой закодировать. А можно каждую пару на отдельной строке. Сравнение интересное, но явно некорректное — как сравнивать яблоки и апельсины

Там Windows XP два раза встречается, причём с разным кол-вом SLOC.
ДНК/РНК в *.fa формате содержит 70 символов в строчке. Не помню с чем точно было это связано.
Но в принципе да… считать строчками код… вот ведь бред. Банальное Си-шное (для Паскаль/Дельфи — «begin») переносить открывающую фигурную скобку на новую строчку или нет весьма меняет их количество.
Когда у создателей управляющей программы очередного спутника (ну не помню, какого, даже чьего) остались 730 свободных байт оперативной памяти, они добавили программу стабилизации по звёздам.

Когда было (случайно) обнаружено проникновение во внутреннюю сеть MS и за злоумышленником наблюдали в течение месяца (впрочем, тщетно), комиссия в составе АНБ, ФБР и прочих заинтересованных ведомств сделала вывод, что в исходные коды готовящейся к выпуску новейшей ОС Windows 7 скорее всего не было внесено изменений. Потому как необозримы.
Потому что с точки зрения кода нарисовать кнопочку гораздо сложнее, чем посчитать тригонометрию.
Это вы про Андроид в медиа панели что ли?
Количество строк кода в современном автомобиле..
в сферическом автомобиле в вакууме. Лада — современный автомобиль? Сколько в нем кода? А в китайском Geely? Очень желтый заголовок.
Там давно уже куча точно таких же деталей сторонних производителей, типа условного Bosch, как и везде. Ну или да, Итэлмы… Кстати, интересно, на какие марки они еще делают электронику…
Беру Ладу, втыкаю диагностический проводок в ноут с hdd на пару терабайт, профит достигнут, лада будет на 1 месте!

имхо, такой подход ничуть не хуже, чем пруфы с кворы, не указано сколько символов в строках.
Если я залью в Arduino скетч Blink в среде ArduinoIDE из-под Windows 10, я смогу заявить, что количество строк кода в моей Arduino равно количеству строк кода в скетче, ArduinoIDE и Windows 10 вместе взятых?
Да, а также вы будете достойны уважения, месье.
Статья крайне не информативна! Не хватает сравнения кода в футбольных полях и размахах крыльев Airbus!
П.С.: А если на одном компе поднять виртуалку, то кода получится в 2 раза больше :)
Статья: «В компании трудится около 2500 сотрудников, в том числе 650 инженеров. „
Открываю вас же сайт: “350 инженеров, 1800 сотрудников».
Как так, где математика не сходится?

P.S. Личные впечатления о вашей продукции не очень…
UFO just landed and posted this here
И как оно помещалось в 72 кб?

Хм, на фото распечатки по папочкам разложены (я насчитал 17 штук). Если предположить, что весь код — это одна такая папочка, а остальное — это, например, предыдущие версии, распечатки тестовых прогонов, документация, или еще что-нибудь, то все должно поместиться.
Ну что вы все про код, в самом деле? Вы лучше расскажите про те направления, где нужно разрабатывать уникальное железо, без которого автономный автомобиль не поедет. Например, про радиолокационные датчики на диапазон 77 ГГц и про то, сколько проблем приходится решать разработчикам антенных систем для этих датчиков. А проблем там, реально, очень много…
Количество строк — это не показатель. Это может быть еще тот говнокод. А вот Ф-22 — это истребитель 5-го поколения.
Полностью согласен. Количество строк кода — не предмет для гордости.
Гордится нужно интересными разработками и людьми, что этими разработками занимаются.
UFO just landed and posted this here
Тут вспоминается история о том, как Тойота включила в прошивку мультимедиа-центра всем известный curl, в полном соответствии с лицензией упомянула автора, а потом недовольные водители стали бомбардировать Даниеля Стенберга просьбами помочь им настроить GPS или переключить язык на иврит.
Смысл сравнивать число строк — если в современном автомобиле как и в современном боинге как и в F-35 они не людьми написаны. До конца 90-х когда автогенерации не было еще можно было вот так прямо сравнивать.

По динамике можно сравнивать — число строк в среднем удваивается за 2 года.

Из пруфа про фейсбук:


Clarification: The new count includes the entire git repository: data, binaries, third-party and all.

Ну так если считать — закинул npm в гит и каждый второй фронтендер над милионными по строкам проектами работает

Ой, это же ваши ЭБУ нынче в ладах стоят? Ну, которые с ошибками P0327, дёрганными переходными режимами и прочими радостями?
Я знаю, что всё в деньгах, но всё же — зачем настолько всё печально?
Дичь какая то из разряда «ваши волосы станут шелковистее на 146%».
Что считается строкой, как учитываются циклы, почему за большое количество строк палками никого не побили, ведь чем меньше строк тем (скорее всего) программа более логична занимает меньше памяти и быстрей работает. с другой стороны если бы мне платили за количество строк кода я бы тоже каждый знак писал на отдельной строчке и циклы бы не использовал

Согласен. Чем больше кода — тем больше багов. Баги нам не нужны. А нужны фичи. Вывод? При прочих равных очень круто отсекать от когда все лишнее и оставлять только нужное ) как скульптору.

Вы часом не родственник Маяковскому? =)
Никому не платят за строчки кода, поэтому эта метрика и работает. Правильно сказать, что строчек написанных на языке А будет больше, чем на языке Б и один программист пишет в 2-3 раза меньше строк, но эти числа не отличаются в разы в обычных проектах, на этом и основывается модель оценки стоимости проекта COCOMO, которая до сих пор является одной из самых точных.
С таким количеством кода машине тормоза не нужны — пормозить будет ПО, простите за каламбур =)

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


Количество строк кода — бредовая метрика. Рекомендую использовать ее только для сравнений "Apple versus Xiaomi", но только вне ресурсов для энтузиастов, т.е. вне Хабра.
Количество строк ASM кода — метрика, имеющая некоторый развлекательный смысл и уместна для околотехнического флуда на околотехнических ресурсах.
Современный автомобиль, в смысле его электроника, состоит из нескольких разрозненных (но связанных посредством CAN) модулей с контроллерами в единицы мегабайт флеша и сотни килобайт RAM. Чтобы запихнуть в них стопицот триллионов строк кода, необходимо создавать настолько чудовищный код, насколько я некомпетентен даже предположить. Естественно, что оптимизация кода истребителя или лунохода несопоставимо лучше, тогда как у автомобильных модулей на первом месте унификация и отсюда некоторая избыточность, при которой неиспользуемые в конкретном автомобиле функции программно отключаются при конфигурировании. Например, парктроники спереди и сзади поддерживаются в принципе и обслуживаются каким-то кодом, но если они не установлены, то будут программно отключены. Туда же круиз и тому подобное.
Единственное место в автомобиле, где реально много кода, это "магнитола" с условно-полноценной операционной системой, но хотя формально это верно является частью автомобиля, передергивание все же налицо.

Всё зависит от того, как считать.
Например, если взять медиаустройство автомобиля — то это уже весь Андроид плюс еще миллион — пять на всякие там приложения внутри… Добавим сюда еще код для разных компонентов, датчиков, AI, если есть, управления двигателем и тд. Вполне может быть меньше шатла. Но если выкинуть всё то, что автомобилю не надо для успешного передвижения по асфальту, то хорошо, если останется даже пятая часть от этого объема кода…
Код windows занимает 50млн строк. Объем получаемых файлов под 15 гигабайт. Код авто 100млн строк. Объем прошивок в машине суммарно во всех контроллерах от силы мегабайт 10. Если брать некую среднестатистическую, а не Теслу. Ну магнитола на андроиде 12млн строк -это самый большой элемент. Как так может выходить?
Здесь говорится, что фб имеет 65+млн строк, но в гуглопруфе на него говорится, что в нём 20млн. Нестыкуется.
Сам понятие " строка кода" — штука очень расплывчатая.
Как посчитать асмовскую строку вида mov al,15h это понятно.
А вот как следут считать строку на бейсике, ну чонить типа банального input f, который интерпретируется в стопицот машинных операций, причём интерпретируется интерпретатором (ну или компилируется компилятором и компонуется линкером) который содержит ещё миллион строк кода.
Или вот ещё — строку на яве например как считать?
Или… ну вы же уже меня поняли, да?

В общем, информация как бы это сказать — ни о чём совершенно. Не в строках кода надо считать сложность программмных продуктов. А уж аппаратно-программных так и тем более.
Sign up to leave a comment.