Главная Юзердоски Каталог Трекер NSFW Настройки

Программирование

Ответить в тред Ответить в тред
Check this out!
<<
Назад | Вниз | Каталог | Обновить | Автообновление | 128 14 71
Зачем существуют языки с динамической типизацией? Аноним 14/09/22 Срд 16:48:09 2462893 1
image.png 131Кб, 1400x684
1400x684
image.png 84Кб, 480x360
480x360
image.png 121Кб, 800x500
800x500
Возьмём за аксиому следующие два утверждения:

1) Весь код с вероятностью 90% будет переписан.
2) Люди делают ошибки

Код всегда рефакторят, улучшают, добавляют новый функционал. Очень редко бывает так, что код написали, и забыли про него. Таким образом, одна из главных задач code envrionment - облегчить переписывание, добавление, рефакторинг.

И языки с динамической типизацией усложняют эту задачу.

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

Что предлагают нам языки с динамической типизацией? Ничего. Если какая-то процедура вызывается очень редко, то мы не можем узнать что она написана неверно до того как она будет вызвана в рантайме. Зачем? Почему?

Поясните, я реально не понимаю. Зачем в 2022 году лишать себя удобства? Неужели вы не хотите писать код, который будет валидирован ещё до стадии деплоя?
Аноним 14/09/22 Срд 17:59:58 2462951 2
>>2462893 (OP)
Рыночек порешал что быстро пулять МВП выгоднее, чем следить за качеством.
А Пайтону можно обучить кого угодно и платить мало.
Программеры часто лишь притворяются умными, а на деле просто повторяют то, что сказали. Сказали софт скиллс - значит софт скиллс, сказали калчерал фит - значит фит, сказали "петон круто" - значит Питон круто.
Аноним 14/09/22 Срд 18:31:36 2462978 3
>>2462951
Неужели бизнесу не нужен стабильный и хорошо работающий продукт? Возможно ли вообще найти такую компанию, в которой качество на первом месте?
Аноним 14/09/22 Срд 18:36:49 2462989 4
>>2462978
Не всё делают на Питоне, внезапно.
Да и сам Питон неплох как инструмент для скриптинга и прототипирования.
Но не для разработки больших проектов.
Аноним 14/09/22 Срд 18:41:22 2462993 5
>>2462893 (OP)
Ну если кода не очень много и между модулями мало зависимостей, то поебать, и так сойдет.

А так согласен, я решил что больше никогда не буду писать на языке с динамической типизацией
Аноним 14/09/22 Срд 19:16:03 2463032 6
Аноним 14/09/22 Срд 21:05:49 2463087 7
>>2462893 (OP)
>Что нам предлагает язык со статической типизацией? Он предлагает проверить валидность кода до запуска, чтобы когда мы задеплоим код в продакшен он гарантированно работал.
>Что предлагают нам языки с динамической типизацией?

Так запусти код до деплоя. Ты совсем глупенький?
Аноним 14/09/22 Срд 21:35:01 2463104 8
>>2463087
Что значит запусти? Как минимум, проведи полное регрессионное тестирование всего функционала приложения.
Аноним 14/09/22 Срд 22:32:18 2463147 9
typing.mp4 801Кб, 1280x720, 00:00:11
1280x720
>>2462893 (OP)
>Что нам предлагает язык со статической типизацией? Он предлагает проверить валидность кода до запуска
Динамические языки создавали из соображений, что программисты будут понимать, что они делают. Но потребности рынка другие, хочется заставить кодить макак, которые не понимают что делают и суют один тип в другой. А так хоть какая-то защита.
Аноним 14/09/22 Срд 22:50:50 2463167 10
Так даже в питоне пришли к тайп хинтам, писать без указаний типов на нем сейчас моветон.
Аноним 14/09/22 Срд 22:57:31 2463169 11
>>2463147
Они созданы из соображений, что на них будут писать мелкие говноскрипты, а крупные проекты - никогда. А теперь на них пишут всё, где не жалко, если что-то наёбнется, лишь бы пользователи видели красивый UI.
Аноним 14/09/22 Срд 22:58:18 2463170 12
>>2463167
Пришли к тайпхинтам, но из коробки не завезли даже варнинги.
Аноним 14/09/22 Срд 23:01:39 2463171 13
Аноним 14/09/22 Срд 23:13:14 2463179 14
>>2463171
Какой там стаж у него, первый-второй курс максимум.
Аноним 14/09/22 Срд 23:16:23 2463182 15
Аноним 15/09/22 Чтв 00:01:59 2463206 16
>>2463167
Тайпхинт это не статическая типизация, а декларация. Это контракт. А статическая типизация это техническое ограничение компилируемых языков. Тайпхинты позволяют большую гибкость, не только тип Any, то и тип вроде условного Union[str, int]. Причём инструменты для контроля проверят, что ты корректно обрабатываешь все возможные типы.

