LINUX.ORG.RU

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

 ,


1

4

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

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

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

Не обязательно. Но т.к. вы уже обосрались с сортировкой только чисел, то ваше мнение отправляется прямиком в /dev/null. Вместе с убежденностью о невозможности сортировки «цветов».

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

ООП таки появилось в 30-х

ООП на мясных вычислителях уже не первый миллион лет используется. Как вам такое, оопофобы?

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

Работы Цуге появились до того, как программирование возникло в привычном для нас виде.

Т.е. если что-то имеет непривычный для тебя вид, то это не стоит рассматривать?

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

Т.е. если что-то имеет непривычный для тебя вид, то это не стоит рассматривать?

Для начала было бы неплохо посмотреть на этот самый «вид».

Да вот только показать никто не может. Но верует, что это оно и было.

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

Так тебе надо или не надо смотреть на этот вид? Ты хоть как-то определись. Ты же утверждаешь, что у Цузе было не программирование в привычном виде. Это утверждение на чём основано?

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

Ну мне вот больше заняться нечем, как гуглить это всё. Вроде как Ада Лавлейс писала программу для несуществовашей разностной машины Беббиджа (автор не осилил её построить), а сама идея была выдвинута неким Иоганном Мюллером в 1788 году. Видимо, его и надо считать первым программистом. Вряд ли же он придумал свою машину, но не придумал, как ей пользоваться.

Как минимум, язык программирования Ада существует, т.е. она объявлена правильной участницей истории компьютеров, а вот Цузе некоторые норовят объявить чем-то типа уфологии (впрочем, насчёт летающих тарелок тоже нет ясности, если честно). И никакого языка в честь него не назвали.

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

Но так-то по идее любой шахматист, любой, кто плетёт интриги, любой, кто планирует деятельность - это программист. Если уж мы хотим абстрагировать понятие программирования. И дальше там можно выискивать всякие подобия ООП. Впрочем, ООП не относится к моим предпочтениям. Модульность и инкапсуляция - это более нормальные понятия. Например, в войске иерархия управления, а значит для генерала полковники являются интерфейсами модулей. А может быть, просто товарищ @eao197 неспособен к абстракциям и к утиной типизации? И чтобы считать что-то ООП, ему нужно, чтобы в учебнике это написали, или чтобы оно имело привычный вид? Т.е. важно не содержание, а благоутверждённое от начальства название?

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

т.е. она объявлена правильной участницей истории компьютеров

Два чаю, сэр, за адекватную позицию.

Я бы даже сформулировал: «назначена». Есть подозрение, что всяким фундаментами компьютеров также назначены правильные пацаны и девчонки.

rumgot ★★★★★
()
Последнее исправление: rumgot (всего исправлений: 2)
Ответ на: комментарий от eao197

Да вот только показать никто не может. Но верует, что это оно и было.

Тяжело искать информацию о языке созданным во вторую мировую данные о котором не публиковались до 72 года, но я верую что вот это описывает довольно правдиво что:

  1. As is the modern method, a calculation is broken down into different tasks and for each a plan is written. The main plan or ’Hauptplan’ is initally executed using the results of different plans, which can use the results of other plans, and so on. In this way all plans are chained together and a complete program is made.

  2. It is possible to create function templates. Zuse describes the possibility to give a basic function as an argument to a function. It is thus possible to create a plan which operates on functions.

Использование цепочки планов (chain of plans) из (1) с применением шаблонов функций (2) и есть база, фундамент прототипирования = одностороння связность + шаблонизация. При передаче туда данных и получаются объекты, правда на тот момент этого термина еще не существовало. Хранением этих прототипированных объектов и занимался Цузе. Если не ошибаюсь IBM потом выкупил у Цузе с десяток патентов в том числе по этой теме и на вырученные средства он открыл свой бизнес.

Ну и в заключение, оттуда же: Plankalkul may have an unfamiliar notation and a collection of features found in no other programming language since, but it is equivalent to every major and modern language. Everything that can theoretically be done in a modern programming language can be done in Plankalk¨ul.

