|
Модератор
|
|
Динамически типизированные языки : один вред, никакой пользы31.01.2016, 01:13. Показов 9462. Ответов 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 - капля пользы?
|
|
Модератор
|
|||
| 26.02.2016, 20:12 [ТС] | |||
|
Не по теме: Тема, кста, по сути "динамические языки vs статические", а не "+ и - выведения типов и как ими пользоваться".
0
|
|||
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
||||
| 26.02.2016, 20:29 | ||||
|
поскольку одно другое дополняет нивилируя недостатки. не зря статика норовит максимакльно приблизиться к динамике, сохраняя свои главные киллер фичи: эффективность, и отлов ошибок на стадии компиляции.
0
|
||||
|
Модератор
|
||
| 26.02.2016, 20:35 [ТС] | ||
|
0
|
||
|
710 / 283 / 16
Регистрация: 31.03.2013
Сообщений: 1,340
|
||
| 26.02.2016, 21:07 | ||
0
|
||
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
||
| 26.02.2016, 21:08 | ||
|
во-первых, статика стремится предоставить дизайн динамики. но ей до динамики ещё, как раком до китая. а во-вторых, выше я иллюстрировал вам задачи, которые в принципе не решаются в статике. вашу точку зрения я понял уже давно. но по скольку вы не в состоянии смотреть на вещи с точки зрения то врядли вы сможете сообщить мне что-то, чего я ещё от вас не слышал. и поэтому, вы мне не интересны.
0
|
||
|
Модератор
|
|||
| 27.02.2016, 02:25 [ТС] | |||
|
Не по теме:
0
|
|||
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
||||||||
| 27.02.2016, 09:16 | ||||||||
извлекаем как строку. что бы это сработало нужно: 1. привести arg к массиву буковок на основе буковок построить строку. выдать полученную строку клиенту. в статике о таких вещах даже не задумываются. там все эти квесты за программиста выполняет компилятор. но в ситуации с универсальным аргументом это уже не прокатит. компилятор не знает заранее, что в него запихают. и не может сгенерировать код извлечения. задача не решается в статике в принципе. даже при наличии статической рефлексии. максимум, что тут можно сделать: предусмотреть ограниченный набор типов, для которых программист в ручную напишет код извлечения. обуславливается это не какими то техническими ограничениями, а банальной логикой: нельзя заранее сгенерировать код по обработке того, что будет известно только в рантайме. я конечно понимаю, что возможно, это не вы - узколобый, а это я - дурак, который не умеет объяснять. если вам не понятно о чем я толкую - вы мне скажите. япроиллюстрирую проблему на практике. иногда коды объясняют лучше, чем слова. динамика - экономически выгодная. это - единственное и достаточное условие её существования. но из этого так же вытекает, что она практичная. то есть, удобны и проста в эксплуатации. статика конечно стремится догнать но пока она ещё не умеет плюшки динамики так же просто, как это делается в самой динамике. и пока это так - динамика будет оставаться востребованной.
0
|
||||||||
|
Модератор
|
|||
| 27.02.2016, 12:26 [ТС] | |||
|
В любую программу вообще "запихают" данные заранее известного формата. Например, что бы "запихать" в некую программу Ваше предыдущее сообщение и получить что то кроме "format error", необходимо иметь заранее оговоренное описание представления данных, при чём зависящее от задачи. Если Ваше сообщение "пихаем" в архиватор, то ему достаточно знать что в тексте следует ожидать повторяющиеся фрагменты, и что какие то символы будут встречаться чаще других. Если это программа проверки орфографии, то ей нужен словарь и нетривиальные алгоритмы анализа текста. и.т.п. Естественно, что это реализовано на статических языках. Не по теме: «Учение Маркса всесильно потому, что оно верно»
0
|
|||
|
Игогошка!
1801 / 708 / 44
Регистрация: 19.08.2012
Сообщений: 1,367
|
||||||
| 27.02.2016, 12:36 | ||||||
|
Ты же не пишешь calculate_price(auto count, auto cost)? Вот фиг знает, count - целое число или вещественное? А концепты дадут читабельный явный интерфейс со всеми его плюсами + вменяемые сообщения об ошибках.
0
|
||||||
|
4576 / 2775 / 491
Регистрация: 28.04.2012
Сообщений: 8,782
|
||
| 27.02.2016, 12:37 | ||
|
0
|
||
|
Игогошка!
1801 / 708 / 44
Регистрация: 19.08.2012
Сообщений: 1,367
|
|
| 27.02.2016, 12:58 | |
|
korvin_, ну C, С++, OCaml, Ada частенько летают. Про CL не слышал ничего.
0
|
|
|
4576 / 2775 / 491
Регистрация: 28.04.2012
Сообщений: 8,782
|
|||
| 27.02.2016, 13:26 | |||
|
Добавлено через 1 минуту
0
|
|||
|
Модератор
|
|||
| 27.02.2016, 14:24 [ТС] | |||
|
А вот объективно: стандарты безопасности в милитари, авионике и подобном требуют если не Аду то OCaml и точно не динамику. Не по теме: Опять пошла реклама скобок. Отлаживать программу в интерактивном режиме при задержках в минуты и более вообще глупость. И эксперимент с отладкой программы на борту реального межпланетного зонда глупость и показуха. Могли бы на земле задержку смоделировать.
0
|
|||
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
||||||||||||||||||
| 27.02.2016, 14:38 | ||||||||||||||||||
|
http://rextester.com/VAP11281 за синтаксисом уже проследил компилятор. за семантикой - автор кода. вам нужно понять что делает этот код только лишь. раз это скомпилировалось. и не может, если не скомпилировалось. при чем тут тип объекта? при чтении кода итак понятно из контекста использования. эту информацию дает только и только контекст использования. прототипы говорят, что они будут делать. но не говорят, как они будут это делать. именно на этом основанно свойство "инкапсуляция". что бы понять, как будет использован объект, вам придется заглянуть в реализацию. и когда вы это зделаете, фактический тип объекта уже не будет иметь значения нет ни одной причины запрещать доступ к функциональности, которая все равно не нужна функции. равно как нет причин запрещать доступ к функциональности, которая нужна функции для своей работы. значит у нас куча проблем и с клиентами (легаси), и с реализацией. что приходится? видно из его использования.
допустим, obj - это объект класса "стиральной машинки", или "таблица", "база данных", "запись", да мало ли. вы предлагаете мне каждый раз писать кучку дополнительных буковок, наследоваться от какого тосLockable, только ради того, что бы в итоге поиметь точно такой же профит? я задам ещё раз вопрос: зачем писать много, если тоже самое можно получить, написав мало? такое же нечитабельное говно, как и вся шаблоно магия. вот нахрена концепты, вообще не понятно. ради чего вы резко усложнили код? что бы вместо сообщения от компилятора "объект не умеет lock", получить тоже самое, только слегка другими словами? вы же на ровном месте его исскуственно усложняете без всяких причин.
0
|
||||||||||||||||||
|
Игогошка!
1801 / 708 / 44
Регистрация: 19.08.2012
Сообщений: 1,367
|
||||
| 27.02.2016, 15:07 | ||||
|
korvin_, но, как я понимаю, все по некоторым причинам закончилось фигово, и уже лет 15 на CL особо нет ничего? http://www.flownet.com/ron/RAX2.pdf Или я ошибаюсь?
Все остальное контекстно связанное ты растаскал на цитаты, а я не могу отвечать за каждую из них вне контекста. Отмечу только, что пример с локом - это очень частный пример, на котором не надо зацикливаться. Представь, что у нас длинная цепочка шаблонных функций. И находить косяк в передаче параметра 1-ой функции по ошибке в 12-ой - занятие утомительное. Добавлено через 4 минуты hoggy, короче, если быть точным, то этот твой auto в параметрах именованной функции - часть Concept TS. http://en.cppreference.com/w/c... onstraints
0
|
||||
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|||
| 27.02.2016, 17:49 | |||
|
0
|
|||
|
4576 / 2775 / 491
Регистрация: 28.04.2012
Сообщений: 8,782
|
|||
| 27.02.2016, 18:38 | |||
|
0
|
|||
|
710 / 283 / 16
Регистрация: 31.03.2013
Сообщений: 1,340
|
||
| 27.02.2016, 19:03 | ||
|
0
|
||
|
8973 / 4319 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
||
| 27.02.2016, 19:30 | ||
|
ситуацию, когда в статике в принципе не возможно реализовать некоторые элементы динамики, вы называете "забиванием гвоздей микроскопом" ?
0
|
||
|
Модератор
|
||
| 27.02.2016, 20:11 [ТС] | ||
|
Что за ограничения?
0
|
||
| 27.02.2016, 20:11 | |
|
Как динамически выделять память на один элемент массива? Один обработчик события для нескольких динамически созданных объектов Интерпретируемые языки VS Компилируемые языки В коде динамически наполняется массив и его элементы выводятся на сцену, но выводится только один элемент никакой тип Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Сегодня суббота, 22.08.2026 at 16:41, и я вновь нахожусь на той стороне, за экраном машины.
zorxor 22.08.2026
Сегодня суббота, 22. 08. 2026 at 16:41, и я вновь нахожусь на той стороне, за экраном машины. Кто Я, откуда Я пришел и куда Я иду? Эти вопросы не оставляют меня ни на секунду. Жизнь на планете Земля. . .
|
Жизня: рисунок укладки багажа, сделанный клодом
anaschu 21.08.2026
Сделал 15 снимков, он по снимкам сделал схему.
|
Был там один разговор по поводу свободы в материальном мире.
kumehtar 19.08.2026
Суть: рассматривается живое существо, оказавшееся внутри довольно странной системы (этого мира) и пытающееся обустроить в ней свой кусок пространства.
Жизнь действительно предъявляет каждому. . .
|
Когда логика программы не спасает от человеческих ошибок
Maks 18.08.2026
В последнее время всё чаще и чаще сталкиваюсь с таким явлением, как абсолютная невнимательность (или глупость) пользователей. Проявляется это чаще всего на работе в коллективе. Допустим, человек с. . .
|
|
Лето уходит
kumehtar 17.08.2026
|
Мысли в слух
kumehtar 17.08.2026
Забавно, насколько сейчас стала доступна информация. Например о магии, духовном развитии, медитациях, и других подобных направлениях, ранее зачастую тайных, передаваемых от учителя к ученику. Хотя. . .
|
Перемещение строк из ТЧ в другой документ с учетом текущего пробега
Maks 17.08.2026
Реализация из решения ниже выполнена на примере нетипового документа "Автозапчасти", с ТЧ "Шины".
За основу взят алгоритм отсюда: https:/ / www. cyberforum. ru/ blogs/ 359708/ 10838. html
Задача: . . .
|
Саморегулирующийся социальный контракт для сервера cross-section.
Hrethgir 14.08.2026
С кодом конечно таких глубоких размышлений пока не было, впрочем я уже привык к алгоритмизации. Суть предмета записи: снова в диалоге с нейросетью (я взял пока себе ник для учётки админа - Rector). . . .
|