С помощью тайпинга в питоне ты можешь описать типы намного более гибко, чем при статической типизации.
Аноним 15/09/22 Чтв 00:10:44 2463211 17
>>2463206
А как же Crystal? Там умудрились скрестить подобие дактайпинга (вывод типов в зависимости от того, какие методы вызываешь) с полностью статической типизацией в компайл-тайме.
Аноним 15/09/22 Чтв 02:49:06 2463258 18
>>2463169
Истина!

>>2463147
Тупень, ты неправ. На динамикопараше любая программа больше мелкого скрипта превращается в неработающие помои, и главное сам программист этого не заметит, хоть трижды грамотный и знающий что делает.

Я лично видел как дообоебы делали свой собственный язык и писали на нем, а потом переделывали этот язык на строгую типизацию, что вскрыло целые блоки неработающего кода повсюду, не говоря уже о банальных сотнях багов.
Аноним 15/09/22 Чтв 11:10:21 2463364 19
>>2462893 (OP)
В статически типизированных языках тебе очень часто нужны ещё всякие темплейты и дженерики с обмазкой кучей всяких ограничений. Либо же постоянный копипаст одного и того же кода для разных типов. Вот банальную хешмапу без дженериков и без динамической типизации как сделать нормально?
Дженерики и обобщенное программирование - это сложно, и для дизайна языка, и для компилятора, и для производительности, и для программиста, и для того, кто читает и поддерживает, и кто тестирует.
Копипаст кода - совсем очевидное зло.
А при динамической типизации вообще не заморачиваешься над такой проблемой, её просто нет.
Аноним 15/09/22 Чтв 11:44:59 2463374 20
image.png 57Кб, 1596x594
1596x594
>>2462893 (OP)

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

Я питонист, и почти всегда код пишу на виме. И типа никогда не понимал зачем нужны ебаные идешки, это же глючная блоатвара. Но блин попробовал пописать на Джаве и понял что без ИДЕ просто больно. ОЧЕНЬ МНОГО КОДА.

А насчет ошибок в рантайме - вот тебе картинка кода на сишечке. Вот твой рантайм.

Ошибки вызываются не ДИНАМИЧЕСКОЙ типизацией, а СЛАБОЙ. В питоне сильная типизация, а значит хорошая.
Аноним 15/09/22 Чтв 11:53:33 2463377 21
>>2463374
Дополню:

Посмотри на свой оппик с языками. У тебя же прям видно как dynamic/strong это стабильные и выразительные языки, static и strong не такое говно как weak но страдающее от бойлерплейт кода, а внизу живет параша
Аноним 15/09/22 Чтв 12:55:41 2463398 22
>>2462978
>Неужели бизнесу не нужен стабильный и хорошо работающий продукт?
Есть приоритеты в диаграме цена-качество-скорость и у каждого они свои, делать инвойсы в банках на питухоне никто не будет, писать интернет магазин в котором каждый день что-то меняется, скидки, акции, промо и постоянно нужно что-то дорабатывать и переделывать будут как раз на руби-питухонах потому что быстро и дешево
Аноним 15/09/22 Чтв 13:03:04 2463405 23
>>2463398
>как раз на руби-питухонах
Почему ты боишься сказать PHP? Ты ведь знаешь правду?
Аноним 15/09/22 Чтв 13:33:18 2463418 24
>>2463405
Да, ну и пыха сюда со своими вордпресами и битриксами, которые полное говно
Аноним 15/09/22 Чтв 15:20:33 2463502 25
>>2463364
>хешмапу без дженериков и без динамической типизации
С помощью макроса "typeid()" получаешь внутренний номер типа (длинное целое число) и таскаешь его за собой, везде и всюду.
Аноним 15/09/22 Чтв 16:35:56 2463598 26
>>2463374
И тем не менее в петухоне ты не сможешь узнать что тв написал что-то неправильно, пока не запустишь/задеплоишь приложение. Это усложняет рефакторинг и добавление нового функционала, как и написано в ОП-посте.

А пример с сишкой хуёвый, это устаревшее говно мамонта со слабой (хоть и статической) типизацией.
Аноним 15/09/22 Чтв 16:46:59 2463609 27
>>2463598
> пока не запустишь

А не например когда? На этапе компиляции? Ну эт надо за компилируемые языки тогда допить, но у них свои сложности есть, не такой удобный воркфлоу
Аноним 15/09/22 Чтв 18:48:14 2463692 28
>>2462951
> А Пайтону можно обучить кого угодно и платить мало.
В Питоне уже лет 10 как появилась типизация. Доброе утро
Аноним 15/09/22 Чтв 18:53:34 2463694 29
>>2463692
А использовать широко когда начали?
Аноним 15/09/22 Чтв 19:21:41 2463715 30
>>2462893 (OP)
>Что предлагают нам языки с динамической типизацией?
>Ничего
Неверный ответ. Дают скорость разработки

