Компания Intel открыла наработки, связанные с исследовательским проектом ControlFlag, нацеленным на создание системы машинного обучения для повышения качества кода. Подготовленный проектом инструментарий позволяет на основе модели, обученной на большом объёме существующего кода, выявлять различные ошибки и аномалии в исходных текстах, написанных на высокоуровневых языках, таких как C/C++. Система подходит для определения в коде различных видов проблем, от определения опечаток и неверного сочетания типов, до выявления пропущенных проверок значения NULL в указателях и проблем при работе с памятью. Код ControlFlag написан на языке С++ и открыт под лицензией MIT...Подробнее: https://www.opennet.dev/opennews/art.shtml?num=56018
> написанных на высокоуровневых языках, таких как C/C++
> высокоуровневых
> C
Не поверишь - это такИз википедии:
> Язык Си уникален с той точки зрения, что именно он стал первым языком высокого уровня, всерьёз потеснившим ассемблер в разработке системного программного обеспечения.
Уж в 2k-то 21-ом бы на Википедию ссылаться. И да, вот оттуда же:> К тому же, несмотря на свою низкоуровневую природу, язык ориентирован на переносимость
вот если бы ты писал на рустеЁ!
у тех, кто пишет на русте такого не говорит. смекаешь?!
Чтоб вы знали. Уровень языка программирования чем ниже, тем ближе к машинному, а значит лучше.
> выявления пропущенных проверок значения NULL в указателяхХм...
>стал первым языком высокого уровня, всерьёз потеснившим ассемблерА как же фортран?
>потеснившим ассемблер в разработке системного программного обеспеченияОС на Фортране не пишут.
Это устаревшая классификация языков. Когда-то и мнемоники для машинных команд считались высокоуровневыми. Когда-то и колесо считалось вершиной научно-технического прогресса.
Садись, два!
Ну а по теме - очередная подпорка к Сишке и двигание кроватей. Понятно, что на Си написано полно легаси, которое надо как-то обмазывать анализаторами, чтобы постоянно не вываливались overflow и use-after-free, но настанет день, когда люди перейдут к инструменту с изначально нормальной архитектурой и и чем скорее этот день настанет, тем лучше для IT.
А есть какие-то предпосылки? :think
Так перепишите на свой раст, покажи этим Интелам как надо!
> Так перепишите на свой раст, покажи этим Интелам как надо!Вы там из криокамеры выходите, в 2k21 уже ОС написали на Rust.
> написалиУ тролля, как всегда, проблемы со временем. Правильно: "пытаются написать, затыкая дыры утечки памяти".
> У тролля, как всегда, проблемы со временем. Правильно: "пытаются написать, затыкая дыры
> утечки памяти".Молодец, приплел раст и опустил ссылку - ведь опеннетным джЫнтельменам принято верить на слово ...
Вот новость: https://www.opennet.dev/opennews/art.shtml?num=54316, а вот в новости про утечки:;----------------------X8
Из новшеств, добавленных в выпуске Redox 0.6, можно отметить:
* Полностью переписана система управления памятью ядра (rmm, kernel memory manager). В новой реализации удалось избавиться от утечек памяти, которые создавали проблемы при использовании старого менеджера памяти. Кроме того, повышена стабильность поддержки многоядерных систем.
;----------------------X8Теперь верите?
> Вот новость: https://www.opennet.dev/opennews/art.shtml?num=54316, а вот в новости про
> утечки:
> ;----------------------X8
> Из новшеств, добавленных в выпуске Redox 0.6, можно отметить:
> * Полностью переписана система управления памятью ядра (rmm, kernel memory manager). В
> новой реализации удалось избавиться от утечек памяти, которые создавали проблемы при
> использовании старого менеджера памяти. Кроме того, повышена стабильность поддержки многоядерных
> систем.
> ;----------------------X8
> Теперь верите?https://gitlab.redox-os.org/redox-os/redox/-/issues/855
> The Redox kernel does not have the structures in place to allow freeing memory.
> (что и переписали)Умению читать опой? Да, верю.
А ссылки на "пытаются написать, затыкая дыры утечки памяти", будут? Или как обычно?
> https://gitlab.redox-os.org/redox-os/redox/-/issues/855
>> The Redox kernel does not have the structures in place to allow freeing memory.
>> (что и переписали)
> Умению читать опой? Да, верю.
> А ссылки на "пытаются написать, затыкая дыры утечки памяти", будут? Или как
> обычно?Написали то, что было написано и по-английски (https://www.redox-os.org/news/release-0.6.0/):
;----------------------X8
* rmm, a complete rewrite of the kernel memory manager. This has eliminated kernel memory leaks, which became quite an issue with the previous memory manager. Additionally, multi-core support is far more stable.
;----------------------X8Пойдите, расскажите теперь уже авторам, что у них ОС не текла.
>> https://gitlab.redox-os.org/redox-os/redox/-/issues/855
>>> The Redox kernel does not have the structures in place to allow freeing memory.
>>> (что и переписали)
>> Умению читать опой? Да, верю.
>> А ссылки на "пытаются написать, затыкая дыры утечки памяти", будут? Или как
>> обычно?
> Написали то, что было написано и по-английски (https://www.redox-os.org/news/release-0.6.0/):Ну это было понятно, что чтецы опой не могут в английский и попытаются спрыгнуть. А ссылки-то на _дыры_ где? Или "чтецы" и в компонентах ОС - ни бумбум, раз им "does not have the structures in place to allow freeing memory" ничего не говорит?
>> Написали то, что было написано и по-английски (https://www.redox-os.org/news/release-0.6.0/):
> Ну это было понятно, что чтецы опой не могут в английский и
> попытаются спрыгнуть. А ссылки-то на _дыры_ где? Или "чтецы" и в
> компонентах ОС - ни бумбум, раз им "does not have the
> structures in place to allow freeing memory" ничего не говорит?я не понимаю, почему Вы тычите мне это issue, когда сами разработчики говорят про что-то другое. Если Вы плохо понимаете по английски, то могу выдать Вам перевод от google из release notes для Redox 0.6.0 :
;--------------------X8
Это устранило утечки памяти ядра, которые стали серьезной проблемой с предыдущим менеджером памяти.
;--------------------X8Я так надеялся, что разработчики лучше знают, что они там правили. Впрочем, может Вы Jeremy Soller и посетили наш форум, пусть даже и инкогниото, и даже снизошли до общения с анонимами, то, конечно, Вам лучше знать. Просто непонятно тогда, зачем Вы возводите на ваше творение такой мерзкий поклёп, приписывая ей то, чего у неё не было.
>> Created 4 years ago by Jeremy Soller
>> ... does not have the structures in place to allow freeing memory
> я не понимаю, почему Вы тычите мне это issue,когда сами разработчики
> "- rmm, a complete rewrite of the kernel memory manager." [ссылка на https://gitlab.redox-os.org/redox-os/rmm/ -> Jeremy Soller ... ой]
> говорят про что-то другое.Яснопонятно. Кроме обыкновенного балабольства - ничего не будет.
>> чтецы опой не могут в английский
> Если Вы плохо понимаете по английски, то могу выдать Вам перевод от googleИ опять я угадал.
> Я так надеялся, что разработчики лучше знают, что они там правили.Да-да, Jeremy Soller знает лучше, чем Jeremy Soller, что правил там Jeremy Soller. Анонимные "знатоки" совсем не палятся ...
>>> чтецы опой не могут в английский
>> Если Вы плохо понимаете по английски, то могу выдать Вам перевод от google
> И опять я угадал.Не знаю, что Вы там угадали, но пока складывается такое ощущение, что Вы просто бредите, извините.
>> Я так надеялся, что разработчики лучше знают, что они там правили.
> Да-да, Jeremy Soller знает лучше, чем Jeremy Soller, что правил там Jeremy
> Soller. Анонимные "знатоки" совсем не палятся ...Вот теперь уже всё с Вами понятно.
PS. то issue, на которое Вы ссылались, оно как-бы всё так-же не закрыто. Я надеюсь это Вам не помешает использовать redox в критически важных системах, только будет просьба, Вы заранее предупредите, пожалуйста, где Вы его будете внедрять, ну чтобы если это что-то важное, чтобы постараться оказаться где-то на другой стороне глобуса.
На этом, думаю, разговор можно закончить. Удачи Вам.
ОС означает прежде всего управление железом, то есть наличие драйверов. Сколько там драйверов на расте пишут производители железа?
> ОС означает прежде всего управление железом, то есть наличие драйверов. Сколько там
> драйверов на расте пишут производители железа?Ты хочешь сказать, что Линукс до середины двухтысячных почти совсем не являлся ОС? Или вантузятники опять совсем-совсем не палятся?
А как использовать ОС если она не поддерживает современного железа?(привет FreeBSD)
> А как использовать ОС если она не поддерживает современного железа?(привет FreeBSD)А можно просто ответ на вопрос, без вот этого вот вечного юлежа?
> (привет FreeBSD)Привет, вендузятники
https://pic4a.ru/110/5We.png
Железо какое? 4х летней давности? Как там wi-fi работает? :DИ напоследок: https://www.top500.org/statistics/details/osfam/1/ где тут хотя бы 1 кластер с многострадальной FreeBSD? :D
> Железо какое? 4х летней давности? Как там wi-fi работает? :DИ че? Нормально работает. Ты можешь хоть каждый год менять и радовать маркетолухов, кто ж тебе запретит.
> И напоследок: https://www.top500.org/statistics/details/osfam/1/ где тут хотя бы 1 кластер
> с многострадальной FreeBSD? :DЭ-э ... и какой из них ты пользуешься? И где именно она у тебя стоит - под кроватью или за диваном?
И что хотел сказать? Что венда не поддерживает современное железо, а макось с соларисом не являются ОС, ведь их нет в том списке?
Ну и расскажи заодно, где тут:
https://www.techradar.com/news/best-consoles
https://en.wikipedia.org/wiki/List_of_best-selling_game_cons...
твой линукс-то. Что, не поддерживает современное (и не очень) железо?
Пройдусь по пунктам.1. Насчет линков по поводу консолей: у линукса своя ниша.
Они доминирует на рынке серверов а также в значительной степени влияют на большую часть мобильного рынка. И этого достаточно для того чтобы достигнуть успеха.
FreeBSD ведь серверная ОС? Но их в списке top500 нет. Почему? Потому что не поддерживают современное железо и соотвественно на рынке серверов их практически никто не использует.2. Насчет коммента про маркетологов то они тут совершенно не причем. Новое железо гораздо производительней и соотвественно цена за ресурсы выходит гораздо ниже.
3. По поводу того что я использую. На серверах стоит линукс везде конечно же. На рабочей машине стоит fedora. Есть еще машина для игр на которй стоит винда.
4. Если ОС не подерживает(любая) современное железо(в данном случае серверное) и есть нужда его "подбирать" под эту ОС то мало кто этим будет пользоваться. В случае же с ОС "написанной" на расте то там вообще никакое железо не поддерживается. То есть пока это находится на стадии "hello world". И пока не будет достаточного колличества писателей драйверов говорить об этой ОС смешно.
> Пройдусь по пунктам.
> 1. Насчет линков по поводу консолей: у линукса своя ниша.
> Они доминирует на рынке серверов а также в значительной степени влияют на
> большую часть мобильного рынка. И этого достаточно для того чтобы достигнуть успеха.Угу, угу. На самых популярных консолях, т.е. PS 3,4,5, Nintendo Switch - фря, а не линукс, но "это другое!".
> FreeBSD ведь серверная ОС? Но их в списке top500 нет.
1. Каким боком top500 к серверам?
2. FreeBSD, как видно выше - вполне универсальная ОС.> Почему? Потому что не поддерживают современное железо и соотвественно на рынке серверов их практически никто не использует.
Относительно топ500, для которых дрова пишутся отнюдь не в мейнлайне - сильно смахивает на аналитику уровня "Ветер дует потому что деревья качаются!". Это помимо натягивания серверо-совы на top500-глобус и откровенного передергивания:
https://news.ycombinator.com/item?id=28584738 "Serving Netflix Video at 400Gb/s on FreeBSD [pdf] (freebsd.org)"
> 2. Насчет коммента про маркетологов то они тут совершенно не причем. Новое железо гораздо производительней и соотвественно цена за ресурсы выходит гораздо ниже.Угу, угу, стандартные лозунги - но маркетолухи конечно же не причем.
Ну раз дешевле, то привести реальный подсчет стоимости ресурсов и замены железа до истечения амортизационного срока не проблема? Можно даже "на пальцах". Особенно интересно оно будет для "домашне-рабочей" машины. А то в нашей реальности прирост производительности серверов составляет около 15% в год и до полной амортизации или EOL железа, почему-то никто не спешит с заменой.
А откуда уверенность, судя по твоим другим постам, что этим инструментом станет именно Rust?
> А откуда уверенность, судя по твоим другим постам, что этим инструментом станет
> именно Rust?Найдите, пожалуйста, место в моём посте, где я упоминал Rust.
"Вы там из криокамеры выходите, в 2k21 уже ОС написали на Rust.", например. Ну ещё можно посмотреть в обсуждении новости о Rust.
Все приведённые в примере ошибки являются логическими, язык тут вообще не при чём.
Уже давно все энтерпрайзы перешли на Java, где пофиксены почти все опасные места C++. Остались только игроделы и финансисты с наносекундами.
> (s1 == NULL) ∧ (s2 == NULL)И теперь програмисты должны переписать код просто потому, что глупая машина его не понимает?
А если надо именно такую проверку сделать?!
Дообучить
Ну если надо то человек ответственный за код знает что надо и так сделано не случайно.
Ну конкретно в этом случае можно не выпендриваться и заменить ^ на !=
Как и в случае "(s1 == NULL) | (s2 == NULL)" заменить конечно можно, но ценой производительности. OpenSSL пишут фанатики производительности, иначе бы давно уже выкинули бы весь Ассемблер. Причём в OpenSSL Ассемблер используется не для специфических инструкций, а ради нескольких процентов производительности, недостижимых для нынешних компиляторов.
> ценой производительностиВовсе нет. Возьми компилятор и проверь. Этот случай -- либо ошибка программиста, либо откровенный тупняк и понимание компилятора на уровне первой половины 90-х.
подозреваю, что у сабжа при проверке такого кода тоже истерика случится
Сперва подумал что в кои-то веки написали правду:
... открыл код системы .... для выявления ошибок в кодеПотом прочитал новость.... оказывается открыли для блага человечества...
Мало. Нужен ещё код анализатора для выявления ошибок систем машинного обучения. А потом зациклить их и получить что-нибудь идеальное.
для идеальности нужна мат модель и анализатор логики. Иначе как ни украшай статистику, она ей и останется. Тоесть реальные ошибки не видит, зато ругается на нестандартный синтаксис. Короче аттракцион.
анализатор логики анонима по яп, не глядя в код находит, на таких-то идеальных примитивах и надо обучать, а не норвиках и скоробогатовых.
> для идеальности нужна мат модель и анализатор логики.О какой матмодели ты сейчас говоришь? О матмодели программы? То есть о спецификации программы, написанной на формальном языке? Это может помочь, но во-первых, есть ограничения такого подхода, во-вторых это переход с C/C++ на язык описания спецификаций.
Программист-человек может качественнее проводить аудит кода потому, что он может по коду угадать намерения того, кто писал код. Но, самое что забавное, угадать эти намерения возможно только одним путём: взять модель психики программиста и дальше разглядывать код и статистическим путём пытаться угадать состояние психики, которое с максимальной вероятностью породит именно такой код.
То есть, тут нужна формальная модель психики программиста. И этим и обусловлен вопрос выше: может ты об этой модели?
Человеку удаётся справиться с этим, потому что он сам себе модель программиста, писавшего код. А статистику всю нейросетки в его голове считают.
ИИ сейчас подошёл вплотную к тому, чтобы реализовать нужную статистику. А это автоматически означает, что какая-никакая модель программиста у ИИ уже есть. Остался один шаг -- сделать эту модель каузальной, а не корреляционной. Но это, я полагаю, произойдёт после того, как хайп на deep-learning спадёт: все самым натуральным образом сначала тянутся за низковисящими фруктами и лишь когда они кончатся, начинают чесать репу: как достать остальные?
Но я к тому, что с этой перспективы, статистический поиск багов -- это шаг в нужном направлении. Либо мы движемся в направлении выдачи компилятору всё большего количества информации о задумке программиста (а это всякие расты, или даже формальные языки спецификаций программ), либо мы учим ИИ угадывать эту задумку по тому, что есть. И вот это второе, естественно напрашивается делать так, как это делает человек, то есть статистически.
Нет, не надо. Это как с вероятностью вероятности. Когда это понятие приходит в голову впервые, первая реакция тренированной психики включает в себя мысль о необходимости бесконечной рекурсии: вероятность вероятности вероятности ... вероятности. Но если присмотреться, то хоть вероятность вероятности и полезное понятие, но уже третий уровень бесполезен. На третьем уровне уже нет никакой неопределённости, потому что вся неопределённость была описана на первых двух этажах.
А, так вот откуда meltdown взялся.
> имеющегося массива кодаФраза "все так пишут" заиграла новыми красками.
Кстати, а ответы со stackoverflow эта штука умеет использовать? А если при "формировании эталонного дерева принятия решений" возникнет неоднозначность, она сможет сама спрашивать там совета?
>Фраза "все так пишут" заиграла новыми краскамиЭто да, было бы хорошо прикрепить к тем или иным вариантам или веткам то, как код такого типа оценивает эксперт.
Да давайте уже пилите квантовый компьютер. Чтобы подавал на вход суперпозицию из всех возможных наборов входных данных. И смотрел, что будет.
А на выходе бы получал суперпозицию всех возможных результатов и потом бы гадал какой же из них правильный?
улыбнул
Ребята из Intel ME похоже не знали и не узнают что такая штука появилась в соседнем отделе...
Ребята из Интел и знают и умеют всяко больше тебя.
такое вполне возможно.
но: почему у них периодически всплывает всякая гадость ?
Наверное потому что их процы одни из самых распространённых и популярных(как бы это не бесило амд-фантёлок) в мире и в их коде не роются только самые ленивые. Вот и всё. Всякие например эльбрусы в мире нафик никому не упали, соответственно ничё не всплывает, потому-что не ищут. Неужели так трудно простейшую логическую цепочку создать?
поправка: их код закрыт. гадость ищут посторонние люди практически наощупь.
представьте, насколько легче и быстрее искать, имея на руках спецификации ?
а еще - насколько легче их устранить заранее ?
> неконкретизированном проприетарном ПОне надо интелу стесняться говорить "в нашем собственном говнокоде")
производители статических анализаторов у себя внутри - "давай глянем как оно в сравнении с нашим и дополним своим модулем от интола если что".
Лысый из ПиВаСа тебя одобряет.
так у него на сайте в его профиле написано - "Лучше 10 раз пересобрать, чем один раз подумать."
>была выявлена незамеченная статическими анализаторами ошибка при использовании элемента структуры "s->keepon", который имел числовой тип, но сравнивался с булевым значением TRUE.А в чем проблема если язык это позволяет?
>>была выявлена незамеченная статическими анализаторами ошибка при использовании элемента структуры "s->keepon", который имел числовой тип, но сравнивался с булевым значением TRUE.
> А в чем проблема если язык это позволяет?Ну, как-бы, если числовое, то там может быть, например, не только 0 и 1, а например, и 2, 3 и т.д. А сравнение, насколько я понял, происходило, с конкретным TRUE (например 1).
>Ну, как-бы, если числовое, то там может бытьну и как быть? на что заменить? если там сравнение двух чисел, пихнет 2 или 3 результат сравнения будет ложным, к чему это приведет - проблема программиста.
>>Ну, как-бы, если числовое, то там может быть
> ну и как быть? на что заменить? если там сравнение двух чисел,
> пихнет 2 или 3 результат сравнения будет ложным, к чему это
> приведет - проблема программиста.Например заменить на "!= 0", уже, как минимум, будет нечто похожее тому посылу, который был изначально в коде.
так TRUE и есть 1, то есть число, типа булеан как такогого в сях нет. Типы, только в голове у програсмиста.
> так TRUE и есть 1, то есть число, типа булеан как такогого
> в сях нет.к сожалению, или к счастью, тип _Bool уже есть, причём, если не путаю, ещё со времён C99.
Но тут вопрос в другом, чисто логически если "s->keepon" числовой, то там вряд ли будет интересовать значения "1" и "не 1", а скорее, имхо конечно, будет интересовать значения "0" и "не 0".
> к сожалению, или к счастью, тип _Bool уже есть, причём, если не
> путаю, ещё со времён C99.Это макрос разворачивающийся в 0 и 1 целочисленную.
> Но тут вопрос в другом, чисто логически если "s->keepon" числовой, то там
> вряд ли будет интересовать значения "1" и "не 1", а скорее,
> имхо конечно, будет интересовать значения "0" и "не 0".тут без разницы, от 0 отталкиваемся или от 1. Таким же макаром, можно за TRUE считать любое целое положительное число большее чем 0, а за FALSE меньшее (отрицательное) или равное 0. И если в "s->keepon = 2" то проблем нет, расцениваем как TRUE. И с точки зрения анализатора ворнингов тут не должно быть, если компилятор допустил такое.
>> к сожалению, или к счастью, тип _Bool уже есть, причём, если не
>> путаю, ещё со времён C99.
> Это макрос разворачивающийся в 0 и 1 целочисленную.не совсем, это тип. В который может разворачиваться bool, если включить через stdbool.h
>> Но тут вопрос в другом, чисто логически если "s->keepon" числовой, то там
>> вряд ли будет интересовать значения "1" и "не 1", а скорее,
>> имхо конечно, будет интересовать значения "0" и "не 0".
> тут без разницы, от 0 отталкиваемся или от 1. Таким же макаром,
> можно за TRUE считать любое целое положительное число большее чем 0,
> а за FALSE меньшее (отрицательное) или равное 0. И если в
> "s->keepon = 2" то проблем нет, расцениваем как TRUE. И с
> точки зрения анализатора ворнингов тут не должно быть, если компилятор допустил
> такое.TRUE не может иметь несколько значений (1, 2 и т.д.), потому-как вот он-то как-раз макрос, и разворачивается в одно значение (1), а FALSE тоже макрос, который тоже разворачивается в одно значение, равное (0).
> TRUE не может иметь несколько значений (1, 2 и т.д.), потому-как вот
> он-то как-раз макрос, и разворачивается в одно значение (1), а FALSE
> тоже макрос, который тоже разворачивается в одно значение, равное (0).Дело не во многозначности TRUE, а в неявном приведении int к bool (который и разворачивается в int) во время сравнения в Сях. В строгой (сильной) типизации такое сравнение компилятор не пропустил бы.
суть в том, что почему анализатор считает ошибкой то, что для компилятора норма? Зачем анализатор требует строгости типов от языка не со строгой типизацией?
> суть в том, что почему анализатор считает ошибкой то, что для компилятора
> норма? Зачем анализатор требует строгости типов от языка не со строгой
> типизацией?Тут, как-бы не совсем статический анализатор, а эдакая себе система, которая может выйти за рамки и сказать - а чего-то все пишут так, а ты не так - может ты что-то не то делаешь? Конечно она при этом может и не угадать, и написано именно то, что задумал программист. Как по мне - вещь хорошая, если действительно сможет показать проблемные места, по крайней мере на них можно будет ещё раз посмотреть и сказать себе - да, всё так и задумано, а не что за бред тут написан.
>можно будет ещё раз посмотреть и сказать себе - даесли это подобие ИИ, еще нужно пройтись в обратном порядке по пути принятия решения, там же не тупо патрн метчинг, а это еще так себе проблема. Глупо ведь, скормить на обучение весь код с гитхаба и принимать решение парламентским большинством, должна быть экспертная (людская) оценка дана сначала, а это в свою очередь порождает вопросы, как породил у меня, в случае требования строгости типов при сравнении в языке где нет строгой типизации и есть неявное их приведение.
>>можно будет ещё раз посмотреть и сказать себе - да
> Глупо ведь, скормить на обучение весь код с
> гитхаба и принимать решение парламентским большинством, должна быть экспертная (людская)
> оценка дана сначала, а это в свою очередь порождает вопросы, как
> породил у меня, в случае требования строгости типов при сравнении в
> языке где нет строгой типизации и есть неявное их приведение.Там у них для обучения предлагается три Dataset-а, 100M, 450M и 9G. Возможно в Dataset-ы отобраны экспертами (по крайней мере людьми из Intel-а) особо качественные проекты, так-что парламентского большинства не будет.
Статистический анализатор - это хорошо. Это не модное нынче непереобучаемое свёрточное дерьмо.
>нынче непереобучаемое свёрточное дерьмо.так это пол беды, когда можно еще экспертами переобучить, куда хуже, когда принятия решение основано на парламентском большинстве, все так пишут - и ты так пиши:)
Да просто акции интел упали более чем на 10,5% за день. Надо что-то делать.
..
[-l source_language_number] (default: 1 (C), supported: 1 (C), 2 (Verilog)
..и где там c++ ? п#зд#ны из штеуда...