Metaprogramming
618 subscribers
103 photos
1 video
157 links
μετά- «между, после, через» (греч.)

Жизнь программиста за пределами программирования: алгоритмы, психология, инвестиции, иное.
加入频道
Прошла онлайн Ruby-конференция: https://noruko.org/ (доступ разрешили без регистрации).

В докладе Матца (создателя Ruby) были все обычные заявления: добавим type annotations, нужно больше сторонних инструментов (линтеров, тайп чекеров), интерпретатор будет быстрее, улучшим JIT, думаем над созданием некоего супербыстрого "микроруби" (интерпретатора, реализующего подмножество Ruby).

Мне лично интересно было глянуть на три нововведения в синтаксисе языка (собственно, той части, которая на виду у пользователя):

1. Pattern matching

case JSON.parse(json, symbolize_names: true)
in {name: "Alice", children: [*, {name: "Bob", age: age}, *]}
p age
in _
p "no Alice"
end

- В целом, мне нравится, как реализован этот оператор case... in
- Не понятно, почему в качестве плейсхолдера "что угодно" используется *, а не _
- Удручает, что нет планов распространения паттерн матчинга на сигнатуры метода в стиле Elixir или JS (декомпозиция аргументов метода прямо в его сигнатуре + возможность определить/"перегрузить" одноимённые методы с разной сигнатурой)

2. Оператор "правого присвоения" (right assignment).

# было
top_five =
(1..100)
.map{|x| rand(x)}
.sort
.reverse
.take(5)

# стало
(1..100)
.map{|x| rand(x)}
.sort
.reverse
.take(5) => top_five

- Мне нравится, как Матц не ставит пробелы перед и после фигурных скобок блока - такое написание удобней и практичней традиционного по "западному" кодстайлу
- Пример не убедительный - следовательно, убедительного примера, где бы правое присвоение могло быть удобным придумать сходу Матцу не удалось

3. Порядковые аргументы блока

# умножить каждый элемент на 2
[1, 2, 3].map{_1 * 2}

- Идея мне нравится - такая возможность была бы весьма востребована
- Выбор имён _1, _2, ... выглядит как-то несовременно

Общее резюме, цитируя-перефразируя Матца: Ruby будет становиться лучше (если американцы традиционно помогут японцам сделать из их кулибинских идей красивый коммерческий продукт), и вы тоже :)

#programming #ruby