LINUX.ORG.RU

Накидайте критики жабоскрипта

 ,


6

2

Реквестирую ссылки на статьи и посты, в которых подробно разбирается, почему JavaScript - убогонький недоязычок уровня PHP, исполненный маразма и плохого дизайна. Мне для коллекции нужно.



Последнее исправление: ymn (всего исправлений: 2)

Ответ на: комментарий от newKingOfTheBlock

Вообще, влияние схемы на JS сильно преувеличено.

и это плохо, да. ecoop2004.pdf pg. 59 «Object-Oriented Programming in languages that don’t require tail-call optimizations makes no sense.»

Основа языка — это все таки Ъ-ООП, на основе SELF.

селф там тоже расово неполноценный:

Ten days without much sleep to build JS from scratch, «make it look like Java» (I made it look like C), and smuggle in its saving graces: first class functions (closures came later but were part of the plan), Self-ish prototypes (one per instance, not many as in Self)

.

мультивселенные, эвереттику и альтернативные истории ниасиливают, ога.

anonymous
()
Ответ на: комментарий от anonymous

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


someList map(+ 1) select (> 3) foreach(print)

И конкурентность и асинхронность там реализована сообщениями

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

newKingOfTheBlock
()
Ответ на: комментарий от newKingOfTheBlock

на JS по прежнему все еще можно писать по другому.

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

x3al ★★★★★
()
Ответ на: комментарий от x3al

Сомневаюсь, что от этого что-то изменится. Подавляющее большинство так называемых гиков в их заповедниках, банальное быдло-зубрилки, надрачивающие на теокат и LC, посмотри на «вбросы» Хьюитта на lambda the ultimate, сколько народа там понимает о чем он говорит? Такие же зубрилки, знают много, понимают мало. Если у него не получилось, сдвинуть что-то с мертвой точки, куда уж мне, с моим английским еще тем более:). Да даже не то чтобы акторы, даже просто динамика, воспринимается в штыки. Picolisp, newlisp — все это крайне не популярно, на гик-ресурсах, это все скорей на андеграунд-ресурсах приветствуется, где посещаемость 3 человека за год:)

Хотя, может когда-нибудь и попробую, таки:)

newKingOfTheBlock
()
Ответ на: комментарий от newKingOfTheBlock

не было бы никакого коллбечного уродства

Ну с асинхронщиной два пути - либо по-пролетарски на колбеках, либо маскировать её под синхронный код хитрым сахарком. Так вот, учитывая контингент и реализацию JS, лучше ничего не маскировать, дабы кодеры отдавали себе отчёт что делают. Ну и к тому же, цепочка колбеков для понимания проще, чем все эти ваши продолжения. Вообще, хайп по асинхронщине (reactor pattern) какой-то нездоровый, имхо. Концепция то замшелая, не особо эффективная, и по большому счету нахер не сдалась для массового веб-дева. Видимо в скриптовых язычках настолько всё плохо с параллелизмом, что нода прям стала откровением.

anonymous
()
Ответ на: комментарий от anonymous

два пути

есть третий путь, я повторюсь, семантика сообщений.

Вообще, хайп по асинхронщине (reactor pattern) какой-то нездоровый, имхо. Концепция то замшелая, не особо эффективная, и по большому счету нахер не сдалась для массового веб-дева.

На самом деле ты ошибаешься. В вебдеве асинхронщина нужна как воздух, нужны неблокирующие отклики как на серверной стороне, так и на клиентской.

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

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

newKingOfTheBlock
()
Ответ на: комментарий от anonymous

лучше ничего не маскировать, дабы кодеры отдавали себе отчёт что делают.

А ты реально думаешь, что они отдают себе в этом отчет? Я уверен, что большинство думают о коде совсем не то, что реально происходит.


asyncCall(foo).then(collback)

о таком коде обычно думают, как так: асинхронный вызов затем то-то и то-то. А на самом деле, тут фишка не в этом, а в том, что вернулся промис, на этот этому промису ты присваиваешь слот, который он выполнит после готовности. иными словами, then - это пустой слот объекта, с которым связывается коллбек. Примерно то же самое что new XMLHttpRequest().onreadystatechange

То бишь, коллбечный синтаксис наоборот сбивает с толку. request.onreadysr

newKingOfTheBlock
()

Хороший вброс, годный.

paran0id ★★★★★
()
Ответ на: комментарий от newKingOfTheBlock

Object-Oriented Programming in languages that don’t require tail-call optimizations makes no sense

