Leonid 🦇
а в яваскрипт что?
"Стрелочные функции это новое слово в компьютер саенс!"
A64m
Я приводил уже цитату, что питонисты 2.х отказываются учить 3.х, потому что там _такая большая разница_...
там разница такая, что до чейнджлога двух средних версий окамла не дотягивает - не то что хаскеля
Alexander
там разница такая, что до чейнджлога двух средних версий окамла не дотягивает - не то что хаскеля
Я про это же. Тут в GHC каждая новая включаемая фича вносит эквивалентное количество разницы
Алексей
сомнительно что существенные изменения нельзя перечислить парой строк.
Ну вот неполный список: 1) самое главное - промисы, наконец то подвезли нормальную асинхронщину белого человека 2) нормальные переменные/константы const и let, которые работают так как и должны, а не то говно со всплытием var 3) деструктуризация 4) классы, теперь не надо писать огромнуюю кучу ClassName.prototype.methodName 5) ну и стрелочные функции, да
A64m
это все мелкие фичи
Алексей
это все мелкие фичи
ничего себе мелкие фичи
Yura
Кто-то сталкивался с таким, что nix собирает либу и при этом из этой либы не виден один из типов?
Alexander
Фича не мелкая, если она затрагивает философию программирования на языке.
Yura
при этом остальные типы и функции видны. Stack собирает нормльно.
Алексей
может быть их реализация и не кажется такой уж большой и сложной, но их влияние на код просто кколоссальное
Алексей
Фича не мелкая, если она затрагивает философию программирования на языке.
промисы очень даже затрагивают, как и async/await кстати
Yura
да stack собирает нормально
Alexander
точно те же версии? а то как-то удивительно
Алексей
Ну да, я признаю при этом, что в принципе все эти фичи - это прежде всего устранение недостатков ES5, но всё же.
A64m
серезное изменение - это изменение уровня разницы между языками. плюсовые темплейты это как раз такое изменение, а перечисленное - нет
Alexander
т.е. то что можно было на уровне библиотеки сделать, теперь в языке и получше?
Yura
тут даже прикол в том, что когда nix-build собирает тесты, то он символ не видит, а если запустить pkg.env, то cabal test всё видит
Yura
т.е. такое ощущение, что nix выкидывает эти символы
Yura
да
Leonid 🦇
nix то как может выкидывать?
Алексей
серезное изменение - это изменение уровня разницы между языками. плюсовые темплейты это как раз такое изменение, а перечисленное - нет
на js не писал ни разу, небось иначе бы не считал бы избавление от callback hell несерьёзной фичей
Yura
я не знаю
Leonid 🦇
Какое отношение nix имеет к компиляции ?
Leonid 🦇
Магия
Yura
он запускает cabal
Leonid 🦇
nix это лучи смерти, никто не знает как они работают. А значит могут всё что угодно
Yura
походу никто не сталкивался
Yura
хз он может какой-то флаг cabal-у даёт
Yura
хм...
Yura
я закоментировал флаг isLibrary = true;и оно заработало
Yura
WTF
Евгений
Вброшу дальше про типы. На самом деле то, что является результатом "type inference" и то, что стоит после : это тоже разные вещи совсем.
Евгений
Поэтому типами обычно называют три вещи, а не две
Alexander
Поэтому типами обычно называют три вещи, а не две
А какое место здесь отводится метапрограммированию наподобие квази-квот?
A64m
ну это близкородственные вещи
A64m
на каком-то этапе было посложнее - емнип, первый вывод типов вообще не позволял аннотации делать
Евгений
ну это близкородственные вещи
Ну, они часто используются вместе. Но часто и теги вместе с типами используются (например для реализации system f второго и более порядка)
A64m
ну они не столько используются вместе, сколько могут быть аннотирована в большинстве случаев для которых выводятся.
A64m
но это не одно и то же, да Ж(((
Dmitry
Ё-маё. Полдня в чатике не был, открываю, а тут как будто филиал Хабрахабра.
Dmitry
Битва джыэсников и хаскеллистов — атас, моё почтение!
Dmitry
Через неделю предлагаю пригласить гошника, ну или там растера.
Dmitry
Я сделаю такую систему, где Python-программа будет выполняться на миллионе разных данных в тестовом окружении, чтобы помочь тебе до деплоя на сервер.
А можно ли конечным набором тестов доказать отсутствие тех проблем, которые находятся на этапе компиляции (компилятором с поддержкой типов)?
Dmitry
Вот то-то же!
Алексей
Вот то-то же!
но это и не всегда нужно, кстати
Алексей
точнее почти никогда не нужно
Cheese
когда это не нужно, например?
Андрей
когда на пхп пишешь )
Алексей
саша
Опять же если взглянуть на веб, то между ES5 и ES2015 к примеру разница очень значительная.
Лол, сахарка насыпали, да промисы в стандарт добавили. Единственное реальное изменение на моей памяти - добавили возможность объявлять неглобальные для функции переменные
Алексей
достаточно отработки тестов, покрывающих самые распространённые варианты + парочку гранчиных случаев
Cheese
когда я пишу любой бэкенд, будет грустно, если существует хотя бы один способ неправильным запросом украсть данные моих клиентов
Алексей
возникнет неучтённая ошибка на бэкенде - она ловится, дебажится, пишется тест под неё
Cheese
гипотетически он есть, всегда
что, не защищаться от них тогда, что ли?
Алексей
да, если фирма не разорится от этой ошибки
ну знаете ли, не существует средств достижения абсолютной безбажности и безопасности
Алексей
ну кроме const и let только сахар да промисы, которые каждый сам писал ещё до того как их в стандарт добавили
const и let тоже сахар, а разница между "каждый писал свои промисы" и промисы в стандартной библиотеке довольно существенная
Cheese
защищаться, да
значит, всё-таки нужно?
Алексей
значит, всё-таки нужно?
Что нужно? Формально доказывать корректность каждой программы? Нет, не нужно. Статическая типизация тоже не панацея кстати.
Алексей
нет, до const и let скоуп переменной всегда ограничивался лишь функцией
ну на самом деле не знаю, можно ли считать let и const сахаром, если они тривиальным образом преобразуются в var или function + var
саша
Что нужно? Формально доказывать корректность каждой программы? Нет, не нужно. Статическая типизация тоже не панацея кстати.
не панацея, но количество ошибок может поубавить значительно, как и необходимость писать кучу тестов и страх перед рефакторингом
саша
Но не самое важное.
Именно самое важное
Алексей
не панацея, но количество ошибок может поубавить значительно, как и необходимость писать кучу тестов и страх перед рефакторингом
Обычно убавляется, да. Но вот насчёт "значительно" надо уже рассматривать конкретные случаи.
Andrey
а статическую линковку бинаря из-под osx в линукс удалось завести кому-нибудь при компиляции stack --docker?
Алексей
Именно самое важное
Нет, самое важное - это всё-таки промисы. А генераторы мало где используются. В основном используют опять же промисы и async/await поверх них.
саша
Нет, самое важное - это всё-таки промисы. А генераторы мало где используются. В основном используют опять же промисы и async/await поверх них.
А async/await во что транслируется? Промисы при желании можно самому написать, это очень просто. А вот с генераторами сложнее.
Алексей
А async/await во что транслируется? Промисы при желании можно самому написать, это очень просто. А вот с генераторами сложнее.
Async/await может спокойно транслироваться в es5 код без генераторов. А самописные промисы практически бесполезны, если повсюду либы на коллбэках, потому что в стандарт промисы не завезли.