На самом деле я это уже пишу не для вас, а для тех кому интересно.

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

На самом деле я это уже пишу не для вас

Я конечно знаю, что изображать девочку в инторнетах счас модно, но и ты не цундере-красавица, ни eao197 не ояш 🤡

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

Я конечно знаю, что изображать девочку в инторнетах счас модно, но и ты не цундере-красавица, ни eao197 не ояш 🤡

На этом форуме не принято признавать cвою неправоту, тут жесткая Лавсановщина при которой человек будет отстаивать свое неверное мнение до последнего юля и переводя тему. Хочу ли я в этом участвовать? Не особо. Я думал тут есть люди с которыми можно пообщаться на одинаковом уровне понимания, но практически каждый раз все превращается в разговор учителя с учеником. Интересно ли мне это? Нет. Обезъян уже понял почему тут нет ни одного системного архитектора.

А просто сраться ради того чтобы сраться? Зачем? Я уже вышел из этого возраста.

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

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

Это анонимусы. Но ТС их предусмотрительно изгнал.

Обезъян уже понял почему тут нет ни одного системного архитектора.

Других представителей движения ЛГБТ* тоже нет. Плохо ли это?

А просто сраться ради того чтобы сраться?

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

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

Пункт 2 больше похож на функции высшего порядка, чем на шаблонизацию. А п.1. больше похож на процедурный подход.

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

As is the modern method, a calculation is broken down into different tasks and for each a plan is written. The main plan or ’Hauptplan’ is initally executed using the results of different plans, which can use the results of other plans, and so on. In this way all plans are chained together and a complete program is made.

Чистой воды процедурный подход.

It is possible to create function templates. Zuse describes the possibility to give a basic function as an argument to a function. It is thus possible to create a plan which operates on functions.

А это зачатки ФП, где функция может выступать параметром для другой функции.

К prototype-based OOP это какое отношение имеет?

Если вы не в курсе, то class-based OOP отличается от prototype-based OOP тем, что в class-based OOP создаются экземпляры классов, а наследование выполняется посредством наследования классов. Тогда как в prototype-based OOP мы клонируем и расширяем экземпляры. Т.е. у нас нет класса PersonRole и его наследников Mother, Further и т.д. У нас просто есть некий экземпляр role, от который мы клонируем, а потом расширяем под себя. Но при этом расширенный нами клон может выступать в качестве базового экземпляра role.


PS. Ну или меня окончательно добил склероз и я уже напрочь забыл, что есть prototype-based OOP.

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

На этом форуме не принято признавать cвою неправоту

Вы это, кстати говоря, отлично демонстрируете.

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

А может быть, просто товарищ @eao197 неспособен к абстракциям и к утиной типизации?

Да я вообще даже разворот строки запрограммировать не сумею.

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

Других представителей движения ЛГБТ* тоже нет. Плохо ли это?

Системных архитекторов надо тоже, того. Мы же только мешаем незамутненному полету мысли программистов :)

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

Может, «упражняешься»? Испражняюсь я явно иначе. Но я уже понял что чтобы поставить точки над i нужно поискать ту инфу которую я когда-то копал разбираясь для себя в этом вопросе, хотя и после этого будет кривляние мол там явно не описано что это прототип и вообще в википедии иначе и хоть кол на голове чеши. Помню что была еще отличная работа на arxiv.org на эту тему, но чет пока не могу найти.

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

А, да, и кстати, тот самый Иоганн Мюллер тоже был немцем, вот ведь незадача.

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

Ну в любом случае, процедурное программирование, использование двоичной системы счисления, архитектура компьютера, очень похожая на современную, составные типы данных, включая кортежи, ввод программ через перфокарты, функциональное программирование - всё это, вероятно, Цузе сделал впервые. Хотя, чтобы это утверждать, нужно глубже погружаться в историю. Тем не менее, чтобы говорить, что его работа не важна, нужно быть именно воинствующим невеждой.