>Весь код с вероятностью 90% будет переписан
Или выброшен за ненадобностью. Такого кода на практике реально дохуя, например прототипы всякой херни или скрипты на пару-другую запусков. Ебаться с типизацией такого кода только тратить время почем зря
Аноним 15/09/22 Чтв 20:46:09 2463787 31
.png 11Кб, 482x344
482x344
>>2463692
Вот только врать не надо, что она появилась. Или текст в комментарии "функция принимает int и возвращает int" - это тоже типизация?
Аноним 15/09/22 Чтв 20:54:47 2463792 32
>>2463715
Динамическая типизация это в первую очередь гибкость, и нужно это на сложных типах данных. Сравните работу с json/xml на динамических языках и на статических-компилируемых. Статическая типизация приводит к адовой иерахиии наследования в классах, горе интерфейсов, которые реально нафиг не нужны.
Аноним 15/09/22 Чтв 21:28:53 2463813 33
>>2463792
Гибкость это во вторую очередь, первая все-таки скорость разработки, для которой уже требуется гибкость. Но когда проект всерьёз и надолго, то скорость уже не настолько важна как качество, хуяк-хуяк и в продакшен уже не катит, надо действительно задуматься о типизации.
Аноним 16/09/22 Птн 11:07:53 2464084 34
>>2463374
В чём проявляется слабая типизация в С++? Можно на примере каком-то, что там происходит и что должно произойти?

Типа можно определить функцию, которая принимает тип А, и потом передать в неё тип Б, и оно посыпется в рантайме?
Аноним 16/09/22 Птн 11:20:57 2464092 35
image.png 11Кб, 304x173
304x173
>>2464084
Си, а не C++

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

В плюсах сильнее. Этот пример g++ тоже без ворнингов компилирует, но указатели по-моему жёстче просят приведения. Хотя давно не писал на сях и плюсах, не помню уже.
Аноним 16/09/22 Птн 11:59:04 2464110 36
>>2464092
>без ворнингов компилирует
Выдаст варнинг про имплисит преобразование дабла в инт.
Аноним 16/09/22 Птн 13:49:15 2464210 37
image.png 284Кб, 604x526
604x526
>>2462893 (OP)
> валидность кода до запуска, чтобы когда мы задеплоим код в продакшен он гарантированно работал.
это ты про агду братан. джябба/крестопараша никаких гарантий не дают either

> Если какая-то процедура вызывается очень редко, то мы не можем узнать что она написана неверно до того как она будет вызвана в рантайме. Зачем? Почему?
про юнит тесты ещё не проходили?

> Зачем в 2022 году лишать себя удобства?
kek
Аноним 16/09/22 Птн 21:16:30 2464656 38
>>2464210
Они дают больше гарантий чем питон. Какие-то гарантии - лучше чем отсутствие гарантий.
Аноним 17/09/22 Суб 11:01:39 2464980 39
>>2464656
Юзаешь в пистоне типизацию с mypy и получаешь такие же гарантии.
Аноним 17/09/22 Суб 18:35:43 2465532 40
>>2464980
> Языки со статической типизацией дают больше гарантий работоспособности кода, чем языки с динамической типизацией
> РРРРЯЯЯ ТВОИ С++ И ЖАБА НИКАКИХ ГАРАНТИЙ НИДАЮТ
> Дают больше, чем питон
> А ТЫ ДОБАВЬ ПИТОНУ СТАТИЧЕСКУЮ ТИПИЗАЦИЮ
Шиз?
Аноним 17/09/22 Суб 18:45:29 2465545 41
>>2465532
В интернете с тобой могут общаться разные люди
Аноним 17/09/22 Суб 19:00:33 2465560 42
>>2465545
Каким образом это отменяет то, что >>2464980 шиз
Аноним 17/09/22 Суб 19:56:07 2465598 43
>>2465560
Статическая типизация и аннотация типов это разные вещи для разных задач. А топят за статическую типизацию в ключе "это спасает от ошиобок" шизы.
Аноним 17/09/22 Суб 19:59:35 2465604 44
>>2465598
> это спасает от ошиобок
Так и есть. Сейчас идёт слив динамикодрисни для любого проекта сложнее интернет-мазазина, даже в вебе все переходят на тайпскрипт.
Аноним 17/09/22 Суб 20:13:01 2465615 45
>>2465604
Если у тебя ошибки вида в виде, что ты вместо целого числа суёшь указатель на строки, то у тебя какой-то мрак на проекте. Это ошибки уровня Smoke test.

Реальная ошибка типа может так выглядеть
void setDickSize(double dickLength, double dickWidth)

ты подставляешь туда сантиметры, а на самом деле надо в дюймах. Система бесится и работает некорректно. Но для компилятора и то, и другое это просто double.

Аналогично если ты местами параметны перепутаешь, компилятор не спасёт. А ведь это всё реальные ошибки.
Аноним 17/09/22 Суб 20:38:40 2465650 46
Динамическая типизация не помогает начинающим программистам писать программы:

