байт код

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

Модератор: Модераторы

Re: байт код

Сообщение stanilar » 29.04.2015 16:49:05

pda писал(а):Крупные проекты вынуждены держать фермы компиляции


Даже не представляю, что случится с компьютером пользователя, когда С# или J начнет компилировать такой проект на его компьютере. Единственный способ избежать этого - скомпилировать проект заранее, как и на с++.

pda писал(а):Для кросс сборки потребуется иметь тулчейны для всех платформ, причём в принудительном порядке и это всё равно не гарантирует работы программы на платформе, отличной от платформы разработчика, где он тестировал.


Думаете байт код решит эту проблему? Скорее он создаст несколько новых, но уже принципиальных:
1) невозможность узнать истинную причину ошибки на той или иной платформе.
2) невозможность повлиять на решение проблемы.

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

Байт код будет удобен для небольших и несложных проектов. Что и определит его целевую нишу и развитие.

Добавлено спустя 2 минуты 16 секунд:
скалогрыз писал(а):классная фраза для начала срача C vs Pascal


Ну зачем так грубо? "Любезный обмен мнениями профессиональными программистами на профессиональном форуме"
stanilar
постоялец
 
Сообщения: 289
Зарегистрирован: 09.03.2010 19:09:02

Re: байт код

Сообщение pda » 29.04.2015 17:16:13

stanilar писал(а):Даже не представляю, что случится с компьютером пользователя, когда С# или J начнет компилировать такой проект на его компьютере.

Там, как ни странно нагрузка на синтаксический анализ основная. Байт-код обычно транслировать проще.

stanilar писал(а):невозможность узнать истинную причину ошибки на той или иной платформе.

Нет. Если на одной из платформ байт-код не транслируется корректно, то это уже проблема в aot-компиляторе и исправлять её надо там.

stanilar писал(а):Байт код будет удобен для небольших и несложных проектов. Что и определит его целевую нишу и развитие.

Я, кстати, сам не фанат байт-кода, если что. :) Однако "Java = Enterprise" говорит об обратном. ;) Ещё Android можно добавить. Там есть и весьма тяжёлые проекты.
Аватара пользователя
pda
постоялец
 
Сообщения: 303
Зарегистрирован: 27.05.2005 19:59:53

Re: байт код

Сообщение *Rik* » 29.04.2015 17:17:50

stanilar писал(а):
*Rik* писал(а):Как раз наоборот, Java не только жива, но и способствовала появлению C# и в настоящее время эти технологии очень востребованы.


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

Кстати, ни С#, ни JAVA еще не отменили Си, частью которого и является паскаль. В этом связи можно провести очень интересное наблюдение - FPC может компилировать под разные платформы, а вот C# и Dalvik не очень (Я еще не видел полноценных продуктов C# на Androide, и продуктов под Dalwik на винде).

У Вас не верное представление о технологии в принципе. Компилятору в байт-код не нужно компилировать под разные платформы, он компилирует в вымышленные инструкции виртуального процессора. Такой код выполняется виртуальной машиной. Машина является платформо зависимой, байт-код нет. Т.е. что-бы байт код полученный с помощью компилятора C# работал на линуксе, нужно сделать под линукс виртуальную машину, которая будет выполнять этот байт код, и точно так-же mac, сделайте под него машину, код будет работать на mac или другой ос без переделок и перекомпиляций. Вы наверно не видели mono.
Dalvik - это и есть виртуальная машина. Скорее всего реализация под Windows есть, Delphi же использует какую-то машину для запуска и отладки android приложений.
Аватара пользователя
*Rik*
постоялец
 
Сообщения: 426
Зарегистрирован: 19.04.2011 12:18:51
Откуда: Урал

Re: байт код

Сообщение stanilar » 29.04.2015 20:00:01

pda писал(а): Байт-код обычно транслировать проще.

Сомневаюсь что запуск проекта типа Autocad уложиться в привычные 10-15 секунд.

pda писал(а):Однако "Java = Enterprise" говорит об обратном.

