Динамические и статически типизированные языки для веб-сайтов [закрыто]


13

Это утверждение предполагает, что статически типизированные языки не идеальны для веб-сайтов:

Я противопоставлю это созданию сайта. При рендеринге веб-страниц часто очень много компонентов взаимодействуют на веб-странице. Здесь у вас есть кнопки и маленькие виджеты, и на веб-странице их десятки, а также, возможно, десятки или сотни веб-страниц, которые являются динамичными. С системой с действительно большой площадью поверхности, подобной этой, использование статически типизированного языка на самом деле довольно негибко. Мне было бы больно, наверное, программировать на Scala и отображать на нем веб-страницу, когда я хочу интерактивно нажимать на кнопки и что-нет. Если вся система должна быть согласованной, как вся система должна проверять тип, чтобы иметь возможность перемещать кнопку, я думаю, это может быть действительно негибким.

Источник: http://www.infoq.com/interviews/kallen-scala-twitter

Это верно? Почему или почему нет?


6
Похоже, они не рассматривали язык / пакет с правильной иерархией объектов. Нет необходимости , чтобы проверить , если элемент управления вы двигаетесь это Buttonкогда WebControlсодержит всю информацию , вам нужно , и все элементы управления являются производными от него.
Мэтью Читал

5
Да @ Мэтью - звучит как кто-то, кто действительно не знает полиморфизм
Николь

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

Ответы:


39

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

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

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


1
Как функции первого порядка попадают в ту же категорию, что и структурные подтипы и алгебраические типы данных? Это звучит так, как будто у динамических языков нет функций первого порядка, что явно не соответствует действительности (Scheme, Common Lisp, Erlang, Smalltalk, ...).
Фрэнк Ширар

21
+1 за «Скорее всего, этот парень не знает, что полиморфизм может быть достигнут другими способами, чем утка».
Николь

1
@Frank Shearer: Я имею в виду, что они поддерживаются с тем же типом безопасности, что и любое другое значение. Существует ряд строго типизированных языков, которые поддерживают значения функций, но не различают сигнатуры.
back2dos

1
Я тоже не согласен, поэтому я выбираю это в качестве ответа.
Брэдфорд


8

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

Сказав это, я имею хороший опыт веб-разработки. Я работал по крайней мере 8 лет исключительно с этим, 5 из которых в цифровых агентствах.

И, да, по моему опыту, статически типизированный, скомпилированный язык на уровне представления может быть большим препятствием. Содержание необходимо постоянно менять, гораздо чаще, чем бизнес-требования. И обычно это должно быть сделано отдельной командой ("front-end" разработчиками). Обычно они много знают о HTML, JavaScript, веб-стандартах, CSS, но не очень много знают о серверных языках, таких как Java и C #. Они также предполагают, что любые изменения в шаблоне доступны немедленно ; они не используются для компиляции и ввода ошибок. И они правы: статически типизированные языки очень хороши для сложных, сложных требований, таких как доступ к данным и бизнес-правила, но не так хороши для разработки интерфейса.

Фактически это одно из основных преимуществ использования специализированного и интерпретируемого языка шаблонов, такого как Velocity . Его простота в использовании, мощность и гибкость адекватны разработчикам уровня представления. И тогда ребята на стороне сервера могут свободно использовать серьезный, статически типизированный язык везде ...

Тем не менее, я также согласен, что Scala несколько отличается. В то же время, будучи гораздо менее многословным и гораздо более выразительным, чем Java, я считаю, что его можно использовать для разработки презентаций, поэтому, возможно, его можно успешно использовать в качестве языка шаблонов. И если он также может быть объединен с такой платформой, как Play (которая автоматически компилирует веб-сайт после каждого изменения), это может стать победителем IMHO. Тем не менее, даже Play выбрал Groovy-подобный (динамический) язык шаблонов, что не является хорошим знаком.

Подводя итог: проблема со Scala гораздо больше связана с тем, что она компилируется. Фактически, механизм определения типа заставляет вас почти забыть, что он также статически типизирован.

(И извините за мой английский. Дайте мне знать, если что-то не понятно, я постараюсь это исправить.)


1
Я бы остановился на этом - просто посмотрите на беспорядок в JSP / STRUTS, когда они пытались сделать Java языком Интернета!
Джеймс Андерсон

8

Я думаю, что текст (и большинство ответов) смешивает статически типизированные языки и чрезмерно многословные языки. Конечно, пересечение очень большое (особенно если рассматривать только самые распространенные языки); но есть несколько интересных примеров не многословных, статически типизированных языков: Go, Haskell, Scala, Rust…


2
Определите «чрезмерно». По мере того, как программы становятся все более и более сложными, а срок их службы и циклы обслуживания увеличиваются, вероятность того, что кому-то, кроме первоначального автора, потребуется отладить или изменить какой-либо фрагмент кода, продолжает расти. Когда вы находитесь в такой ситуации, вы, как правило, находитесь под угрозой, и вам сразу же становится доступна дополнительная информация о том, с какими именно данными вы работаете, и что они могут сделать лучше. Я отлаживал Delphi других пользователей и JavaScript других людей, и Delphi на несколько порядков проще благодаря многословности и типу информации.
Мейсон Уилер

