LINUX.ORG.RU

JavaScript надежность


2

10

Добрый вечер! Увидел тему про Linux на JS в разделе. Видел PDF.js и возникает у меня следующий вопрос. Сколько не пытался писать на JS (обычно пишу на Java и еще иногда приходится на C) всегда сталкивался с проблемой возникновения большого количества ошибок в рантайме из-за динамической типизации. Как людям удается создавать приложения такой сложности на JS?

У меня получалось быстро и относительно без багов написать только с GWT, но это по сути это Java. Но мне довелось читать много негативных отзывов по GWT, что дескать просто на JavaScript проще.

Почему проще? Как вы отлаживаете большие приложения на JS? Как обеспечиваете модульность и при этом производительность?

Речь сейчас именно о сложных скриптах, а не простых интерфейсиках с jQuery UI.

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

Перемещено tazhate из development

★★

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

Потому что на практике все отлично.

В какой вселенной? По моей информации с зависимыми типами на практике все как раз далеко не отлично. Более конкретно - нахуй они не нужны в том виде, в котором существуют на данный момент.

Как везде и совмещают. Например можно просто top класс написать.

И какие операции ты сможешь выполнять с объектом топ-класса? Или ты предлагаешь разрешить апкасты? Ну такая «система типов» дает ровно столько же гарантий, как и динамика, так нахуя оно тогда нужно?

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

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

По моей информации с зависимыми типами на практике все как раз далеко не отлично. Более конкретно - нахуй они не нужны в том виде, в котором существуют на данный момент

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

Или ты предлагаешь разрешить апкасты? Ну такая «система типов» дает ровно столько же гарантий, как и динамика, так нахуя оно тогда нужно? Тем более лучше уж твердо знать, что никаких гарантий нет, чем верить в то, что они «почти есть».

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

так нахуя оно тогда нужно?

Потом что прекрасно работает на практике без типозадротов. Берешь апкаст с паттерн матчингом с принудительной проверкой всех вариантов и все хорошо

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

Не знаю о чем вы говорите. Работает почти всегда. Кроме тех случаев когда тип действительно неизвестен.

Что работает почти всегда? flatten мне запили на статике (который лисповый flatten, то есть из списка списков любой вложенности делает обычный список).

Прости, но это как раз то типодрочерство о котором я говорил. Никогда нет гарантий.

Нахуя нужна тогда система типов вообще? Я думал, именно за тем, что она дает гарантии. А если не дает - то какой смысл в ее существовании?

Потом что прекрасно работает на практике без типозадротов. Берешь апкаст с паттерн матчингом с принудительной проверкой всех вариантов и все хорошо

На практике оно и без типов работает точно так же хорошо.

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

Что работает почти всегда? flatten мне запили на статике (который лисповый flatten, то есть из списка списков любой вложенности делает обычный список).

Люблю контрпримеры «запили мне фичу вот тут где надо динамика». Ради бога, напишу апкастов и паттерн матчинга - будет. Это будет ничуть не менее по быдлокодерски как любая строчка на динамике. И это будет динамика. В нормальном преимущественно статическом ЯП. Я не типозадрот.

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

А ИСПОЛЬЗОВАТЬ ты потом эту функцию как будешь? тебе придется потом при каждом вызове этой функции кастить результат.

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

А как я могу пользоваться объектами о которых ничего не знаю. Могу их передавать дальше или забывать из своих структур. И будет тип Object раз уж не повезло. А когда нужно что-то сделать, то да, паттернматчинг. Всяко лучше чем если будет этот Object всегда и я через 100 вызовов методов вызову метод .foo и буду молиться что он там есть.

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

А ИСПОЛЬЗОВАТЬ ты потом эту функцию как будешь? тебе придется потом при каждом вызове этой функции кастить результат.

опять таки в 95% случаев я ЗНАЮ, что у меня функция выдаёт ЦЕЛОЕ, и ничего кастовать мне в принципе не нужно. А если не целое - это ошибка, и у меня тупо не соберёться. А у тебя даже будет работать, и тебе ещё и проверять надо при ВСЕХ допустимых значениях, правильно или нет. Если выдаёт строку, которая сама кастуется в 0, это не значит, что работа правильная, даже если по логике должно быть целое 0. В продакшене будет 666, которое скастуется в (int)666, и всё рухнет.

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

А у тебя даже будет работать, и тебе ещё и проверять надо при ВСЕХ допустимых значениях, правильно или нет.

Зачем? Я запущу ф-ю один единственный раз и если она возвращает строку вместо целого, то это будет видно.

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

Зачем? Я запущу ф-ю один единственный раз и если она возвращает строку вместо целого, то это будет видно.

как ты УВИДИШЬ, что функция вернула 0, а не «0». А может вернуть «» - это тоже с виду 0...

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

как ты УВИДИШЬ, что функция вернула 0, а не «0». А может вернуть «» - это тоже с виду 0...

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

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

с зависимыми типами на практике все как раз далеко не отлично.
Более конкретно - нахуй они не нужны в том виде, в котором существуют на данный момент.

А в каком нужны?

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

А в каком нужны?

Того, в котором нужны, еще не придумали. Есть все основания полагать, что его и вовсе не существует.

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