Скорее "Oracle = Enterprise" или "internet = Enterprise". Java в данном случае выступает в роли самого простого стандартного скриптового языка для разных направлений. Собственно, даже к Delphi проектам можно прикрутить Java библиотеку, и потом нанимать Java прогеров на саппорт (просто потому, что вакухи со словом pascal никто не смотрит. А тут java, и все знают что это Enterprise, и все ее учат. Наблюдая зоопарк java технологий, прихожу именно к такому мнению.
То, что скипт-программисты получают больше программистов неудивительно, скриптеры чаще сидят ближе к бизнесу. А задач для программистов в бизнесе не так много.

pda писал(а): Ещё Android можно добавить.

Android написан на Jаva? Насколько я знаю мир Android, самые тяжелые проекты в нем именно сишные. Во времена активного играния с разными статистиками (жаль не подумал написать тогда что-то типа статьи) осознал, что Android проекты, с числом загрузок > 1000 (не считая игрулек), в большинстве написаны на Си или с использованием Си. Java в Android скорее язык создания визуального интерфейса, что соответствует его вышеизложенной роли.


pda писал(а):Если на одной из платформ байт-код не транслируется корректно, то это уже проблема в aot-компиляторе и исправлять её надо там

Вот именно про это я и говорил. :D Цепочка платформа-aot-программа гораздо сложнее цепочки платформа-программа, и привлекательность ее для сложных проектов сомнительна.


*Rik* писал(а):Машина является платформо зависимой, байт-код нет

А программа является платформо зависимой?
stanilar
постоялец
 
Сообщения: 289
Зарегистрирован: 09.03.2010 19:09:02

Re: байт код

Сообщение *Rik* » 29.04.2015 20:19:18

stanilar писал(а):
*Rik* писал(а):Машина является платформо зависимой, байт-код нет

А программа является платформо зависимой?

Программа транслированная в байт-код является платформо независимой и будет работать на любой платформе, для которой существует машина.
Для примера страница загрузки Java:
http://www.java.com/ru/download/manual.jsp?locale=ru
Слева указаны доступные операционные системы:
Windows, Mac, Linux, Solaris
Приложение Java, единожды скомпилированное в байт-код будет работать в Java-машине на любой из этих операционных систем без доработок и переделок.

Точно так-же программа написанная в C# и скомпилированная в среде mono, будет работать в mono-машине без пересборки на поддерживаемых ОС и платформах:
https://ru.wikipedia.org/wiki/Mono
Реализации Mono существуют для следующих операционных систем: Windows, Linux, BSD (FreeBSD, OpenBSD, NetBSD), Solaris, Mac OS X, Apple iOS, Wii. Поддерживаются платформы: s390, SPARC, PowerPC, x86/x86-64, IA64, ARM, Alpha, MIPS, HPPA.
Аватара пользователя
*Rik*
постоялец
 
Сообщения: 426
Зарегистрирован: 19.04.2011 12:18:51
Откуда: Урал

Re: байт код

Сообщение Лекс Айрин » 29.04.2015 20:43:16

stanilar писал(а):Именно сейчас они и стали очень востребованы. Что говорит о том, что байт код имеет очень опосредованное отношение к понятию "разные платформы".


Скорее, это говорит о том, что этот механизм удобен для производителей компиляторов. Что не обязательно равнозначно удобству для пользователя.
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград

Re: байт код

Сообщение pda » 29.04.2015 22:44:34

stanilar писал(а):Сомневаюсь что запуск проекта типа Autocad уложиться в привычные 10-15 секунд.

Ну, aot можно во время инсталляции проводить. А вообще трудно судить. Тут надо тесты устраивать. Среднепотолочные оценки могут отличаться на порядок. Если байткод оптимизирован для посткомпиляции, то там уже есть серии указаний как раскрывать, как оптимизировать, как векторизировать. И остаётся почти табличная замена. А это на современных камнях может осуществляться на скоростях до десятков и сотен мегабайт в секунду.

stanilar писал(а):Java в данном случае выступает в роли самого простого стандартного скриптового языка для разных направлений.

Не скриптового. Самого что ни наесть компилируемого. Причём с туевой хучей библиотек подо всё. Тут можно долго гадать, почему она взлетела (а произошло это задолго до оракла), но насколько я помню, народ действительно вёлся на обещание скомпилируй раз - запускай везде. Это потом выяснилось, что ME, SE и серверные немного несовместимы, до jit оно было адски тормозным, но... Вот. :)

stanilar писал(а):То, что скипт-программисты получают больше программистов неудивительно, скриптеры чаще сидят ближе к бизнесу.

Знаете, вы или не понимаете что такое скрипт или не правильно представляете себе Java. Java <> JavaScript, это не скрипт язык ни разу.

