|
Модератор
|
|
Динамически типизированные языки : один вред, никакой пользы31.01.2016, 01:13. Показов 9186. Ответов 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 | |
|
Помогаю со студенческими работами здесь
100
Как динамически выделять память на один элемент массива? Один обработчик события для нескольких динамически созданных объектов Интерпретируемые языки VS Компилируемые языки В коде динамически наполняется массив и его элементы выводятся на сцену, но выводится только один элемент никакой тип Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Транскрипция 55-минутного видео через Whisper: WhisperDesktop облажался, спас Google Colab[
anaschu 01.06.2026
Понадобилось получить текст из свежезагруженного видео на YouTube. Казалось бы, задача на пять минут. Заняла полтора часа. Делюсь опытом — может кому пригодится последовательность решений.
. . .
|
21 мат мед. Планы на развитие модели здравоСохранения
anaschu 01.06.2026
AnyLogic: план развития симуляционной модели рабочего коллектива — динамический абсентеизм, реальные данные, три сценария сравнения
Продолжаю серию постов о дискретно-событийной модели рабочего. . .
|
20. Мат мед. Абсентеизм как отдельный тип простоя
anaschu 29.05.2026
Апдейт модели: исправленные баги, абсентеизм и новые механизмы
Продолжаю развивать ранее описанную модель рабочего коллектива на AnyLogic. За последние несколько дней был проведён серьёзный. . .
|
19. здоровье, усталость и психотип работника влияют на производительность предприятия, и наоборот, производительность на здоровье, усталось и психотип
anaschu 28.05.2026
Дискретно-событийная модель рабочего коллектива на AnyLogic: здоровье, выгорание, психотипы и микростимуляция
Привет, коллеги. Хочу поделиться итогами нескольких недель работы над симуляционной. . .
|
|
"Прокси" для последовательного порта
Eddy_Em 28.05.2026
Эту штуку написал я достаточно давно. Но сейчас вот понадобилось настроить датчик грозы, но при этом не отключать его от "метеодемона". Соответственно, надо запустить этот "прокси": метеодемон будет. . .
|
Рефакторинг программы уравнивания.
Massaraksh7 26.05.2026
Пример по предыдущей записи в блоге. Но, надо заметить, что, во-первых, там оптимизация не только математики, но и работы с базой данных, и с графами, а во-вторых, это ещё не всё.
|
Использование TThread в Lazarus для математических вычислений.
Massaraksh7 25.05.2026
Производя рефакторинг своих программ на предмет ускорения их работы, обратил внимание на такой аспект, как сокращение времени матвычислений. Дело в том, что приходится работать с большими матрицами. . .
|
Модель здравосохранения 18. Чем здоровее работник, тем быстрее выгорает
anaschu 24.05.2026
Имитационная модель корпоративного здравоохранения: что показывает математика
Сегодня в модели рабочего коллектива на AnyLogic появились три новые механики — выгорание через накопленную усталость,. . .
|