бред

зато сколько пафоса!!111

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

так что беда JavaScript не в том, что «влияние схемы на JS сильно преувеличено».

we need to get deeper, и нам нужно бы moar влияния схемы.

правда, тогда схема (с алгольным синтаксисом) и получится. а не JS.

anonymous
()
Ответ на: комментарий от anonymous

продолжения с хвостовой рекурсией лучше соптимизируются, а колбяки в жабоскрипте — хуже.

Вообще, основной смысл ТСО — это оптимизмция памяти и предохранение от переполнения стека. Это по-сути, подковерное разворачивание рекурсии в цикл. Асинхронные коллбеки не могут переполнить стек, они его даже не выстраивают, они просто кидаются в очередь на выполнение. память же можно и вручную соптимизировать. Поэтому роль TCO в асинхронщине для мня не совсем очевидна.

продолжения с хвостовой рекурсией

Что касается продолжений, я не совсем понимаю, о чем ты, но если ты о call/cc, то в JS их вообще нет. И, кстати, в схеме код с продолжениями невозможно, в общем случае, соптимизировать TCO, потому что в таком коде необходимо сохранять весь стек вызовов. Я хз, как это у них там вообще сочетается.

newKingOfTheBlock
()
Ответ на: комментарий от newKingOfTheBlock

И конкурентность и асинхронность там реализована сообщениями

посылка сообщений — это просто механизм. тоже сахар.

суть метода в том, что если мы уж говорим про «функциональные объекты», «объект это замыкание», то объект можно рассматривать как монаду, у которой есть единица и умножение: нулевой объект (перед конструктором) и следующий по жизненному циклу (где побочный эффект к вызову очередного метода — смена состояния объекта).

вот в теоркате есть например, терминальный объект который тоже похож с одной стороны на этот «нулевой объект» перед конструктором, с другой на null после деструктора.

вообще объекты в теоркате похожи на типы (классы), морфизмы (стрелки) на вычисления (посылку сообщений, вызов методов, call/cc в «объект это замыкание», вызов колбека, диспетчеризация метода в VMT в С++, you name it).

тогда интересен не просто механизм «посылка сообщений», а возможность максимально, насколько это возможно, построить эту таблицу диспетчеризации во время CTFE, уже при компиляции (а не в рантайме).

то есть, часть морфизмов предвычислить таблично и использовать коммутируемость коммутативных диаграмм, теоремы о пределах и копределах, и т.п.

для юзера конечно удобнее сахар. и думать, что происходит «посылка сообщений», а не диспетчеризация методов.

а для компа — предвычислить эти таблицы диспетчеризации заранее, насколько это возможно.

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

но ведь таблица диспетчеризации — те же колбеки. только мы их не видим из-за сахара.

Подавляющее большинство так называемых гиков в их заповедниках, банальное быдло-зубрилки, надрачивающие на теокат и LC, посмотри на «вбросы» Хьюитта на lambda the ultimate, сколько народа там понимает о чем он говорит? Такие же зубрилки, знают много, понимают мало. Если у него не получилось, сдвинуть что-то с мертвой точки, куда уж мне, с моим английским еще тем более:). Да даже не то чтобы акторы, даже просто динамика, воспринимается в штыки. Picolisp, newlisp — все это крайне не популярно, на гик-ресурсах, это все скорей на андеграунд-ресурсах приветствуется, где посещаемость 3 человека за год:)

ты про этот тред ?

ну newlisp странный лисп. picolisp более практичный, но тоже «слишком динамичный».

kernel вот интересный, и интересен вот этот тред на лоре

опять же, несколько окружений и в CL пытаются прикрутить (First-class Global Environments in Common Lisp, Robert Strandh), но в kernel как-то оно концептуально чище.

опять же, в newspeak клоне смоллтока тоже пытались прикрутить множественные окружения (worlds). чем-то похоже на self.

anonymous
()
Ответ на: комментарий от newKingOfTheBlock

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

ага, надо прям от процессоров, от триггеров всё заново перерабатывать.

все эти гигагерцы и синхронная тактовая частота — это хайп

например, так: тыц

ЗАКЛЮЧЕНИЕ

Описанные ссылки на полученные знания в междисциплинарных областях знаний нового направления в сфере компьютерных систем позволят поднять уровень обработки иерархической информации на более высокий уровень. Благоприятные усилия по внедрению этих разработок, к сожалению, под силу только передовым фирмам, таким как Intel, IBM и им подобным или государственным программам, потому что разработку надо начинать с нуля

