Программирование, кроссплатформенность

программирование Linux windows C++

Не хочу боле захламлять вопрос в котором дискуссия началась.
Посему потрудитесь ответить тут.

Человек спросил, какой бы выбрать язык, чтобы он был компиллируемым и кросплатформенным.
Вы первым делом назвали ассемблер, рьяно отстаивая что Java и даже C в этом вопросе хуже. Объяснитесь, в таком случае, почему вы считаете что ассемблер - первый язык, попадающий под данный критерий
(А судя по вашим словам - единственный). Как он поможет решить вопрос с кроссплатформенностью?

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

Примечание:
Так. Еще раз. Давайте без демагогии, я жду прямого ответа. Вот цитирую ваши слова:

>Чтоб и все платформы и чтоб компилировался да еще и в бинарик.. это ж правда тока Ассемблер делает

Раскройте смысл этого предложения. Что именно тут делает "только ассемблер"?
Аналогий не надо, отвечайте по сути.

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

Много-много библиотек написаны на том же С, говорим исключительно про гимп а не про абстрактные разработки. Гимп разработан на С, библиотеки кроссплатформенные, никто с нуля не переписывает, они архитектурно построены так, что позволяют писать приложение, которое можно скомпилять под винду и линукс. Qt тоже это позволяет. Так пишут. Гимп, в частности, написан таким образом. Вы с этим будете спорить?

Но интереснее всего мне ваш ответ про ассемблер. Хватит пустой болтовни, назовите конкретные свойства языка, которые в данном вопросе (построение кроссплатформенных приложений) являются преимуществами перед С, С++, Java, даже перед шарпом с его моно. Конкретные. Пунктам.

Примечание:
>> Что именно тут делает "только ассемблер"
>Компилируется в бинарный код на всех (известных) платформах.

Оооо, мои опасения подтвердились, "коллега". Я с прискорбием заявляю - ассемблер вы видели только на картинках, о программировании вы пытаетесь спорить находу читая вики.
В понятия "бинарный код" нету. В машинный код на всех платформах компилируется C, C++, Pascal, теперь вон даже к питону прикрутили компиллер.
В бинарник компилятся вообще все компилируемые языки, ява в том числе - поэтому они и названы "компилируемыми". Ява компилится в байткод жвм, шарп - в мсил, байткод дотнета.

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

Примечание:
k_max, вы не правы слегка. Язык ассемблера это мнемоническая запись машинных кодов. Из С и иже с ним асмовый код не порождается обычно, порождаются сразу машинные коды, а не асмовый листинг, потом ассемблирование.
Прямого ответа мы не дождемся, конечно. Человек показал полную свою некомпетентность в этом вопросе, он хватает рандомные цитаты из вики и кидает сюда, не заботясь даже о том, чтобы они если не подтверждали, то хотя бы не опровергали его слова.

Примечание:
k_max, ему скармливаются ассемблерные файлы, которые вы можете прилинковать к своей проге.
Если у вас в проекте есть С-файлы и S-файлы, то гцц сгенерит объектные модули из C, а ассемблер - из S.
А линкер это все слинкует.
Ну где же наш доцент, я все жду что он объявится и наконец ответит)

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

Примечание:
k_max, мой промах, признаю. GCC в самом деле, судя по описания, порождает асм. Но далеко не все компиллеры так делают)

Примечание:
Оооо, доцент объявился)
Как там, в фильме джентельмены удачи, говорилось?
"Слышь, доцент?" Не надо мне опять пустых слов)

>забыли о малом кроссплатформенность имеет очень узкие задачи. И они не решаются болтовней переписке.

Ну куда, куда вас опять понесло?) Какие узкие задачи? Какая переписка?) Вам уже не только я, но и другие люди задают прямой вопрос - расскажите, пожалуйста, чем ассемблер кроссплатформенней C или явы)
Какие его свойства позволяют вам это сказать. По пунктам.
Вики я верю, вы ее читать только не умеете. В том абзаце ничего не сказано, повторяю ВООБЩЕ ничего не сказано про то что ассемблер кроссплатформенен. Там сказана полная противоположность.

Поэтому, дорогой доцент, поясните, пожалуйста, по пунктам широкой аудитории, в чем преимущество ассемблера при построении кроссплатформенных приложений, по сравнению с Java и C.
А также поясните, что вы имеете в виду, говоря что только ассемблер порождает "бинарный код".
А также - что вы подразумеваете под "бинарным кодом", уж не машинный ли код?
А также - ответьте на вопрос dimasokol, только без абстракций. Вот есть три устройства. Одно на ARM, второе на SPARC, третье на x86. На всех крутится linux. Что в данном случае можно сказать о кроссплатформенности программы на C, программы на Java, программы на языке ассемблера?

