Skip to content

Instantly share code, notes, and snippets.

@madyankin
Last active April 23, 2016 16:21
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save madyankin/f530bc2efe197e1f5d2e453abd45d2ba to your computer and use it in GitHub Desktop.
Save madyankin/f530bc2efe197e1f5d2e453abd45d2ba to your computer and use it in GitHub Desktop.

Все в элме хорошо. Пока не надо получить что-то от js. Например, чтобы получить текущее время, надо городить такое:

Elm.Native.TimeUtils = Elm.Native.TimeUtils || {};

Elm.Native.TimeUtils.make = function(localRuntime) {

	localRuntime.Native = localRuntime.Native || {};
	localRuntime.Native.TimeUtils = localRuntime.Native.TimeUtils || {};

  if (localRuntime.Native.TimeUtils.values) {
		return localRuntime.Native.TimeUtils.values;
	}

	var Task = Elm.Native.Task.make(localRuntime);

	var getCurrentTime = Task.asyncFunction(function(callback) {
		return callback(Task.succeed(Date.now()));
	});

	return localRuntime.Native.TimeUtils.values = {
		getCurrentTime: getCurrentTime
	};
};

А в элмовом коде обрабатывать это через эффекты.

Эффекты — это круто и вообще зашибись, на самом деле. Но вот на каждый чих писать нативный модуль как-то не очень прет. Половина или даже больше модулей от коммьюнити протухшие — побаловался с элмом, написал пакет, и забыл, забив на новые версии элма. То есть, если бы авторы пакетов пользовались элмом, были бы обновления.

Посты и доклады в основном детские: «Уау, у нас все иммутабле, алгебраические типы данных (и вообще типы), у нас есть сигналы, для асинхронщины у нас Effects & Tasks», «У нас есть time travel debugging», десяток постов на тему, что такое Maybe.

Все посты и доклады выглядят, как близнецы. Люди дальше поверхности не идут. С месяц назад только встретил первое более-менее взрослое приложение — децентрализованный твиттер, десктопное приложение на электроне.

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

Надо на нем с полгода хотя бы пописать что-то более-менее похожее на реальные приложения. И тайм-тревел дебаггер на самом деле нифига не работает, если тебе надо сделать что-то большое и с внешним CSS, например.

Смысла дебажить без CSS мало — у меня, например, блоки видимыми/невидимыми делаются через CSS. И тут выясняется, что CSS прикрутить-то можно, а вот порты уже нельзя, лол. То есть, нельзя задать приложению внешние данные для его инициализации. Занавес.

Ну и вы уже знаете, как выглядят простые задачи вроде получения текущего времени. Прошло шесть (!) часов, я по-прежнему пытаюсь получить текущее время в элме. Удивительно, как легко решаются сложные вещи, и как сложно решаются простые вещи.

Но ошибок в рантайме, кстати, действительно нет. На самом деле, брехня. Они есть, только реже, и дебажить их не так уж легко. Все ловится на этапе компиляции. Или на этапе тестирования, если мы тестируем порты — там вылетают исключения. То есть, их видно сразу.

Честно говоря, прямо щас я готов продакшен писать на кложе, но не на элме У кложи с интеграцией проблем нет.

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

Два более-менее серьезных подхода к архитектуре, что я видел, не шибко удобны.

Надо протащить экшены наверх, завернуть их в другие экшены, потом развернуть в другом месте. Если не заворачивать/разворачивать, приходится повышать связанность. То есть, или ты обертки везде всякие делаешь, или связанность повышаешь. Сам язык мне очень нравится, но вот тащить его в реальный мир трудно.

Была еще пара постов про архитектуру. Смешно сказать, они в один экран едва вмещаются. Но если на элме что-то написать, получается почти пуленепробиваемое приложение. Тяжело, трудно, много граблей с архитектурой. Но, сука, надежно

И дополнение про «нет ошибок в рантайме» http://img.madyankin.name/Screen-Shot-2016-04-23-15-09-47-0yazS8v.png. Ну и, конечно же, я попадаю во внутренности элма, если тыкаю в ошибку.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment