|
Модератор
|
|
Динамически типизированные языки : один вред, никакой пользы31.01.2016, 01:13. Показов 9486. Ответов 177
Метки нет (Все метки)
Я имею ввиду языки, в которых только или почти только используются динамически типизированные данных. Не будем сейчас рассматривать рефлексию, в языках .NET или java – там используются динамические типы, но используется сама рефлексия относительно редко.
Где ещё, якобы нужна динамическая типизация? Для доступа к БД? Не нужна, если сама БД не написана на динамическом языке и/или не специально спроектирована для взаимодействия с динамическим языком. Если посмотреть API конкретных СУДБ (например, oracle, postgreSQL, Firebird/Interbase, SQLite) или ODBC API, то выяснится, что динамическая типизация не нужна. Для JSON ? Нет, не нужна. Библиотеки для работы с JSON реализованы, наверное, для всех распространённых, статически типизированных языков. Метапрограммирование? Смотря какое. Если под ним подразумевать выполнение строки кода введённого пользователем, то может оказаться и нужна. Только это для скриптов. При чём для скриптов без предкомпиляции (хотя бы в байт код). Сейчас 21 век, и код, даже на скрипте, должен вначале хотя бы парситься с проверкой типов весь, что бы не выгребать баги лопатой после жалоб пользователей (тулзы типа JSHint, это эрзацы. Декларации типов должна быть встроены в язык и несоответствия обнаруживаться компилятором.). А если под метапрограммированием понимать перекладывание на компилятор генерацию рутинных, повторяющихся кусков кода, то такое метапрограммирование (как и программирование вообще), предпочтительно типобезопасное и в динамической типизации не нуждается. Сторонники динамических языков часто возражают примерно так «мне нужно, что бы переменная xyz принимала то значение строки, то значение вот с эдакой структурой». Заметим, на практике, если уж мы будем работать с содержимым xyz, то кол-во вариантов конечно, и ограничено логикой программы (да, для выполнения, например, копирования xyz в другую область памяти, нам ничего кроме ссылки и размера не нужно, но не для работы с конкретным её содержимым). А раз так, то xyz может быть алгебраического типа. В pascal можно заменить на запись с вариантами, в С на union и пр. Распространённость динамически типизированных языков я связываю со временем, когда web-сервера были практически только у провайдеров, а они разрешали абонентам использовать на своих страницах почти только perl и php. В те времена ни о какой предкомпиляции и JIT слыхом не слыхивали. Как и о песочницах. Интерпретаторы этих скриптов делали на коленке и каждый помаленьку. По этому они, впрочем как и js, по дизайну напоминают письмо из простоквашино. Потом скрипты «возмужали» и «заматерели», обзавелись кое где JIT-ом, но примитивность динамической типизации осталась. Не даром сейчас полным ходом идёт разработка и внедрение языков со статической типизацией компилируемых в js (TypeScript, Elm), а php держится за счёт инерции мышления (как фортран или кобол), не более. Да, есть ещё вполне динамический, и более свежий Ruby. Ну, дык, его автор сам до того прогал на perlе, стало быть привык к динамической типизации, да и рассчитывал на любителей перловки. Собственно, я что хочу сказать. В конкретном, динамически типизированном скрипте могут быть очень интересные и полезные фенечки за что его могут любить прогеры с ограниченным знанием языков. Только фенечки фенечками, а динамическая типизация бяка. Почему бяка? Ну, легко нагуглить, и навикипедить. Использовать же в компилируемом языке динамическую типизацию – вообще маразм. Исключение – языки выполняемые на виртуальной Erlang машине со встроенной динамической типизацией. Автор (или кто то из разрабов) утверждал что иначе механизм динамической замены кода не получался. Со скрипом, поверим на слово. Тем более, что там стараются контролировать типы на уровне библиотеки.
0
|
|
| 31.01.2016, 01:13 | |
|
Ответы с готовыми решениями:
177
Определите, какие языки знают все школьники и языки, которые знает хотя бы один из школьников Meta Keywords - капля пользы?
|
|
Модератор
|
|||||
| 19.02.2016, 10:43 [ТС] | |||||
|
В статике всё просто. Вы такое представление системной информации, видимо взяли из WMI, которое предназначено для использования в WSH, т.е. из динамических скриптов.
0
|
|||||
|
1195 / 588 / 88
Регистрация: 20.09.2012
Сообщений: 1,881
|
||||
| 19.02.2016, 11:56 | ||||
0
|
||||
|
Модератор
|
|||
| 19.02.2016, 12:23 [ТС] | |||
|
0
|
|||
|
1195 / 588 / 88
Регистрация: 20.09.2012
Сообщений: 1,881
|
||||
| 22.02.2016, 13:49 | ||||
да и я пишу не на статических языках, а на том что для решения конкретной задачи потребует меньше затрат (во всем). насчет объясняли... объяснять про сферических лошадей и я могу. вспомним это в итоге все 3 пункта были полностью подтверждены "неоправданно усложняет проектирование" - спроектировать ниче не получилось, даже в прототипе "удлиняет сроки реализации" - в динамике рисуется за 5 минут полное решение, в статике минула неделя, а воз все там же "приводит к набуханию проекта" - "Ввод дополнительных буковок ерунда" а их там много наберется обоснование завершено
0
|
||||
|
Модератор
|
|||
| 22.02.2016, 15:27 [ТС] | |||
|
Вывести через WMI описание железа компа (если Вы эту "киллер фичу" в кармане прятали) - это использовать встроенный в винду механизм. Впрочем, всё что надо, можно получить и без него. Краткое резюме: я, в СП, написал более узкое утверждение - не нужны динамически типизированные языки. "Я имею ввиду языки, в которых только или почти только используются динамически типизированные данные." Но, возражения "динамистов" оказались, полностью не серьёзными, и, к тому же, перешли на оспаривание более широкого утверждения: нужны ли динамические типы вообще (а не динамические языки (см. выше)). В результате я получил подтверждение своего первоначального тезиса и склоняюсь к тому что динамические типы не нужны вообще. Аргументы "динамщиков" про "набухания", невозможность статически описать сложные объекты, и что события от гуя можно обрабатывать только скриптами не стоят обсуждения. p.s. Я был бы не прочь услышать аргументы за динамические типы. Но это действительно должно быть что то разумное.
0
|
|||
|
1195 / 588 / 88
Регистрация: 20.09.2012
Сообщений: 1,881
|
|||
| 24.02.2016, 06:47 | |||
). и это отчасти подтверждается тем, что статический яп от математиков и для математиков не смог вытеснить со своих ниш динамические R и MATLAB.
0
|
|||
|
Модератор
|
|||||
| 24.02.2016, 08:35 [ТС] | |||||
|
Не по теме: Давай покрасим холодильник в чёрный цвет./А для чего?/А просто так./Давай покрасим холодильник в чёрный цвет.
0
|
|||||
|
2305 / 1064 / 77
Регистрация: 12.03.2013
Сообщений: 4,987
|
|||
| 25.02.2016, 01:03 | |||
|
Добавлено через 3 минуты
0
|
|||
|
Игогошка!
1801 / 708 / 44
Регистрация: 19.08.2012
Сообщений: 1,367
|
|||
| 25.02.2016, 12:32 | |||
|
0
|
|||
|
Модератор
|
||||
| 25.02.2016, 12:37 [ТС] | ||||
|
Сами юнит-тесты для статики упрощаются т.к. не нужно отдельно проверять корректность типов.
0
|
||||
|
306 / 101 / 18
Регистрация: 04.07.2014
Сообщений: 571
|
|
| 25.02.2016, 13:41 | |
|
KolodeznyDiver
Мне кажется, что в словах nullxdth нечто интересное всё же есть. В императивном программировании есть определённая тенденция писать код относительно неких "ящиков", с которыми связаны какие-то имена, а не относительно "объектов". Так гораздо удобнее мыслить деструктивные присваивания. Как-то в войнах проскакивала ссылка, где такой подход был сочно назван "place oriented programming". В рамках этого POP подхода "динамический тип" возникает естественно. Если у Вас есть имя s, которое связано с ящиком, то сложно дать этому имени какой-то тип... Сегодня в ящике "Hello Kitty!", а через три деструктивных присваивания -- число с плавающей точкой. Тогда любое выражение, в которое входит такое s, просто не может получить тип, потому что нужно расширить контекст до известного типа s, что можно сделать только уже запустив программу.Когда код оказывается перегружен POP, то статическая типизация уже мешает. Она ничего существенного доказать про код не может, но крутить эти статические метки приходится постоянно. Пример с "компьютерным железом" как раз сформулирован в форме POP: хочу поименованные ящика, где лежит не знаю что. Такая задача решается на уровне динамической типизации естественно, а на уровне объектов со статическими типами -- не очевидно. IMHO
0
|
|
|
710 / 283 / 16
Регистрация: 31.03.2013
Сообщений: 1,340
|
||
| 25.02.2016, 15:34 | ||
|
Если у тебя слабая динамическая типизация, то unit test вообще ничего не проверит. Если же сильная, то все равно может быть фейл как минимум из-за duck typing'а
0
|
||
|
2305 / 1064 / 77
Регистрация: 12.03.2013
Сообщений: 4,987
|
|||
| 25.02.2016, 18:22 | |||
|
Если у тебя слабая типизация то и статика мало чем помогает. Посмотреть, например, хотя бы Си. Добавлено через 1 минуту
0
|
|||
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|||||||
| 26.02.2016, 03:12 | |||||||
|
чем меньше необходимо знать и иметь ввиду, тем проще. чем проще - тем лучше. вот например, чистая статика:
что это не статика, а динамика. что изменилось? ничего не изменилось, если не считать, что решение в статике эффективнее, а ошибки обнаруживаются времени компиляции, а не выполнения. но это уже ортогонально удобству чтения кода.
0
|
|||||||
|
Модератор
|
||
| 26.02.2016, 10:22 [ТС] | ||
|
0
|
||
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
||
| 26.02.2016, 14:23 | ||
|
для удобства чтения это не принципиально.
0
|
||
|
Игогошка!
1801 / 708 / 44
Регистрация: 19.08.2012
Сообщений: 1,367
|
||||||||||||
| 26.02.2016, 14:38 | ||||||||||||
|
Сейчас используются тайпклассы для бедных:
0
|
||||||||||||
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
||||||||||||||||||
| 26.02.2016, 19:13 | ||||||||||||||||||
|
это самый заурядный плюсовый код. что делает функция?
мне не понятно, нафига вы все усложняете? зачем делать сложно, когда можно тоже самое сделать просто? зачем писать много, когда можно получить тоже самое, но писать при этом мало? зачем читать много, когда для понимания достаточно малого количества информации? объясните мне сакральный смысл, пожалуйста. Добавлено через 51 секунду или чукча не в курсе, что такое "ошибки времени компиляции" ?
0
|
||||||||||||||||||
| 26.02.2016, 19:13 | |
|
Как динамически выделять память на один элемент массива? Один обработчик события для нескольких динамически созданных объектов Интерпретируемые языки VS Компилируемые языки В коде динамически наполняется массив и его элементы выводятся на сцену, но выводится только один элемент никакой тип Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо
Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
|
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман.
Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
|
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
|
Как у меня протекала болезнь
zorxor 27.08.2026
Здравствуйте, друзья! Эта запись блога предназначена именно для вас - для моих дорогих друзей, которые знали меня лично. Чтобы ответить на вопрос - а что же со мной произошло на самом деле? Я учился. . .
|
|
Нашел вот забавное видео о измерениях. Лучшее что я видел на эту тему
kumehtar 26.08.2026
ILETXiw9bMQ
Основная суть и тезисы по измерениям:
0D (Нулевое измерение): точка, не имеющая длины, ширины, высоты или объема.
Объект не может перемещаться в 0D.
1D (Первое измерение):. . .
|
[EasyBuilder Pro] Памятка по разработке для панелей Weintek
ФедосеевПавел 26.08.2026
Памятка по разработке для панелей Weintek
ВВЕДЕНИЕ
Ранее, при реализации проектов основное внимание уделял разработке управляющей программы для контроллера, а панели оператора доставалось время. . .
|
Модель по догадкам
anaschu 25.08.2026
Прошло две недели. Я уже рассказывал, как разговаривал с сотрудниками у сортировки и как понял, что главная ветка — не про приёмку, а про отбор. Но тогда я думал, что понял механику. На этой неделе я. . .
|
Запись в регистр сведений независимо от заполненности табличной части
Maks 25.08.2026
Реализация из решения ниже выполнена на нетиповом документе с несколькими табличными частями, разработанного в КА2.
Задача:
Обеспечить запись документа в регистр сведений независимо от. . .
|