Примечание:
Так, мои дополнения, увы, подходят к концу. Хотя, учитывая ваш словесный понос и нежелание отвечать по сути - не удивительно, я уж не знаю сколько еще раз вам повторить вопрос.
Ваша последняя реплика означает, что ответа мы так и не получим от вас, прямого и точно, я правильно понимаю? По пунктам вы не ответите?

>Не забывайте что это не ученая дискуссия - а все го лишь обмен мнениями :) И "прямой вопрос" с "прямым ответом" мы задаем на экзаменах а не в топиках на ВиО

В принципе, что и требовалось доказать. Аль все-таки попытаетесь, вдруг уже нагуглили?
Что "кто из них платформа"? Три разных аппаратных платформы, да. Три разных архитектуры процессора, три разных набора команд. Одна программная платформа - ОС Linux, портированная на все три аппаратных платформы.
И мой вопрос, изложенный выше, который ждет вашего ответа по пунктам.
Будете продолжать позориться, аль закрывать вопрос?

Примечание:
Алилуйа)
Вы наконец-то перестали скрывать свое невежество а выплеснули его на нас и оно расцвело пышным цветом)
Спасибо, дорогой доцент неизвестной кафедры, вы очень повеселили меня, и, надеюсь, окружающих. На будущее я вам дам небольшой совет - мы не гуманитарии, пустой болтовней незнание не скроешь, постарайтесь в такой просак не попадать больше, если чего-то не знаете, то молчите.
А ваши слова, служащие распиской в том, что вы о программировании узнали за пять минут до разговора, из вики, достойны увековечения в анналах истории:

>Под Кроссплатформенной задачей мы понимаем переписку между одной Операционной Системой и Другой. Например в мире Мелкомягких Клиентское приложение (Windows XP) разговаривает с Серверной системой (Ну например NT).

> пример этот я привел не случайно - в чем его загвоздка? правильно - никогда ни на каком Си эти две системы друг друга не поймут. Вернее не так - одна другую поймет - вот обратно нечего не получит. Вот и пример одной и той же аппаратной платформы от одного и того же изготовителя без определенного вмешательства специальных библиотек не понимающих друг друга. Что сделал майкрософт? Правильно - слепил .NET в основе у которого - (Вы не поверите !!! вы сейчас будете смеяться !!!) язык XML. И научил этому языку все свои платформы. Во как.

Это, не побоюсь этого слова, гениально))
Меня, как инженера разработчика и аппаратных и программных средств очень, очень радует ваше определение)
И того что такое "кроссплатформенные приложения", и того как работает дотнет (какой байткод? какая виртуальная машина? какой джит? ХМЛ наше все!), и всего-всего прочего.
Вопрос я не закрываю пока, вдруг кто захочет приобщиться к вашей мудрости)
Это, увы, мое последнее дополнение, поэтому я вынужден прекратить эту дискуссию - хотя, собственно, ваш последний ответ делает ненужным какие-либо дополнения)

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

1) То что вы понимаете под кроссплатформенностью, никогда так не называлось. Это клиентско-серверная модель.
Кроссплатформенность же, это свойство программного обеспечения, означающее, что оно может быть запущено на разных программных платформах (как пример - Windows и Linux являются таковыми платформами, Gimp кросплатформенный.
2) В модели клиент-сервер, особенно в энтерпрайз системах в самом деле часто используется обмен данными в формате ХМЛ. Никакого отношения к языку программирования они не имеют, это просто протокол, формат данных.
3) В основе дотнета не лежит хмл, потому что дотнет это не только клиентско-серверные взаимодействия. В основе дотнета лежит виртуальная машина, исполняющая байткод языка msil. А у явы - ЖВМ, исполняющая ява-байткод.
За счет этого программы на шарпе и яве кросплатформенны, т.к. портировать достаточно только виртуальную машину. Сами программы же запустятся без перекомпиляции и под линуксом и под виндой, если там есть вирт. машина.
4) Ассемблер - язык привязанный к аппаратной платформе, поэтому его нельзя использовать для построения приложений, которые можно запускать как на арме, так и х86, спарк и так далее. Линукс - кросплатформенный в плане аппаратной платформе. Это значит я могу его перекомпилять под арм и х86, например. Потому что он написан на С. На асме там только машинно-зависимый код (который лежит в arch), и для каждой архитектуры его портируют отдельно, на асм того процессора, на котором его запускают.

Все компилируемые языки порождают бинарный код. Некоторые (те что не на ВМ) - даже машинный. Приложения на них могут быть кроссплатформенны за счет того, что их можно иногда перекомпилять под другую ос. Это достигается путем использования кроссплатформенных библиотек. Библиотеки кроссплатформенны, т.к. в них есть обертки системных вызовов. Системные вызовы специфичны для ОС, они препятствуют кроссплатформенности.

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

