shelajev

8 июня 2020, Tartu

# Понедельник 38 твитов

привет, меня зовут Олег, я работаю в проекте GraalVM в Оракл. Это такой полиглот рантайм который умеет в python, js… twitter.com/i/web/status/1…

9:09

сразу быструю вводную чтоб не вносить смуту - graalvm - вот graalvm.org/docs/

умеет несколько языков, умеет… twitter.com/i/web/status/1…

9:15

для поддержки языка -- разрабатывается интерпретатор который во время работы специализируется для конкретной програ… twitter.com/i/web/status/1…

9:17

Самое главное конечно - это что не надо создавать рантайм (или даже компилятор оптимизирующий) для каждого из языко… twitter.com/i/web/status/1…

9:22

вот например как выглядит сложение github.com/graalvm/graalj…
Не самым приятным образом надо сказать, зато нигде не п… twitter.com/i/web/status/1…

9:24

Все естественно написано на Java который мне кажется достаточно похож на JS (у меня опыт в основном джава не судите… twitter.com/i/web/status/1…

9:25

вот например kangax.github.io/compat-table/e… GraalVM сидит на 86%. 20.1 который вышел в мае - должен быть где-то 98+ (мне к… twitter.com/i/web/status/1…

9:27

Насколько JS в GraalVM быстр? Это самый распространенный вопрос пожалуй. Ответов на него несколько. Самый главный к… twitter.com/i/web/status/1…

9:31

прям дольше чем ты думаешь. И памяти отъест прилично (там же интерпретатор сначала -- он делает дерево из объектов,… twitter.com/i/web/status/1…

9:32

но если действительно интересоваться то результаты прям ок. Вот например techempower benchmarks -- достаточно вменя… twitter.com/i/web/status/1…

9:34

сценарии - веб приложения, скажем вернуть hello world, вернуть json, вернуть некоторые записи из базы данных, сдела… twitter.com/i/web/status/1…

9:35

вот есть посмотреть на результаты про js: techempower.com/benchmarks/#se…

на первом месте некий es4x -- это такой нодоподо… twitter.com/i/web/status/1…

9:39

для тех кто ленится тыкать в ссылки - вот pic.twitter.com/eH0NH6rJs0

9:40

вот когда говорят вещи как на картинке - конечно это с точки зрения backend разработчика неправда. Бякэнд теплый, л… twitter.com/i/web/status/1…

9:52

но это просто потому что я во фронт не умею. Кто умеет - вы очень большие молодцы, я бы тоже так хотел чтоб вот дел… twitter.com/i/web/status/1…

9:53

я вот так вижу комментарии -- давайте сразу "тред ненависти к" запилим. если вам хочется сказать какую-нибудь глупо… twitter.com/i/web/status/1…

9:58

еще граальвм умеет делать полиглот приложения, такие где часть компонентов на одном языке, а часть на другом. так ч… twitter.com/i/web/status/1…

10:04

что очень удобно когда все языки выглядят как интерпретаторы и деревья -- это сильно облегчает тулинг, потому что м… twitter.com/i/web/status/1…

11:16

некоторые языки которые на базе граальвм но созданы не нашей командой а кем-то другим:
TruffleSqueak (smalltalk) -… twitter.com/i/web/status/1…

11:19

и со всем этим богатством можно интегрироваться из javascript/

11:20

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

11:22

тред про getting started. надо скачать граальвм: graalvm.org/downloads/

распаковать и положить в PATH, вызвать `j… twitter.com/i/web/status/1…

12:28

можно использовать утилиту `gu` чтобы проинсталлировать остальные языки graalvm.org/docs/reference…

12:29

вот так примерно будет выглядеть pic.twitter.com/MHNIR5BY6Z

12:30

можно например отсюда запустить node.js, и передать ему --jvm чтобы он запустился на базе jvm и например потрогать… twitter.com/i/web/status/1…

12:38

выше видно что и js правильно работает и что мы взяли из java bigdecimal (класс для arbitraty precision decimal num… twitter.com/i/web/status/1…

12:41

которые лучше чем любые другие библиотеки в мире npm. тогда можно их легко использовать. вот классический пример пр… twitter.com/i/web/status/1…

12:42

и их можно вот так использовать для node приложений: medium.com/graalvm/using-… pic.twitter.com/B8FGQdUiei

12:43

кому интересно - попингуйте @bsideup, он очень интересно может рассказать как и что про testcontainers. Про граальв… twitter.com/i/web/status/1…

12:45

сделаем простое приложение и запустим его, и посмотрим как оно работает. Восхитительно работает ничего не скажешь pic.twitter.com/DCEyEaDuw3

13:48
@jsunderhood Кажется этот ответ должен быть репостом, иначе его никто не увидит

ну так заретвить его. помоги распространить знания в массы

@jsunderhood Кажется этот ответ должен быть репостом, иначе его никто не увидит

14:01
Many JavaScript implementations implement Strings through "ropes" internally, to make concatenation fast. The Recor… twitter.com/i/web/status/1…

Rope is a data structure that combines benefits of lists and arrays:
– Concatenating while sharing.
– Relatively fa… twitter.com/i/web/status/1…

14:33

как node.js работает с граальвм джижком для js? на пальцах примерно так -- обычно там node и v8. есть некий v8.h ко… twitter.com/i/web/status/1…

14:35

то есть когда запускаешь нашу ноду -- запускается прям нода-нода и только движок другой. например когда передан --j… twitter.com/i/web/status/1…

14:37

то есть там обычный event-loop например, такой же как в обычной node.js

14:37

можно например подумать что раз это работает, то мог бы работать например и электрон! и можно уже делать desktop пр… twitter.com/i/web/status/1…

14:41

и вот тут-то мы подошли к браузеру! от электрона до браузера все-то ничего шажок. Технически можно встроить граальв… twitter.com/i/web/status/1…

14:43

вот такая вот история, как и обещал - ничего интересного. но если у вас есть браузер -- напишите мне! это было бы о… twitter.com/i/web/status/1…

14:44

# Вторник 18 твитов

@jsunderhood Node.js это круто! А как дела с Deno? Можно ли так же просто (или вообще) запустить его под GraalVM и… twitter.com/i/web/status/1…

Сначала минутка философии. Про "так же просто" подумай, мы (человечество) обманули песок, насыпали его пирамидками,… twitter.com/i/web/status/1…

@jsunderhood Node.js это круто! А как дела с Deno? Можно ли так же просто (или вообще) запустить его под GraalVM и… twitter.com/i/web/status/1…

9:09

Просто и легко только тогда когда кто-то сделал за нас сложную и тяжелую работу. Например по встраиванию граальвм вместо v8 в ноду.

9:10

про дено новый тред, потому что так виднее а Дено - это интересно.

9:11
@jsunderhood Node.js это круто! А как дела с Deno? Можно ли так же просто (или вообще) запустить его под GraalVM и… twitter.com/i/web/status/1…

Deno -- новая платформа от Ryan-a где видимо учтены все то что было не очень клево сделано в ноде:… twitter.com/i/web/status/1…

@jsunderhood Node.js это круто! А как дела с Deno? Можно ли так же просто (или вообще) запустить его под GraalVM и… twitter.com/i/web/status/1…

9:13

Typescript и JS для юзер кода, V8 в качестве движка. По идее можно так же как и с нодой заменить имплементацию v8.h… twitter.com/i/web/status/1…

9:19

То есть встроить граальвм движок в дено мог бы быть достаточно прямолинейный процесс который требует в основном про… twitter.com/i/web/status/1…

9:31
Typescript и JS для юзер кода, V8 в качестве движка. По идее можно так же как и с нодой заменить имплементацию v8.h… twitter.com/i/web/status/1…

Спрашивал Ryan'a про deno на @HolyJSconf в Питере в прошлом году. И это одна из моих самых любимых и запомнившихся… twitter.com/i/web/status/1…

Typescript и JS для юзер кода, V8 в качестве движка. По идее можно так же как и с нодой заменить имплементацию v8.h… twitter.com/i/web/status/1…

9:43

Про interop с java -- казалось бы, сделал что бы структуры даннах мапились друг на дружку, да функции вызывались и… twitter.com/i/web/status/1…

9:48

или например вот так вот сделать -- что получится? pic.twitter.com/mPDsf3i8Jk

9:52
Про interop с java -- казалось бы, сделал что бы структуры даннах мапились друг на дружку, да функции вызывались и… twitter.com/i/web/status/1…

Как решается вопрос когда есть нечто что доступно в среде с доступным параллелизмом, но это нечно не thread safe?

Про interop с java -- казалось бы, сделал что бы структуры даннах мапились друг на дружку, да функции вызывались и… twitter.com/i/web/status/1…

13:31

что синхронизируем если на стороне джавы у нас много потоков, а объекты js не стоит трогать из нескольких сразу? Бы… twitter.com/i/web/status/1…

13:58

Context -- это весь рантайм state для языков GraalVM, когда запускается кусочек JS или там питона, это происходит в… twitter.com/i/web/status/1…

14:02
@jsunderhood По чесноку, такой интероп сложная и интересная штука, но хочется историй о том, как оно все жить помог… twitter.com/i/web/status/1…

Реплай к вот этому треду прям надо отдельным тредом -- кто и как использует граальвм.

@jsunderhood По чесноку, такой интероп сложная и интересная штука, но хочется историй о том, как оно все жить помог… twitter.com/i/web/status/1…

14:13

например вот так будет работать pic.twitter.com/xQoPFIAI0T

14:26

и вот это лучше гораздо объяснено в посте из которого эта картинка medium.com/graalvm/multi-…

14:27

Еще про wasm в граальвм хотел рассказать. Но я там немного поверхностно знаю, поэтому лучше спрашивайте если интересно.

14:45

А чуть не забыл -- можно вот сюда написать название библиотеки и узнать запускаем ли мы ее тесты на граальвм и как… twitter.com/i/web/status/1…

18:38

у нас спрашивают: родной ли у меня русский язык. Русский у меня родной, но использую я его достаточно редко, в пись… twitter.com/i/web/status/1…

19:06

# Среда 19 твитов

А стоит ли в 2k20 учить VIM? С чего начать?

ZZ лучше чем wq

А стоит ли в 2k20 учить VIM? С чего начать?

7:50

про интерпретаторы и деревья. Вот например кусочек кода типа `a = obj.prop` может быть представлен вот так. достато… twitter.com/i/web/status/1…

9:47

дерево становится больше и все работает так же прекрасно. Позвольте, спросите вы, как же мы будем на каждый чих дер… twitter.com/i/web/status/1…

9:48

ворри нот, так сказать! дерево в процессе соберет информацию (интепретатор конечно, не само дерево) и сначала пропа… twitter.com/i/web/status/1…

9:52
ворри нот, так сказать! дерево в процессе соберет информацию (интепретатор конечно, не само дерево) и сначала пропа… twitter.com/i/web/status/1…

Частичные вычисления (partial evaluation) это очень крутая концепция, не новая, но крутая. Сейчас попробую на пальц… twitter.com/i/web/status/1…

ворри нот, так сказать! дерево в процессе соберет информацию (интепретатор конечно, не само дерево) и сначала пропа… twitter.com/i/web/status/1…

9:55

У программы есть 2 вида вводных данных, статические и динамические. Например конфигурация базы данных которая на ст… twitter.com/i/web/status/1…

9:57

Пусть у нас есть программа -- специализатор, которая может взять программу, ее статические вводные и выдать програм… twitter.com/i/web/status/1…

9:59

вот здесь с картинками хорошо объяснено: blog.sigfpe.com/2009/05/three-…

10:00

для тех кто не тыкает в ссылки, представим, что вот в примере выше - f - это интерпретатор, s - наш JS, d - инпут н… twitter.com/i/web/status/1…

11:00

потом эта смесь отдается джиту и все становится вменяемо быстро (или не становится, тут уж с какой стороны посмотреть на это)

11:00

если применить spec (spec, f) = то получится компилятор

11:01

но сейчас такого нет, тут нужно много новой работы проделать и научной и инженерной чтоб выяснить может ли такая ко… twitter.com/i/web/status/1…

11:04
Частичные вычисления (partial evaluation) это очень крутая концепция, не новая, но крутая. Сейчас попробую на пальц… twitter.com/i/web/status/1…

Если совсем простым языком - интерпретатор и дерево станут единым представлением (например в виде графов компилятор… twitter.com/i/web/status/1…

Частичные вычисления (partial evaluation) это очень крутая концепция, не новая, но крутая. Сейчас попробую на пальц… twitter.com/i/web/status/1…

11:06

То как оптимизируется - хорошо описано вот здесь dl.acm.org/doi/10.1145/30… (если погуглить по названию наверняка есть препринт от авторов)

11:07
То как оптимизируется - хорошо описано вот здесь dl.acm.org/doi/10.1145/30… (если погуглить по названию наверняка есть препринт от авторов)

Вообще если интересно про граальвм то надо брать и читать вот здесь подряд все. По несколько раз. Я регулярно переч… twitter.com/i/web/status/1…

То как оптимизируется - хорошо описано вот здесь dl.acm.org/doi/10.1145/30… (если погуглить по названию наверняка есть препринт от авторов)

11:08
#GraalVM #JavaScript 20.1.0 is now part of kangax.github.io/compat-table/e… Matching other major engines in terms of compati… twitter.com/i/web/status/1…
12:15

там есть момент один что было бы хорошо если бы джит компилятор умел некоторые специальные штуки. граальвм компилят… twitter.com/i/web/status/1…

13:40

когда компилятор не умеет эти штуки бывает медленнее чем когда умеет. Поэтому например JS engine можно запускать на… twitter.com/i/web/status/1…

13:41
#GraalVM #JavaScript 20.1.0 is now part of kangax.github.io/compat-table/e… Matching other major engines in terms of compati… twitter.com/i/web/status/1…

Вот кстати, я говорил что 20.1 - он больше тестов в ES2016+ проходит из коробки (раньше надо было проперти дать тип… twitter.com/i/web/status/1…

#GraalVM #JavaScript 20.1.0 is now part of kangax.github.io/compat-table/e… Matching other major engines in terms of compati… twitter.com/i/web/status/1…

16:13

# Четверг 9 твитов

Что обычно является самым большим препятствием к использованию технологии? что все остальное с ней не работает. нап… twitter.com/i/web/status/1…

11:36

возьмем к примеру то же самое приложеньице что и раньше: pic.twitter.com/SnD07OlYYc

12:39

запустим подсунув ему --inspect: pic.twitter.com/QBEe1Hxn0m

12:39

откроем это в хроме (надо убрать chrome-, там что-то поменялось, я еще не разобрался что) и вуаля дебаггер работает… twitter.com/i/web/status/1…

12:42

опять же он и для других языков будет работать и там в Console можно к вящей радости своей джаву потрогать: pic.twitter.com/7CFlCB7Lad

12:43
возьмем к примеру то же самое приложеньице что и раньше: pic.twitter.com/SnD07OlYYc

Так же работают профайлер, code coverage, memory analysis.

возьмем к примеру то же самое приложеньице что и раньше: pic.twitter.com/SnD07OlYYc

14:40

А имплементация выглядит так что в дерево вставляются дополнительные вершины по маркерам. Типа на statement можно в… twitter.com/i/web/status/1…

14:43

Таким образом языки получают поддержку инструментария практически нахаляву.

14:43

То есть даром. И наоборот, если вы делаете какой-то инструмент для разработчиков, интеграция с граальвм даст вам по… twitter.com/i/web/status/1…

14:45

# Пятница 26 твитов

Меня просили еще про деврел рассказать, интересно?

8:15

в смысле я на самом деле все равно расскажу, меня же просили. так что это риторический вопрос

8:16

Скажем у вас есть продукт. И каким-то образом у него целевая аудитория -- разработчики. Облако там свое, платформа… twitter.com/i/web/status/1…

8:24

или например такой неочевидный продукт как сообщество по интересам где интересы включают в себя программирование ил… twitter.com/i/web/status/1…

8:27

короче все о чем надо заботиться иначе оно сдохнет и к чему причастна тусовка IT -- это продукт которому может помочь деврел.

8:28
короче все о чем надо заботиться иначе оно сдохнет и к чему причастна тусовка IT -- это продукт которому может помочь деврел.

Деврел - это такой маркетинг для software engineers (это как программисты, но в широком смысле слова - ops, devops,… twitter.com/i/web/status/1…

короче все о чем надо заботиться иначе оно сдохнет и к чему причастна тусовка IT -- это продукт которому может помочь деврел.

8:30

тут надо сказать это все мое мнение, мы люди простые, академиев не кончали, так что не принимайте за истину и/или близко к сердцу.

8:31

смешная история была про чат деврел в телеграме, я туда случайно как-то попал -- там так много спорили что деврел а… twitter.com/i/web/status/1…

8:32
Деврел - это такой маркетинг для software engineers (это как программисты, но в широком смысле слова - ops, devops,… twitter.com/i/web/status/1…

Люди, которые делают маркетинг для разработчиков -- за деньги или без, в рабочее или свободное время, случайно или… twitter.com/i/web/status/1…

Деврел - это такой маркетинг для software engineers (это как программисты, но в широком смысле слова - ops, devops,… twitter.com/i/web/status/1…

8:34

почему нельзя делать просто маркетинг как обычным продуктам? можно конечно. Но у меня есть такое чувство, что разра… twitter.com/i/web/status/1…

8:36

поэтому делать маркетинг скажем Котлину как делают мартекинг хлебу и гироскутерам -- мне кажется не очень затея. Пр… twitter.com/i/web/status/1…

8:38

потому что сразу видно когда текст например написан кем-то кто жизни разработческой и проблем простого населения ИТ не понимает.

8:39

но на самом деле сама база marketing как науки никуда не девается. отсюда вывод -- книжки например надо читать про маркетинг!

8:44
потому что сразу видно когда текст например написан кем-то кто жизни разработческой и проблем простого населения ИТ не понимает.

примерно когда в linkedin приходят и говорят о я вижу вы в javascript разбираетесь, нам очень надо очень срочно jav… twitter.com/i/web/status/1…

потому что сразу видно когда текст например написан кем-то кто жизни разработческой и проблем простого населения ИТ не понимает.

8:50

что делает деврел? сложно однозначно сказать. Особенно если в общем, а не что делает вот этот конкретный деврел. По… twitter.com/i/web/status/1…

8:53

вот есть книжка -- amazon.com/dp/B07FKFQ1NK/… в которой конечно все написано. и конференции есть профильные. но на пра… twitter.com/i/web/status/1…

8:54

Мэри так же еще в блоге писала про что является пользой от деврел -- devrel qualified lead -- это примерно как поте… twitter.com/i/web/status/1…

9:07

что достаточно удобно - это гибкое определение которое подходит и под new potential hires и под sales и под авторст… twitter.com/i/web/status/1…

9:08

marythengvall.com/blog/2019/12/1… вот конечно он

9:08
marythengvall.com/blog/2019/12/1… вот конечно он

что же делает обычый деврел, не те кто управляет командой деврелов и отчитываются бизнесу, а day-to-day work так ск… twitter.com/i/web/status/1…

marythengvall.com/blog/2019/12/1… вот конечно он

9:11

это конечно зависит от конкретной роли и задач но в основном:
* служат каналом между командой продукта и разработч… twitter.com/i/web/status/1…

11:12

решаются обе сравнительно вменяемо созданием всяческого контента и общением со всеми вокруг:
* текст -- доки, обуч… twitter.com/i/web/status/1…

11:14

это позволяет немного управлять и тем как коммьюнити будет видеть ваш продукт, и немного приоритизацией разработки… twitter.com/i/web/status/1…

11:16

или например с помощью того что ты концентрируешься на определенных мотивах использования или АПИ там например -- м… twitter.com/i/web/status/1…

11:23

много что можно делать короче. Как-то так получается что со стороны кажется что вообще не сложно и нечего там делат… twitter.com/i/web/status/1…

11:24
Как ввести фронтендера в ступор?

Просто разместите в вакансии на JS-разраба вот такую картинку. pic.twitter.com/m7F5fqOA69

А вот на бякэнде самое то!

Как ввести фронтендера в ступор?

Просто разместите в вакансии на JS-разраба вот такую картинку. pic.twitter.com/m7F5fqOA69

15:08

# Воскресенье 2 твита

ну что, неделя подошла к концу. пока не отобрали пароль хочется сказать: будьте внимательны к друг-другу, мойте кон… twitter.com/i/web/status/1…

21:11
@DmitryMakhnev есть, если вы начали читать книгу и вам не нравится -- ее не обязательно дочитывать! мне многие гово… twitter.com/i/web/status/1…

вот там тред с книжками:

@DmitryMakhnev есть, если вы начали читать книгу и вам не нравится -- ее не обязательно дочитывать! мне многие гово… twitter.com/i/web/status/1…

21:42

other