Здравствуйте, anonymous, Вы писали:
A>Нет, не при чём, это ж просто инструмент. Когда ты режешь себе палец, это нож виноват или ты чего-то не учёл?
Это очень сложный вопрос — люди склонные к переменам, развитию, ищут причину прежде всего в себе, таким образом учатся, скажут скорее так: "Не учел"
Люди не склонные меняться, развиваться, ищут виноватых вокруг себя и в инструментах: "Ну и что что 90% всех разработчиков знают JS, знамо дело — язык говно и писать на нём невозможно!"
Здравствуйте, StandAlone, Вы писали:
I>>Что сказать хотел ?
SA>То, что это ублюдочное, сраное говно, дико похожее на "мракобесный индусский C", которое еще до ES6 повсюду тащили с собой разные ангуляры, стало возможным к реализации только благодаря и посредством ублюдочному JS. SA>Отсюда чад кутежа, угара и жопотраха при попытке использовать JS для чего-то кроме Hello world.
Я не знаю как интерпретировать твои эмоции, жопотрах и прочие вещи. У нас на проекте никакого кутежа, угара и жопотраха, что не так ?
Если тебе промисы не нравятся, то всё в порядке — это важная идиома. Её устройство никак не говорит и не должно говорить о том, какой у ней профит. Собтсвенно именно потому и есть идиома.
Сконцентрируйся на проблеме и сформулируй её без эмоций и жопотраха.
Здравствуйте, StandAlone, Вы писали:
I>>Промисы — библиотечная фича, а не языковая. До вхождения в стандарт их годами использовали отдельной библиотекой и были ровно те же проблемы.
SA>Золотые слова! И после вхождения в стандарт они несут с собой те же самые проблемы, обусловленные тем же самым языком. SA>Порождая M в степени N новых проблем, при попытке написать на этом самом языке что-то с M фич и N строк кода.
Разумеется, это не так. Промисы есть и в других языках, или же есть аналогичный механизм. И там ровно те же проблемы, один в один. Забыл поставить return — получаешь непредсказуемое поведение. Поставил лишний return — снова непойми что. Асинхронщина во всех языках вот такая. Исключением являются только те языки, в которых эта модель встроена в сам язык. Я сходу даже не назову такой
Здравствуйте, neFormal, Вы писали:
I>>В разных семействах языков ожидания совершенно различные и это ежу понятно.
F>но если берут фичу из другого языка, то зачем её портить?
А её никто не "брал". Взяли самую простую реализацию, которая только в голову пришла. До 2005го года никто не верил, что на JS можно всерьёз писать код, потому язык и развивался особенным образом.
И вот не только развился, но и убрал всех прямых и косвенных конкурентов.
I>>В динамических языках вообще говоря стараются избегать сокращенных форм записи, поскольку очень легко ошибиться.
F>вообще говоря, это неправда.
Правда.
F>в питоне, руби, эрланге, лиспах... да везде пишут сокращённо, если позволяет синтаксис. в js просто сделано ректально.
Это неверно. Пишут кратко, но не сокращенно. В своём уме никто не будет зиповать код в динамическом языке. Что на питоне, что в лиспе это АДъ и Израиль. Есть исключения, навроде DSL, но это исключения.
I>>Тебе не нравится динамическая типизация а не JS. F>мне вот нравится динамика, но js — говно.
Здравствуйте, neFormal, Вы писали:
F>>>а при чём здесь типизация? проблема же в отсутствии проверки количества переданных аргументов. здесь типов нет. I>>Подсчет количества аргументов это требование времени выполнения — аргумент функции есть колбек определенного вида. То есть, самая что ни есть типизация.
F>арность — это ещё не типизация.
Это уже типизация, поскольку одновременно мы знаем, что аргумент является функцией.
Здравствуйте, anonymous, Вы писали:
A>Давай возьмём первый Haskell и попробуем предать в map в качестве колбека функцию, принимающую 2 аргумента.
Строго говоря в Хаскелле нет функций принимающих "2 аргумента".
A>А потом Perl, и то же самое. Какой вариант развития событий общепринят теперь?
Perl — плохой язык. Даже хуже чем JS.
A>Отдельно стоит обсудить, что в некоторых языках несколько реализаций map с разным поведением.
В любом "другом" известном мне ЯП семантика map вполне устоявшаяся и означает применение одного параметра к "колбеку" и пришло к нам из глубокой древности математики/лиспа. Семантика самого применения может быть разная, поэтому в случае Хаскеля в твоем случае "2-х аргументов" происходит карринг, а в случае щирпотреба ошибка арности/типизации.
Наркота которая я вижу здесь это "экономить на спичках", вместо нормального решения, как в том же питоне.
Здравствуйте, anonymous, Вы писали:
S>>Соответственно и речи не идёт об "одинаковых именах функций и операторах": я знаю что делает map, я в курсе существования массивов в js и знаю как они записываются. Я ожидаю что array.map(f) применит функцию f к каждому элементу массива. Но, внезапно, в функции вылазит какой-то index, который не упомянут в коде вообще, и передаётся как один из параметров. Неожиданное, и абсолютно неочевидное поведение. A>Именно об этом и идёт. Ты знаешь, что делает map в языке X, и требуешь, чтобы ровно то же самое он делал в языке Y. Твоё желание совершенно понятно. Но не ясно, почему разработчики библиотеки должны следовать ему.
Что-то вы в демагогию ударились: map в js разве не применяет функцию к каждому элементу массива, что вы говорите "требуешь, чтобы ровно то же самое он делал в языке Y"? Претензия (которую вы, видимо, сейчас в третий раз проигнорируйте) в том, что в эту функцию проскальзывает скрытый параметр, никак не представленный в коде.
A>Где?
А ниже, где вы считаете это всё "фичей".
S>>А язык, который молча позволил совершить эти две ошибки совершенно ни при чём. Собственно смотрите выше мою вкусовщину. A>Нет, не при чём, это ж просто инструмент. Когда ты режешь себе палец, это нож виноват или ты чего-то не учёл?
Если у ножа нет скользкая ручка, плавно переходящая в лезвие? Виноват я буду лишь в том что вообще взял этот нож.
Но ещё раз: S>А язык, который молча позволил совершить эти две ошибки совершенно ни при чём?
Здравствуйте, Somescout, Вы писали:
S>>>А язык, который молча позволил совершить эти две ошибки совершенно ни при чём. Собственно смотрите выше мою вкусовщину. A>>Нет, не при чём, это ж просто инструмент. Когда ты режешь себе палец, это нож виноват или ты чего-то не учёл? S>Если у ножа нет скользкая ручка, плавно переходящая в лезвие? Виноват я буду лишь в том что вообще взял этот нож.
Ты удивишься, но очень много ножей выполнено именно в таком дизайне — ручка плавно переходит в лезвие, при чем от жира, пота, крови рукоятка скользит. Очень популярный дизайн. У такого ножа вообще говоря очень узкое применение — там где не надо силу применять.
S>Но ещё раз: S>>А язык, который молча позволил совершить эти две ошибки совершенно ни при чём?
Абсолютно. Навык кодинга на таком языке приходит за то же время, что и с другими языками. Большинство ошибок в JS совсем другого сорта, а именно
Вот мой хитпарад, того с чем чаще сталкиваюсь в чужом коде:
1 потеря this,
2 ошибки мутабельности в замыканиях,
3 ошибки из за скопа,
4 неявное выделение конских объемов памяти,
5 циклические ссылки js-dom,
6 сравнение ссылок и объектов,
7 корявая работа с DOM,
8 ошибки наследования — аналогично языкам с наследованием,
9 ошибки обработки исключений
10 ошибки написания асинхронного кода — аналогично в любом многозадачном коде,
11 ошибки с массивами , в основном кода вместо готовых функций пишутся велосипеды и происходит путаница в индексах/итераторах.
здесь чисто джаваскриптовых ошибок 1, 3, 5, 6 и всё. Всё остальное в полный рост и в питоне, и в С++, и в С#, и в Java. Я думаю и где угодно примерно такой же расклад. Кроме Хаскеля. В ём ошибки компиляции
Здравствуйте, Ikemefula, Вы писали:
I>Я не знаю как интерпретировать твои эмоции, жопотрах и прочие вещи.
Это не эмоции, а оценочная констатация качества JS и поделий на нем.
I>У нас на проекте никакого кутежа, угара и жопотраха, что не так ?
Все в порядке, Томми. Все тип-топ. Я просто не совсем уверен в выборе цвета(с)
I>Если тебе промисы не нравятся, то всё в порядке — это важная идиома. Её устройство никак не говорит и не должно говорить о том, какой у ней профит. Собтсвенно именно потому и есть идиома. I>Сконцентрируйся на проблеме и сформулируй её без эмоций и жопотраха.
На счет тасков я не соглашусь. Это абстракция того же порядка, что и промисы. И проблемы ровно те же. На SO вопросы по таскам валятся как из ведра, гораздо чаще промисов и это при том, что на JS пишет много больше людей, чем на всём дотнете вместе взятом.
И ты можешь сравнить — один только Task.cs без каментов это гораздо больше строчек, чем вся реализация промисов стандарта А+.
Здравствуйте, Ikemefula, Вы писали:
I>На счет тасков я не соглашусь. Это абстракция того же порядка, что и промисы.
При чем тут промизы?! Это не "абстракция не того же порядка"!
И то, и другое — лишь попытки реализации CSP!
Разного радиуса кривизны.
И в случае с JS этот самый радиус приближается к радиусу Шварцшильда! Чисто потому что сам язык, да-да, сам вот этот вот замечательный язык такой же, спроектирован в виде бутылки Клейна и позволяет появление мертворожденных уродцев типа Q.
В черную дыру которого уже улетел не один миллион человеко-часов дебага и багофикса.
Здравствуйте, Ikemefula, Вы писали:
I>>>В разных семействах языков ожидания совершенно различные и это ежу понятно. F>>но если берут фичу из другого языка, то зачем её портить? I>А её никто не "брал". Взяли самую простую реализацию, которая только в голову пришла.
так "брал" или не "брал"?
всё-таки её притащили из других языков. когда юзера начали жаловаться, мол, "ачо у нас нет этих фп-шных map-reduce??7"
I>До 2005го года никто не верил, что на JS можно всерьёз писать код, потому язык и развивался особенным образом. I>И вот не только развился, но и убрал всех прямых и косвенных конкурентов.
да и сейчас верят не только лишь все.
до 2005 надеялись, что может какой другой язык там появится. а потом и единственный и так полудохлый конкурент загнулся.
F>>в питоне, руби, эрланге, лиспах... да везде пишут сокращённо, если позволяет синтаксис. в js просто сделано ректально. I>Это неверно. Пишут кратко, но не сокращенно. В своём уме никто не будет зиповать код в динамическом языке. Что на питоне, что в лиспе это АДъ и Израиль. Есть исключения, навроде DSL, но это исключения.
раскрой тему. что в твоём понимании "кратко" и что "сокращённо"?
I>>>Тебе не нравится динамическая типизация а не JS. F>>мне вот нравится динамика, но js — говно. I>Здесь большое противоречие.
никакого. в остальных языках хотя бы типизация строгая.
Здравствуйте, Ikemefula, Вы писали:
I> На SO вопросы по таскам валятся как из ведра, гораздо чаще промисов и это при том, что на JS пишет много больше людей, чем на всём дотнете вместе взятом.
Это потому что тасками пользуются технически грамотные люди и в случае чего смело озвучивают свое справедливое WTF. А жабоскриптеры уже просто привыкли к неевклидовости окружающего мира, и безропотно закручивают спиральные гвозди часовыми отвертками, бхх.
I>И ты можешь сравнить — один только Task.cs без каментов это гораздо больше строчек, чем вся реализация промисов стандарта А+.
Вон оно как, Михалыч! Вон оно где качество кода-то, в строчках!
Фигня, что и функционала Task имеет на порядок больше, и к нормальной реализации CSP гораздо ближе, и всякую мелочь типа NVI с ко-et-контравариантностью поддерживает, не будем уже о грустном типа статического анализа.
Главное, что наш прекрасный JS позволяет откладывать компактно:
var ref = function (value) {
if (value && value.then)
return value;
return {
then: function (callback) {
var result = defer();
// XXX
enqueue(function () {
result.resolve(callback(value));
});
return result.promise;
}
};
};
Здравствуйте, StandAlone, Вы писали:
SA>Это потому что тасками пользуются технически грамотные люди и в случае чего смело озвучивают свое справедливое WTF. А жабоскриптеры уже просто привыкли к неевклидовости окружающего мира, и безропотно закручивают спиральные гвозди часовыми отвертками, бхх.
Я тебе уже приводил примеры использования await в JS и TS.
Другое дело нужно обсуждать использовать Js ввиде ассемблера для C#,Ts Dart и прочих типизированных языков
и солнце б утром не вставало, когда бы не было меня
Здравствуйте, novitk, Вы писали:
A>>Давай возьмём первый Haskell и попробуем предать в map в качестве колбека функцию, принимающую 2 аргумента. N>Строго говоря в Хаскелле нет функций принимающих "2 аргумента".
Не важно, функцию, которая возвращает функцию. Ну, например:
map (+) [1,2,3]
A>>А потом Perl, и то же самое. Какой вариант развития событий общепринят теперь? N>Perl — плохой язык. Даже хуже чем JS.
Не важно, map там работает «ожидаемым» образом.
A>>Отдельно стоит обсудить, что в некоторых языках несколько реализаций map с разным поведением. N>В любом "другом" известном мне ЯП семантика map вполне устоявшаяся и означает применение одного параметра к "колбеку" и пришло к нам из глубокой древности математики/лиспа.
В JS то же самое, просто не забудь предать функцию, принимающую ровно один аргумент.
Здравствуйте, anonymous, Вы писали:
A>>>В обсуждаемом же примере ошибка ещё в том, что parseInt нельзя использовать без второго параметра, F>>а интерпретатор позволяет. A>Как и во многих других языках.
список в студию!
A>>>Итого мы имеем: разработчик не разобрался в инструменте, совершил две ошибки и получил не то, что хотел. Хороший пример, когда танцевать помешали яйца. F>>ересь, записанная в документации, не перестаёт быть ересью. в данном примере как раз разработчику и надо помнить, что map можно сделать только вприсядку и подпрыгивая. A>Ты так и не объяснил, в чём подпрыгивание.
в том, что для применения ф-ции к списку нужно её обернуть в другую
A>И почему оно на твой взгляд допустимо везде, кроме JS.
Здравствуйте, Somescout, Вы писали:
S>Что-то вы в демагогию ударились: map в js разве не применяет функцию к каждому элементу массива, что вы говорите "требуешь, чтобы ровно то же самое он делал в языке Y"? Претензия (которую вы, видимо, сейчас в третий раз проигнорируйте) в том, что в эту функцию проскальзывает скрытый параметр, никак не представленный в коде.
Он не будет проскальзывать, если ты не будешь подсовывать ему функцию, принимающую более одного параметра. Вот мне не понятно: ты ожидаешь, что map будет последовательно вызывать функцию с одним параметром, и при этом передаёшь в map функцию, принимающую 2 аргумента. Только мне одному кажется, что это не нормально?
S>>>А язык, который молча позволил совершить эти две ошибки совершенно ни при чём. Собственно смотрите выше мою вкусовщину. A>>Нет, не при чём, это ж просто инструмент. Когда ты режешь себе палец, это нож виноват или ты чего-то не учёл? S>Если у ножа нет скользкая ручка, плавно переходящая в лезвие? Виноват я буду лишь в том что вообще взял этот нож.
Не надо превращать мою иллюстрацию в аргумент.
S>>А язык, который молча позволил совершить эти две ошибки совершенно ни при чём?