всего-навсего.

anonymous
()
Ответ на: комментарий от anonymous

посылка сообщений — это просто механизм. тоже сахар.

под сахаром что только не подразумевается порой. На самом деле, все же, наиболее адекватным взглядом следует считать то, что сахар — это синтаксис, все то, что прикручено помимо выражений. В языке, где все есть сообщение, сообщение — есть выражение языка, а не синтаксис и не сахар. Если отойти от этого определения, мы скатимся до того, что все выражения языка являются сахаром. С этой точки зрения, например, функции и списки в лиспе — сахар. Это не конструкивно.

А то что там под капотом, реализация — это нас вообще не волнует

ты про этот тред ?

Нет. У Карла хьюита есть аккаунт на сайте

http://lambda-the-ultimate.org/

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

newKingOfTheBlock
()
Ответ на: комментарий от newKingOfTheBlock

someList map(+ 1) select (> 3) foreach(print)

вот здесь " " из Io напоминает «операцию пробел» от А. Столярова (статьи, особенно последние про «алгебраический подход»)

он открыл для себя, что разговаривает прозой — что в С++ в качестве «универсального языка» можно использовать «операцию запятую» и даже круче «операцию пробел».

правда у него не всё CTFE, в основном тупо в рантайме реализуется.

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

чем-то напомнило.

anonymous
()
Ответ на: комментарий от newKingOfTheBlock

сообщение — есть выражение языка

first class objects, ага.

С этой точки зрения, например, функции и списки в лиспе — сахар. Это не конструкивно.

есть изоморфизм списков, S-выражений, а также: строк, алгебры.

например, строка это моноид с пустой строкой и операцией конкатенации. список — тоже моноид с пустым списком и конкатенацией списков.

тоже для выражений, только моноиды другие. тогда и для «сообщений» тоже что-то такое.

А то что там под капотом, реализация — это нас вообще не волнует

в идеале да, если бы оно всё было «первоклассными объектами». но не всё, поэтому все эти кишки колбеков и простыни function через function и торчат наружу в простых вещах, типа модулей через require.js, асинхронщины в ноде и т.п.

anonymous
()
Ответ на: комментарий от anonymous

в идеале да, если бы оно всё было «первоклассными объектами».

Нет, в Io все и есть *really* первоклассный объект. И не только в смысле «объект языка» но и в ООП - смысле, т.е. отвечает на сообщения, меняет поведение и тд.

newKingOfTheBlock
()
Ответ на: комментарий от anonymous

В JS нет продолжений.

нет, есть

Удивительно, но анонiмус прав. Это ж каким надо быть упорышем чтоб попутать продолжение с колбеком.

anonymous
()

Ты javascript отключил в своем браузере? А то треп про то, как хорошо быть вегетарианцем, кушая при этом мясо

oblepiha_pie
()

Реквестирую ссылки на статьи и посты, в которых подробно разбирается, почему JavaScript - убогонький недоязычок уровня PHP

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

ioway
()
Ответ на: комментарий от newKingOfTheBlock

Вот это, по его мнению, работает неправильно

Другой пример. Это «создание» почему-то удивляется, что
А что это ходячее недоразумение ожидало там увидеть? В js все ф-ции без явного ретурна возвращает undefined, а аргументы
опциональны.

ТННП

в чем вообще суть твоего утверждения? что javascript соответствует своей спеке? так это никому не интересное капитанство, мы тут другое обсуждаем. из того, что js ведет себя так как ведет, никак не следует качество его дизайна.

MyTrooName ★★★★★
()
Последнее исправление: MyTrooName (всего исправлений: 1)
Ответ на: комментарий от MyTrooName

Нет, суть моего сообщения в том, что твой маленький пистонист ННП, и пытался выдать нормальное поведение языка за wtf'ки, я просто показал как твой герой обосрался, и обмазал вас обоих его дерьмецом.

newKingOfTheBlock
()
Ответ на: комментарий от newKingOfTheBlock

пистонист ННП, и пытался выдать нормальное поведение языка за wtf'ки

еще раз, ТННП. или осознай это наконец, или не трать мое время

я просто показал как твой герой обосрался, и обмазал вас обоих его дерьмецом.

свои фантазии пости где-нибудь в другом месте

MyTrooName ★★★★★
()
Ответ на: комментарий от MyTrooName

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

newKingOfTheBlock
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.