Many teachers of CS 1 (introductory programming) have switched to Python rather than C, C++, or Java. One reason is the belief that Python's interpreted nature plus simpler syntax and semantics ease a student's learning, but data supporting that belief is scarce. This paper addresses the question: Do Python learners struggle less than C++ learners? We analyzed student submissions on small coding exercises in CS 1 courses at 20 different universities, 10 courses using Python, and 11 using C++. Each course used either the Python or C++ version of an online textbook from one publisher, each book having 100+ small coding exercises, expected to take 2-5 minutes each. We considered 11 exercises whose Python and C++ versions were nearly identical and that appeared in various chapters. We defined struggle rate for exercises, where struggle means a student spent excessive time or attempts on an exercise. Based on that rate, we found the learning for Python was not eased; in fact, Python students had significantly higher struggle rates than C++ students (26% vs. 13%). Higher rates were seen even when considering only classes with no prerequisites, classes for majors only, or classes for non-majors only. We encourage the community to do further analyses, to help guide teachers when choosing a CS 1 language.
https://dl.acm.org/doi/10.1145/3159450.3160586

отсюда https://drmarkclewis.medium.com/the-struggle-of-dynamically-typed-languages-ef91a87164a1

Похоже начинающий динамико-программист обязан одновременно уметь писать тесты к своим хеллоу-ворлдам.
Аноним 17/09/22 Суб 21:04:45 2465666 47
>>2465650
Некорректный тест:
>We considered 11 exercises whose Python and C++ versions were nearly identical and that appeared in various chapters.
Они сделали выборку на примерах, где год питона близок к коду на си. Но это значит, что они нашли примеры, для которых питон не предназначен и писать их на питоне не легче, а скорее тяжелее.

Пример, перемножение матриц. Если не использовать специальные библиотеки, которые осваивать ещё надо, то страглить на этой задаче ты на питоне будешь намного сильнее, чем на си. Потому что это low-level задача.

В то время как есть масса случаев, когда на питоне код будет на порядок проще и понятнее. Но эти примеры исключены из исследования.
Аноним 17/09/22 Суб 21:19:05 2465675 48
>>2463502
> получаешь внутренний номер типа (длинное целое число)
То есть количество типов в программе ограничено разрядностью длинного целого?
Аноним 17/09/22 Суб 21:25:46 2465683 49
>>2465675
длинное целое число это 64 бита, столько памяти в мире не существует
Аноним 17/09/22 Суб 21:28:28 2465685 50
>>2465675
Тебе не хватит 18446744073709551616 типов?
Аноним 17/09/22 Суб 22:36:38 2465744 51
>>2465683
>>2465685
Обратите внимание на то,как целых два человека не смогли ответить на простейший вопрос.
Аноним 17/09/22 Суб 22:47:30 2465751 52
>>2462893 (OP)
Все так, динамика практически всегда усложняет жизнь.
Аноним 17/09/22 Суб 23:10:22 2465779 53
Screenshot4.png 144Кб, 841x625
841x625
Screenshot3.png 44Кб, 1061x650
1061x650
>>2465666
В этой цитате не сказано что они выбирали близкий код. Сказано что упражнения выбирались одинаковые из тех же глав по смыслу. Как ты вообще к такому странному выводу пришел?

Но если тебе интересно, я нагуглил какие конкретно задачи они выбрали (как в цитате - выбирали идентичные по смыслу). Пикрел отсюда http://www.cs.ucr.edu/~aedgcomb/presentations/SIGCSE18_PythonCpp_Vahid.pptx
Аноним 17/09/22 Суб 23:12:59 2465785 54
>>2465744
Ты передергиваешь. Это не потому что они не смогли, или не хотели. Но потому что ответ уже известен всем читающим.
Аноним 18/09/22 Вск 01:33:14 2465865 55
>>2465779
>Но если тебе интересно, я нагуглил какие конкретно задачи они выбрали (как в цитате - выбирали идентичные по смыслу)
Спасибо, посмотрел. Там действительно идентичные примеры по получаемому коду. Поэтому никакого преимущества питона нет.

Но что будет, когда начнётся работа с массивами? Что будет, когда начнётся работа со строками, скажем сложение строк? Форматирование строк? Разбиение строк на части, проверка вхождения и словари?

Код на C/C++ будет мягко говоря очень недружественным, тогда как на питоне он будет очевидным.
Аноним 18/09/22 Вск 02:20:04 2465884 56
>>2465865
В исследовании же не про то чья стандартная библиотека удобней в использовании. Ну возьмет крестовик boost, будет так же как в питоне выглядеть снаружи.

По какой-то причине тут есть мнение по какой https://drmarkclewis.medium.com/the-struggle-of-dynamically-typed-languages-ef91a87164a1 разница по ошибкам в 2 раза.

Самый на мой взгляд интересный пример оттуда:

The worst student experience I’ve seen with this wasn’t in Python, it was in JavaScript. That student wrote context.fillstyle = 'red' in their code. They then spent hours trying to understand why nothing was being drawn. Print statements and the debugger indicated that everything was working properly. Eventually, they came to me to ask for help and I noticed that line. The student didn’t capitalize the “s”. It should be context.fillStyle. This student wasn’t a novice. He was a Junior who had gone through many previous programming classes. It was frustrating for him. How much more frustrating would it be for a true beginner.
Аноним 18/09/22 Вск 02:52:06 2465888 57
>>2465884
Эти все статьи пропаганда какая-то. В си есть огромная масса моментов, на которых все постоянно спотыкаются. Классический пример:
double x = 1.0;
x += 1/2;
printf("%f", x);

