Size: a a a

2020 September 28

LL

Lama Lover in pro.elixir
Все пишут макросы, пользуются макросами, упрощают свою жизнь макросами
Все пишут языки, упрощают свою жизнь, увеличивая количество вещей, которые нужно выучить
источник

AB

Alex Bubnov in pro.elixir
Alexey Bolshakov
Тут, видимо, благодаря макросам можно сократить время разработки, в определенных условиях. Но "у всего есть цена"
у меня не получается представить, как.
данные - это ведь просто, у тебя всегда есть возможность просто слить их в консоль или отработать пошагово, или даже просто руками сформировать и засунуть в обработку.
если язык получается многословным - либо расширить его, либо просто присыпать простыми функциями-генераторами.
источник

LL

Lama Lover in pro.elixir
Lama Lover
Все пишут макросы, пользуются макросами, упрощают свою жизнь макросами
Все пишут языки, упрощают свою жизнь, увеличивая количество вещей, которые нужно выучить
Вот @bolshakov_av писал про макросы в phoenix. Вот какие макросы там сложные? Ну вот какой потратил на понимание больше 10 секунд? Роутер?
Или в Ecto.Query. Да, там есть свои тонкости, но это нормальный подход со встроенным экранированием, унификацией mysql и postgresql запросов, не макросы а чистые данные

Какой-нибудь Ecto.Schema вообще не требует никакой умственной нагрузки. Писать вместо
schema "mytable" do
 field :name, :string, size: 10
 field :password, :string
end

что-то типа
@schema [
 {:name, :string, [size: 10]},
 {:password, :string, []}
]

Ecto.create_schema("mytable", @schema)

Не сильно лучше и вообще никак не упрощает понимание
источник

LL

Lama Lover in pro.elixir
И потом, эрлангисты, говоря о плохих макросах в Elixir вспоминают Ecto.Query или какие-нибудь вообще странные и непонятные перегруженные вещи, но совсем не вспоминают об alias, import или use, без которых они до сих пор копипастят 4 коллбека в генсервере вместо лаконичного use GenServer
источник

AB

Alex Bubnov in pro.elixir
Lama Lover
Все пишут макросы, пользуются макросами, упрощают свою жизнь макросами
Все пишут языки, упрощают свою жизнь, увеличивая количество вещей, которые нужно выучить
еще раз - макросы сами по себе не зло.
есть with, cond, Ecto.Query.where внезапно, Record, Logger в конце концов, где макросы использованы вполне по делу.
источник

AB

Alex Bubnov in pro.elixir
Ecto.Schema.schema - уже под большим вопросом, стоит только посмотреть, сколько там атрибутов регистрируется в E.S.__using__. зачем в коде глобальные переменные?..
источник

LL

Lama Lover in pro.elixir
Alex Bubnov
Ecto.Schema.schema - уже под большим вопросом, стоит только посмотреть, сколько там атрибутов регистрируется в E.S.__using__. зачем в коде глобальные переменные?..
Аттрибуты регистрируются для __before_compile__, наверное, чтобы постфактум нагенерить структуру и функций
источник

AB

Alex Bubnov in pro.elixir
Lama Lover
Аттрибуты регистрируются для __before_compile__, наверное, чтобы постфактум нагенерить структуру и функций
да, конечно.
только можно обойтись без этого, если схему передать сразу как данные. и сразу минус здоровенный кусок сложности, в которой вообще не было никакого смысла.
источник

LL

Lama Lover in pro.elixir
Alex Bubnov
да, конечно.
только можно обойтись без этого, если схему передать сразу как данные. и сразу минус здоровенный кусок сложности, в которой вообще не было никакого смысла.
Что значит "как данные" ? То, что я выше написал?
В первом случае ты смотришь в __using__
Во втором случае ты смотришь в функцию, которая генерит схему

Где упрощение понимания?
источник

LL

Lama Lover in pro.elixir
Я вот, если честно, ни разу не читал код Ecto.Schema.schema
Но вот точно скажу, что мне было не сложно понять что вообще эта schema делает
источник

AB

Alexey Bolshakov in pro.elixir
А можно как то в use сделать управление перекрытием? Например, если там есть какой-то handle_cast. И тебе когда-то надо свой вставить в цепочку матчинга до этих определений. Или наоборот - после. Не знаю, понятно ли обьяснил
источник

LL

Lama Lover in pro.elixir
Alexey Bolshakov
А можно как то в use сделать управление перекрытием? Например, если там есть какой-то handle_cast. И тебе когда-то надо свой вставить в цепочку матчинга до этих определений. Или наоборот - после. Не знаю, понятно ли обьяснил
Да, можно, конечно. Можно сделать defoverridable handle_cast: 2 и потом заимплементить свой и внутри вызвать super()
Только я вот с таким никогда не встречался...
источник

AB

Alex Bubnov in pro.elixir
Lama Lover
Что значит "как данные" ? То, что я выше написал?
В первом случае ты смотришь в __using__
Во втором случае ты смотришь в функцию, которая генерит схему

Где упрощение понимания?
да, то, что ты написал выше.
просто - зачем писать вот этот код сбора данных в глобальные переменные, когда можно обойтись простым фолдом?
источник

AB

Alex Bubnov in pro.elixir
блин, в языке очень выразительные литералы, ОЧЕНЬ. выглядят чуть хуже, чем в кложе, но всё равно, очень пристойные.
так зачем поверх них наворачивать макросы?
источник

AB

Alexey Bolshakov in pro.elixir
Lama Lover
Да, можно, конечно. Можно сделать defoverridable handle_cast: 2 и потом заимплементить свой и внутри вызвать super()
Только я вот с таким никогда не встречался...
Класс, спасибо. Поищу
источник

DS

Dmitry Shpagin in pro.elixir
Вкину про макросы, у нас их не было долгое время, но когда надоело писать одну и ту же лапшу из модуля в модуль - макросы зашли очень кстати, да, с ними может быть проблема при какой-то ошибке и разворачивании всего этого, чтобы понять, в чем собственно проблема (за год такой случай был 1 раз)

Зато решилась проблема с копипастом и обновлением этой лапши, в которой ошибки и опечатки встречаются гораздо чаще
источник

AB

Alex Bubnov in pro.elixir
Dmitry Shpagin
Вкину про макросы, у нас их не было долгое время, но когда надоело писать одну и ту же лапшу из модуля в модуль - макросы зашли очень кстати, да, с ними может быть проблема при какой-то ошибке и разворачивании всего этого, чтобы понять, в чем собственно проблема (за год такой случай был 1 раз)

Зато решилась проблема с копипастом и обновлением этой лапши, в которой ошибки и опечатки встречаются гораздо чаще
я опять же не очень понимаю, что же это за лапша такая, что не ликвидируется обычными средствами процедурного программирования, но код ваш, вам виднее
источник

LL

Lama Lover in pro.elixir
Alex Bubnov
я опять же не очень понимаю, что же это за лапша такая, что не ликвидируется обычными средствами процедурного программирования, но код ваш, вам виднее
Почему "процедурного" ?
источник

AB

Alex Bubnov in pro.elixir
Lama Lover
Почему "процедурного" ?
ну как бы вопрос бойлерплейта еще там решили. или про это "модульное"?..
короче, давно решили Х)
источник

LL

Lama Lover in pro.elixir
Alex Bubnov
ну как бы вопрос бойлерплейта еще там решили. или про это "модульное"?..
короче, давно решили Х)
В эрланге как-то решен вопрос с определением дефолтных имплементаций для коллбеков?
источник