Хотя легко гуглится, что ткацкие станки с управлением через перфокарты были запатентованы аж в 1804 году, так что явно не все идеи своей машины Цузе придумал сам. Во всяком случае, то, что он осилил довести свою машину до практического воплощения и даже запродать её кому-то - заслуживает уважения.

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

Ага, если внимательно посмотреть то похоже и на замыкания в цепочке планов. Там вообще много чего разглядеть можно.

Obezyan
()
Ответ на: комментарий от eao197

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

В этом языке есть зачатки практически ВСЕГО что есть в остальных языках за исключением разве что рекурсии и class-based OOP.

Obezyan
()
Ответ на: комментарий от den73

Хотя легко гуглится, что ткацкие станки с управлением через перфокарты были запатентованы аж в 1804 году, так что явно не все идеи своей машины Цузе придумал сам.

Вы абсолютно правы что и Цузе не с полного нуля все делал каким бы там гением он не был. Просто «общепринято» назначили что компьютеры и языки первого поколения пошли от штатов в середине-конце 60х. Лично я, погружаясь в историю, обнаружил для себя что правильнее проводить этот раздел в Германии в конце 30х - начале 40х. Никаких летающих тарелок и Атлантиды я при этом не обнаружил если что. А вот то что Рейх использовал машину Цузе для расчетов в авиа и ракетостроении - попадалось.

Кстати, на подумать, второе название Z1 было Фау.

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

Можно описать коротко и четко: разница между ними только в механизме копирования свойств объекта - по ссылке или по значению.

Ну вы бы про ООП хотя бы в Википедии почитали что ли.

В этом языке есть зачатки практически ВСЕГО что есть в остальных языках за исключением разве что рекурсии и class-based OOP.

Вы уж определитесь, есть ли там «зачатки» или там таки prototype-based OOP.

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

Ну вы бы про ООП хотя бы в Википедии почитали что ли.

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

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

Просто по той причине, что историю пишут победители. Вот кстати, кто изобрёл телескоп? Ведь не Галилео Галилей. Он его где-то на рынке купили или что-то около того. А в советской школе как-то так получалось, что он придумал. Потому что вопрос о том, кто же его реально придумал, не ставился и не обсуждался. Тут примерно то же самое.

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

Не удивительно что вы не признаете работы Цузе, вам же не написали в википедии что их нужно признавать, а сами вы не интересовались вопросом до этого дня.

У вас с головой все в порядке?

Я не делал утверждений о том, что работы Цузе не важны с точки зрения истории развития вычислительной техники.

Я всего лишь смею утверждать, что Цузе не был прародителем prototype-based OOP. Просто по факту того, что во времена Z1 люди еще просто не решали тех задач, для которых ООП вообще пришлось придумывать. Это случилось много позже и не на машинах Цузе.

Если бы он таковым прародителем был, то это было бы признано и записано в той же Wikipedia. И ссылки на него были бы в статьях, посвященных Smalltalk, Self, JavaScript и т.д.

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

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

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

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


Ах да, то, что на Цузе не ссылаются в рассказах про SmallTalk, Self и JavaScript – это из-за проигрыша немцев и из-за того, что американцы все себе присвоили.

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

в class-based OOP создаются экземпляры классов, а наследование выполняется посредством наследования классов. Тогда как в prototype-based OOP мы клонируем и расширяем экземпляры

Чо каво клоунируем? И там, и там строится цепочка объектов, в которой ищутся недостающие поля/методы. Просто в class-based звенья этой цепочки называются классами, а в prototype-based — прототипами. Все отличия на уровне цвета пуговиц.

По крайней мере в жопаскрипте так. Там есть и class-based, и prototype-based, причём первое — просто сахарок поверх второго. Потому что принципиальных различий там нет.

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

Википедия как источник истины - это, конечно, же последняя инстанция.

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

А вообще важно кто и что изобрел, так как твои идеи - лишь компиляция идей окружающих

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

"2" + 2 == 2 + "2"

в йобаскрипте - это верно, а в питоне не «скомпилится»

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

рука бойца колоть устала