Это вам понятно? Я не знаю что там с вами, может вам плохо, аль вы выпили (если вы в самом деле не идиот, конечно), но надеюсь помутнение пройдет и вы осознаете бред, который несли.
Все, дополнения кончились.
Ответы:
хороший вопрос) почитаю с утреца, а пока спать пока температура упала
> Человек спросил, какой бы выбрать язык, чтобы он был компиллируемым и кросплатформенным.
Коллега - меня в этом вопросе удивила сама необходимость такого языка я и спросил зачем такой язык нужен. я уже в той "захламленной ветке" привел пример задачи выбора "Универсального" колеса для транспорта и привел аналогию между Грузовым (UNIX) Легковым (Windows) Мотоциклетным (Mac OS) и велотранспортом (web) ошибся я может в Mac OS - посчитав его мотоциклетным - скорее это конечно Амфибии - военно промысленного комплекса.
> Вы первым делом назвали ассемблер, рьяно отстаивая что Java и даже C в этом вопросе хуже.
Ну действительно кроме Ассемблера я такого языка не знаю Ассемблер по моей аналогии в общем то каменное колесо (первобытное) в правильном исполнении подойдет ко всем платформам. Надоо вот только каменщика подходящего (Респект Коллеге Pharmakis (Anna Pharmakis))
> Вы доказываете что версии гимпа под винду и под линукс написаны разными разработчиками с нуля, каждая
> заново на своей платформе, и вероятно, на разных языках. В то время как вики однозначно говорит, что гимп
> реализован целиком на С с использованием кроссплатформенных библиотек.
> Что именно тут делает "только ассемблер"
Компилируется в бинарный код на всех (известных) платформах.
# Чтоб и все платформы и чтоб компилировался да еще и в бинарик.. это
# ж правда тока Ассемблер делает
Хе… я тогда тоже имею вопрос к доценту. Итак, ассемблер кроссплатформенный? А можно на нём увидеть хотя бы простейшую программу, подходящую для x86 и ARM? Допустим, для простоты, там и там Linux. Тот же Qt подобное умеет очень давно.
# Дополнение #4
Насчет определения ассемблера - это да. Но разве gcc не скармливает Gnu assembler'у сгенерированный код? Неужто из binutils он только в линковщике нуждается?
> Плюс замечу, что английский вы тоже не знаете, т.к. в вашей цитате черным по белому написано:
Ну если Вы уже wiki верите Коллега - я не знаю какими аргументами Вам доказывать и рассказывать историю создания высокоуровневых языков программирования.. А тем более теорию компиляции или обработки низкоуровенывых машинных команд. Вы с пеной у рта доказываете вполне очевидне вещи - но забыли о малом кроссплатформенность имеет очень узкие задачи. И они не решаются болтовней переписке.
> Итак, ассемблер кроссплатформенный?
На сегодня Intel - де факто единый процессор и для Win и для Mac OS и для Linux ... Вы собираетесь выдавать разные машинные коды одному и тому же процессору... Странно - никогда бы не подумал.
Вопрос знатоку: назовите все известные Вам платформы и что Вы понимаете под этим словом
Не забывайте что это не ученая дискуссия - а все го лишь обмен мнениями :) И "прямой вопрос" с "прямым ответом" мы задаем на экзаменах а не в топиках на ВиО
Ух ты :
> Одно на ARM, второе на SPARC, третье на x86. На всех крутится linux. Что в данном случае можно сказать о
> кроссплатформенности программы на C, программы на Java, программы на языке ассемблера?
Так потрудитесь осветить кроссплатформенность Linux  - а мы послушаем.
Для тех кому все еще интересно на-почитать. Платформой вообще то мы называем Операционную Систему (де факто) и все ПО на ней написанное. Редко когда (бывает конечно) нас интересуют аппаратная платформа. Сам Майкрософт вон уже аппаратных платформ наваял штук пять (включая мобильную) а программных платформ - уй - и тебе клиентские и тебе серверные и тебе мобильные - тьма. Чёрт ногу сломит. Под Кроссплатформенной задачей мы понимаем переписку между одной Операционной Системой и Другой. Например в мире Мелкомягких Клиентское приложение (Windows XP) разговаривает с Серверной системой (Ну например NT). пример этот я привел не случайно - в чем его загвоздка? правильно - никогда ни на каком Си эти две системы друг друга не поймут. Вернее не так - одна другую поймет - вот обратно нечего не получит. Вот и пример одной и той же аппаратной платформы от одного и того же изготовителя без определенного вмешательства специальных библиотек не понимающих друг друга. Что сделал майкрософт? Правильно - слепил .NET в основе у которого - (Вы не поверите !!! вы сейчас будете смеяться !!!) язык XML.  И научил этому языку все свои платформы. Во как.
Мне очень приятно Коллега что Вы меня цитируете. Правда приятно... Но к сожалению ничего вразумительного ни из Ваших Дополнений ни из этой дискуссии в целом я так  и не вынес. Вы мне пытаетесь доказать что Солнце восходит на Востоке, а Заходит на Западе, и рьяно с пеной у рта продолжаете утверждать что я (по-Вашему) начитался Гугла и всем рассказываю абсолютно обратное - что это не Солнце, а Луна восходит на Востоке... наша дискуссия мне напоминает старую присказку о том как Безрукий выхватил кинжал и за Безногим побежал, Слепой увидел это дело и все Глухому рассказал... Где правые - где виноватые, кто чего напереводил не так и с какого Ассемблера ничего не понятно. О Нашей с Вами гениальности будут песни слагать и греченвую кашу назовут "ДоцентАмонРания"
К Кроссплатформенным задачам Информационных Технологий мы относим такие интересные аббревиатуры как  SOAP CORBA .NET и платформами занимаемся следующими: Windows, UNIX (variety of), MAC OS, IBM (AS/400 as an example), Mobile (iOS, Droid etc) каждая из платформ решает свои задачи и у каждой из платформ есть свои преимущественные языки и компиляторы. Когда создается программный продукт для продажи (ну или широкого применения) Например Адоби - команда разработчиков прежде всего изучает особенности данной платформы - как у нее с памятью, какой процессор подёргать и в сколько нитей (threads) , как реализована шина данных и как она разговаривает с Дисковой Системой - ну это для знатоков штучка конечно. Ну еще есть такая неумолимая сфера общения как сеть. Давно и навсегда исчезли "самозакопанные" внутри себя процесоры и микроконтроллеры. Все они на сегодня одна большущая сеть. И Использовать один язык просто невыгодно и более того - опасно.  Поэтомы во всем мире существуют опрееленные законы и преимущества одного языка перед другим.  Прежде всего они - платформенно зависимы.
Видите - Вы внятно объяснили то что невнятно ПО-РУССКИ пытался объяснить Вам я - К Сожалению мои познания всех русских терминилогий закончились в ХХ веке. И Вам очень рекомендую не перенапрягаться а читать литературу в Оригинале. Ваш экскурс во введение в программирование для 8 класса меня позабавил. Ну ладно - Конечно все так и есть. Я и не в коем случае не пытался оспаривать этот поток познания. И поверьте мне я не из Гугла знаю как работают системы - я их сам давно - очень давно пишу, внедряю, хороню и опять пишу внедряю, опять хороню и так далее... Наши с Вами задачи разные - я пишу системы Информационных Технологий и решаю Бизнес задачи. Вы скорее всего решаете Графические или Контроллерные задачи - результатом выполнения которых становятся все равно - бизнес задачи. А все остальное - это дискуссия ни о чем. Так что можете присввоить себе звание победителя если Вам так хочется - но мой вопрос все равно остался неотвеченным. Зачем Вы используете кроссплатформенные языки программирования - пусть это будет java J2EE или Javascript (хи хи хи)
Да еще одно дополнение - Почитайте ка нибудь о Высокоуровневых языках и их развитии - Ну скажем так языках выше языков Четвертого Поколения (4GL) И там поймете что в общем то язык программирования - это просто способ вызова одной информации другой информацией ...
Да нафиг кому та кроссплатформенность языков нужна. Берите виртуальную машину Java и пользуйтесь. В системах мягкого реального времени  вся ставка делается на полную виртуализацию. Т. е. пользователь работая за любым компьютером в любой операционной среде может выполнять приложения так как это ему удобно.
В системах с жесткими рамками на время запрос/ответ фокус с Java и виртуализацией не пройдет. В системах реального времени нужны ASM и C. Иначе может например ракета не туда улететь...
Вообще искать какую-то волшебную таблетку для всех случаев это типичный подход ботана.


12 лет назад

RPI.su - самая большая русскоязычная база вопросов и ответов. Наш проект был реализован как продолжение популярного сервиса otvety.google.ru, который был закрыт и удален 30 апреля 2015 года. Мы решили воскресить полезный сервис Ответы Гугл, чтобы любой человек смог публично узнать ответ на свой вопрос у интернет сообщества.

Все вопросы, добавленные на сайт ответов Google, мы скопировали и сохранили здесь. Имена старых пользователей также отображены в том виде, в котором они существовали ранее. Только нужно заново пройти регистрацию, чтобы иметь возможность задавать вопросы, или отвечать другим.

Чтобы связаться с нами по любому вопросу О САЙТЕ (реклама, сотрудничество, отзыв о сервисе), пишите на почту [email protected]. Только все общие вопросы размещайте на сайте, на них ответ по почте не предоставляется.