Программирование : Dart & Flutter по-русски
???????
И выплевывает машинный)
???????
У пользователя на устройстве, а не у тебя на кудахтири
northelks
ты ваще не слушаешь нас))
northelks
так тебе даже Вадим уже пишет))
???????
Так и вадим не слушает)
Fearless Cry
Короче рантайм это набор функций который вызывается из нашего машинного кода
Fearless Cry
При этом рантайм тоже в машинном коде?
Vadim Lukichev
[
{
"type": "mention",
"text": "@PlugFox"
}
]
Vadim Lukichev
Я не слушаю. Я проходил это, от dart i=1 до mov ax,1 ))
northelks
ты спецом типа сопротивляешься или просто уже троллишь?
???????
И? mov ax это уже машинный код, да?)
northelks
или просто не хочешь/не можешь согласиться?)
???????
Я с удовольствием соглашусь как только пойму
Fearless Cry
Ну это с лёгкостью переводится в машинный код
???????
Серьезно. Я РЕАЛЬНО-РЕАЛЬНО не понимаю
???????
Но это не байт код, да?)
northelks
так тебе уже скинули ссылку
northelks
какой тебе ещё пример нужен))
???????
Давай без: "вот там видос, типа посмотри, там все есть"
northelks
тебе Вадим скинул))
???????
Я вон вики вам скинул, там все есть
Vadim Lukichev
Да, команды ассемблера, которые уже в физические байты "превращаются", но ещё на этапе сборки aot, до запуска приложения на девайсе
???????
А, ну это машинный код да, команды ассемблера?)
northelks
твоя вики никак не относится к дарту
???????
Понял принял, aot не относится к дарту
Fearless Cry
Ну ассемблер это байт код?
northelks
ты ещё скажи, что принято, в африке нету aot
northelks
это будет ещё тупее)
???????
Инструкции процессору
Fearless Cry
А машинный код это что?
???????
10100001 (это я не на х послал, есичо)
Fearless Cry
Это инструкции процессору
northelks
[
{
"type": "link",
"text": "https://github.com/flutter/engine/tree/master/runtime"
}
]
???????
Можешь скриншотами с выделенным местом?
northelks
здесь можно по коду понять, зачем рантайм и что он делает в релизной сборке
northelks
а чайку налить?
northelks
можешь просто почитать название файлов
northelks
тебе будет достаточно
???????
[
{
"type": "link",
"text": "https://github.com/flutter/"
},
"\nТут написано, что это байт код"
]
???????
Ищи, не найдешь - сам дурак
???????
Могу еще ссылку на видеохостинг дать)
northelks
фокс, ты уже просто тупо некрасиво троллишь)
northelks
не делай тут из людей дурачков что не врубаешься
???????
И що с этими командами делает aot?
northelks
играет в пингпонг
northelks
а по утрам в шахматы
???????
Шо ты бесишься то?
northelks
твоему троллингу непонятному))
Fearless Cry
Пользуется ими
???????
Когда? Перед запуском приложения?
Fearless Cry
Во время исполнения
???????
А почему тогда назвали aot?
Fearless Cry
Ты путаешь немного
???????
Если что, я не придуриваюсь, я реально не понимаю вашу позицию.
Fearless Cry
Аот это компиляция перед использованием
???????
Но и не соглашусь пока не пойму. Но я готов понимать и разбираться.
Fearless Cry
А вот скомпиленнвй код уже ичполняясь юзает рантаймлвые команды
???????
Вот мы чото собрали на своем кудахтири, дали пользователю. Дальше у пользователя Чото => AOT => Машинный код => Пользователь жмакает наши кнопочки до посинения
???????
Нет? Поправь цепочку, если я не прав. Думаю все согласимся, в её окончании, что есть машинный код и уже после него пользователь жмакает кнопочки
northelks
[
{
"type": "link",
"text": "https://thosakwe.com/aot-compilation-and-other-dart-hackery/"
}
]
Олжас Сулеймен
[
{
"type": "mention",
"text": "@v392persei"
},
" dart2native тут разница в ключе выхлоп с dartaotruntime или без же?\nВ первом случае бинарь во втором уже запускать через вот рантайме ручками"
]
???????
[
"Падажи, давай как для тупых (статью прочту пока в метро ехать буду), пока диалог есть:\n",
{
"type": "link",
"text": "https://t.me/rudart/147685"
},
""
]
northelks
падажи, ты сначала статью почитай
northelks
там короткий пересказ нашего выше разговора)
northelks
чтобы не городить 100500 новых слов, лучше почитай один раз
???????
Тама про дарт 2.3 и VM
???????
dart2native появился в 2.6, не?
northelks
компилять в релиз дарт только с 2.6 начал?
???????
Я её еще не прочел, есичо
Олжас Сулеймен
Этого можно было добиться раньше
northelks
dart2native это просто упрощение того, что было раньше
Олжас Сулеймен
Сейчас все в одной тулзе
???????
[
"Окей. Статью прочту, хоть тама и повсеместный VM\n\nОбъясните мне\n",
{
"type": "link",
"text": "https://t.me/rudart/147685"
},
""
]
Vadim Lukichev
Конкретно по aot снапшотам не знаю, идея в том, что при aot компиляции генериться именно машинный код, платформенно-зависимый, остальное детали
???????
Эта AOT компиляция происходит у тебя на комьютере?
???????
Почему же не сразу как плюсы Сорцы => машинный код?
???????
Можешь ссылкой на сообщение
Vadim Lukichev
Потому что смесь подходов - JIT и AOT
Олжас Сулеймен
[
"Dart-on-LLVM - Dart - Medium\n",
{
"type": "link",
"text": "https://medium.com/dartlang/dart-on-llvm-b82e83f99a70"
}
]
???????
Тобишь авторам движка так удобнее? Сначало собрать в байткод, затем дальше либо отдать JIT + VM, либо сразу собрать машинный?
???????
И все это у тебя на компьютере, еще до того как отдать пользователю?
Олжас Сулеймен
Вот тут вроде почему не сразу не получится расписанно, хотя ...
???????
Или что ты имел ввиду?
Vadim Lukichev
Промежуточный код нужен для платформо-независимой разработки. Под конкретную платформу, с ее машинными инструкциями уже преобразует либо JIT на лету в девайсе пользователя, либо AOT на девайсе разработчика. А вообще этапы DART-AST(kernel, dill)-IL(это уже в виртуалке на девайсе пользователя или AOT) - машинные инструкции
Олжас Сулеймен
Типовые беки на дарте меньше
Vadim Lukichev
И тут главное не путать runtime тот, что flutter engine и виртуалку dart, это конечно разные вещи
???????
Ага, идею что ты хочешь донести - понял (пока не принял, но тоже весьма похоже на правду по крайней мере для чистого дарта, чо там у флатера пока даже в голову не беру). Пока 100% понял вот что для AOT: Сорцы => Байт Код => ? => ? => AOT => ? => ? => ? => Машинный код + Дарт рантайм отвечающий за GC и проверку типов => Работающее приложение у пользователя
???????
[
"Если что, я не издеваюсь и не копротивляюсь, в этих вопросах я реально не разбираюсь, но и на веру просто так не приму (по крайней мере если это не буквами прямо как для тупых не строка с ",
{
"type": "link",
"text": "https://dart.dev/"
},
" не противоречущая другим строкам оттуда)"
]
???????
[
"Сча листаю\n",
{
"type": "link",
"text": "https://dart.dev/tools/dart2native"
},
"\n",
{
"type": "link",
"text": "https://dart.dev/platforms"
},
"\n",
{
"type": "link",
"text": "https://github.com/dart-lang/sdk/wiki/Snapshots"
},
""
]
Evgeny Cherkasov
Я так понимаю что скомпилированное Flutter приложение это типа dll'ка, которая сама по себе работать не может, и к ней идёт ещё запускающий код
Dmitriy Ferrum
И всё-таки, есть кто поможет решить задачу как вывести пользователей по полям lat, long в firebase database на google map? Пожалуйста. Я в душе не могу понять как вывести их туда маркерам...
Evgeny Cherkasov
Почему почти?
Fearless Cry
потому что это не машинный код
Fearless Cry
но очень близок
???????
[
{
"type": "mention",
"text": "@v392persei"
},
" ",
{
"type": "mention",
"text": "@FRapra1"
},
" \nЯ правильно понимаю, что когда мы говорим про dart2native мы можем получить одно из двух:\n1) что очень похожее на бинарь без байткода\n2) aot снапшот, которому нужна будет VM?"
]
Fearless Cry
второе звучит как нет
???????
[
"Ну там жеж есть опция получить \"aot\" а не exe\n",
{
"type": "link",
"text": "https://github.com/dart-lang/sdk/wiki/Snapshots"
},
""
]
???????
И вот тута написано, что это прям не разу не машинный код
???????
Тк универсален под разные архитектуры процов, и самое главное "and lack compiled code",
???????
И когда вы говорили про "машинный код" вы ведь не имели ввиду именно эти самые снапшоты? Иначе это еще сильнее выглядит в моих глазах как неправда
Vadim Lukichev
Они со своими "снапштотами" разных видов... Это не такой снапшот))
???????
А можешь дать ссылку на правильный?
???????
[
"Желательно на ",
{
"type": "link",
"text": "https://github.com/dart-lang/sdk/wiki/"
},
" или ",
{
"type": "link",
"text": "https://dart.dev/"
},
""
]
???????
Ну этот снапшот, как я понял, скармливать именно VM
???????
даже не смотря на то, что его рожает dart2native
???????
Но рожает его именно с опцией "aot", а не по умолчанию, если я все правильно понял из прочитаного
Vadim Lukichev
Нет правильного, есть разные. Ссылки там есть, сейчас не подручно мне - ищи AST (abstract kernel tree, он же dill, kernel snapshot), дальше IL(он же IR), flow graph и Вячеслав Егоров)) Как это все доставать из dart вплоть до машиногт кода тоже есть
???????
Мне не надо доставать, мне надо понять что они делают) Спасибо, если обнаружу, кину в чят.
???????
Падажи, а это и было про Kernel Snapshot из AST
Evgeny Cherkasov
команды ассемблера имеют однозначное соответствие машинным командам, так что по сути это одно и тоже
???????
Остальные 2: JIT Application Snapshots (app-jit) - JIT как понятно из названия AOT Application Snapshots (app-aot) - а это как раз тот снапшот который ты с доп флагом можешь сгенерить, там прям в описании это написано
Fearless Cry
я сказал что это близко к нему
Vadim Lukichev
[
{
"type": "link",
"text": "https://stackoverflow.com/questions/55116107/in-dartlang-what-are-the-differences-between-dill-and-kernel-snapshot"
},
"\nЯ же говорю - они со своими снэпшотами разных видов всех запутали."
]
???????
Так, отсюда вынес, что dill равнозначно snapshot и является просто их расширением Вынес что JIT у нас на iOS (если верить отвечающему), тому что не разрешен AOT (на википедии читал ровно противоположное). Вынес что JIT хорошь когда надо быстро запуститься и отработать, что логично.
Fearless Cry
на айос аот...
Fearless Cry
и на андроид аот...
???????
Но вообще ничего не вынес про какието четвертые снапшоты полностью состоящие из машинного кода
???????
И на SO и на вики написаны противоположные вещи
???????
Поэтому и говорю, не хочу верить википедии (большой) и SO, тем более ни там ни там не написано про снапшоты с машинным кодом...
???????
[
{
"type": "mention",
"text": "@FRapra1"
},
" я реально не придираюсь, прост вот правда, согласись, объективно не одного пруфа, даже самого захудалого, как это работает нету.\nА разобраться я и правда хочу, но слишком тупой, чтоб просто сесть и перебрать все их сорцы..."
]
Vadim Lukichev
Так и понятно, никому верить нельзя. Поэтому я и прошел весь путь dart до машинного когда в релизной сборке.
???????
Если освободишься и всеже наткнешься на ссылочку (оооочень желательно с сайта дарта в описании какогонить инструмента или их вики) - будь добр, не забудь.
???????
А то както стремно, писать и вдохновляться инструментом и даже не мочь ответить, во что он собирает...
Vadim Lukichev
Есть известные ссылки от известных разработчиков дарта, ты скорее всего их видел, но продублирую тут)) И если не боишься китайского)) есть хорошая инфа по мобильным раскладкам, как там, что в бинарниках и soшниках храниться
???????
Китайского я в последнее время все сильнее боюсь)
???????
Шутка. Ну я просто не пойму, а переводчик не переведет. К томуже, вот тут в чате не последние люди сидят и то на яблоках, конфетах и апельсинах не могут заполнить здоровые пробелы в этом вопросе, подкрепляя их чем то существеннее предположений.
???????
[
"Вот тут чото написано, но как я понял, не дописано\n",
{
"type": "link",
"text": "https://mrale.ph/"
},
"\n",
{
"type": "link",
"text": "https://mrale.ph/dartvm/"
},
"\n\nИ тк обновление было год назад - вряд ли покрывает актуальной сути dart2native"
]
Vadim Lukichev
[
{
"type": "mention",
"text": "@PlugFox"
},
" \n",
{
"type": "link",
"text": "https://mrale.ph/dartvm/"
},
"\n",
{
"type": "link",
"text": "https://github.com/mraleph"
},
"\nВот инфа от человека, который непосредственное отношение к разработке движка имеет. Я думаю, такого уровня авторитета, тебе должно хватить)) Правда мне не сразу зашло, а раза с 10го, с учетом проваливания в исходники, но если до конца прочтешь с должным вниманием, у тебя 99% вопросов отпадут."
]
Vadim Lukichev
Норм, все актуально, на том уровене чтобы понять. Если ты только контрибьютить не собрался)
???????
Ну я про то, что там про VM (по заголовкам пробежался) и JIT и тем самым AOT снапшотам - которые не "те"
Vadim Lukichev
Просто после прочтения, ты будешь "снапшоты" от "снапшотов" ))отличать. Реально просто много инфы в инете противоречивой, а с учетом скорости разработки движка...
???????
Да-да, это я все себе в личку закидываю для будующего прочтения
???????
Просто как не стараюсь - не нахожу "тех" снапшотов и информации, что на пользовательское устройство доставляется заранее подготовленный машинный код. Что такое runtime с этой картинки сегодня понял, это отдельная дартовая часть, управляющая GC и типами. Вот теперь надо хоть какието подтверждения найти, что AOT на ней это название машинных кодов и/или прямых инструкций процессору и памяти, а не супербыстрый байт код преобразумый перед запуском в машинный.
Vadim Lukichev
[
{
"type": "mention",
"text": "@PlugFox"
},
" А это внутренности мобилы на популярном языке))\n",
{
"type": "link",
"text": "http://gityuan.com/flutter/"
},
""
]
???????
Отсюда я только картинки пойму
???????
[
"Тут рассматривается сугубо JIT и AOT в тех рамках о которых говорю я (но вся статья по сути про VM):\n\n",
{
"type": "pre",
"text": "There is usually a lot of confusion around how performance characteristics of JIT and AOT compare. JIT has access to precise local type information and execution profile of the running application, however it has to pay for it with warmup. AOT can infer and prove various properties globally (for which it has to pay with compile time), but has no information of how the program will actually be executing - on the other hand AOT compiled code reaches its peak performance almost immediately with virtual no warmup. Currently Dart VM JIT has best peak performance, while Dart VM AOT has best startup time.\n\n",
"language": ""
},
"Тобишь автор учитывает тот момент, что AOT дольше \"разогревается\" (а при чем тут этот самый разогрев если оно машинный код?)"
]
Vadim Lukichev
По-моему здесь разогреваеться JIT
Dmitry Zakharov
[
{
"type": "link",
"text": "https://youtu.be/KNcP8z0hWqs"
}
]
???????
Не, даже из названия понятно, кто запускается сразу, а кому подготовка нужна) Тобишь написано: JIT - отрабатывает сразу как могет AOT - подготавливается, но в процессе выдает большую плавность и производительность
Fearless Cry
на удивление гуглом переводится и даже читаемо
Vadim Lukichev
JIT has access to precise local type information and execution profile of the running application, however it has to pay for it with warmup у нас же здесь не уроки английского?))
???????
AOT can infer and prove various properties globally (for which it has to pay with compile time)
Vadim Lukichev
"разогревается" JIT потому, что может быть оптимизация на этапе выполнения, там же машинный код на лету генериться.
Vadim Lukichev
Это про компиляцию, на машине разработчика
???????
Ага, допустим, просто я это все еще не принял на веру, как ты понимаешь)
Dmitry Zakharov
В чем проблема?
Evgeny Cherkasov
JIT нужен "разогрев" для достижения максимальной производительности, но код запускается сразу. Код скомпилированный AOT сразу имеет максимальную производительность, но требуется время на компиляцию перед запуском
???????
[
"Вот у нас и есть обсуждение, что есть\n",
{
"type": "code",
"text": "AOT сразу имеет максимальную производительность, но требуется время на компиляцию перед запуском"
},
""
]
???????
Собственно к этому все и сводится
Dmitriy Ferrum
Спасибо, что обратили внимание. Проблема в том, что я не могу понять вообще с какой стороны подойти к выводу маркеров на карту.
Vadim Lukichev
Как ни странно, AOT может медленне чем JIT работать, но если мы эту тему поднимем, будет еще больше трэш))
Fearless Cry
Ну регулярки вот из недавнего
???????
Тут охотно верю, как минимум из за того, что не знает, а где он там выполняется
Evgeny Cherkasov
Ну это как раз не странно. JIT может в процессе исполнения кода что то соптимизировать и дальше генерировать более быстрый код
???????
Но мнеб реально понять как работает этот самый native из dart2native) Чтоб уже потом переходить к вопросу, а как оно во флатере на устройствах.
DVS (Read The F.ng Manual) Studio (NoHello)
Блин. На день ушел на форум - 1.5к пропущенных сообщений. How dare you!))
???????
Потому что прям 100% мы уже знаем, что есть aot снапшоты дарта и соответсвенно AOT, которое собирается именно на конечном устройстве (собственно про них и статья по твоей ссылке). Теперь очень надо понять, а есть ли те, что достигают устройства пользователя уже сугубо состоящих из только машинных кодов.
Evgeny Cherkasov
[
{
"type": "link",
"text": "https://github.com/dart-lang/sdk/wiki/Snapshots"
},
" тут написано что AOT snapshot is CPU specific.\nТо есть это надо понимать машинный код."
]
???????
[
"Да, в статье ",
{
"type": "link",
"text": "https://mrale.ph/dartvm/"
},
" от разработчика дарта рассматривает только AppAOT, который генерируется с помощью ",
{
"type": "code",
"text": "dart2native -k aot"
},
" и которому нужен запускатор"
]
???????
Ты это слово нашел в описании JIT вообще)
???????
А тут вообще ни у кого сомнений нету, что JIT это байткод собирающийся по ходу работы программы)
Evgeny Cherkasov
Там речь про application snapshot. Они двух видов - JIT и AOT
Vadim Lukichev
[
{
"type": "link",
"text": "https://github.com/flutter/flutter/wiki/Flutter-engine-operation-in-AOT-Mode"
}
]
???????
трех и более (если верить Вадиму)
Evgeny Cherkasov
JIT это способ компиляции
Vadim Lukichev
Я их не считал)) Но понятие снапшоты сплошь и рядом, тем более с разными трактовками
Vadim Lukichev
Во-во, это и есть "машинный код"
???????
JIT это байткод на стороне устройства. У тебя JIT именно во время дебагинга, вот тебе картинка
???????
Тоесть в девелопе-дебагинге у нас машинный код?)
???????
А виртуальная машина ему просто чтоб не скучал?
Evgeny Cherkasov
Это к чему? Я выше про это написал
Evgeny Cherkasov
JIT это процесс компиляции байт кода в машинный
Vadim Lukichev
Не вижу связи. В девелопе JIT, в машинный код превращается на мобиле
???????
Именно это мы тут и обсуждаем, а где оно превращается
Evgeny Cherkasov
В конечном итоге конечно выполняется машинный код
???????
На твоем компухтири или на устройстве пользователя
Evgeny Cherkasov
Из ссылки что я привел следует что оба снапшота это машинный код
???????
Угу и машинному коду нужна виртуальная машина, чтоб не скучал)
Vadim Lukichev
В JIT в машинный код "превращается" на мобиле. В релизе, код JITа отсутствует, но он как бы "прогоняется" на компе разработчика и превращается в машинный код, под конретную платформу
???????
[
{
"type": "link",
"text": "https://t.me/rudart/147820"
}
]
???????
Про JIT я с тобой полностью согласен. А вот про AOT - не одного самого захудалого подтверждения, согласись
???????
[
"А те AOT снапшоты что описаны и готовятся с ",
{
"type": "code",
"text": "dart2native -k aot"
},
" - внезапно не \"те\""
]
Vadim Lukichev
Есть - здесь были ссылки
???????
Ну JIT тоже только под определенные архитектуры, это делает его снапшот машинным кодом?)
Vadim Lukichev
Не понял, JIT в виртуалке, на девайсе, разбирает платформо-независимый код и превращает его в машинный
Evgeny Cherkasov
Если прочитать раздел по JIT то станет понятно что есть некий training run при котором VM компилирует что ей дали изначально и делает снапшот.
???????
training run это не компиляция в машинный код
???????
Там даже написано что это - преобразование к более читабельным конструкциям и выбрасывание высокоуровневого сахара
???????
Да-да, с JIT я полностью согласен с тобой. Тут вообще без вопросов, это снапшотик который преобразуется в машинный код во время выполнения на устройстве пользователя. Я к тому, что у него такаяже аннотация про зависимость от архитектуры процессора, что ты скинул на картинке.
|