stanilar писал(а):Android написан на Jаva?

Хороший вопрос. Я не занимался процентным анализом, но да. Android это Java код + несколько популярных библиотек решающих разные задачи. В примерах Android NDK, позволяющем писать под него на C/C++ обращение к API системы идёт через JNI, т.е. вызываются Java-методы.

stanilar писал(а):Насколько я знаю мир Android, самые тяжелые проекты в нем именно сишные.

Фейсбучное приложение достаточно тяжёлое, например?

stanilar писал(а):Цепочка платформа-aot-программа гораздо сложнее цепочки платформа-программа, и привлекательность ее для сложных проектов сомнительна.

Конечно сложнее, но насчёт привлекательности... Вы заставили меня вспомнить Асприна. "- Но я же уважаемый маг! - Правда? Кем?"

По факту, один из самых популярных языков - Java, применяет байткод и jit. Имеет стороннее aot решение для Ъ-enterprise. Наступающий ему на пятки .NET - байткод и jit, а теперь переползает на байткод и aot. И да, озвученные вами проблемы, вроде глюков aot компилятора вылазят. Только это не останавливает. Unity3D, платформа разработки игр, совершившая маленькую революцию и чуть не задушившая гагантов, вроде Cryengine и Unreal engine написана на mono. Т.е. сейчас вообще байткод. А с открытием M$ большей части инфраструктуры .NET скоро станет байткод + aot. Впрочем у них и свои планы на aot были.
Аватара пользователя
pda
постоялец
 
Сообщения: 303
Зарегистрирован: 27.05.2005 19:59:53

Re: байт код

Сообщение stanilar » 30.04.2015 00:26:10

pda писал(а):Знаете, вы или не понимаете что такое скрипт или не правильно представляете себе Java. Java <> JavaScript, это не скрипт язык ни разу.


Это как вопрос о пути развития приложения: через скрипты или плагины?

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

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

И кстати, к вопросу о скрипт/не скрипт, после того, как google выпустит ChromeOS, станет ли JS нативным?

pda писал(а):Unity3D...написана на mono


Скорее для mono, а не на mono. Исходники ведь закрыты. Да и гигантов типа Flash (а уж тем более Cryengine и Unreal engine), как Вы правильно заметили, оно не задушило( cкорее это сделает three.js). А вот three.js имеет очень большие шансы похоронить Unity3D, в силу большей приспособленности к целевой аудитории.
Насколько я помню раскрутку Unity3D, оно позиционировалось как новое решение в мире браузеров. Потом оно стало больше GameEngine, чем Flash killer, и вплоть до Вашего поста я думал что оно уже умерло.

Кстати, забавное наблюдение: о Cryengine и Unreal engine все знают потому, что сначала увидел программы на них, о Unity3D все знаю потому, что оно написано на mono.

pda писал(а):обращение к API системы идёт через JNI


Это подтверждает тезис о том, что j является самым распространенным решением для скриптования.

Всегда думал что Android вырос из мира линукса, и думал что в этом зазеркалье любят си и ненавидят с++.

pda писал(а):Конечно сложнее, но насчёт привлекательности... Вы заставили меня вспомнить Асприна. "- Но я же уважаемый маг! - Правда? Кем?"


Бизнесу плевать на меркантильные интересы простых программеров, но мы же с Вами не в совете директоров майкрософта.

Добавлено спустя 2 минуты 42 секунды:
*Rik* писал(а):Программа транслированная в байт-код является платформо независимой


Т.е. и на androide c 32 Мб памяти, и на винде с 32 Гб приложение будет работать одинаково?
stanilar
постоялец
 
Сообщения: 289
Зарегистрирован: 09.03.2010 19:09:02

Re: байт код

Сообщение pda » 30.04.2015 01:40:11

stanilar писал(а):Это как вопрос о пути развития приложения: через скрипты или плагины?

Я не понимаю к чему это сравнение. Java - компилируемый язык.

stanilar писал(а):как Вы правильно заметили, оно не задушило

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

stanilar писал(а):cкорее это сделает three.js

О, а вы оптимист. :) Пока JavaScript - сос^W несколько медленноват. Нормальной замены видеопроигрывателю на youtube сделать не могут. (Он есть, но процентов на 30 тормознее flash версии.) Повсеместной замены flash тоже пока не выходит.

stanilar писал(а):Кстати, забавное наблюдение: о Cryengine и Unreal engine все знают потому, что сначала увидел программы на них, о Unity3D все знаю потому, что оно написано на mono.

