Мои страх и ненависть


Гео и язык канала: не указан, не указан
Категория: не указана


Лог @LamaLove

Связанные каналы

Гео и язык канала
не указан, не указан
Категория
не указана
Статистика
Фильтр публикаций






Мои любимые дорогие подписчеки

Приглашаю вас поучаствовать со мной в команде в https://spawnfest.org. Я думаю, у нас есть все шансы выиграть какие-нибудь утешительные призы, а потом написать об этом в резюме


Оказалось, что просто райтклик оказался случайностью, и ничего особенного не произошло. Запускать игры через Lutris проще лишь в том смысле, что можно сделать одну глобальную конфигурацию с глобальным env и настройками и всё будет хорошо. В итоге, я слез с Lutris обратно на nix shell и nix-alien




Раньше я для всех видеоигор всё настраивал ручками. Смотрел в ldd, ставил нужные пакеты, сам оборачивал в wine, сам запускал виртуалки и т.д.

И вот буквально только что от отчаяния попробвал Lutris и игра, над которой я пыхтел полчаса, запустилась просто райткликом. Я пока не понял какая в этом мораль, но я точно попозже расскажу к чему меня это привело


Доброе утро, Мартин Алексеевич


Да, это дискость

В Elixir точка (.) это бинарный инфиксный оператор. Поэтому можно ставить пробелы слева и справа. Но правый операнд не может быть числом, потому что тогда 1.2 будет значит число с плавающей точкой

iex(23)> quote(do: x . y)
{{:., [], [{:x, [if_undefined: :apply], Elixir}, :y]}, [no_parens: true], []}

iex(24)> quote(do: 1 . y)
{{:., [], [1, :y]}, [no_parens: true], []}

iex(25)> quote(do: x . 2)
** (SyntaxError) iex:25:15: syntax error before: "2"
|
25 | quote(do: x . 2)
| ^

А вот две точки (..) это оператор, у которого слева и справа могут быть любые токены и литералы

Но вот три точки (...) это почему-то валидный токен для имени. То есть, я могу создать функцию или переменную
iex> ... = 1
iex> ... == 1
true

Причём, если три точки это функция, её ещё не нужно отделять пробелом или скобками от аргументов!
iex> quote do: ...1
{:..., [], [1]}


morse .__ ._ .. __ . ___

Вот это в эликсире синтаксически верный код. Предлагаю написать язык Morse Elixir, который будет как обычный эликсир, только вместо английских букв будут буквы в виде азбуки морзе. Потом можно будет кодгольфы устраивать

А вообще, у Elixir синтаксис проклят


Теперь буду везде использовать TestIex, потому что запускать тесты в репле это удобно, красиво и сильно ускоряет рабочий процесс. Например, так сильно легче дебажить код по тестам (прямо как в труЪ TDD), потому что можно понавешать трейсеров в репле и по-кусочкам гонять тесты


Напишите, пожалуйста, что я молодец.

Мой транспилятор скажет что эти кейсы не сматчатся. А эликсировский компилятор ничего не скажет.
case %{1 => x} do
%{^x => 2} -> 2
end

case {%{x => 1}, %{2 => x}} do
{same, same} -> 2
end

К сожалению, этот матчинг мап это те самые 20% функционала, которые требуют 80% усилий, но с его завершением можно сказать, что мой транспилятор полностью способен предугатывать матчинг для выражений. Сейчас, кстати, мой транспилятор показывает примерно 20-40% ускорения для Pathex во всех случаях. В основном это всё получается от предподсчёта некоторых выражений, и инлайнинга fn-ов.

Например, в обычном Pathex вызов view(something, path(:x / :y / :z, :map)) раскроется в 2 вызова вложенных fn-ов. Но с использованием оптимизирующего транспилятора, это превратится просто в
case something do
%{x: %{y: %{z: x}} -> {:ok, x}
_ -> :error
end
Что есть максимально эффективный по памяти и времени код, который можно написать на Elixir для вытаскивания значений

Я хочу добавить ещё парочку маленьких оптимизаций, привести проект к нормальному виду, дедуплицировать кучу кода, написать кучу тестов и всего такого. И вот, когда я это сделаю, будет релиз, я перейду ко второй части, где буду строить Call Graph-ы, бэктрекинг переменных, DCE, инлайнинг и всё такое.


iex> with do: 1
1


Нет, ну вы это видели. >:[

iex> x = 2
2
iex> {x, ^x} = {1, 2}
{1, 2}
iex> x
1


Во, я опять делаю пуши, чтобы поправить CI, а потом сижу и жду минутами когда там он встанет в очередь, когда там исполнятся тесты.






final boss


10 / 10




Наконец-то шикарный язык программирования. Я серьёзно. Пока код просто визуально не доставляет удовольствие, ты никогда не начнёшь получать полной отдачи от написания кода. А этот язык, это же просто настоящий киберпанк.
https://github.com/elonlit/Genesis
𐤄𐤂𐤃𐤓 𐤊𐤅𐤇 = (𐤀׳ / (𐤉׳ ^ 𐤉״𐤀)) * (𐤕𐤓𐤎״𐤆 / 𐤒׳)
𐤄𐤂𐤃𐤓 𐤕𐤅𐤓𐤄 = 𐤊״𐤈 / 𐤒׳
𐤄𐤂𐤃𐤓 𐤀𐤃𐤌 = 𐤏׳
𐤄𐤂𐤃𐤓 𐤌𐤓𐤇𐤒 = 𐤀׳

𐤐𐤅𐤍𐤒𐤑𐤉𐤄 𐤇𐤉𐤁𐤅𐤓:
𐤄𐤂𐤃𐤓 𐤄𐤇𐤉𐤁𐤅𐤓 = (𐤊𐤅𐤇 * 𐤕𐤅𐤓𐤄 * 𐤀𐤃𐤌) / (𐤌𐤓𐤇𐤒 * 𐤌𐤓𐤇𐤒)
𐤄𐤃𐤐𐤎 𐤄𐤇𐤉𐤁𐤅𐤓
𐤒-𐤃-𐤔

𐤇𐤉𐤁𐤅𐤓

Показано 20 последних публикаций.

37

подписчиков
Статистика канала