Здравствуйте, turbocode, Вы писали:
T>На что то более вменяемое типа C# с хорошей стандартной библиотекой? Сколько можно тянуть этот JS легаси из 90-х годов?
Прочитал всю ветку, много думал. Пишу на JS с 2000-го года, владею многими другими языками. Вопросы и ответы.
1. Почему ничто другое не вытеснило это говно?
JS сам вытеснил VBScript, который был в общем зачёте лучше. Много званых, но мало избранных. Спросите у знакомой блондинки, почему она выбрала именно текущего партнёра из множества женихов.
2. У JS низкий порог вхождения.
Это теперь считается недостатком?
2.1. У JS низкий порог вхождения, а я всё равно ничего не понял.
Не отчаивайтесь, для вас специально придуманы фреймворки [\w]+\.js
3. JS не такой, как все.
Вы тоже, смените палитру вашей IDE на цвета по умолчанию.
4. Нет явных типов.
Согласен, очень жаль, что нет типов name, email, phone... -- именно того, с чем должен работать JS в первую очередь. В других языках их тоже нет.
5. Нет защиты от дурака.
А в С++ нет не было сборщика мусора, а на проводах ЛЭП вообще нет изоляции.
На самом деле в JS есть такая защита от дураков, которая другим языкам и не снилась, называется "прототип". Вот выпускается очередная кривая версия библиотеки, всё разлетается, а мы прототипчиком всё и везде и поправим.
6. Нет модулей, сборок, маршалинга, петтинга и фистинга.
Не нужно.
7. Партия торжественно обещает, что нынешнее поколение будет жить при JS 2017. Шанель ваниль №4 вполне решает гетеросексуальные задачи. Для всего остального -- CSS.
Итого. В русском языке нет слова legacy, числительное 21 требует единственного числа, нет артиклей, зато сплошные роды. Давайте отменим этот пережиток! Почему ни один язык не заменил русского? Ах, какой логичный был волапюк! Английский тоже дерьмо -- почему пишется так, а читается по-другому? Почему никто до сих пор не поправил? Латинский алфавит -- убожество, бедным немцам нужно 7 букв для "Щ". Лучше всего китайский и вот почему:
— один иероглиф заменяет кучу букв;
— высокий порог вхождения, чувствуешь себя илитой;
— @аннотацииинтонации;
— строгая типизация, никаких флексий;
— многоплатформенность: поддерживается Кантоном, Мандарином и пр.
— полная совместимость с прежними версиями.
Здравствуйте, mgu, Вы писали:
mgu>Для гибкости существуют библиотеки. И вообще я удивляюсь, что до сих пор не изобрели качественные переводчики с одного программного языка на другие.
Что ты подразумеваешь под словом "качественные"? Подумай можно ли сделать "качественный" транслятор из C++ в Basic?
Здравствуйте, gandjustas, Вы писали:
G>>>Я не писал что клиент всегда прав. Это ты сам придумал. I>>Писал, только не в этом топике. G>Значит ты фразу выдернул из контекста.
С контекстом всё в порядке. Ты пишешь это в откровениях про порядки на своей конторе.
G>>>Я тебе только сказал что лучше быстро, чем медленно, и что лучше быть богатым, чем правым. Последнее — не моя фраза, подслушал у кого-то. I>>Это и есть выбор. Подслушал ты или нет, дело десятое. Ты ему следуешь, по твоим же словам. G>Ты не на ту часть моего сообщения ответил.
Когда пишешь "или-или" это и есть выбор.
I>>Ты уже в который раз отказываешься от своих слов и задним числом корректируешь смысл. G>Я ничего не корректирую, это ты сам пытаешься исказить смысл. Тебе что-то мешает формально определить смысл слов "быть правым" и "быть богатым" ?
Формально эти две вещи для меня большого смысла не имеют ибо у меня другая система ценностей, отличная от твоей. Какая из этих вещей ближе к "быть собой и счастливым" я при всем желании не могу сказать. Когда я будучи в полном душевном здравии буду счастливым то мне насрать и на первое, и на второе.
Здравствуйте, Somescout, Вы писали:
S>>>Давай примеры. I>>Чем представлен number в JS и во что gwt компилит, например, лонги ? S>ВЫ делаете утверждение — ВЫ предоставляйте примеры, не я.
Это и есть пример. А вопрос для того, что бы ты сам подумал. Система типов JS VM резко отличная от JVM. Соответственно есть два варианта решения — поддержка этих типов в gwt или же эмуляция. Надо объяснять, что в джаве первый вариант недоступен принципиально ? А вот из за эмуляции ты и огребаешь проблемы, потому как полностью заткнуть дыры джавой ну никак не получится.
I>>Так с каждым языком. Если ты на Джаве начнешь писать как на плюсах, язык покажется очень кривым. S>Ещё раз — мне не нравятся идиомы js... А дальше по тексту из предыдущего сообщения
Не нравятся — это вкусовщина, а не аргумент.
I>>>>В каждом. S>>>Не спорю, просто мне не нравятся идиомы, направленные на говнокодинг. Ergo — мне не нравится js (и php заодно). I>>Не совсем понятно что ты имеешь ввиду. Есть какой нибудь релевантный пример ? S>Классика
Это никак не мешает писать код Такие вещи только на форумах и встречаются.
Здравствуйте, Somescout, Вы писали:
ARK>>>Во, у меня в джва раза меньше строк! G>>Слив зощитан
S>А что не так? В одном случае фрэймворк браузер, в другом COM + MSOffice. Ситуация более чем схожая.
Браузер есть по дефолту в любой взрослой ОС. ОФис еще покупать надо, а COM — только на винде и то не любой. Например твой код в макоси не заработает. И в андроиде/иосе не заработает. А JS вариант заработает везде и сразу.
Здравствуйте, gandjustas, Вы писали:
G>Тем не менее Джава съела долю рынка C++, а C# съел долю рынка Java.
Опять аналогии. Джава не транслируется в С++, а C# в Java.
G>С JS даже проще, чем другими языками, достаточно любой язык компилировать в JS
Намного сложнее. Недостаточно. JS это не машинный код и не байткод. Трансляция в него приводит к вороху проблем с перформансом, отладкой. Куча библиотек, нацеленных на синтаксическое улучшение, типа той же jquery, на слишком долеко отошедшем языке становится полностью бесполезной. Вобщем, JS слишком высокоуровневый и слишком вся инфраструктура браузера на него завязана, так что при попытке его скрыть получаем классический случай сильно текущей абстракции. С машкодами и специально спроектированными байткодами такой проблемы нет.
G>А вот Microsoft смог. По простой причине — он не пытался заменить JS, а улучшил его, разом дотянув удобство разработки до современных яызков и IDE.
Верно. Хотя до нормальных языков по удобству TS не дотянулся.
G>Из этого простой вывод — в JS есть что-то чего нет в других языках и без этого другие языки не могут вытеснить JS.
Здравствуйте, Ночной Смотрящий, Вы писали:
НС>Здравствуйте, gandjustas, Вы писали:
НС>>>Трансляторы в принципе не могут победить JS, потому что в него транслируют. G>>И что? НС>И все.
Прекрасный ответ.
G>> Большинство языков транслируют в машинный код, кто-то пишет в машинных кодах? НС>Вот именно — писать в машинных кодах невозможно, в отличие от. Доказательство по аналогии не работает.
Почему невозможно? Я простые программы писал в машкодах, всего-то калькулятор для hex кодов нужен.
Другое дело что объем операция для написания любой нетривиальной программы превышает все разумные пределы, но принципиальной невозможности нет.
Здравствуйте, Ночной Смотрящий, Вы писали:
НС>Здравствуйте, gandjustas, Вы писали:
G>>Тем не менее Джава съела долю рынка C++, а C# съел долю рынка Java. НС>Опять аналогии. Джава не транслируется в С++, а C# в Java.
А что это меняет?
Была java в вебе в виде апплетов, с++ в виде activex и C# в виде Silverlight.
Ты думаешь если сделать в браузере байткод, в который смогут компилироваться другие языки, то они смогут вытеснить JS?
Увы, такого уже не случилось, хотя попытки были.
G>>С JS даже проще, чем другими языками, достаточно любой язык компилировать в JS
НС>Намного сложнее. Недостаточно. JS это не машинный код и не байткод. Трансляция в него приводит к вороху проблем с перформансом, отладкой.
Не понял. Если компилируем язык X в JS, то имеем проблемы с перформансом и отладкой, а если пишем на голом JS то не имеем? Это как?
А если имеем в обоих случаях, то к чему этот аргумент?
НС>Куча библиотек, нацеленных на синтаксическое улучшение, типа той же jquery, на слишком долеко отошедшем языке становится полностью бесполезной.
Это проблема JS, JQuery или "слишком долеко отошедшего языка"? И почему "слишком долеко отошедший язык" не может предложить решение лучше?
НС>Вобщем, JS слишком высокоуровневый и слишком вся инфраструктура браузера на него завязана, так что при попытке его скрыть получаем классический случай сильно текущей абстракции.
То есть современные языки недостаточно высокоуровневые чтобы писать код с той же выражительностью, что и JS? Собственно это и требовалось доказать
Кстати сильно текущие абстракции появляются когда абстрагируемая система сильно сложнее и выразительнее, чем абстракция. Поэтому например сложно абстрагировать SQL.
G>>А вот Microsoft смог. По простой причине — он не пытался заменить JS, а улучшил его, разом дотянув удобство разработки до современных яызков и IDE. НС>Верно. Хотя до нормальных языков по удобству TS не дотянулся.
Странно, ты же сам пишешь выше, что JS более высокоуровневый, а TS — надмножество JS. Кто до кого не дотянулся в итоге?
G>>Из этого простой вывод — в JS есть что-то чего нет в других языках и без этого другие языки не могут вытеснить JS. НС>А вот вывод неверный.
Ну ты уже сам признал что JS более высокоуровневый (обладает большей выразительной силой), чем другие языки.
Здравствуйте, Ikemefula, Вы писали:
I>Важны не те грабли ,что тебя смущают, а возможности которые представляет JS.
"Возможности, которые предоставляет JS" это, попросту говоря, доступ к DOM. Никаких других возможностей не требуется. Упомянутые сильверлайты и флэши к DOM доступа AFAIK не имели.
Здравствуйте, Artem Korneev, Вы писали:
AK>Здравствуйте, Ikemefula, Вы писали:
I>>Важны не те грабли ,что тебя смущают, а возможности которые представляет JS.
AK>"Возможности, которые предоставляет JS" это, попросту говоря, доступ к DOM. Никаких других возможностей не требуется. Упомянутые сильверлайты и флэши к DOM доступа AFAIK не имели.
SL очень даже имел, насчет flash и java applets — не знаю.
Здравствуйте, Artem Korneev, Вы писали:
I>>Важны не те грабли ,что тебя смущают, а возможности которые представляет JS.
AK>"Возможности, которые предоставляет JS" это, попросту говоря, доступ к DOM. Никаких других возможностей не требуется. Упомянутые сильверлайты и флэши к DOM доступа AFAIK не имели.
JS к твоему сведению легко пролез чуть не везде. NodeJS тоже думаешь благодаря DOM взлетел ? А встраиваемый скриптинг ? JS сейчас по факту есть вообще везде, его даже в микроконтроллеры встроили.
JS это очень гибкая объектная модель, функциональное программирование и все это с очень достойной производительностью.
Здравствуйте, gandjustas, Вы писали:
G>>> Большинство языков транслируют в машинный код, кто-то пишет в машинных кодах? НС>>Вот именно — писать в машинных кодах невозможно, в отличие от. Доказательство по аналогии не работает. G>Почему невозможно? Я простые программы писал в машкодах
Не простые, а примитивные. Это не писание программ, это стоя в ластах в гамаке.
G>Другое дело что объем операция для написания любой нетривиальной программы превышает все разумные пределы, но принципиальной невозможности нет.
Принципиальная возможность в контексте разговора никого не волнует, волнует практическая возможность, а ее нет.
Здравствуйте, gandjustas, Вы писали:
G>>>Тем не менее Джава съела долю рынка C++, а C# съел долю рынка Java. НС>>Опять аналогии. Джава не транслируется в С++, а C# в Java. G>А что это меняет?
Все.
G>Была java в вебе в виде апплетов, с++ в виде activex и C# в виде Silverlight.
И везде — большие проблемы, если не вообще отсутствие удобных средств манипуляции DOM, ровно как и практически полное отсутствие интеграции с HTML/CSS.
G>Ты думаешь если сделать в браузере байткод, в который смогут компилироваться другие языки, то они смогут вытеснить JS?
Да, именно так я думаю. При условии что этот байткод будет first class citizen, а не плагин сбоку.
НС>>Намного сложнее. Недостаточно. JS это не машинный код и не байткод. Трансляция в него приводит к вороху проблем с перформансом, отладкой. G>Не понял.
Да я и не сомневался даже.
G> Если компилируем язык X в JS, то имеем проблемы с перформансом и отладкой, а если пишем на голом JS то не имеем? Это как?
Это так. Текущая абстракция называется.
НС>>Куча библиотек, нацеленных на синтаксическое улучшение, типа той же jquery, на слишком долеко отошедшем языке становится полностью бесполезной. G>Это проблема JS, JQuery или "слишком долеко отошедшего языка"? И почему "слишком долеко отошедший язык" не может предложить решение лучше?
Потому что нельзя вот так взять и сразу переписать весь веб (здесь картинка с Боромиром).
НС>>Вобщем, JS слишком высокоуровневый и слишком вся инфраструктура браузера на него завязана, так что при попытке его скрыть получаем классический случай сильно текущей абстракции. G>То есть современные языки недостаточно высокоуровневые чтобы писать код с той же выражительностью, что и JS?
То есть у современных языков другая основа. IL/JVM байткод это максимально возможный уровень абстракции, когда существование поверх более менее различных языков еще как то работает. И то не без проблем — с несовместимостью системы типов они имеют место быть. Тот же функциональный тип в F#/Nemerle/etc приходится придумывать свой, так как с делегатами проблемы. И это уж точно не означает, что F# недостаточно высокоуровнев чтобы писать код с той же выразительностью, что и в ilasm.
G>Кстати сильно текущие абстракции появляются когда абстрагируемая система сильно сложнее и выразительнее, чем абстракция.
Лишнее зачеркнул.
НС>>Верно. Хотя до нормальных языков по удобству TS не дотянулся. G>Странно, ты же сам пишешь выше, что JS более высокоуровневый, а TS — надмножество JS. Кто до кого не дотянулся в итоге?
TS до современных универсальных языков. И это не потому что TS сам по себе плох, а потому что JS висит у него на ноге тяжелой гирей.
G>Ну ты уже сам признал что JS более высокоуровневый (обладает большей выразительной силой), чем другие языки.
Еще раз припишешь мне то чего я не говорил — будешь общаться в гордом одиночестве.
Здравствуйте, gandjustas, Вы писали:
G>Тем не менее Джава съела долю рынка C++, а C# съел долю рынка Java.
Там совершенно другая ситуация. Для того, чтобы взлетела Java, ей не нужно было занимать те же ниши, что занимает С++. Там совсем другая история.
С браузерами всё печальнее. Если вы сделаете новый крутой язык, который будет работать, например, только в браузере Opera, то этим языком пользоваться никто не будет. Нужна будет поддержка всего того же диапазона браузеров и платформ, который есть у JS и именно это и было бы проблемой для любого нового браузерного языка. А вовсе не какие-то волшебные фичи JS.
CoffeeScript, TypeScript и Dart появились сравнительно недавно. Посмотрим. Может они вытеснят JS. Пока рано судить, все эти браузерные вещи очень инертны в силу огромного количества веб сайтов.
G>Но ни C++ (activex), ни Java (gwt), ни C# (Script#), ни dart не смогли победить JS.
ActiveX работал в одном единственном браузере и благополучно издох, когда этот браузер утратил доминирующее положение на рынке. Честно сказать, я с этой вещью вообще почти не сталкивался, но я сомневаюсь, что оно подходило на роль убивцы JS — оно ж работало не на целой страничке, а в маленьком контейнере-компоненте. Или не?
GWT — не знал про него, спасибо за наводку! Вещь интересная. Особенно заинтересовали биндинги к питону — я с сыном в свободное время питоню понемногу, на простеньком уровне. Давно хотел его чему-нибудь простенькому в вёбе научить, но рассказывать ребёнку про JavaScript не хотел. А вот pyjs (надстройка над GWT) выглядит в этом плане интересно.
Но это тоже из другой оперы по очевидной причине — если я правильно понимаю, оно тоже не работает с DOM. Нормальная замена JS должна работать с DOM (ну или иметь какое-то своё представление HTML-документа). А GWT это попытка натянуть десктопный UI на вёб. А это совсем другая ниша — там есть свои применения, но это не для обычных массовых веб сайтов.
Что такое Script#? Я порылся, что-то не нашёл никаких упоминаний в википедии.
Я сейчас на Dart повнимательнее посмотрел. Вот этот, наверное, на роль убивцы подходит. Не могу, правда, сказать, насколько он лучше, но на первый взгляд выглядит интересно. Но я с фронтендом почти не работаю, пощупать нет повода.
G>в JS есть что-то чего нет в других языках и без этого другие языки не могут вытеснить JS.
TSP>>Что бы убедится что всё это странно. Делать из текста текст, который потом движком V8 переводится в байт-код, который потом выполняется на интерпретаторе. I>И это нормально.
Это не нормально.
TSP>>Как отлаживаться и профилироваться в такой цепочке — это вообще отдельная индустрия костылестроения. I>Так же, как и в любом другом ЯП.
Не так же. Отлаживается уже транслированный, а не исходный текст.
TSP>>Есть байт-код, есть нативный машинный код, и есть JS. Это всё разные вещи. И каждый слой должен оправдывать своё существование. G>Тебе никто ничего не должен.
Ну так себе аргумент. Пиши уж сразу "ой, всё!"
Все эти слои имеют недостатки, которые всё равно не получится игнорировать.
TSP>>В случае JS оправдание — не развитый язык и компенсация его кривой поддержки браузерами. G>Язык очень даже развитый, но поддержка браузерами хромает.
Я бы не сказал что он развитый. Я про ES5, про то что есть сейчас. Не про светлое будущее.
С точки зрения результата(продукта) не важно что там хромает. Должно работать.
TSP>>Нормально это Java, ну или хотя бы .NET. А это всё шляпа. G>На техническом форуме увидеть аргумент "это все шляпа" — бесценно. G>Помоему ты уже добрался до границы своей компетентности, почитай книжки, расширяй границы.
По поводу компетентности и границ в мире JS это вообще отдельная тема. Через пару месяцев работы с JS уже можно пилить статью на хабре и получать там плюсы в карму. А многие кто освоил ангуляр или иной костыль мнит себя гением и яро защищает свое болотце.
G>Давай по порядку, какие модули ты имеешь ввиду? G>1) Лексические модули — изоляция частей программы, так чтобы внутри части были видны все члены, а снаружи только часть. G>2) Рантайм-модули — возможность подгружать части программы во время работы программы и менять их независимо от других частей. G>Лексические модули были в JS были всегда за счет объектов и замыканий. Но это не было стандартом и это было некрасиво. G>Есть неформальные стандарты amd (require.js) и commonjs (NodeJS) c 2011 примерно. G>Если не понял повторяю — уже 7 лет как все желающие имеют модули в JS. Наверное не ошибусь, если скажу что это дольше, чем ты знаком с JS вообще.
Я про лексические в самом простом понимании. Просто разбиение на файлы. Встроенных в язык средств нет и при этом он "развитый". Про 7 лет ты ошибся. Конечно, я не писал все семь лет на нём, но много опыта не надо, что бы увидеть очевидные проблемы.
G>Потому что кроме браузеров есть NodeJS и куча производных от него вещей. А еще есть компиляторы, которые адаптируют код для браузеров без поддержки возможностей. G>Внезапно оказалось что почти все нововведения могут быть реализованы небольшой генерацией кода. (это к вопросу о мощности языка)
Node.js имеет многое из коробки и программирование на нем отличается от фронтенда. Мы говорим о том, что исполняется в браузере.
TSP>>Нет пока никакого ES 2017, и когда он будет никто не скажет. Если вообще будет. G>Будет. ES это тебе не C++, в комитете по ES вполне здравые люди и хорошие нововведения принимают быстро.
Когда будет, тогда и обсудим. Его пока тупа нет и даже примерно неизвестно когда будет и будет ли.
В комитете по плюсам есть свои проблемы, но это не имеет отношения к JS
G>>>Как раз буст гораздо больше дырок в языке затыкает, чем фреймворки в js. Более того, в новые версии js отлично попадают подобные "затычки". TSP>>В самом языке буст ничего не затыкает. Он его расширяет и многое потом отправляется в стандарт. G>Это игра слов, которая по факту смысл не меняет.
Нет. Между расширением возможностей и затыканием дыр есть разница.
TSP>>А вот, например, $scope в angular это типичный пример костыля, который требуется понимать и правильно использовать. G>$scope это кривость самого ng и без него работает уже давно.
Ок. Но кривость эта именно из за недостатков JS родилась.
G>>>Ну также в JS. Все давно забили на то, что на выходе. Проблема только в отношении. У многих в голове сидит паттерн "js — плохо, а <подставить любимый язык> — хорошо". TSP>>Большинство забили. Но не думаю, что на больших проектах удасться полностью абстрагироваться от выхлопа этих всех богомерзких тулов. G>Внезапно удается.
Не всем.
G>>>Ты удивишься, но из 5 последних проектов jquery был только в одном. TSP>>Точно нет jquery? Покажи папку node_modules. G>Точно нету, там angular.
В ангуляре(1.х), как я помню, он косвенно присутствует в урезанном виде и волшебно подменяется, если доступна полная версия jquery
TSP>> Большинство этих всех фреймворков не расширяют язык, как скажем boost в плюсах, а создают экосистему затычек и примочек для несчастного JS. S>Ну, это вы зря. При всей моей нелюбви к js, ситуация с boost'ом просто один в один, если не хуже. Та жесть, которую творят создатели буста в своих шаблонах выглядит ни чуть не менее уродливой, чем соответствующие извращения в js.
Внутри да — он монструозен.