Программирование : Dart & Flutter по-русски
Vyacheslav Egorov
enumerations в Свифте лучше того что Дарт умеет например
Vyacheslav
Да про протоколы треиты
Vyacheslav
У меня большинство кода на перечислениях в айос
Vyacheslav Egorov
[
{
"type": "mention_name",
"text": "Vyacheslav",
"user_id": 197673163
},
" наследоваться от String или его имплементировать запрещено по performance considerations. когда было написано ",
{
"type": "code",
"text": "String"
},
" можно было знать, что это нативная строчка а не какая-то самодельная"
]
Vyacheslav
Ещё extension в разных местах очень хороши.
Nerten
это есть и в котлине
Vyacheslav Egorov
те для вашего случая file-or-string вы сделаете какой-то trait типа Readable и потом делаете реализацию этого трейта для типа File и типа String, правильно я понимаю?
Vyacheslav
О performance condition только узнал когда это попробовал реализовать. Где про управление памятью можно прочитать. Как её на обе платформы сделали?
Vyacheslav Egorov
extension methods приедут, они в пайплайне - это следующий топик после non-nullable types.
Vyacheslav Egorov
[
"управление памятью у нас простое - это обычный garbage collection на всех платформах - ",
{
"type": "link",
"text": "https://medium.com/flutter-io/flutter-dont-fear-the-garbage-collector-d69b3ff1ca30"
},
""
]
Vyacheslav
Господи, первый человек, с кем можно о флаттер поговорить. хорошо, что null безопасность делаете. И extension. Будет хорошо.
Vyacheslav
Кстати, в мск будет конфа на эту тему?
Vyacheslav
Обычно Гугл проводит мероприятия по различным темам
Vyacheslav Egorov
Wrike вот организовывал свою собственную в Декабре. Мы пока ничего не планируем своего отдельного.
Vyacheslav
Понял. У меня последний базовый вопрос. А тема с асинхрощиной так и будет приоритетной для флаттера? Или Более классические архитектуры тоже нормально пилить?
First Last
В расте это вроде как чистой воды атд
Vyacheslav Egorov
[
"Про трейты спасибо, понятно в чем проблема. Я, кстати, не знаю есть ли механизм похожий на traits в language roadmap. В language team ишуй трекере (",
{
"type": "link",
"text": "https://github.com/dart-lang/language/issues"
},
") ничего не находится"
]
First Last
[
{
"type": "link",
"text": "https://github.com/dart-lang/language/issues/47"
},
"\n\nКстати\nНелегко же вам будет"
]
Vyacheslav Egorov
мне не совсем понятен вопрос - вопрос в том будет ли Дарт однопоточным?
First Last
Выкидывайте фронт и делайте многопоточность ??
Vyacheslav
Нет . Сейчас в приоритете архитектура типа blob на потоках. В мобилках всё-таки больше mv* модели
Vyacheslav
Будут ли какие-то альтернативы по архитектуре ?
Vyacheslav Egorov
ах ну это вопрос скорее к самим Flutter-овцам :)
Vyacheslav Egorov
или к community - мне кажется само community изобрело этот BLoC и теперь он всюду
Nerten
так вроде же есть примеры архитектур на mv*
Vyacheslav Egorov
вроде ничего особо проблемного в этой фиче нет, вся работа во фронте большей частью
Nerten
я вот наоборот не могу найти примера bloc с api и базой
Vyacheslav
Спасибо, понял
Nerten
приходится ковырять чужое приложение
Vyacheslav
Ну как-то не особо. Там все через async, что делает неудобным MVC, например
Nerten
можно без async делать, но это будет сказываться на произодительности
Анатолий
мвс прекрасно с асинками работает
Анатолий
Асинки влияют на архитектуру косьвенно, вы можете выбрать что нравится и использовать его. Флаттер не запрещает ничего явно
Nerten
мне наоборот во флаттере нравится вся эта асинхронщина
Nerten
особенно порадовал compute
Vyacheslav
Личное имхо. Она приводит к большим багам
Nerten
заставляет мозг думать подругому ??
Vyacheslav
Вот дня 3-4 переводил главный экран приложения на асинхрощину из-за бага в кейчейне. Это очень мешает поддержке кода
Vyacheslav
Зачем пернусложнять проект на ровном месте
Vyacheslav
Код должен работать, а не вводить в ступор
Nerten
потому что это делает приложение проще
Анатолий
дык это ведь баг в кейчейне а не проблема асинков? разве нет?
Nerten
сейчас весь фронтенд на реактищине какой-то, это удобно
Vyacheslav
Баг багом. Проблема в том, что пришлось делать асинк. И асинк сам по себе усложнил
Анатолий
Синхронно все делать удобней?
Nerten
ну только если нет никакого интерактива, то не так
Nerten
делать удобней, но работает не очень )
Vyacheslav
Есть многопоточность.
Анатолий
там свои проблемы будут
Vyacheslav
Работает оно понятно и предсказуемо
Анатолий
разные контексты
Nerten
но она ничего не решает
Vyacheslav
Она не портит стек:)
Vyacheslav
Весь Эрикс, например, адски портит стек
Vyacheslav
Дебаггер просто перестает быть рабочим инструментом
Анатолий
То что тебе не удобно работать с асинком не значит что он внезапно стал плохим и надо его срочно заменить на многопоточность
Vyacheslav
В асинкеиты можешь отлаживаться только если у тебя пара человек в команде. И ты используешь логи
Nerten
многопоточность и так есть
Vyacheslav
Ты путаешь причину и следствие
Анатолий
Я работаю с асинками постоянно на фронте и беке
Анатолий
и как-то без проблем с отладкой
Vyacheslav
В начале многопоточность. А асинк - это синтаксический сахар
Анатолий
можешь называть его сахаром, но это нормальная штука
Vyacheslav
Для джеес возможно
Vyacheslav
В мобилках все Лиды больших команд это выпиливают:)
Анатолий
Если ты точно и хорошо понимаешь как оно работает, то проблем не вызывает, а и даже имеет свои преимущества. Это не лучше или хуже чем многопоточность, оно другое
Nerten
вообще не представляю как без асинхронности жить
Vyacheslav
Поэтому тренд Дарта в асинк смущает
Vyacheslav
Сколько людей на проекте поддерживает твой код? Мне так, просто интересно
Vyacheslav
Ты тоже видимо из джеес?
Анатолий
го тоже не нравится?
Анатолий
там по сути та же асинхронщина технически
Nerten
нет, но и мобильная разработка не основной мой хлеб, это просто хобби
Vyacheslav
Большая. В большой команде нужно что-то переиспользоваемое
Vyacheslav
То есть, один. Да одному можно пилить как хочешь
Анатолий
асинк переиспользуемый
Nerten
уверен что от го может быть взрыв мозга, там ещъ сложнее с горутинами
Анатолий
технически работают они примерно так же (с небольшими ньюансами)
Nerten
ну у нас 5 на беке и 5 на фронте, и никаких проблем с асинхронщиной
Nerten
как раз соль в нюансах
Анатолий
Как много ты работал в проде с асинками?
Vyacheslav
Ты на каком языке через async пишешь?
Vyacheslav
То, что у js нет альтернативы async
Vyacheslav
И бек я думаю что на ноде или на шарпе, если там асинк
Nerten
?? да ладно? а как же раньше жили?
Vyacheslav
Раньше никак не жили. Для фронта ничего другого и нет
Nerten
js вообще синхронный и однопоточный, если что
Nerten
ну и приходилоссь городить костыли, пока не появился async/await
Vyacheslav
Ну вот я о том же. Что у тебя альтернатив нет. Вот и вся петрушка
Nerten
как нет? пиши по старому, только приложение твоё будет неотзывчивое, зато понятное )
Анатолий
Скажи как много ты работал с асинком, чтоб мы могли реально оценить ты говорить реально о своем опыте в асинке или просто желания или незнания в этой теме.
Nerten
либо представлять собой лапшу непонятную из колбеков
Анатолий
У нас то нет опыта в мультипоточном программировании
Vyacheslav
Это не альтернатива
Vyacheslav
Я сейчас поддерживаю плюсовую либу на future и она у меня вызывает боль
Vyacheslav
А в js я webworker пробовал. Ибо это хоть как-то можно использовать
Анатолий
Ну плюсы сами по себе сложней ведь чем дарт/жс/шарп
Vyacheslav
Это проблемы без относительно языковых конструкций
Анатолий
Как бы может дело не совсем в future а в связке с плюсами
Vyacheslav
Что-то мелкое писать - нормально. Pet project шикарно.
Vyacheslav
Ну я тоже так по началу считал
Анатолий
ну у меня проект очень большой на асинках
Анатолий
и команда не из одного человека
Vyacheslav
Потому что это не альтернатива
Анатолий
Но ведь асинк - это проблемы без относительной привязки к языку, верно?
Vyacheslav
Ты говоришь, что использовать колбеки. Это не многопоточность
Nerten
хорошо, я так понял ты из мира ios, ты реально делаешь dispatch_sync ?
Vyacheslav
Да но я говорю, что к тебя альтернативы нет.
Анатолий
Есть, еще есть пхп
Vyacheslav
Там есть несколько вариантов реализации многопоточности. Но вообще да
Vyacheslav
убедил. В js вообще многопоточности нет
Vyacheslav
Выбор между callback и async я бы тоже выбрал async
Vyacheslav
Тут сложно спорить
Анатолий
ты можешь использовать в дарте изоляты
Vyacheslav
Я пока хз что это. Но обычные либы придётся переделывать
Vyacheslav
Невозможно писать что-то своё, принципиально отличающееся от общего code style
Vyacheslav
Что-то блин мне надо с этого аргумента начинать. Смысл спорить с пользователем языка , в котором нет многопоточности, про про многопоточность
Анатолий
так сразу же сказали что он однопоточный )
Анатолий
Мы ж не говорим что это альтернатива, мы говорим что это нормальная штука
Nerten
потому что от её наличия мало что меняется, если ты всё равно ждёшь результат работы, и не можешь бежать дальше
Vyacheslav
Я уверен, что ты классный разработчик, но давай на этом просто остановимся
Nerten
простой пример, тебе надо. дёруть 2 апи эндпоинта и после успеха обоих показать резльтаты, ты это синхронно делать будешь?
Анатолий
судя по dispatch_sync да
Vyacheslav
Это можно сделать по-разному. Например, добавлять в очередь на выполнение.
Vyacheslav
Или делать всё синхронно в параллельном потоке
Анатолий
дык получится то же что и с асинком
Анатолий
ты откладываешь исполнение и ждешь результат
Анатолий
что с потоками, что с очередью
Vyacheslav
В моем случае свободы выбора больше
Nerten
только это займёт времени больше, чем асинхронно выполняя оба запроса
First Last
[
{
"type": "link",
"text": "https://startflutter.com/"
},
"\nЕсть такая вещь но чисто с анимациями?"
]
Nerten
это можно сделать на любом языке )
Vyacheslav
Ты понял, что написал?
Vyacheslav
Что больше времени займет
Vyacheslav
Ты асинку приоритет не дашь
Vyacheslav
И будешь обязан ждать выполнения в том же потоке
Nerten
да, сначала ждёшь один запрос, потому другой, асинхронно они бегут уже оба
Vyacheslav
В зависимости от того, как ты это сделаешь
Vyacheslav
Ты это можешь одновременно делать, конечно, омг
Nerten
одновремено синхронно?
Анатолий
все ио операции асинхронно работают практически одновременно
Анатолий
в отличии от синхронности
Vyacheslav
В разных потоках
Анатолий
В данном случае без разницы в каком потоке будет работать, многопоточность будет работать преимущественно только если ты работаешь с синхронным кодом.
Nerten
синхронно, в разных потоках одновременно?
Vyacheslav
Фактически, что самое важное, ты полностью абстрагируешь классы от знания , что они async
Vyacheslav
Ну да. Тут система сложнее, чем js.
Vyacheslav
В iOS есть обычные сишные потоки, всякие сигналы и обертки на ними
Анатолий
Это он про многопоточность
Vyacheslav
Есть три обычные обертки : nsthread, dispatch, и nsoperation
Vyacheslav
Вместе это весьма голодные ингредиенты для создания хороших классов с достаточным уровнем абстракции, что классы не обладают знаниями о потоках без должной необходимости. Что даёт понятное тестирование и переиспользование. Ну и прочие плюшки. Async слишком плоско в этой вселенной. Хотя, кто вещи писать, где-то можно было бы и проще. Если тут есть годные многопоточные программисты, поправьте меня, почему, если я в чем-то неправ.
Анатолий
Ты очень критично говоришь, асинг априори лучше синхронщиты в ио, но асинк однозначно хуже при синхронных операциях, он дешевле в ресурсах, он проще
Анатолий
нельзя говорить что это говно, им пользуются много людей и у них нет проблем в поддержке
Vyacheslav
Я не говорю, что говно. У него есть область применения. Но не надо говорить, что это бест, и им все пользуются. Именно с этого и начался и наш спор
Vyacheslav
В js реальный многопоток - это webworker. Остальное синтаксис, чтобы не было совсем грустно бросать callback через сотню функций
First Last
А о чем вы хоть холиварили?
First Last
А чаво именно?
Vyacheslav
Мне говорили, что нет им альтернативы. И ими все пользуются.
Nerten
Ну понятно, опыта нет. Действительно пора заканчивать.
First Last
В каком контексте?
Vyacheslav
Ну куда мне до тебя:)
Pavel Shilyagov
Хочется синхронных альтернатив для всякого рода io?
Vyacheslav
Если я тебя правильно понял, то да
Pavel Shilyagov
Ну тут проблема в архитектуре флаттера. Все нативные вызовы через каналы и поэтому асинхронные.
Vyacheslav
Ну я о том же. Меня смущает, что это обязательное правило
Анатолий
Не не, мы не так говорили. мы говорили что это прекрасная замена синхронщине а не многопоточности
Nerten
Будто бы это замена одного другому, лол. Пусть. Действительно посмотрит на го например
Анатолий
там то же по сути асинхронщина
Анатолий
оно тоже однопоточное
Nerten
Ничего подобного, сборка идёт с отптмизацией под определенное количество ядер проца. У меня 8 тредов, но около 100к операций
Vyacheslav
Видимо, мы друг друга не поняли
Vyacheslav
Я же сказал, что ты прекрасный разработчик
Nerten
Никто тебе не говорил что многопоточность это плохо, говорили что асинхронность хороша. И это не отменяет многопоточность, а только дополняет. Нужно меньше кода писать, не теряя при этом в производительности в общих случаях.
Анатолий
ну он может раскидывать, но по сути принцип не очень сильно отличается
Nerten
Только придется бороться с дедлоками, решать проблемы с синхронизацией и ТД вручную.
Анатолий
Если код синхронный и я запущу на многоядерном проце код с тремя (допустим) корутинами, они ведь по очереди будут выполняться а не одновременно?
Nerten
горутина не может быть синхронная, она сделана чтобы работать параллельно )
Анатолий
Вот такой простой код что выведет как думаешь?
Анатолий
При условии что у меня не однояредный проц
Nerten
[
"что тут думать? всё написано в доке ",
{
"type": "link",
"text": "http://golang-book.ru/chapter-10-concurrency.html"
},
""
]
|