Но реально жёстко начинается, когда надо работать со строками, с выделением-освобождением памяти, буферами и т.п. Насколько удобно в питоне работать со словарями, со списками и многим другим, и насколько это тяжеловесно в C++, а в си вообще невозможно.

Эти boost не помогут.

Реальные проблемы начинаются, когда надо работать с классами. Я хочу сделать обработчик каких-то разнообразных объектов, но надо, чтобы они наследовались от общего интерфейса. А они не отнаследованы. Хотя все методы нужные есть. И что? Возникает проблема на пустом месте.

>The student didn’t capitalize the “s”. It should be context.fillStyle.
Бывают тупые ошибки. На всех платформах. Которые можно часами-днями ловить, особенно если опыта нет.

Вот здесь, можно было бы сделать распечатку всего DOM элемента в консоль. И сразу же увидеть, что там теперь fill\Style и fillstyle. И сразу понятно, в чём ошибка.

Здесь, кстати, слабое место питона, там такое тоже часто бывает, но выглядит иначе. Можно легко опечататься и сделать присвоение не в локальную переменную fill_style, а в fil_style, например. И не заменить. Особенно легко при рефакторинге. Но это проблема не динамической типизации, а отсутствия декларации переменных. Это явный минус питона, вот тут бывали проблемы и бывают. В JS такого нет, там надо декларировать переменные.
Аноним 18/09/22 Вск 03:10:42 2465893 58
Мы переписываем проект с флоу на ТС: т.е. изначальна у нас была какая-то типизация, но она по определенным причинам не подошла и теперь у нас другая типизация, более инновационная!

Прекол в том, что у флоу хуёво с тулзами, да и находится он в полузаброшенном состоянии. А ТС даёт нам замечательную интеграцию с идешками + это не только типизация, это ещё и возможности невиданные раннее фронтенд-розроботчиками.
Аноним 18/09/22 Вск 05:11:24 2465921 59
>>2465888
>В JS такого нет, там надо декларировать переменные.
Нет такого правила
Аноним 18/09/22 Вск 05:15:46 2465924 60
>>2465921
Только в старых стандартах, в новых с "use strict" это ошибка, код не запустится.
Аноним 18/09/22 Вск 17:35:37 2466392 61
Аноним 18/09/22 Вск 17:52:54 2466398 62
>>2466392
Но комменты к статье совсем выводы не поддерживают.
Аноним 19/09/22 Пнд 08:46:00 2466919 63
>>2463258
>На динамикопараше любая программа больше мелкого скрипта превращается в неработающие помои, и главное сам программист этого не заметит, хоть трижды грамотный и знающий что делает.
И почему это так?
Аноним 19/09/22 Пнд 09:22:45 2466931 64
>>2462893 (OP)
Чем больше гибкости, чем больше альтереатив тем лучше. Поэтому лучшими языками можно считать Typescript и С++, они позволяют максимально гибко описать тип, при этом в ТС это делается в одну строку и вся типизация это зиро кост абстракшн, потому что никак не влияет на рантайм в отличии от того же шарпа в котором каждый генерик или просто интерфейс бьет по перформансу.
Если ударяться в строгость и типизацию, то вместо написания кода ты начинаешь ублажать компилятор, что замедляет разработку и может привнести грязь в код.
Аноним 19/09/22 Пнд 15:00:46 2467191 65
>>2463104
>проведи полное регрессионное тестирование всего функционала приложения
А статически типизированный код ты типа тестировать не будешь.
Аноним 19/09/22 Пнд 19:14:39 2467359 66
>>2467191
Типа не придётся тестировать то, что может протестировать компилятор.
Аноним 19/09/22 Пнд 21:17:51 2467469 67
>>2467191
Ты будешь тестировать ошибки в логике, а не то что ты строку в метод передаёшь, хотя должен объект.
Аноним 20/09/22 Втр 00:40:52 2467606 68
image.png 60Кб, 450x578
450x578
>>2467469
>>2466392
Вот типичный учебный код на си, из ньюфаг-треда. Судя по коду, задача упаковки по методу RLE, когда из исходой строки получается строка вида "символ" и "количество этих символов подряд".

Вопросы вам:
1) насколько в данном коде нужна статическая типизация, какие ошибки она предотвратит?
2) насколько проще понятнее будет тот же самый алгоритм на питоне, даже без использования каких-то специальных возможностей библиотек?
3) если девочку-студентку попросить не только ошибку с буфером исправить, но и адаптировать под под русские строки в кодировке utf-8, убедит ли её это, что ей надо заниматься проституцией?