Я не знаю откуда такое наблюдение, обо всех них известно благодаря маркетингу. Компании рекламировали движки и выпускали игры, чтобы привлечь покупателей. Ну и игроки были в курсе какой графон им принесёт следующая версия. Unity3D так же изначально рекламировалось для разработчиков, только своей игры они не делали. Не думаю, что многие игроки знают на чём какой движок написан. Я знаю, потому что интересовался. Не более не менее.

stanilar писал(а):Это подтверждает тезис о том, что j является самым распространенным решением для скриптования.

Я опять не понимаю, что вы вкладываете в термин "скриптование". Так что подтверждается пока что-то только в вашей голове, уж извините. Есть языки, предназначенные для написания сценариев (и встраивания). Например, реализация JavaScript встраивается в браузеры. python, lua могут встраиваться в любую программу, хотя на python вполне можно писать самостоятельные программы. php используется для написания "самостоятельных" программ, работающих в контексте web-сервера. Хотя можно и gui программу сделать.

Основной фишкой скриптовых языков является то, что их реализации обычно рассчитаны (а иногда и сами языки имеют конструкции, рассчитанные на это, типа eval) на выполнение прямо из исходников во время работы главной программы. Скрипты могут быть запущены, остановлены и изменены без остановки и перезапуска основной программы.
Java не такая. Да, там можно извратиться с динамической загрузкой классов, но обычно это не делается, так же как не делается динамическая загрузка so/dll ради обновления куска программы. Да и не удобно это.

Так что я решительно не понимаю что вы такое говорите про "скриптовый язык".

stanilar писал(а):Всегда думал что Android вырос из мира линукса, и думал что в этом зазеркалье любят си и ненавидят с++.

Я из этого зазеркалья. Тут всё в порядке с "крестами" :). Прикладной софт в основном на них и написан. А ядро... Ну, там свои потребности.

stanilar писал(а):но мы же с Вами не в совете директоров майкрософта.

Дывелоперз. Дывелоперз. Дывелоперз.
У простых программеров думаете сильно иные интересы? Ух ты, я могу налабать прогу на C# и она будет сразу работать и на моём десктопе и на surface pro и на surface с arm. А ещё можно будет даже попробовать сплавить её на маки и этим самым линуксоедам. :)

stanilar писал(а):Т.е. и на androide c 32 Мб памяти, и на винде с 32 Гб приложение будет работать одинаково?

Да, если ей хватит 32 мегабайт. А вообще у вас какие-то сильно странные представления об объёме памяти смартфонов. Криокамера что ли протекла? "Добро пожаловать в будущее"! (C) Futurama. И как вам из 2002 сразу в 2015 переместиться? ;-)
Аватара пользователя
pda
постоялец
 
Сообщения: 303
Зарегистрирован: 27.05.2005 19:59:53

Re: байт код

Сообщение stanilar » 30.04.2015 04:14:04

pda писал(а):Пока JavaScript - сос^W несколько медленноват.


Но более подходит своей целевой аудитории, чем юнити, в период его заталкивания в браузеры. Не видел ни одного коммерческого сайта, работающего с юнити, а вот three.js используется все шире и шире.

pda писал(а):реализация JavaScript встраивается в браузеры. python, lua могут встраиваться в любую программу


Так же как и java машина. Насколько понимаю, именно задел с тех времен, когда Delphi хотели применить для клепания форм в java ( а java для написания логики в Delphi), сейчас и используется в связке delphi+android (ровно как и FPC-Android).

Кстати, а почему Java выпилили из браузеров? Вроде как она была там?

pda писал(а): Скрипты могут быть запущены, остановлены и изменены без остановки и перезапуска основной программы.


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

pda писал(а):Java не такая. Да, там можно извратиться с динамической загрузкой классов, но обычно это не делается, так же как не делается динамическая загрузка so/dll ради обновления куска программы. Да и не удобно это.


Подождите, подождите... В java программы не принято встраивать скрипты/плагины?

pda писал(а):Ух ты, я могу налабать прогу на C# и она будет сразу работать и на моём десктопе и на surface pro и на surface с arm.


Не знаю, будете ли Вы смеяться или плакать после моего поста, но в настоящее время такой возможностью обладает только JavaScript.

pda писал(а):Да, если ей хватит 32 мегабайт.

