Можно ли запустить код C прямо в браузере? - PullRequest
9 голосов
/ 18 сентября 2009

Помимо соображений производительности, есть ли какой-нибудь известный способ взять существующий код C, C ++ или Objective C и запустить его прямо в браузере? Например, компилятор, который преобразует весь код в некоторый интерпретируемый язык, который можно запустить в браузере. Например, Javascript или Actionscript и проигрыватель Flash, или я полагаю, Java и JVM.

Я понимаю, что есть языки более высокого уровня, такие как Haxe, которые можно скомпилировать для разных целей. А с другой стороны, есть такие проекты, как Cappuccino и GWT, которые пытаются сделать разработку Javascript более похожей на традиционную разработку для настольных компьютеров.

Но мне было интересно, есть ли у вас приложение, работающее на настольном компьютере, или существующая кодовая база на C, C ++ или Objective C, может ли оно быть легко преобразовано в веб-приложение?

Есть ли работа на этом фронте? Есть ли практическая причина для этого? В основном превратить браузер в ОС?

Помимо проблем с производительностью и ограниченности поставщиков ОС, есть ли какие-либо технические причины, которые не могут быть достигнуты? Может ли этот вид кода, подобного C, быть добавлен в виртуальную машину, размещенную в браузере?

Ответы [ 10 ]

16 голосов
/ 18 сентября 2009

Google's Native Client (NaCl) использует измененный компилятор для создания объектного кода x86, который может быть проверен браузером и запущен в песочнице, без существенного снижения производительности - довольно крутые вещи. Они скомпилировали Quake под ним.

В этой статье Matasano подробно описывается, как она работает.

6 голосов
/ 18 сентября 2009

Вот компилятор C, предназначенный для ряда других языков, включая Javascript:

http://cowlark.com/clue/

Не уверен, в каком состоянии он находится - последний раз, когда я говорил с автором, он работал с чистым C89 (с учетом ограничений внешнего интерфейса компилятора). AFAIK, нет никаких планов по поддержке GUI.

Мне было интересно, есть ли у вас приложение, работающее на настольном компьютере, или существующая кодовая база, созданная на C, C ++ или Objective C, может ли оно быть легко преобразовано в веб-приложение?

Это как раз то, для чего предназначен Silverlight (конечно, C #, а не Objective-C), поскольку он обеспечивает доступность среды выполнения .NET. Портирование приложения для настольного компьютера обычно связано с графическим интерфейсом не меньше, чем с языком - если у вас есть приложение Cocoa и вы хотите перенести его в другую среду (будь то браузер или Windows), тогда вам нужно больше, чем просто кросс-компилятор Objective-C, вам нужен Application Kit и так далее. WINE, являющийся заметным контрпримером, довольно редко, когда эти специфичные для ОС библиотеки доступны вообще на других платформах, не говоря уже об эффективности. И даже там, где они доступны, возникают проблемы внешнего вида и удобства использования, когда условные обозначения одного пользовательского интерфейса закрепляются поверх другого. Таким образом, люди склонны либо использовать портативные платформы для начала, либо полностью переписать уровень представления приложения.

В основном превратить браузер в ОС?

Существует несколько проектов, направленных на превращение браузера в полнофункциональную среду для приложений (не уверен, что вы подразумеваете под «ОС»). Насколько мне известно, Flash и AIR, Silverlight, HTML 5. Ни один из них не планирует предоставлять C в качестве языка программирования.

3 голосов
/ 06 января 2017

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

3 голосов
/ 18 сентября 2009

Я думаю, что самое близкое, что вы ищете, это Собственный клиент Google . Тем не менее, он все еще находится на ранней стадии разработки.

2 голосов
/ 30 сентября 2009

Извлечение Adobe Alchemy (ранее известная как FlaCC), которая использует LLVM для компиляции C / C ++ во Flash.

2 голосов
/ 18 сентября 2009

Вас может заинтересовать LLVM , виртуальная машина низкого уровня. Было бы возможно реализовать LLVM внутри Java-апплета, Flash-апплета или даже в Javascript (я не удивлюсь, если кто-то еще не выполнил некоторые или все вышеперечисленное).

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

1 голос
/ 18 сентября 2009

Это возможно с элементом управления ActiveX, но это работает только в Microsoft Internet Explorer.

0 голосов
/ 21 декабря 2014

Может быть, вы должны рассмотреть http://ideone.com для компиляции c ++ в браузере? Вы также можете компилировать или интерпретировать другие языки, я лично использую его для более экзотических языков - у меня есть c и c ++ на моем ПК:)

0 голосов
/ 15 ноября 2011

http://code.google.com/p/cibyl/wiki/Cibyl может создавать исходные коды Java, поэтому вы можете скомпилировать их для плагина Java в браузере. Учитывая, что в настоящее время плагины Java встречаются гораздо реже, возможно, вам лучше воспользоваться решением, которое компилируется в Javascript.

0 голосов
/ 18 сентября 2009

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

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

...