Несколько лет назад поставщик компиляторов Keil (теперь принадлежит ARM) поместил объявление в Embedded Systems Programming magazine (позже известный как Embedded Systems Design, а сейчас embedded.com) о своем новом компиляторе: COBOL для 8051.
Это была шутка, и размещена она была в апрельском номере. Какой смешная и абсурдная идея продукта! COBOL для встраиваемых систем? И COBOL для 8051! Я позвонил президенту компании и поздравил его с отличной шуткой.
А он ответил мне, что они получили запросы на поставку!

Этот пример характеризует определенные подходы в выборе языка для встраиваемых систем. Ожидания оказываются важнее реальности.

Вы не можете прочитать Slashdot или подобные веб-сайты, не увидев дискуссий о языках как есть. Является ли D новейшим отличным способом для написания кода. Или это Свифт? Я все время получаю письма от людей, желающих получить информацию о разработке микропрограммного обеспечения в C #. Не редкость услышать от кого-то, что весь мир движется в сторону Java, и те, кто этого не делают, рискуют навеки отстать.

Что же мы имеем на самом деле? В мире встроенных систем в первом приближении используются только два языка: С и С ++. Данные Embedded.com показывают основной язык, используемый его читателями (я не смог заверстать картинку, обращайтесь к оригиналу, С порядка 60%, С++ порядка 20% в период с 2005 по 2013 с незначительными отклонениями — п.п.).
Как ни удивительно, но С++ никак даже не догоняет С.

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

Меня однажды пригласили помочь с тонущим проектом в Швеции, который делали на C ++. Я думал, что язык был обоснованно выбран для данного приложения. Но почему был сделан именно этот выбор? Вице-президент компании сказал мне, что он прочитал в Business Week, что C++ позволяет ускорить разработку и облегчает повторное использование кода, так что он настоял на его применении.
В фирме было 40 разработчиков, занятых в проекте и все они, за исключением недавнего выпускника, не имели никакого опыта объектно-ориентированного программирования. Оставшиеся 39 пытались научиться по ходу работы. Это путь к катастрофе. Они получали навыки, продвигаясь сквозь проект. Все было бы в порядке, если бы продукт не предназначался для поставки.

С занял это пространство на уже 30 лет, и нет никаких признаков, что он уходит. Он представляет наилучший выбор в данный момент. Я хотел бы, чтобы мы могли перейти к Аде, или, еще лучше, к СПАРКу. Но этого не произойдет, пока не будет доступно достаточное количество обученных инженеров.

Как Вы думаете, С и С ++ с нами навсегда?