А что мешает для прототипа использовать не первый попавшийся под руку объект, а специально обученный работать шаблоном для новых объектов? Чем такой объект-прототип принципиально (не синтаксически) отличается от класса?

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

Тем что джавамакаки пошли в крестовый поход, уничтожая один язык за другим. Меня подражание джаве бесит. Особенно DDD в вакансиях на питоне

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

Да. Все это говно налепленное поверх fastapi, django, flask выглядит как велосипед с квадратными колесами и дилдаком вместо сидения

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

Все это говно налепленное поверх fastapi, django, flask

Ничё не понял %) Модель предметной области ведь в любом случае надо продумать, питон или не питон, джанго или не джанго. В ней главная сложность любого приложения (если оно чуть больше todo list), а не в служебной обвязке и технических деталях.

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

Вот, как в русте сделали. Здесь у нас футбольное поле, бегай где хочешь, borrow checker всё проверил. А здесь, видишь знак unsafe — это минное поле, ходи осторожно.

Это очень распространенное заблуждение, но борроу чекер не отключается в unsafe блоках, его вообще нельзя отключить никак 😊.

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

А просто сраться ради того чтобы сраться? Зачем? Я уже вышел из этого возраста.

Пример Евгения показывает, что возраст не помеха любви к срачам, это только цифры и ничего более ☺️.

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

По крайней мере в жопаскрипте так. Там есть и class-based, и prototype-based, причём первое — просто сахарок поверх второго. Потому что принципиальных различий там нет.

Потому что в жопоскрипте всё сделано через жопу 😊. А когда идут таким путем принципиальные различия смазываются, простите за юмор ☺️.

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

Зато растовские говноструктуры рулят. Жопаскрипт придуман был ТОЛЬКО чтобы DOM-деревом манипулировать и он же породил JSON (Java Script Object Notation, те даже если он исчезнет, то это формату альтернатив нет, а значит он вошел в историю, повлияв на множество языков) с которым предлагалось работать через AJAX. Это уже 2006 год был, те прошло почти 10 лет прежде чем язык начали адаптировать под свистоперделки. Он настолько живуч, что убил Flash, Java в браузере, Silverlight, Unity Web Player. Когда он создавался никто и не думал, что современные сайты будут на 2/3 написаны на JS (React/Vue), а роль бекенда будет сведена до прослойки между базой и интерфейсом в браузере. Для разного рода говноедов уже есть Elm (для хацкелеобрыганов), Scala.js - для тех кому нравится Scala (кто бы мог подумать!), Coffescript - Ruby, TypeScript - C# (самый успешный, так как используется для подсказов в IDE, те то что сделали частью Python, в JS реализуется через ненужное). И замена JS от Google оказалась никому не нужна, поэтому для Dart быстро написали транспилятор в нативный JS. Еще Google хотел Python в браузер засунуть, но дальше интерпретатора Python на JS дело не пошло. Это даже хорошо, что язык консервативен и не меняется исходя из трендов иначе выйдет выродок типа PHP, где даже goto вводили под вдохновением дебила, восхищавшегося его использованию в ядре пинукса

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

не надо грязи - у тех кто делал военным (Леви с хакерами частично об них) - было достаточно юмора - да и имя Лавлейс на слуху в середине 70ых

qulinxao3 ★★
()

согласно Степанову ( кста у Бугаенко интерью Зуева который упомянул ААС)[И6: Евгений Александрович Зуев об образовании, двоечниках и отличниках](https://www.youtube.com/watch?v=g8PEEX-aUWY) - первых из известных программистов - писарь «Ахмес» - из под чьего стила папирус Ринда

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

Грязь - это сомнения в в том, в чем сомневаться нельзя?

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

фреймворки накладывают свои архитектурные ограничения

По-хорошему, модель предметной области не должна зависеть от технических деталей типа фреймворков, способа хранения данных или представления. Технические детали меняются, предметная область остаётся.

DDD и Clean Architecture — как раз об этом. То, что некоторые фреймворки пытаются сунуть свои тентакли куда надо и куда не надо — не проблема DDD.

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