Форум Микро-Чип
Поиск и заказ электронных компонентов
 

Вернуться   Форум Микро-Чип > Инструментарий

Инструментарий Тестеры, паяльники, осциллографы, программаторы, IDE.

Ответ
 
Опции темы Опции просмотра
Старый 10.11.2016, 08:56   #1
Pridnya
Senior Member
 
Регистрация: 21.01.2009
Адрес: Russia, Orel
Возраст: 40
Сообщений: 4,731
Вес репутации: 4545/132
Pridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond repute
По умолчанию C++ to C converter (OOP C)

Всем привет!
Не встречал ли кто подобного конвертера, который может код на языке высокого уровня конвертировать в Си-шный код (плохочитаемый, для выкладки в качестве опенсорца для любопытных и для любителей резюме с открытым кодом ). Есть мысль, что кто-то пользуется.
Про существование конвертеров C++ to C# (из одного высокоуровневого ООП языка в другой знаю), код получается рабочий, но плохочитаемый, видно, что машина создавала, интересует "любой ООП язык в Си" (возможно в код ООП на Си).
__________________
Прогресс неизбежен.
Pridnya вне форума   Ответить с цитированием
Старый 10.11.2016, 09:39   #2
Рак
Senior Member
 
Регистрация: 02.04.2008
Адрес: Кременчуг
Возраст: 33
Сообщений: 1,382
Вес репутации: 2524/81
Рак has a reputation beyond reputeРак has a reputation beyond reputeРак has a reputation beyond reputeРак has a reputation beyond reputeРак has a reputation beyond reputeРак has a reputation beyond reputeРак has a reputation beyond reputeРак has a reputation beyond reputeРак has a reputation beyond reputeРак has a reputation beyond reputeРак has a reputation beyond repute
По умолчанию Re: C++ to C converter (OOP C)

Цитата:
Сообщение от Pridnya Посмотреть сообщение
Всем привет!
Не встречал ли кто подобного конвертера, который может код на языке высокого уровня конвертировать в Си-шный код (плохочитаемый, для выкладки в качестве опенсорца для любопытных и для любителей резюме с открытым кодом ). Есть мысль, что кто-то пользуется.
Про существование конвертеров C++ to C# (из одного высокоуровневого ООП языка в другой знаю), код получается рабочий, но плохочитаемый, видно, что машина создавала, интересует "любой ООП язык в Си" (возможно в код ООП на Си).
Дима, не встречал, с какой проблемой столкнулся?
Рак вне форума   Ответить с цитированием
Старый 10.11.2016, 09:57   #3
Pridnya
Senior Member
 
Регистрация: 21.01.2009
Адрес: Russia, Orel
Возраст: 40
Сообщений: 4,731
Вес репутации: 4545/132
Pridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond repute
По умолчанию Re: C++ to C converter (OOP C)

Цитата:
Сообщение от Рак Посмотреть сообщение
Дима, не встречал, с какой проблемой столкнулся?
Часто встречаются плохочитаемые программы, содержащие большое количество повторов кода (IMHO:что код создан не человеком, а машиной), также встречается плохой код от умных программистов (тоже противоречие). Мозг отказывается воспринимать такой код. Вот и интересно, встречал ли кто с генераторы кода, может, пользовался кто, когда код на высокоуровневом языке преобразуется в код на низкоуровневом. Они должны быть. Тот же Си в Ассемблер преобразуется (высокоуровневый в низкоуровневый). Т.е. это реальная задача. В иностранной техлитературе встречал упоминания авторов (программистов), что они пользуются подобными генераторами, даже сами их себе пишут (получается и код рабочий, и открытый, а разобраться в нем и править - дело дурное, не для того его открывали). Я не утверждаю, что это во всех случаях справедливо.
__________________
Прогресс неизбежен.
Pridnya вне форума   Ответить с цитированием
Старый 10.11.2016, 11:09   #4
Pridnya
Senior Member
 
Регистрация: 21.01.2009
Адрес: Russia, Orel
Возраст: 40
Сообщений: 4,731
Вес репутации: 4545/132
Pridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond repute
По умолчанию Re: C++ to C converter (OOP C)