Комментарии (31)


  1. OberonForGood
    02.12.2015 17:35
    -8

    Надо просто всех вокруг обучать Оберону со второго класса школы и через некоторое время ситуация изменится.

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

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


    1. amarao
      02.12.2015 18:31
      +7

      Что мне даст Оберон из того, что не даст Раст, Си, python и хаскель?

      Ещё один язык для которого нужно стопятьсотмиллиардов библиотек? Ещё один синтаксис с ещё одной гениальной идеей, которой Нигде Больше Нет, так что deal with it?


      1. ignat99
        02.12.2015 19:29
        -2

        Библиотеки все есть в A2 (стабильно работают поверх XP, поверх Darwin, Linux, Unix, Solaris не так стабильно из за отсутствия разработчиков — это я строго про OS A2, про Блек Бокс скажут другие специалисты).

        Актив оберон вам даст Обозримость кода всей операционной системы одним специалистом и то забытое чувство, которое люди испытывали, начиная делать драйвера под Linux в 1999 году. A2 даст вам мягкий реал тайм и все «новомодные» фишки GO, которые были взяты из Актив Оберона. Так же есть возможность построения проектной работы в лучших традициях САПР HDL языков (а это стоит многого). Точнее возможность быть первопроходцем в этом направлении. Как Линус 24 года назад примерно.

        Правда до популяризации решений на основе Актив Оберона среди широких масс нужно подождать 5-10 лет, либо не ждать и быть пионером.

        IMHO


        1. amarao
          02.12.2015 21:48
          +6

          В ответ на «есть все библиотеки» мне хочется человека сильно обидеть.

          Вот есть там библиотека для работы в openstack neutron? А для управления 4ым xen'ом через через низкоуровневые вызовы? (Аналог xenctl). А библиотека для загрузки видео с youtube'а? А интерфейс к libvirt? А библиотека для работы с UDEV'ом? А как насчёт библиотеки для поддержки WebDrive для управления браузерами? А как насчёт поддержки встраиваемых модулей ansible'а?

          Библиотек миллиарды, и гвоорить «все они есть» — это смотреть на задачки вида «а есть ли у нас библиотека для вычисления sin?». Экосистема языка давно определяется не языком, а объёмом и качеством библиотек для него. Потому что в профессиональной разработке софта, если для ради проекта пишете одну библиотеку — это нормально. Когда три — это уже почти профнепригодность.


          1. ignat99
            03.12.2015 00:44
            -2

            Попробуйте немного под другим углом взглянуть на известные факты:

            http://bbos.org/xref/

            Это относительно полный список библиотек (http://sage.com.ua/ — несколько игр, пара хаков, визуальный редактор ДРАКОН и закрытые модули в нём отсутствуют, просто мантейнеры не спешат всё подряд в репозиторий пихать. Программы БПЛА и дронов, другие специальные проекты, виртуальная реальность, носимый комьютер, практически все протоколы IoT — конечно вне этого списка, но они существуют в природе в различных Оберон проектах).

            https://www.ocp.inf.ethz.ch/svn/ocp/trunk/
            Зеркало:
            https://github.com/Ignat99/a2/tree/master/a2extra

            В этом доступном репозитарии — Виртуальная клавиатура, FFT, Графический редактор, матрицы, библиотека обработки сигналов, База данных, JVM, Ещё один простой растровый редактор изображений, Бродилка, V4L2, образ дискетки-инсталятора.

            Вообщем примерно как в 2000 году в Линукс (к тому времени Линуксу так же было около 10 лет). Не прошло и 10 лет и Линукс стал доминировать в сетевых установках :-)

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

            Вот пример задач такого типа — которые требуют HDL уровня описания.

            http://geektimes.ru/post/254770/

            Хорошая статья про физический смысл оператора AWAIT(goal < out) в Актив оберон.
            И необходимость модификатора {EXCLUSIVE} для параллельных вычислений.

            IMHO


            1. amarao
              03.12.2015 01:51
              +5

              Посмотрел. dbus нет, openstack'а нет, vagrant'а нет, sg_io или его аналога нет, аналога twisted или gevent нет.

              Да что там хайлевел. Нет коннектора к postgresql/mysql/rabbitmq.

              Зато есть «растровый редактор», «Бродилка».

              Короче, язык с индустриальной точки зрения — труп и реанимации не подлежит. На нём невозможно написать ни одно приложение за осмысленное время, потому что придётся писать с нуля.

              Небось интеграции с CI, систем юнит-тестов с готовыми библиотеками моков, профайлеров и т.д. тоже нет.

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


              1. ignat99
                03.12.2015 02:52
                -2

                Всё что вы перечислили я использую для запуска на Mac нескольких версий Линукс.
                Но то о чём вы говорите это просто другая — старая концепция (с точки зрения Оберонщиков).

                Это всё равно что просить подключить перфоратор к вашему новому планшету для ввода и возмущаться тем что параллельный порт на вашем планшете для подключения построчной принтерной машины для вывода отсутствует. С виртуализацией и Xen в A2 всё в порядке (судя по слайдам из Швейцарии).  Эти слайды хорошо показывают для чего предназначена эта система A2 в сравнении с другими.

                https://github.com/Ignat99/a2/blob/master/doc/OS09.pdf

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

                Дело в том что эта OS для очень очень маленьких систем c очень очень большим количеством ядер — пока таких систем в природе нет, но на новых FPGA Ультра-Скале от Ксайлинскса можно сделать такую архитектуру.

                ModBus:

                https://github.com/Ignat99/a2/blob/master/doc/A2Prospekt.pdf

                Всё что связано с IoT на A2 было реализовано в одном из первых проектов.

                Я разбираюсь с языком очень не долго — может 1 неделю только.
                Вот тут я высказал замечания по действиям сообщества Оберона в Росси.

                http://forum.oberoncore.ru/viewtopic.php?f=26&t=5580&p=94156#p94104

                Тут привёл мой взгляд на СI по этому языку с примером Юнит-Теста, так же обратите внимание на команды в самом конце модуля после завершения его тела — они по сути (при передаче параметров или без) и являются Юнит-тестами.

                http://forum.oberoncore.ru/viewtopic.php?f=140&t=5581&p=94150#p94117

                Так же добавил на Википедию в статью A2 информацию и в частности про построение графа вызова модулей (как одного из методов быстрого вхождения в проект, чтоб начать быстро делать модификации кода):

                https://lists.inf.ethz.ch/pipermail/oberon/2015/008415.html

                Профайлер есть и кой какие другие инспекторы (TCP, Производительность, Объекты, Репозитарии, Компоненты, USB, События).


                1. 0xd34df00d
                  03.12.2015 15:48
                  +4

                  А вы на какие вопросы отвечаете-то?

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

                  Ctrl+F, «optimization», ничего (а я искал численные методы оптимизации).
                  Ctrl+F, «levenberg», ничего (а я искал один из самых популярных алгоритмов оптимизации, алгоритм Левенберга-Марквардта).
                  Ctrl+F, «numeric», ничего (а я искал хоть что-то численное)
                  Ctrl+F, «automatic», какая-то штука про реплей логов (а я искал automatic differentiation)
                  Ctrl+F, «forward», какая-то штука про почту (ну ладно, с automatic differentiation не сложилось, может, forward для примера попробовать?).
                  Ctrl+F, «precision», ничего (искал длинную арифметику).
                  Ctrl+F, «long», хм, что-то про long real, судя по коду, не длинная арифметика, а обычный double, long double или вроде того. Так, судя по коду, да вы что, серьёзно, вы синусы ассемблером для x86 FPU считаете? А где ещё оно запустится? Ладно, фиг с ним.
                  Ctrl+F, «random», какой-то генератор случайных чисел есть. Ну наконец хоть что-то нашлось, пусть даже такое базовое. Посмотрим подробнее.

                  Интересно, а там есть хотя бы гауссово распределение, или мне Бокса-Мюллера руками писать? И какой генератор там используется? Mersenne twister есть хотя бы? Тыкнем в ссылку, и что мы видим… Какой-то код. А документация где? Список функций? Или мне это всё читать? Ну ладно, почитаем…
                  Так, this object is not reentrant. Уже весело. У меня в эксперименте методы Монте-Карло, 12 тредов по числу ядер процессора, все из них генерят случайные числа, у вас тут, блин, not reentrant. 2015 год!
                  Ладно, а какой алгоритм генерации случайных чисел? А хрен его знает. Комментарии очень информативны. Зато мы теперь знаем, что оно взято из Ada, прям хедер нам об этом говорит. Очень важная информация.
                  Ладно, так что там с гауссовым распределением? А фиг там.

                  И этим предлагают пользоваться, ага.

                  У меня нет цензурных слов, извините.


                  1. ignat99
                    03.12.2015 16:02
                    -2

                    Я такой же пользователь как и вы. Я эту систему вижу 1 неделю только. Вы задаёте вопросы я отвечаю, что знаю.
                    Понятно что надо допилить напильником — в этом и смысл. Лет через 10 будет хорошая система. Для Линукса такое же время потребовалось.


                    1. 0xd34df00d
                      03.12.2015 16:13
                      +3

                      Не будет. Все эти библиотеки — это чуть больше, чем десять лет.

                      Да и возвращаемся к исходному вопросу: зачем мне этот язык, когда у меня есть хаскель, и я лучше потрачу свои силы на его допиливание?
                      Ну или на ещё более продвинутые и мощные языки.


                      1. ignat99
                        03.12.2015 22:43
                        -2

                        IMHO Как я уже писал — история Линуксу исполнилось 5 декабря 24 года. Для a2 это 13 лет только. То есть надо подождать ещё 10 лет. Хотя Линукс в 2000 году давал преимущество перед Windows из за доступа к большому пространству оперативной памяти.

                        У A2 сейчас преимущество по запуску большого кол-ва процессоров. Для их устойчивой работы надо иметь большое кол-во ядер и аппаратные атомарные операции. Поэтому Оберонщики смотрят в сторону FPGA.

                        IMHO


                        1. 0xd34df00d
                          04.12.2015 01:49

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

                          У A2 сейчас преимущество по запуску большого кол-ва процессоров. Для их устойчивой работы надо иметь большое кол-во ядер и аппаратные атомарные операции.

                          Вот этого я вообще не понял.


                          1. ignat99
                            04.12.2015 02:01

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

                            Вот тут подробнее об аппаратных атомарных операциях:

                            http://geektimes.ru/post/254770/

                            А по данным из диссера Питера Мюллера, если попытаться в .Net запустить такое количество нитей (thread), которое спокойно обрабатывает ядро Блюбатла (десятки или сотни тысяч, я уже точно не помню), то .Net просто умирает нафиг :)

                            Когда то давно были нарекания на A2, потом, оказалось, что модуль ZLib криво написан. Этот модуль был использован не только в A2 (хотя именно в A2 это ошибку модуля и обнаружили).


                  1. ignat99
                    03.12.2015 18:50
                    -2

                    http://a2os.org.ua/forums/printpage.php?forum=3&topic=7

                    Вот по этой ссылке список комментариев к модулям пакета Oberon Computational Toolkit из 2008:

                    Тут требуется пароль:
                    https://www.ocp.inf.ethz.ch/svn/ocp/trunk/
                    Зеркало (пароля не требуется):
                    https://github.com/Ignat99/a2/tree/master/a2extra

                    Intel SIMD optimizations for Non Uniform Spline Interpolation (NUSI)
                    Intel SIMD optimizations for Fast Fourier Transform
                    Array objects, high level implementation of operations on numeric multidimensional arrays

                    Random generators with Uniform distribution
                    Base object types for random array generation

                    Так же есть пакет по работе с Матрицами с кучей модулей для решения уравнений.

                    https://github.com/Ignat99/a2/tree/master/a2extra/Matrix

                    Поддержки регулряных выражений и списков.

                    http://sage.com.ua/ru.shtml?e1l5

                    Вы меня, извините, я физически не мог за 1 неделю со всеми пакетами разобраться. Но на мой взгляд (я программист с 1985 года) с такой основой вполне можно решить кой какие задачи.

                    Вот например интервальная арифметика в Java появилась после 2008 года, потому что один мой знакомый написал такую библиотеку. А у людей, которые работают с Обероном видимо были другие задачи. И критической массы пользователей язык не набрал пока.

                    Я всё таки надеюсь что постепенно ситуация будет лучше, хотя я и не программист на Обероне, но первый язык после интерпретатора Basica, который я самостоятельно изучил в 1987 году у меня был Pascal. Поэтому проблем чтением кода Active Oberon я не испытываю.


                    1. 0xd34df00d
                      04.12.2015 01:56
                      +1

                      github.com/Ignat99/a2/tree/master/a2extra/Matrix

                      И что мне с этой кучей Mod'ов делать?

                      Но на мой взгляд (я программист с 1985 года) с такой основой вполне можно решить кой какие задачи.

                      Можно, конечно. С тьюринг-полным языком можно вообще любые задачи решить. Можно нейросети на Brainfuck писать, было бы желание. Но зачем?

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

                      Я тут зашёл по первой ссылке в гугле по запросу «interval arithmetic java», на проект на SF, а у него last (last, не first!) modification — декабрь 2003-го года.


                      1. ignat99
                        04.12.2015 03:06
                        -1

                        Модули можно использовать. В конце каждого модуля есть команды для запуска модуля. Если нет, значит модуль используется другим модулем и смотреть метод использования надо там.

                        PET.Open Matrix.Tool~

                        Откройте файл Matrix.Tool в PET в OS A2 и выполните Compiler.Compile для компиляции всех модулей (можно кликнуть мышкой с нажатой контрол кей на первом слове Compiler).

                        PET.Open MatrixActive.Mod~

                        Так же звездой отмечаются публичные методы (Open, Run и т.д. ) их хорошо видно в редакторе PET в A2 в левой колонке, если вы выбрали модуль в файл менеджере или открыли с помощью команды.

                        =================================================
                        Вот эта библиотека на Java

                        java.net/projects/jinterval

                        interval.louisiana.edu/reliable-computing-journal/volume-19/reliable-computing-19-pp-229-247.pdf
                        система доказательств ACL2
                        www.cs.utexas.edu/users/moore/acl2

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


                        1. 0xd34df00d
                          04.12.2015 16:07

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


                          1. ignat99
                            04.12.2015 16:20

                            У меня точно такие же мысли были, которые я сразу изложил оберонщикам — нужен продвинутый пакет менеджер, да же более крутой чем JS.

                            А тут просто, скачивается архив, распаковывается в рабочей директории и устанавливается одним кликом в Tool файле (без пакет менеджера система, но со встроенным механизмом сборки приложений).


                            1. 0xd34df00d
                              04.12.2015 21:15

                              Не в этом дело.

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

                              Или нужно мне там, не знаю, случайное число сгенерить из гауссова распределения, я помню, что в C++11 это есть, иду на cppreference.com и быстро нахожу конкретное описание. Тоже с документацией, примерами кода и так далее.

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


    1. 0xd34df00d
      02.12.2015 23:41

      Спасибо, предпочту лоботомию.


  1. yatagarasu
    02.12.2015 18:27

    А нафига нужна Ада?


    1. ignat99
      04.12.2015 04:55
      -1

      Не нужна, это промежуточный этап (вместе с A2). Нам нужна Рая!

      Базовый язык Диалоговой системы структурированного программирования (ДССП) — Развиваемый Адаптивный Язык (РАЯ).
      https://github.com/trinarium/DSSP-C/blob/master/doc/dssp-book

      Forth (Serpent) если по простому наше всё.


  1. cyber_genius
    02.12.2015 20:02
    +4

    для проектов на bare metal + RTOS, C/C++ (причём в основном С) будут ещё очень, очень долго золотым идолом которому с благоговением рвенно поклоняются и приносятся в жертву девственицы. Возможно всё это столетие. Возможно выпустят С2030 какой-нибудь, а может и нет.


  1. Lol4t0
    02.12.2015 20:31
    +3

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

    Если у вас есть задача, под которую написано 100k строк кода на Java, то возможно надо выгнать всех С-разработчиков, и нанять Java-программистов


    1. ignat99
      02.12.2015 20:44

      Как вариант использовать что то наподобие визуального редактора LabView или аналогов для программирования машины состояний и получать код с верификацией со встроенными проверками номеров состояний (+20% max от С) прямо на ASM (-20% min от С)? На джава и других языках то же конечно можно (perl, python, oberon, etc).


      1. Lol4t0
        02.12.2015 21:45

        Я сомневаюсь, что на LabView можно сделать что-то сложное. Текстовое описание позволяет проще управлять сложностью. Не зря же даже логические схемы — которые изначально рисовались — теперь пишутся текстом (я про Verilog, VHDL...)

        Хотя если речь про «прошивку стиралки» — то пожалуй да!


    1. GarryC
      03.12.2015 17:26

      А откуда у Вас взялся проект на джаве в 100к строк, если были только С программеры?


      1. Lol4t0
        03.12.2015 18:23
        +1

        От apache — откуда ж еще браться проектам на джаве в 100к строк :-)


  1. Beholder
    02.12.2015 22:24

    Про embedded ничего не могу сказать, но на многих «серьёзных» микроконтроллерах не бывает даже Си. Там предлагается писать на каких-либо языках из семейства IEC 61131-3. Низкоуровневое программирование остаётся только для поставщиков железа.


    1. Sergey_datex
      03.12.2015 01:40
      +2

      Что такое «серъезные» микроконтроллеры в вашем понимании? Где они применяются? современные накопители SSD/HDD — это достаточно серъезное применение? Там C/C++

      Я думаю вы путаете Программируемые Логические Контроллеры и Микроконтроллеры. Первые не являются полноценными процессорами, но в их составе может использоваться множество микроконтроллеров.


    1. ignat99
      03.12.2015 01:49
      -1

      Из вашего семейства языков — этот

      https://ru.wikipedia.org/wiki/Structured_Text

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

      Я не Оберонщик совсем, просто стараюсь взглянуть на мир их глазами. Я в основном различные (каждый год они меняются) передовые скриптовые языки предпочитаю. С 1996 года сменились — Basic, Lisp, Bash, Perl, Python, JS, GO. На всех их я делал различные проекты. Ну и ещё на паре десятков других языков ;-) не скриптовых.

      Вот язык на основе Актив Оберона на подходе, видимо.