Спасибо, отключаюсь, завтра прочитаю ваши ответы.
Аноним 20/09/22 Втр 08:47:09 2467710 69
>>2465650

Мой первый язык был C, а так же параллельно мы проходили архитектуру ПУКА и у нас был asm но на эмуляторе процессора. И я за это рил благодарен шараге.

Дает тебе понимание что импорт это не магия, что память есть такая штука, что можно что-то по указателью передать и тд.
Аноним 20/09/22 Втр 19:29:15 2468300 70
Тесты все равно писать, а с ними уже плевать какая типизация. Лучше уж динамика чтобы не пердолиться с интерфейсами и прочим синтаксическим мусором.
Аноним 20/09/22 Втр 19:40:16 2468322 71
>>2468300
Со статикой на тесты уходит 5-10% времени, а с динамикой не меньше 98%.
Аноним 20/09/22 Втр 23:12:16 2468608 72
>>2467606
Да ты заебал, мы сравниваем современные средства разработки, а не кал мамонта из 90х, на котором только прошивки микроконтроллеров пишут. Приведи такой же код на нормальном языке с сильной статической типизацией, тогда поговорим.
Аноним 21/09/22 Срд 21:28:05 2469844 73
Аноним 21/09/22 Срд 22:33:17 2469972 74
>>2462893 (OP)
Никто, кроме разработчиков, не будет ставить гигабайты зависимостей для твоей пердобиблиотеки.
Аноним 21/09/22 Срд 22:38:45 2469990 75
>>2463692
Это в которой нужно писать функцию как класс с call сигнатурой, чтобы в ней можно было дженерики использовать? Про декораторы вообще можно молчать.
Аноним 22/09/22 Чтв 00:04:03 2470121 76
>>2469972
Ты о чём? Для серверов пользователи ничего не знают о гигабайтах зависимостей, а для десктопа в дистрбутив всегда включают интерпретатор говна, все зависимости и запускатор, например, блендер тащит с собой петухон, пользователям не надо его устанавливать отдельно.
Аноним 22/09/22 Чтв 04:00:14 2470347 77
>>2470121
О том, что человек запустит пакетный менеджер, посмотрит на ебовую кучу зависимостей и откажется от установки. Только ты говномакака будешь ставить стряпая это говно, никому больше не нужное. Тебе легче писать код обмазываясь гигабайтами говна, а мне легче это говно просто не ставить и проходить мимо.
Аноним 22/09/22 Чтв 09:08:16 2470437 78
>>2470347
Не посмотрит. С зависимостями ебутся только разрабы, это их проблемы, у всех остальных всё уже установлено в дистрибутиве приложения, и устанавливать надо ровно одну зависимость - само приложение. Как на нормальных языках никто из пользователей не качает каждую DLL отдельно, точно так же в петухонах и жопаскриптпх никто из них не ставит интерпретатор и зависимости.
Аноним 22/09/22 Чтв 12:51:00 2470593 79
>>2462893 (OP)
>Что нам предлагает язык со статической типизацией? Он предлагает проверить валидность кода до запуска, чтобы когда мы задеплоим код в продакшен он гарантированно работал.
>
перепутал с сильной типизацией

>Зачем существуют языки с динамической типизацией?
Затем что они дают преимущества в ряде случаев где описанные тобой требования не критичны, например на небольших скриптах, либо имеют исключительные особенности рантайма (BEAM)
Это всегда вопросы компромисса
Аноним 24/09/22 Суб 07:14:55 2472300 80
image 54Кб, 563x190
563x190
Ебать шиз писал хуйню
Аноним 24/09/22 Суб 15:07:43 2472570 81
По моему опыту на динамике забивают тесты чаще, чем на статике. У меня например есть знакомый фронт, который до года работы вообще не писал тестов. И пхпшник с примерно таким опытом.
Аноним 24/09/22 Суб 15:58:49 2472609 82
>>2472570
В динамике обычно проекты такие, что можно забить хуй на надёжность. Тем более фронт, где нет бизнес-логики и постоянного хранилища данных, впрочем, даже там сейчас можно юзать TypeScript.
Аноним 24/09/22 Суб 16:17:20 2472627 83
>>2467710
Я бы порекомендовал начинать не с Си, а вот с разбора "до костей" чего-то типа этого эмулятора. https://schweigi.github.io/assembler-simulator/

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

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