Люди подсказали. Кому будет интересно: https://isocpp.org/wiki/faq/compiler-dependencies
Может, кто пробовал или попробует и увидит знакомый синтаксис.
Цитата:
Is it possible to convert C++ to C?

Depends on what you mean. If you mean, Is it possible to convert C++ to readable and maintainable C-code? then sorry, the answer is No — C++ features don’t directly map to C, plus the generated C code is not intended for humans to follow. If instead you mean, Are there compilers which convert C++ to C for the purpose of compiling onto a platform that yet doesn’t have a C++ compiler? then you’re in luck — keep reading.

A compiler which compiles C++ to C does full syntax and semantic checking on the program, and just happens to use C code as a way of generating object code. Such a compiler is not merely some kind of fancy macro processor. (And please don’t email me claiming these are preprocessors — they are not — they are full compilers.) It is possible to implement all of the features of ISO Standard C++ by translation to C, and except for exception handling, it typically results in object code with efficiency comparable to that of the code generated by a conventional C++ compiler.

Here are some products that perform compilation to C (note: if you know of any other products that do this, please let us know):

*Comeau Computing offers a compiler based on Edison Design Group’s front end that outputs C code.

*LLVM is a downloadable compiler that emits C code. See also here and here.

*Cfront, the original implementation of C++, done by Bjarne Stroustrup and others at AT&T, generates C code. However it has two problems: it’s been difficult to obtain a license since the mid 90s when it started going through a maze of ownership changes, and development ceased at that same time and so it doesn’t get bug fixes and doesn’t support any of the newer language features (e.g., exceptions, namespaces, RTTI, member templates).

*Contrary to popular myth, as of this writing there is no version of g++ that translates C++ to C. Such a thing seems to be doable, but I am not aware that anyone has actually done it (yet).

Note that you typically need to specify the target platform’s CPU, OS and C compiler so that the generated C code will be specifically targeted for this platform. This means: (a) you probably can’t take the C code generated for platform X and compile it on platform Y; and (b) it’ll be difficult to do the translation yourself — it’ll probably be a lot cheaper/safer with one of these tools.

One more time: do not email me saying these are just preprocessors — they are not — they are compilers.
__________________
Прогресс неизбежен.
Pridnya вне форума   Ответить с цитированием
Старый 10.11.2016, 11:18   #5
siarzhuk
Senior Member
 
Аватар для siarzhuk
 
Регистрация: 08.11.2014
Возраст: 49
Сообщений: 167
Вес репутации: 1161/31
siarzhuk has much to be proud ofsiarzhuk has much to be proud ofsiarzhuk has much to be proud ofsiarzhuk has much to be proud ofsiarzhuk has much to be proud ofsiarzhuk has much to be proud ofsiarzhuk has much to be proud ofsiarzhuk has much to be proud ofsiarzhuk has much to be proud of
По умолчанию Re: C++ to C converter (OOP C)

Цитата:
Сообщение от Pridnya Посмотреть сообщение
Часто встречаются плохочитаемые программы, содержащие большое количество повторов кода (IMHO:что код создан не человеком, а машиной), также встречается плохой код от умных программистов (тоже противоречие).
Copy-paste - наше всё. Читабельность исходников - последнее чем будет заморачиваться среднестатистический кодер с попой в мыле и дамокловым мечом горящей задачи в районе шеи. Рефакторинг - только под неотвратимым давлением накопившегося в коде "мёртвого ДНК". Код попросту отражает бытовые привычки писателя, кмк, ежли неряхе проще найти прожку в Гугле чем, оторвав седалище от табуретки, сделать пару шагов за DVD с архивом - то в коде будет тоже самое - дубль на дубле. Ну есть ещё прожки обфускаторы - комментарии выжать, переменным, функциям малоосмысленные короткие имена подавать. Но такой код для резюме - кмк, "отрава" - типа неряшливой пайки.

Цитата:
Сообщение от Pridnya Посмотреть сообщение
Вот и интересно, встречал ли кто с генераторы кода, может, пользовался кто, когда код на высокоуровневом языке преобразуется в код на низкоуровневом. Они должны быть. Тот же Си в Ассемблер преобразуется (высокоуровневый в низкоуровневый).
Ну C не зря обзывают высокоуровневым Ассемблером. А полноценный код на плюсах в C перегнать - для начала надо придумать реализацию поддержки виртуальных методов, потом вспомнить про перехват исключений, RTTI, шаблоны вроде как просто для всех использованных параметров наклонировать - хотя если нашему конвертеру на зуб какой Александреску попадётся - не факт.
siarzhuk вне форума   Ответить с цитированием
Старый 10.11.2016, 11:39   #6
Pridnya
Senior Member
 