1
Просто примечание: что-то вроде TypeScript (JavaScript, со статической информацией о типах) может быть простым способом проверки теории OP. Мое короткое знакомство с ним было довольно приятным - однажды, когда я конвертировал некоторый JavaScript в TypeScript, он фактически помог мне найти, что не было никакого способа вызвать определенный метод, и не вызвать ошибку .
Katana314

5

Я рекомендую вам прочитать « Сильное печатание против строгого тестирования» Брюса Экеля . Главный аргумент в том, что качество программного обеспечения сводится к тестированию. Вы можете тестировать разными способами. Компиляторы проверяют некоторые вещи во время компиляции: попробуйте сохранить строку в переменной int, и она, вероятно, будет лаять на вас. В динамических языках большая часть тестирования происходит во время выполнения. В конечном счете, не имеет значения, когда проводится тестирование. Это просто должно произойти. Сколько времени вы получаете, не компилируя в динамических языках, теряется тестирование во время выполнения. Вы все тщательно тестируете, верно?

Учитывая это, предпочтение для скомпилированных языков с жесткими системами типов по сравнению с динамическими языками - это просто предпочтение. Вроде как боксеры против трусов или стринги против французских трусиков. Там нет правильного или неправильного ответа. Носите их с правильным отношением, и это только удивительно.


1
«Компиляторы проверяют некоторые вещи во время компиляции: попробуйте сохранить строку в переменной int, и она, вероятно, будет лаять на вас. В динамических языках большая часть тестирования выполняется во время выполнения». Правда, при использовании динамического языка я получаю написать много тестов, которые заменяют проверку типов. Используя статический язык, я могу сосредоточить свои тесты на бизнес-логике.
Джорджио

@ Джорджио Интересно, у меня редко есть какая-либо логика проверки типов в моих тестах.
plee

@pllee: Иногда это не логика прямой проверки типов, но тесты проверяют поведение, которое статическая система типов в любом случае должна была бы применять.
Джорджио

Брюс Экель, кажется, просто еще один человек, который потратил годы, работая с чрезмерно многословными языками (Java, C ++, ...), а затем прыгнул на первый другой поезд (Python), с которым он столкнулся. Он тратит половину статьи, восхваляя, насколько хорош синтаксис Python. Ему нечего внести в эту дискуссию из-за недостатка знаний.
Ziggystar

Но если вы попытаетесь сохранить строку в переменной int на динамическом языке - вы наверняка не заметите, пока не запустите / протестируете приложение и не увидите его в действии. Но в реальной мировой практике (более 17 лет разработки) я очень редко вижу в этом основную причину ошибки! Когда-либо! Но даже если это так - вы это замечаете и исправляете? Подумаешь? Как будто весь аргумент основан на очень техническом редком случае. Это не большая проблема! С другой стороны, преимущество динамической типизации заключается в том, что разработка значительно ускоряется.
Манахи

2

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

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

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


Слабое сцепление - это хорошо. Но для этого не нужны динамические языки. Видите ли, Интернет - это все о слабой связи, осуществляемой через HTTP, и большинство веб-серверов и браузеров написаны на статических языках. Динамические языки сияют в скриптовых приложениях, когда вам нужен фрагмент кода, легко модифицируемый во время выполнения, без вызова большой цепочки инструментов.
9000

2

Я думаю, что автор этого поста не смотрел сам Скала. Хотя я согласен с тем, что Java и C # имеют ограничения и немного негибки для веб-разработки, Scala - это язык со статической типизацией, который сильно отличается от того, о чем вы обычно думаете, когда слышите это. Scala позволяет печатать на утке так же, как безопасную версию исправлений обезьян (через неявные преобразования). Это делает библиотеки программирования немного более сложными, потому что вам придется думать о типах, но если вы просто используете библиотеку, такую ​​как Lift, это очень похоже на динамический язык, за исключением того, что компилятор сообщит вам об очевидных ошибках, когда вы просто не используете ее право. Я лично думаю, что веб-фреймворк лифта не должен прятаться от ruby ​​на рельсах или чем-то подобном. Посмотрите примеры кода здесь или здесьи решить для себя. Я довольно долго занимаюсь лифтом, и у меня никогда не было ситуации, когда у меня была ошибка типа, и хотя «А, боже, если бы это было динамично, это работало бы» ... потому что, если бы оно было динамическим, оно бы просто не сказало была ошибка, пока она не упала во время выполнения.


1

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


Я думаю, что стоит отметить, что Scala немного особенный, потому что он использует вывод типов и, следовательно, не относится к той же категории статической типизации, как, скажем, Java.
Уинстон Эверт

1

Практический Быстрый ответ: Это зависит от размера и сложности веб-размера. Небольшой сайт, динамическая прогр. lang., сложный большой сайт, статические прогр. яз.

Расширенный скучный ответ: многие разработчики настаивают на том, чтобы сайт создавался с динамической прогрой. Langr. но правда в том, что в конечном итоге инструменты веб-разработки, как правило, используют или имитируют статические типизированные языки.

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

Типизированный Lagn. также помогает использование IDE, которые требуют много проверки типов.

(взято вашим соседом прогр. & дизайнером компилятора ;-))


0

Я вроде согласен. Когда я смотрю на большинство веб-интерфейсного кода C #, происходит много приведений из строк и сериализации данных в строки. По сути, HTTP как протокол хорошо подходит для динамических языков.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.