Вот хорошо придумали, язык в котором пошли еще дальше -- там можно указать не только точный тип, но еще и время жизни объекта, что позволяет понять отношения аргументов функции к возврату. В результате редко возникнет необходимость вообще заглядывать в тело. И не надо все это описывать словами в комментарии к функции. Тем более что каждый может написать коммент по-своему. Тут же задан конкретный строгий формат описания.
fn foo<'a, 'b>(a: &'a Person, b: &'b Person) -> &'b Data { // Видно что возвращается ссылка на данные из `b`
...
}
Аноним 24/09/22 Суб 22:08:48 2472969 84
>>2472627
О, я тебя помню, ты ещё в си треде срал что выскооуровневое программирование для новичков от лукавого
хотя с твоими поинтами в данном посте солидарен
Аноним 24/09/22 Суб 23:18:56 2472998 85
image 9Кб, 322x218
322x218
image 21Кб, 398x360
398x360
>>2470593
>перепутал с сильной типизацией
Иронично, что перепутал как раз ты
Возьмём в пример яркого представителя сильной типизации (питон) и такого же яркого представителя слабой типизации (C++)
Пик 1 будет запускаться всегда, до тех пор, пока ты не вызовешь функцию fn, а вот код на пик 2 выдаст ошибку времени компиляции.
И то, что C++ слабо типизированный, никак не мешает ему проверить валидность кода до выполнения.
Аноним 25/09/22 Вск 09:12:25 2473149 86
>>2472998
На второй пикче рабочий код, сложение указателя и числа.
Аноним 25/09/22 Вск 09:28:57 2473154 87
>>2463598
А ты деплоишь код не запуская его перед этим? Тогда ты е Лан и динамическая типизация тебе не поможет.
Аноним 25/09/22 Вск 10:51:45 2473174 88
>>2473154
> Тогда ты еблан и статическая типизация тебе не поможет.
Слоуфикс.
Аноним 25/09/22 Вск 18:54:36 2473781 89
>>2470121
>Для серверов пользователи ничего не знают о гигабайтах зависимостей
Как ты собрался клиентскую логику на сервере реализовывать?
Аноним 25/09/22 Вск 18:57:51 2473790 90
>>2472570
Чтобы оттестировать фронт нужно как минимум писать интеграционные тесты, которые заёбисто писать и поддерживать. Юнит-тестами геттеров/сеттеров тут не отделаешься.
Аноним 25/09/22 Вск 19:05:45 2473799 91
>>2473781
При чём тут клиент? Ты сколько зависимостей устанавливал, чтобы сидеть в интернете, кроме браузера? Ничего не работает без установки ноды, да? Пользователь не может просто зайти на сайт через браузер, он должен ещё и npm install сначала выполнить?
Аноним 26/09/22 Пнд 00:30:39 2474122 92
>>2462893 (OP)
Cтатическая типизация никак не решает задачу переписывания кода. На любом яп с динамикой тебе придётся написать меньше кода, чем на статически типизированном яп. А значит, если мы часто его переписываем, то выйграш от меньшего числа строчек будет ещё более заметен. При этом статически типизированные яп слабо решают задачу валидности. Как правило, для этого используется тестирование, код ревью и т.д.
Аноним 26/09/22 Пнд 01:10:41 2474133 93
>>2474122
> На любом яп с динамикой тебе придётся написать меньше кода,
Вроде в треде уже отвечали, что рано или поздно ты начнешь делать то, что должен делать компилятор - проверять валидность приходящих параметров.
Аноним 26/09/22 Пнд 01:16:52 2474136 94
>>2472998
Считается, что у С++ более строгая типизация чем у питона.

На пиках ты показал отличие статической типизации (типизация времени компиляции) от динамической (типизации времени исполнения).
Аноним 26/09/22 Пнд 10:50:20 2474253 95
>>2474136
>Считается, что у С++ более строгая типизация чем у питона.
Кем считается?
>На пиках ты показал отличие статической типизации (типизация времени компиляции) от динамической (типизации времени исполнения).
Отлично, а теперь прочитай >>2470593
Аноним 26/09/22 Пнд 10:58:26 2474268 96
>>2474133
С чего? Приведи пример.
Аноним 26/09/22 Пнд 23:28:51 2475037 97
Аноним 27/09/22 Втр 08:25:57 2475214 98
Аноним 27/09/22 Втр 08:57:55 2475238 99
>>2475214
>это попытка сделать универсальную функцию
Это тупое говно. Там разные типы и разный код, это должны быть разные функции. Нет никакого смысла делать одну функцию, но внутри разделенную проверками типа аргумента на разные, и выглядит как говнокод и работает медленно.
Аноним 27/09/22 Втр 11:15:42 2475352 100
>>2475238
Это у статикопетушков это разные функции ибо компилятор неразрешил, а у нас нет. Мы еще и метапрограммировать можем правда редко когда нужно.
Аноним 27/09/22 Втр 12:13:04 2475404 101
>>2475352
>не опроверг указанные недостатки
>ЗАТО МОЖЫМ ГАВНАКОДИТЬ)))
Что и требовалось доказать.
Аноним 27/09/22 Втр 12:38:17 2475427 102
>>2475404
Опровергать нечего. Недостатки выдуманные, динамика сама по себе медленнее, но это не значит что она не нужна. Это всего лишь инструмент для определенных задач.
Аноним 27/09/22 Втр 14:42:10 2475508 103
>>2463364
>Дженерики и обобщенное программирование - это сложно,
> и для дизайна языка, и для компилятора,
Чем сложно? Подставил тип и получил функцию/тип.
> и для производительности,
В крестах всё это на этапе компиляции просчитывается, так что никакой потери пирфоманса.
> и для программиста,
На самом деле шаблоны просты, это как в формулу число подставить.
> и для того, кто читает и поддерживает, и кто тестирует.
Это - тоже программисты.