Регистрация: 21.01.2009
Адрес: Russia, Orel
Возраст: 40
Сообщений: 4,731
Вес репутации: 4545/132
Pridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond repute
По умолчанию Re: C++ to C converter (OOP C)

Цитата:
Сообщение от siarzhuk Посмотреть сообщение
Ну C не зря обзывают высокоуровневым Ассемблером. А полноценный код на плюсах в C перегнать - для начала надо придумать реализацию поддержки виртуальных методов, потом вспомнить про перехват исключений, RTTI, шаблоны вроде как просто для всех использованных параметров наклонировать - хотя если нашему конвертеру на зуб какой Александреску попадётся - не факт.
Так это целая отрасль: пишешь на одном языке, а затем компилируешь в другой. Среди компиляторов вида "C++ to C" упоминается LLVM, а с его помощью компилируются программы на языке Swift.
Цитата:
Программы на Swift компилируются при помощи LLVM, входящей в интегрированную среду разработки Xcode 6 и выше. Swift может использовать рантайм Objective-C, что делает возможным использование обоих языков (а также С) в рамках одной программы.
Пока у нас развивалась русская литература (естественные языки...с вопросами в институте "какого цвета носки у Раскольникова"...), они там наплодили языков и инструментов для создания больших программ для разных нужд. Пишешь на одном (или на разных вообще), собираешь в другой (показываешь, кому интересно), затем можно собрать в исполняемый код. А мы потом пытаемся разобраться в их калокубах, гармониях, стеках, догнать их и перегнать.
__________________
Прогресс неизбежен.
Pridnya вне форума   Ответить с цитированием
Старый 10.11.2016, 12:01   #7
Pridnya
Senior Member
 
Регистрация: 21.01.2009
Адрес: Russia, Orel
Возраст: 40
Сообщений: 4,731
Вес репутации: 4545/132
Pridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond repute
По умолчанию Re: C++ to C converter (OOP C)

Программы для этого есть, люди этим занимаются и соответствующие вопросы задают, например http://stackoverflow.com/questions/3...produce-c-code
Цитата:
Using the LLVM linker to produce C code

I have tried to generate C code from C++ code compiled by llvm-g++, using the following commands:

llvm-g++ -emit-llvm -c ./example.cpp -o example.o
llc -march=c example.o
...
the C backend was removed in LLVM 3.1
__________________
Прогресс неизбежен.

Последний раз редактировалось Pridnya; 10.11.2016 в 12:10.
Pridnya вне форума   Ответить с цитированием
Старый 10.11.2016, 14:48   #8
siarzhuk
Senior Member
 
Аватар для siarzhuk
 
Регистрация: 08.11.2014
Возраст: 49
Сообщений: 167
Вес репутации: 1161/31
siarzhuk has much to be proud ofsiarzhuk has much to be proud ofsiarzhuk has much to be proud ofsiarzhuk has much to be proud ofsiarzhuk has much to be proud ofsiarzhuk has much to be proud ofsiarzhuk has much to be proud ofsiarzhuk has much to be proud ofsiarzhuk has much to be proud of
По умолчанию Re: C++ to C converter (OOP C)

Цитата:
Сообщение от Pridnya Посмотреть сообщение
Программы для этого есть, люди этим занимаются
Если делают - значит имеют мотивацию. Мотивацию либо "нужно по делу", либо мотивацию-вызов "а тебе слабо так сделать?" либо <что-нибудь ещё> Второй вариант я ещё нашёл-бы интересным для себя, но первый - как то не просматривается.
Цитата:
Сообщение от Pridnya Посмотреть сообщение
и соответствующие вопросы задают
Персонаж по ссылке, ИМХО, вообще "слабо осознаёт действия своих рук по клавиатуре". Компилит цпп в объектник и хочет последнего превратить в си-шник. Даже если у llvm-а и высокоуровневый биткод - но не настолько-же что его можно читать как сишник. Тем более что к тому моменту оптимизатор там уже со своей газонокосилкой Оккама порезвился вдоль и поперёк. Вряд-ли результат был-бы сильно разборчивее чем классические дизассемблерные простыни.
siarzhuk вне форума   Ответить с цитированием
Старый 10.11.2016, 15:11   #9
Pridnya
Senior Member
 
