LINUX.ORG.RU

Зачем нужна статическая типизация?, или Вы всё врете!

 ,


1

4

В теме "Питонячьи радости " на последних страницах между мной и @rtxtxtrx внезапно разгорелся спор, из которого я понял, что есть еще люди, которые не считают динамическую типизацию (в том виде, в котором она представлена в Питоне, а именно строгая динамическая типизация) серьезным недостатком при работе с большим объемом кода, особенно при рефакторинге. Вообще изначально разговор завязался вокруг назначения type hints введенных в Питон 3: я утверждал, что они нужны для создания семантических связей в коде, которые будут препятствовать внесению деструктивных изменений в код в результате опечатки или иной ошибки кодера (изменил код, в результате которого какое-либо выражение получило некорректное значение, которое тем не менее обладает схожим с корректным значением типовым контрактом, поэтому при запуске код не «упадет» сразу, указав на проблему); оппонент заявил, что они нужны для (само)документации и не более того.
Но потом выяснилось, что и царь-то ненастоящий (читай, статическая типизация). Не нужна она, просто именуй сущности понятно и уповай на строгую типизацию. А если типизация не строгая, то сами виноваты, у нас в Питоне всё ОК.
Поскольку тема большая и вкусная, я предлагаю всем обсудить этот очень важный вопрос в меру скромных сил и познаний каждого желающего. Обсуждение вторичных вопросов, как-то «статическая типизация нужна для генерации эффективного кода», «при динамической типизации тип только один, object» etc. не предусмотрено — спорим только о том, дает ли статическая типизация выигрыш, если надо перекраивать несметные тыщи kloc. Если есть вообще о чем спорить 😅.

★★★★★
Ответ на: комментарий от dimgel

есть еще люди, которые не считают динамическую типизацию […] серьезным недостатком при работе с большим объемом кода, особенно при рефакторинге

А если серьёзно, то разработчики 1С осознанны выбрали слабую динамическую типизацию. При том, что кода там миллионы строк.

monk ★★★★★
()
Ответ на: комментарий от no-such-file

Я не знал что в пыхосрань 8.0 жит приделали. В принципе все равно

rtxtxtrx ★★
()

Пожелание к обсуждению

Хорошо ли реализован native run-time в Python конечно важный
вопрос, но всё же тема вроде о том, какой код работает более
эффективно, использующий статическую или динамическую типизацию.

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

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

но всё же тема вроде о том, какой код работает более эффективно

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

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

Название треда «Зачем нужна статическая типизация?» как-бы акцентирует обсуждение целесообразности использование статического кода.

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

тема о том, как код удобнее писать

Два чая. Всегда есть компромисс между лёгкостью написания/понимания и эффективностью выполнения. И люди в целом стабильно тяготеют к первому, иначе до сих пор всё писалось бы на ассемблере (а мы с вами бы на лоре не сидели).

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

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

у «правильного» образа: «правильная» сериализация

отображающая состояние в код восстанавливающий состояние

тогда и забывать нечего - ну и да очевидно версии кода_востанавливающего_состояния само сабой

qulinxao3 ★☆
()

по началу математикамим (в том числе и по причине нумерации Гёделя) достаточно было битовых строк длинами кратные ширене адресуемой ячейки

по мере расширения прикладнёвости программирования

экономически мыслящие лица стали внедрять такую ересь как ассемблеривание - на что великий Нейман сказал фе

статическая типизация в тех языках программирования это частичная(но не рекурсивная хнык хнык) реализация давно использовавшегося в физике чекинга решения задачи методом размерностей

аппаратное прикручивание типов (тегированная память) - ща не в фаворе

и да чем дороже компиляция тем естественей чекинг делать наиболее объемлющим

а так это(статические типы) палиативное решение проблемы исполнения не самого кода а его отображения в машину

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

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

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

А если серьёзно, то разработчики 1С осознанны выбрали слабую динамическую типизацию

Так её вроде вообще нет?
Есть объекты и простые типы данных.

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

А если серьёзно, то разработчики 1С осознанны выбрали слабую динамическую типизацию.