А загрузка программы? Dalvik, насколько я знаю, умеет делать это по разному.
stanilar
постоялец
 
Сообщения: 289
Зарегистрирован: 09.03.2010 19:09:02

Re: байт код

Сообщение pda » 30.04.2015 16:00:26

stanilar писал(а):Так же как и java машина.

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

stanilar писал(а):Кстати, а почему Java выпилили из браузеров? Вроде как она была там?

Она до сих пор там есть, просто популярность мала. Апплеты провалились из-за неправильного продвижения. Изначально они были тормозные, ограниченные, без мультимедийных возможностей. Не выдержали конкуренцию с flash. А так их и сегодня можно живьём найти.

stanilar писал(а):Собственно отсюда (и не только) и вопрос о разнице между плагинами и скриптами.

Нельзя/можно изменять и запускать без перекомпиляции. В принципе, можно сказать "у меня плагины через скрипты", но это фактически скрипты.

stanilar писал(а):чем больше программирую, тем меньше понимаю чем они отличаются

Скрипт даёт возможность добавить функциональность прямо в работающую программу без её остановки и использования среды разработки с компилятором.

stanilar писал(а):В java программы не принято встраивать скрипты/плагины?

Зависит от программ. В некоторые встраивают. И скрипты пишут не на Java.

stanilar писал(а):в настоящее время такой возможностью обладает только JavaScript.

Таки да, хотя я не понимаю, почему плакать должен именно я. js как раз скрипт-язык, который на лету из исходников превращается в байткод, который потом разгоняется jit или aot. Т.е. это максимально далеко от того пути, который вы нарисовали правильным. А его конкуренты в виде ActiveX от M$ не взлетели ещё во времена господства IE. NaCl от Google похоже готовится повторить его судьбу.

stanilar писал(а):А загрузка программы?

Ну, давайте сейчас с точностью до байта высчитывать. :)
Аватара пользователя
pda
постоялец
 
Сообщения: 303
Зарегистрирован: 27.05.2005 19:59:53

Re: байт код

Сообщение Лекс Айрин » 30.04.2015 16:33:18

pda писал(а): Апплеты провалились из-за неправильного продвижения. Изначально они были тормозные, ограниченные, без мультимедийных возможностей.


Не только и не столько. Ява в браузерах очень понравилась зловредописателям.
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград

Re: байт код

Сообщение скалогрыз » 30.04.2015 17:13:07

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

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

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

Более конкретный пример разницы между плагином и скриптом.

в HTML4 невозможно сделать видео используя только скриптовые (html - как скрипт) средства. По-этому придумали использовать плагин (flash и тому подобные). Плагин исполняется в той же среде что и браузер - доступно системное ПО, используя которое можно загрузить/нарисовать видо. А plugin-API от браузера, используется просто, чтобы получить правильное место на окошечке для отрисовки.

в HTML5 добавился тэг "video", что позволяет воспроизвести виде используя только скрипт (чисты html без установки flash-ей).
скалогрыз
долгожитель
 
Сообщения: 1803
Зарегистрирован: 03.09.2008 02:36:48

Re: байт код

Сообщение stanilar » 01.05.2015 15:50:39

pda писал(а):Таки да ... js как раз скрипт-язык, который на лету из исходников превращается в байткод, который потом разгоняется jit или aot


Но плата за это на уровне языка... Еще ни разу не видел проектов на JS на 1000-2000 файлов, на паскале такие проекты не удивительны.

скалогрыз писал(а):Скрипт же, исполняется в ограниченной среде (песочнице), которое контроллируется приложением.


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

Макросы от MS Office тому действительно хороший пример, потому что как только целью скриптов становится расширение возможностей (а не ограничение и безопасность как в браузере), разница возможностей между плагином и скриптом исчезает, остается только удобство пользователя и программиста.
stanilar
постоялец
 
Сообщения: 289
Зарегистрирован: 09.03.2010 19:09:02

Re: байт код

Сообщение pda » 05.05.2015 14:09:26

stanilar писал(а):Еще ни разу не видел проектов на JS на 1000-2000 файлов

Посмотрите в сторону node.js, там такое вполне себе бывает... :)
Аватара пользователя
pda
постоялец
 
Сообщения: 303
Зарегистрирован: 27.05.2005 19:59:53

Пред.След.

Вернуться в Компилятор / язык программирования

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1

Рейтинг@Mail.ru