Регистрация: 21.01.2009
Адрес: Russia, Orel
Возраст: 40
Сообщений: 4,731
Вес репутации: 4545/132
Pridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond reputePridnya has a reputation beyond repute
По умолчанию Re: C++ to C converter (OOP C)

Цитата:
Сообщение от siarzhuk Посмотреть сообщение
Если делают - значит имеют мотивацию. Мотивацию либо "нужно по делу", либо мотивацию-вызов "а тебе слабо так сделать?" либо <что-нибудь ещё> Второй вариант я ещё нашёл-бы интересным для себя, но первый - как то не просматривается.
Так многие программные продукты начинались из дома для себя.
Здесь весь смысл в производительности труда программиста и повторном использовании кода,
да еще и откытого, пусть копаются усовершенствуют и удивляются, рабочий код, большой объем, а так плохо читается, кто ж его писал. А - машина.
Цитата:
Сообщение от siarzhuk Посмотреть сообщение
Персонаж по ссылке, ИМХО, вообще "слабо осознаёт действия своих рук по клавиатуре". Компилит цпп в объектник и хочет последнего превратить в си-шник. Даже если у llvm-а и высокоуровневый биткод - но не настолько-же что его можно читать как сишник. Тем более что к тому моменту оптимизатор там уже со своей газонокосилкой Оккама порезвился вдоль и поперёк. Вряд-ли результат был-бы сильно разборчивее чем классические дизассемблерные простыни.
Про этот персонаж я понял, когда до конца прочитал, т.е. он вводит команду с ошибкой и хочет получить результат.
Но сама идея жива, а появилась она более 20 лет назад и первый начал использовать Bjarne Stroustrup создатель языка С++, у него был первый компилятор Cfront, который мог из С++ кода генерить код на С с директивами препроцессора, а затем этот код уже компилировался обычным компилятором С. затем Cfront забросили в 1993-м, а затем идея генерить Си-шный код была реализована в других компиляторах, например в Comeau. М если он жив и выходят релизы, значит им пользуются. Такая функция есть и у других компиляторов, у того же LLVM она была отключена в версии 3.1 (это автор реплики с инофорума, но бывает отключили, а потом снова включили) и более новых, наверное, в связи с развитием языка С++ (сложно стало и не всегда нужно).
Но все авторы реплик по теме сходятся к тому, что код получается с макросами и плохочитаемый (человеком).
У того же Страуструпа в книге "Дизайн и эволюция С" (переведена на множество языков) есть картинка как это делалось.
И называться это дело может по-разному, в т.ч. C++ to C translator...Хоть бы какой пример посмотреть или EXE-шник, хоть из старых найти.

Вот еще один какой-то есть: И релиз May 2016, живой, пользуются. Я даже языка такого не слышал.
Цитата:
The Glasgow Haskell Compiler.
GHC compiles Haskell code either directly to native code or using LLVM as a back-end.
GHC can also generate C code as an intermediate target for porting to new platforms.
Миниатюры
ToC.PNG  
__________________
Прогресс неизбежен.

Последний раз редактировалось Pridnya; 10.11.2016 в 15:30.
Pridnya вне форума   Ответить с цитированием
Ответ


Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
 
Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Повышающий преобразователь DC-DC step-up converter ATAMAN Источники питания и силовая электроника 4 20.03.2015 23:18
BinHexDec32 Converter KeMik Общетехнические вопросы 11 21.05.2011 15:20
DIGITAL-TO-ANALOG CONVERTER (DAC) MODULE Александр Продукция MICROCHIP 3 22.02.2011 08:11
Помогите с программой "Graphics Resource Converter v2.01" Gera82 Продукция MICROCHIP 0 12.04.2010 18:42
DC/DC converter NSS Источники питания и силовая электроника 13 25.10.2008 14:00


Часовой пояс GMT +3, время: 20:14.


Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd. Перевод: zCarot