А теперь там вовсю рекомендуется @strict-types.

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

Зачем нужна статическая типизация?, или Вы всё врете! джавовая тупизация и этот сайт от падения не спасает, если ему вместо числа что-то другое подсунуть, но по мнению автора на питоне будут ад и израиль, но видимо не знает и не догадывается, что, например, яндекс такси на питоне работает и яндекс даже гребя деньги лопатой не собирается на го или расте переписывать свои сервисы. И там нет под капотом тайп чекеров, mypy и тп. Война с динамической типизацией бесполезна. А вот другого типа ошибки, связанные с недостаточной фильтрацией взодящих параметров и ошибки логики приводят к сливам данных и оборотным штрафам в перспективе

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

Это да и с этим как раз non problem.
Не статической, не динамической и всё ok!

Шутка

Переходите все на разработку в 1С!

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

Так её вроде вообще нет?

Как нет? Есть функция ТипЗнч(), возвращающая тип. Есть автодополнение, читающее тип из документации.

И каждый объект создаёт целую кучу типов. «ДокументСсылка.Документ1», «ДокументОбъект.Документ1», «ДокументМенеджер.Документ1».

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

О, молодец, насрал аннотациями. Тебе надо объяснять, почему частный подход говно и чем он хуже общего?

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

Это и есть динамическая типизация.

А слабая, потому что можно написать СокрЛП(Объект) и вместо ошибки получить преобразование объекта в строку.

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

Я бы тебе и 1С посоветовал не использовать.

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

А по поводу внесения деструктивных изменений - это решается в первую очередь тестами

В случае, когда нет статической типизации

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

Если ты такой умный, то почему такой бедный?

Был бы идиотизм, не было бы миллионов строк кода, написанных за пределами самого 1С. И не было бы огромных прибылей у 1С.

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

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

Спасибо дружище!
Я нуб в этих вопросах и у меня ещё всё впереди.

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

В случае, когда нет статической типизации

В Си++ статическая, но от очень большого объёма тестирования это не спасает. Даже в Haskell, никакая статическая типизация не спасёт от ошибки ±1 или даже банальной опечатки в числе.

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

Язык без типизации это, например, ассемблер.

Там есть примитивные типы данных)

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

Язык без типизации это, например, ассемблер.

Даже ассемблер с типизацией: байт, слово, двойное слово, SSE регистр, …

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

Тебя я пожалуй тоже заигнорю, вслед за этим, который rtx-что-тотам. Но сначала прокомментирую вот это ниже увиденное:

никакая статическая типизация не спасёт от ошибки ±1 или даже банальной опечатки в числе.

Т.е. раз статика не спасает от всех ошибок без исключения, то и нафиг она значит нужна. Господи, откуда вы все лезете?

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

Т.е. раз статика не спасает от всех ошибок без исключения, то и нафиг она значит нужна. Господи, откуда вы все лезете?

rumgot утверждал, что при статической типизации не нужны тесты.

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

Си++ про производительность, а не про безопасность

Обычно безопасность идёт рука об руку с корректностью. Недавно даже сам Страуструп что-то подобное ляпнул про возможность отказываться от безопасного подмножества языка, если производительность важнее безопасности.

Язык, который позволяет быстро получить некорректный результат - кому такое нужно?

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

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

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

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

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

Надо было ему ссылку кинуть на любую дрисню на джаве и напомнить про дрочку на покрытие

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

А тут нужно написать про участников параолимпийского забега: сишечку и растишку

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

то и нафиг она значит нужна

Как ты это вывел из моего утверждения? Моя точка зрения: Статическая типизация позволяет упростить тестирование. Но заметно усложняет само проектирование кода, потому что всё, что сложно типизируется, автоматически отбрасывается.

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

Это же просто размер, а не тип.

char, int, float, double, … тоже можно считать, что просто размер.

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

Потенциально могу представить бестиповый ассемблер, но вживую не видел.

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

Открываю документацию Rust — двенадцать целочисленных типов. Так что не просто длина, видимо.

anonymous
()
Закрыто добавление комментариев для недавно зарегистрированных пользователей (со score < 50)