А я ОПа поддвачну, многие твои ошибки статическая типизация отлавливает еще на стадии компиляции, а динамическая пропускает.
Аноним 27/09/22 Втр 15:19:01 2475575 104
>>2475427
>динамика сама по себе медленнее
>поэтому я еще насру говнокодом напихав ненужных условий чтобы еще медленнее
Синдром разбитых окон в действии. Если твой язык параша, то и желания писать качественный код нет, хочется только гадить говнокодом на похуях. Вот и получается снежный ком, каловая масса нарастает экспотенциально.
Аноним 27/09/22 Втр 18:06:25 2475771 105
>>2475508
> дженереки просто
> в плюсах
> просто подставить
Какой же ты клоун, прости Господи
мимо пишу инструментарий для плюсов
Аноним 28/09/22 Срд 11:04:25 2476290 106
>>2475771

А boost::any эт не дженерик?

Я если шо не крестовый могу тупить
Аноним 28/09/22 Срд 16:04:28 2476547 107
>>2476290
Это тип variant, хранит в себе все возможные значения разных типов (читай размер наибольшего типа + метаданные)
Хуйня иногда полезная, но имеет оверхед и нужно постоянно кастить
Аноним 29/09/22 Чтв 04:05:31 2477031 108
>>2476290
Скриптосвинья, вообще отличаешь язык от написанного на языке?
По видимому, концепция компьютера слишком сложна для быдла, что в 2022 выглядит как дурная шутка. Было огромной ошибкой допускать сброд до компьютеров.
Аноним 01/10/22 Суб 18:58:21 2479370 109
>>2463133
>код УСПЕШНОГО предприятия о котором ты прочитаешь в книжке, с 90% вероятностью КОГДА-НИБУДЬ был переписан.
будет переписан и это убьет фирму
вот так то
Аноним 01/10/22 Суб 19:05:26 2479371 110
>>2463364
>Вот банальную хешмапу без дженериков и без динамической типизации как сделать нормально?
в си обобщенные структуры данных делаются или через указатель на void или макросами
Аноним 01/10/22 Суб 19:07:25 2479373 111
кстати, как всегда в подобных тредах, некоторые обсуждающие даже не понимают разницу между динамической типизацией и вывод типов
ну и прочие банальности
Аноним 01/10/22 Суб 19:11:02 2479375 112
>>2474136
>Считается, что у С++ более строгая типизация чем у питона.
это не так хотя бы по той причине что с++ имеет полную обратную совместимость с си, а си язык со слабой типизацией
Аноним 01/10/22 Суб 19:13:34 2479376 113
>>2474122
объем кода сокращает наличие вывода типа, если он реализуется в яп, а не то какая модель типизации языка - статическая или динамическая
Аноним 01/10/22 Суб 19:27:47 2479380 114
>>2479370
Зачем срать бессмысленными сообщениями? Можешь ещё сгенерировать 100 рандомных символов и запостить.
Аноним 01/10/22 Суб 22:02:04 2479441 115
>>2479371
Ок. И как hash code посчитать, зная, что у тебя тут ✱void?
Тащить ещё указать на функцию, которая получает ✱void и возвращает int?
Аноним 01/10/22 Суб 22:09:35 2479444 116
>>2479441
Да, писать свою функцию для вычисления хешей и передавать указатель на неё.
Аноним 02/10/22 Вск 12:56:35 2479707 117
02/10/22 Вск 18:07:31 2479907 118
>>2479380
это проблема воспринимающей стороны;
для собаки разговор двух людей будет тоже бессмысленным набором звуков
Аноним 03/10/22 Пнд 03:07:15 2480404 119
>>2479907
Смотря каких людей. Большинство людей дегенераты, для которых разговор это общение, а общение это обмен эмоциями которые собака прекрасно понимает.
Аноним 03/10/22 Пнд 03:20:20 2480406 120
>>2479907
Вот только собака именно ты.
Аноним 03/10/22 Пнд 03:22:02 2480407 121
Воистину мелкобуква - признак долбоёба.
Аноним 06/10/22 Чтв 18:19:45 2483030 122
bump
06/10/22 Чтв 18:36:27 2483039 123
Хуямп.
Аноним 06/10/22 Чтв 18:51:33 2483053 124
>>2462978
Треугольник програм продукта видел: качество = дорого и долго!
Аноним 06/10/22 Чтв 21:26:31 2483217 125
08/10/22 Суб 00:02:30 2484125 126
>>2483039
Ты опять выходишь на связь, мудило?
08/10/22 Суб 00:03:00 2484126 127
Сука, не тот пост.
08/10/22 Суб 02:32:22 2484186 128
Я выхожу на связь, чтобы мацать большие жилистые члены.
Настройки X
Ответить в тред X
15000
Добавить файл/ctrl-v
Стикеры X
Избранное / Топ тредов