Home
golang
golang@conference.jabber.ru
Воскресенье, 3 апреля 2016< ^ >
Deirz установил(а) тему: Go Programming Language.
|| Изучаем: https://gobyexample.com/
|| Тур: http://tour.golang.org/
|| Как писать код: http://golang.org/doc/code.html
|| Как писать эффективный код: http://golang.org/doc/effective_go.html
|| FAQ: http://golang.org/doc/faq
|| 99% ответов о языке Go тут: http://golang.org/ref/spec
|| Сторонние либы: http://godoc.org/ https://github.com/avelino/awesome-go
|| Логи: http://chatlogs.jabber.ru/golang@conference.jabber.ru/
|| This chatroom does not adhere to any codes of conduct, be they implied or explicitly stated by someone. Your feelings can and WILL be hurt without a warning.
Конфигурация комнаты
Участники комнаты

GMT+3
[00:51:33] begemot_sun вышел(а) из комнаты
[01:42:48] ascrazy@jabber.ru вошёл(а) в комнату
[01:47:43] ascrazy@jabber.ru вышел(а) из комнаты
[01:48:42] plumbum вышел(а) из комнаты
[01:50:03] ascrazy@jabber.ru вошёл(а) в комнату
[01:57:17] plumbum вошёл(а) в комнату
[02:30:11] plumbum вышел(а) из комнаты
[02:50:14] ermine вышел(а) из комнаты
[03:08:49] krab вышел(а) из комнаты: Replaced by new connection
[03:08:51] krab вошёл(а) в комнату
[03:56:27] krab вышел(а) из комнаты: Replaced by new connection
[03:56:29] krab вошёл(а) в комнату
[05:52:12] postman вышел(а) из комнаты
[07:10:16] krab вышел(а) из комнаты: Left Vacuum-IM
[08:03:19] mantyr@jabberon.ru вышел(а) из комнаты
[08:38:10] begemot_sun вошёл(а) в комнату
[09:33:26] krab вошёл(а) в комнату
[09:56:01] krab вышел(а) из комнаты: Replaced by new connection
[09:56:03] krab вошёл(а) в комнату
[10:02:24] plumbum вошёл(а) в комнату
[10:28:31] ermine вошёл(а) в комнату
[10:35:09] plumbum вошёл(а) в комнату
[11:29:48] MaXGGXaM вышел(а) из комнаты
[11:31:05] MaXGGXaM вошёл(а) в комнату
[11:31:32] plumbum вышел(а) из комнаты
[11:42:38] Magiq вошёл(а) в комнату
[11:54:56] bananan вышел(а) из комнаты
[11:54:57] bananan вошёл(а) в комнату
[12:11:57] mks2 вошёл(а) в комнату
[12:33:57] krab вышел(а) из комнаты: Left Vacuum-IM
[13:51:18] avz вошёл(а) в комнату
[13:56:22] kpmy вошёл(а) в комнату
[13:56:54] kpmy вышел(а) из комнаты
[14:13:07] Magiq вышел(а) из комнаты
[14:15:00] avz вышел(а) из комнаты
[14:20:37] Magiq вошёл(а) в комнату
[14:20:57] Magiq вышел(а) из комнаты
[14:28:34] mantyr@jabberon.ru вошёл(а) в комнату
[14:58:23] postman вошёл(а) в комнату
[15:20:35] mks2 вышел(а) из комнаты
[15:30:11] ascrazy@jabber.ru вышел(а) из комнаты
[15:42:16] Darth Лис вошёл(а) в комнату
[15:42:37] Darth Лис вышел(а) из комнаты
[15:42:42] Darth Лис вошёл(а) в комнату
[15:43:02] Darth Лис вышел(а) из комнаты
[16:15:13] begemot_sun вышел(а) из комнаты
[18:10:15] bananan вышел(а) из комнаты: Disconnected: closed
[18:10:42] bananan вошёл(а) в комнату
[18:20:55] avz вошёл(а) в комнату
[18:38:41] ascrazy@jabber.ru вошёл(а) в комнату
[18:39:45] Magiq вошёл(а) в комнату
[18:42:31] ascrazy@jabber.ru вышел(а) из комнаты
[18:42:36] ascrazy@jabber.ru вошёл(а) в комнату
[18:51:02] kpmy вошёл(а) в комнату
[18:52:36] ascrazy@jabber.ru вышел(а) из комнаты
[18:53:30] <kpmy> Пщ
[18:53:31] <xep> пщ!
[18:53:31] azovcvb вышел(а) из комнаты
[18:53:37] kpmy вышел(а) из комнаты
[18:53:54] <Deirz> бле
[18:54:12] ascrazy@jabber.ru вошёл(а) в комнату
[18:54:28] <Deirz> kpmy, что про интерпретаторы можно почитать?
[19:05:49] <postman> РАЗЪЕБАШЬ ЛИСП В ТРЕБУХУ ЕБА
[19:06:25] <postman> https://en.wikipedia.org/wiki/Lisp_in_Small_Pieces
[19:14:54] ascrazy@jabber.ru вышел(а) из комнаты
[19:37:07] 5UN5H1N3 вышел(а) из комнаты
[19:48:05] begemot_sun вошёл(а) в комнату
[20:14:26] mantyr@jabberon.ru вышел(а) из комнаты
[20:14:44] Magiq вышел(а) из комнаты
[20:16:44] mantyr@jabberon.ru вошёл(а) в комнату
[20:18:33] Magiq вошёл(а) в комнату
[20:21:28] Magiq вышел(а) из комнаты
[20:24:23] Magiq вошёл(а) в комнату
[20:34:20] Magiq вышел(а) из комнаты
[20:58:10] ascrazy@jabber.ru вошёл(а) в комнату
[21:32:39] Magiq вошёл(а) в комнату
[21:36:25] kpmý вошёл(а) в комнату
[21:37:08] <kpmý> Deirz: ну и вопрос)
[21:39:27] plumbum вышел(а) из комнаты
[21:39:54] <Deirz> ты упомянул про стеки и фреймы
[21:43:27] <kpmý> а, ну да
[21:43:40] <kpmý> если честно я не помню где это всё читал
[21:43:53] <kpmý> но начинал с википедии конечно
[21:47:06] <kpmý> для начала надо определить, хочешь ли ты выполнять скрипт по шагам.
[21:48:01] <Deirz> если не по шагам, то как? Блоками?
[21:48:31] plumbum вошёл(а) в комнату
[21:48:58] <kpmý> если не по шагам то в режиме one shot, вызвал функцию eval в своём коде, и она проиграла скрипт, и вернула результат
[21:49:14] <kpmý> если по шагам, то ты формируешь объект-контекст
[21:49:23] <kpmý> который даёт тебе метод Step
[21:49:30] <kpmý> и ты его дёргаешь в цикле сам
[21:49:33] <kpmý> или не в цикле
[21:49:39] <kpmý> ну короче сам дёргаешь
[21:50:51] <kpmý> в первом случае ты можешь облегчить себе жизнь и стек вызовов скрипта будет формироваться чисто за счёт вызова функций в твоём интерпретаторе
[21:51:46] <kpmý> ну типа будет там функция call, вот в каждом call будут данные какие-то локальные, а процедура call может вызвать ещё один call, вот тебе и стек, типа
[21:51:59] <Deirz> ну ага
[21:52:31] <kpmý> во втором случае ты внутри контекста формируешь объект-стек вызовов, которым управляешь вручную
[21:53:01] ascrazy@jabber.ru вышел(а) из комнаты
[21:53:01] <kpmý> вот данные в стеке это и есть фрейм, то есть локальные данные скоупа, который ты вызвал к исполнению
[21:53:13] <kpmý> плюс ссылка на предыдущий скоуп, если нужно
[21:53:46] <kpmý> и так как ты каждый раз дёргаешь Step, то оно каждый раз смотрит на вершину стека и решает, что же делать в этот раз
[21:54:14] <Deirz> так там исполнение останавливается в какой момент?
[21:54:25] ascrazy@jabber.ru вошёл(а) в комнату
[21:54:33] <kpmý> после обработки очередной верхушки стека
[21:54:47] <Deirz> а в стеке просто инструкции лежат?
[21:55:09] <kpmý> инструкция, данные, ссылки на какие-то параметры вызова, куча всего
[21:55:21] <kpmý> в стеке лежит фрейм, а в фрейме вот это всё
[21:55:45] <kpmý> фрейм выполняется, по сути, и результатом выполнения становится изменение стека
[21:56:21] <kpmý> типа входишь в строчку var x = a + b, например
[21:56:28] <kpmý> первый шаг это пролог
[21:56:44] <kpmý> аллоцируешь x, кладёшь на стек присвоение
[21:57:11] <kpmý> опять делаешь шаг, видишь на стеке присвоение, смотришь что справа, кладёшь на стек expression
[21:59:00] <Deirz> потом достаёшь expression, достаёшь +, кладёшь +?
[21:59:01] <kpmý> видишь что expression это операция, либо сразу вычисляешь, если справа и слева константы, либо опять кладёшь на стек сложный expression справа и слева
[21:59:05] <kpmý> опять шаг
[21:59:18] <kpmý> короче ты каждый раз готовишь данные для следующего шага
[22:00:46] <kpmý> а так как это стек, то ты можешь учитывать приоритет операций и прочее просто раскладывая на стек операции в нужном порядке
[22:01:54] <kpmý> в схеме с шагами удобно кстати обрабатывать ошибки, потому что каждый шаг либо успешен либо нет, и причина ошибки вполне локализована в текущем фрейме
[22:07:41] Magiq вышел(а) из комнаты
[22:08:06] Magiq вошёл(а) в комнату
[22:10:44] <kpmý> например вот как выглядит вычисление expression https://github.com/kpmy/leaf/blob/master/lem/lenin/trav.go#L29
[22:12:16] <kpmý> у меня правда был statement based язычок, поэтому выражения ебашатся по первому способу, чисто на стеке вызовов функции eval
[22:12:45] <kpmý> но там явно видно, как вычислется например a + b, как DyadicOperation
[22:13:48] <kpmý> "вычислить слева" (оно что-то положит в стек, иначе паника паника)
"достать из стека"
"вычислить справа"
"достать из стека"
"выполнить операцию"
"положить в стек результат"
[22:14:03] <kpmý> https://github.com/kpmy/leaf/blob/master/lem/lenin/trav.go#L175
[22:29:09] Magiq вышел(а) из комнаты
[22:36:15] <postman> [21:50:52] <kpmý> в первом случае ты можешь облегчить себе жизнь и стек вызовов скрипта будет формироваться чисто за счёт вызова функций в твоём интерпретаторе
[21:51:47] <kpmý> ну типа будет там функция call, вот в каждом call будут данные какие-то локальные, а процедура call может вызвать ещё один call, вот тебе и стек, типа
[21:52:01] <Deirz> ну ага
[21:52:32] <kpmý> во втором случае ты внутри контекста формируешь объект-стек вызовов, которым управляешь вручную
[22:36:16] <postman> лол.
[22:36:35] <postman> именно в этом и состоят пиздоновские гринлеты.
[22:36:51] <kpmý> :(
[22:51:25] azovcvb вошёл(а) в комнату
[22:53:27] <Deirz> чёт вместе Лем и Ленин
[22:55:27] <Deirz> бтв твой ir можно было сериализовать/десериализовать?
[22:55:34] <kpmý> ага
[22:55:44] <kpmý> lem это leaf machine
[22:55:53] <kpmý> а lenin это leaf interpreter)
[22:56:17] <kpmý> я сериализовал, да
[22:57:47] <kpmý> вон, пацаны WebAssembly так же сделали)
[22:57:57] <kpmý> сериализуют и шлют клиентам
[22:58:21] <kpmý> я так понял, в 2016м всё такое мощное, что можно вообще не заморачиваться
[22:58:31] <kpmý> гоняй себе ast по стек-машине
[22:59:12] <kpmý> или превращай в бинарь через jit
[23:03:12] ingvar вышел(а) из комнаты
[23:07:42] avz вышел(а) из комнаты
[23:47:28] ermine вышел(а) из комнаты
[23:52:28] kpmý вышел(а) из комнаты
Powered by ejabberd Powered by Erlang Valid XHTML 1.0 Transitional Valid CSS!