OberonCore
https://forum.oberoncore.ru/

Сильная типизация против сильного тестирования
https://forum.oberoncore.ru/viewtopic.php?f=27&t=1310
Страница 3 из 5

Автор:  Info21 [ Воскресенье, 18 Январь, 2009 10:34 ]
Заголовок сообщения:  Re: Сильная типизация против сильного тестирования

Vlad писал(а):
А Калашников и не знает...

Вы всё пытаетесь спасти свое "лицо". Понимаю, обидно.

Автор:  Info21 [ Воскресенье, 18 Январь, 2009 13:10 ]
Заголовок сообщения:  Re: Сильная типизация против сильного тестирования

Больше всего непонятно, почему в названии темы противопоставление.
Сильная типизация практически ничего не стоит, но ловит массу ошибок at source.
Зато не ловит ошибки с логикой, которые и вылавливай себе на здоровье "сильным тестированием".

Странная тема.

Автор:  Wlad [ Понедельник, 19 Январь, 2009 11:24 ]
Заголовок сообщения:  Re: Сильная типизация против сильного тестирования

Info21 писал(а):
Странная тема.

Кто - с чего кормится... 8)

Автор:  igor [ Понедельник, 19 Январь, 2009 14:38 ]
Заголовок сообщения:  Re: Сильная типизация против сильного тестирования

TAU писал(а):
Действительно, единственной гарантией (свидетельством) правильности работы обычной программы является успешное прохождение ею всех тестов, определяющих правильность (т.е. для всех возможных наборов входных данных и всех возможных ситуаций поведение программы должно соответствовать спецификации). А как Вы хотели?
Другое дело, что на практике такое тестирование - со всеми тестами - увы, невозможно.
На практике наверняка можно утверждать только следующее:
1. Если программа какой-нибудь тест не прошла, то она не правильная.
2. Если программа тест прошла, то неизвестно правильна она или нет.

Автор:  Geniepro [ Понедельник, 19 Январь, 2009 15:48 ]
Заголовок сообщения:  Re: Сильная типизация против сильного тестирования

В языках с зависимыми типами неправильная программа не скомпилируется, даже если в ней нет синтаксических ошибок. Вот неправильный алгоритм, и всё тут, так чего его запускать на выполнение... :mrgreen:

Автор:  Alexey Veselovsky [ Понедельник, 19 Январь, 2009 16:07 ]
Заголовок сообщения:  Re: Сильная типизация против сильного тестирования

Geniepro писал(а):
В языках с зависимыми типами неправильная программа не скомпилируется, даже если в ней нет синтаксических ошибок. Вот неправильный алгоритм, и всё тут, так чего его запускать на выполнение... :mrgreen:


Гм. А пример можно? Например для каких-нибудь простых алгоритмов типа сортировки.

И вообще, откуда оно будет знать какой алгоритм правильный а какой нет?

Автор:  Vlad [ Понедельник, 19 Январь, 2009 17:08 ]
Заголовок сообщения:  Re: Сильная типизация против сильного тестирования

slava писал(а):
Проблемы начинаются с большими программами, скажем с тысяч строчек, написанные не Вами.


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

slava писал(а):
Понять код, в котором нет типов, еще сложнее, чем осилить templates в C++.


Да, понять код без типов бывает трудно. Сам неоднократно ругался :) Поэтому требуется другой подход. Например, не городить по привычке сложных иерархий ;)

slava писал(а):
Как пример: "пробег по списку до конца" всегда заканчивается исключительной ситуацией.
Т.е. оказывается конец списка -- это "что то невероятное" в Питоне!


Ужас какой. Я и не знал, что можно так бегать по списку %))) Используте нормальный питоновский for и будет вам щастье.

slava писал(а):
Но в нетривиальных случаях количество catch'ев может превзойти количество if'ов.


Неправда. Я сейчас сделал поиск по нашей базе - получилось примерно 1 except на 20 кб кода. При этом средний размер одного файла на питоне меньше 2 кб.

slava писал(а):
Вот такой нетривиально сложный гнилой фундамент.


Не надо тянуть свои фортрановские (или обероновские) привычки в другие языки. И все нормально будет с фундаментом.

slava писал(а):
Если сравнивать с C++, то Python действительно может сгодится как закрытие дыр C++.
Но совершенно однозначно: неоправданная сложность и плохая читабельность их роднит.


По читабельности питон переплюнуть очень трудно. Не путайте с перлом. А сложность такая, что для обучения его используют намного чаще оберона :)

Автор:  Vlad [ Понедельник, 19 Январь, 2009 17:12 ]
Заголовок сообщения:  Re: Сильная типизация против сильного тестирования

Владимир Лось писал(а):
slava писал(а):
...Как пример: "пробег по списку до конца" всегда заканчивается исключительной ситуацией. Т.е. оказывается конец списка -- это "что то невероятное" в Питоне!...

Вот это - да! Это - не шутка?


Это "битлз по телефону".

Автор:  Info21 [ Понедельник, 19 Январь, 2009 17:20 ]
Заголовок сообщения:  Re: Сильная типизация против сильного тестирования

Vlad писал(а):
питон как раз и рулит там, где позволяет в десяток строк сделать то, что на других языках потребует тысячи.

Опять двадцать пять. В любом приличном языке можно иметь подобные библиотеки.

Vlad писал(а):
А сложность такая, что для обучения его используют намного чаще оберона
Вместе с бейсиком. Да, опять любимый аргумент "нас много! мы круты!"

Автор:  Иван Кузьмицкий [ Понедельник, 19 Январь, 2009 17:25 ]
Заголовок сообщения:  Re: Сильная типизация против сильного тестирования

Vlad писал(а):
По читабельности питон переплюнуть очень трудно. Не путайте с перлом. А сложность такая, что для обучения его используют намного чаще оберона :)


Для обучения, извините, чему? Черепашку в школах очень часто используют.

Автор:  Vlad [ Понедельник, 19 Январь, 2009 17:26 ]
Заголовок сообщения:  Re: Сильная типизация против сильного тестирования

slava писал(а):
попробуйте ЭТО переписать через while без break.


Не понял. Зачем "это" переписывать через while, когда вы сами привели нормальный читабельный вариант с for? Или у вас религиозные предубеждения против трех букв "for" (вот этого форума начитались? :) Так читать надо с пониманием, а не просто принимая за догму "for это зло".

slava писал(а):
Теперь представьте, что необходимо организовать поиск по списку (WHILE (list # NIL) & ~found DO... list := list.next END)



Ужас какой... А написать "x in list" - это слишком просто? %) Это нарушение ПК? %) Надо обязательно while куда-нибудь впендюрить?

slava писал(а):
Либо for+if+break либо если без break, to while+try-except+if+if+ -- короче ну очень заворочено.
А если поиск не тривиальный?!


Действительно, страшно представить что вы там наворотите для нетривиального поиска, если для обычного поиска пишите такое %) Давайте сюда ваш нетривиальный поиск, будем упрощать %)

slava писал(а):
Чужой код, что я видел содержит очень большое количество операторов break и try-except.
Легкость написания приводит к огромным функциям.
Сами по себе break'и тоже ведут к увеличению тела циклов.
Последнее замечание -- относится не только к Python, но именно в Python break'ов слишком много!


Индус на любом языке напишет индусский код.

Автор:  Vlad [ Понедельник, 19 Январь, 2009 17:37 ]
Заголовок сообщения:  Re: Сильная типизация против сильного тестирования

Info21 писал(а):
Больше всего непонятно, почему в названии темы противопоставление.
Сильная типизация практически ничего не стоит, но ловит массу ошибок at source.


Блин. Да дело не в "стоимости" реализации, а в стоимости использования. Сильная типизация стоит дорого - необходимости тщательного проектирования иерархии типов. Для каких-то задач это оправдано, для каких-то - нет.

Info21 писал(а):
Зато не ловит ошибки с логикой, которые и вылавливай себе на здоровье "сильным тестированием".


Кстати, тестировать динамический код намного проще.

Info21 писал(а):
Странная тема.


Расширяйте кругозор, который раз вам говорю :)

Автор:  Info21 [ Понедельник, 19 Январь, 2009 19:18 ]
Заголовок сообщения:  Re: Сильная типизация против сильного тестирования

Vlad писал(а):
Кстати, тестировать динамический код намного проще. ... Расширяйте кругозор, который раз вам говорю :)

У меня динамического кода столько, сколько вам не снилось.

Совершенно очевидно, что ваши понятия о выстраивании иерархии типов слишком ... "объектно-ориентированные".

Автор:  Vlad [ Понедельник, 19 Январь, 2009 20:32 ]
Заголовок сообщения:  Re: Сильная типизация против сильного тестирования

Info21 писал(а):
У меня динамического кода столько, сколько вам не снилось.


Да-да, я помню песню про "особо динамические" структуры, которые невозможны в C++ :) И пример которых так и не удалось из вас вытянуть :)

Info21 писал(а):
Совершенно очевидно, что ваши понятия о выстраивании иерархии типов слишком ... "объектно-ориентированные".


Совершенно очевидно, что вы и не нюхали динамических языков.

Автор:  Info21 [ Понедельник, 19 Январь, 2009 20:40 ]
Заголовок сообщения:  Re: Сильная типизация против сильного тестирования

Vlad писал(а):
Да-да, я помню песню про "особо динамические" структуры, которые невозможны в C++ :) И пример которых так и не удалось из вас вытянуть :)

Учебник-то математики видели в глаза когда-нибудь?

Автор:  Alexey Veselovsky [ Понедельник, 19 Январь, 2009 20:50 ]
Заголовок сообщения:  Re: Сильная типизация против сильного тестирования

Info21 писал(а):
Vlad писал(а):
Да-да, я помню песню про "особо динамические" структуры, которые невозможны в C++ :) И пример которых так и не удалось из вас вытянуть :)

Учебник-то математики видели в глаза когда-нибудь?


А вот и не подерётесь!

Автор:  Info21 [ Понедельник, 19 Январь, 2009 21:34 ]
Заголовок сообщения:  Re: Сильная типизация против сильного тестирования

Vlad писал(а):
Да-да, я помню песню про "особо динамические" структуры, которые невозможны в C++

Понял в чем загвоздка с Vlad'ом: память.
А я-то всё пытался логику понять... а тут просто память сбоит.

Автор:  Vlad [ Понедельник, 19 Январь, 2009 22:21 ]
Заголовок сообщения:  Re: Сильная типизация против сильного тестирования

Info21 писал(а):
Vlad писал(а):
Да-да, я помню песню про "особо динамические" структуры, которые невозможны в C++ :) И пример которых так и не удалось из вас вытянуть :)

Учебник-то математики видели в глаза когда-нибудь?


Если вы хотите продолжить дисскуссию о прочитанной литературе, то начните с ответа на мой вопрос про DDD.

Автор:  Борис Рюмшин [ Понедельник, 19 Январь, 2009 23:35 ]
Заголовок сообщения:  Re: Сильная типизация против сильного тестирования

Друзья! Если есть желание продолжить разборки - общайтесь личными сообщениями или идите в "Отвлечённые темы".

Со всем уважением.

Автор:  Wlad [ Вторник, 20 Январь, 2009 11:49 ]
Заголовок сообщения:  Re: Сильная типизация против сильного тестирования

Geniepro писал(а):
В языках с зависимыми типами неправильная программа не скомпилируется, даже если в ней нет синтаксических ошибок. Вот неправильный алгоритм, и всё тут, так чего его запускать на выполнение... :mrgreen:

Охохонюшки...
Вот если бы ещё народ научить добросовестно строить оте самые иерархии зависимых типов...
А то ведь народ в массе своей способен только кипятком писать по поводу насыщенности ужЕ имеющихся библиотек...
УжЕ и шутка про джавистов пошла:
- Сколько Вам нужно времени, что бы решить эту задачу?
- Эту задачу решить нельзя: для неё нет библиотеки!

С другой стороны...
Я прекрасно понимаю, что Вы тонко намекаете на автоматический вывод типов в Хаскеле...
Но, в последнее время, я осознал, что простое описание типа аки некоего списочного описания неких сигнатур экспортируемых типом сучностей разной природы неполно и "однобоко"...

Получается интересный парадоксик: деклараративность применять при описании статики получается? - хорошо! Но мне нужна динамика (процесс в развитии)! Декларировать протокол можем? - да - пожалуйста - тем же подобием РБНФ! Но теперь нам и на фиг не нужно описание класса в классическом варианте (набор экспортируемых методов)... :D

Что нам давала декларация типов в классике?
Да, почти ничего! Обычно-то и проверка на совместимость-то типов сущостей происходила по сопоставлению имени типа и по именам наследников... "Структурность" (истинность "принадлежности типу") проверялась на этапе компиляции по наличию в типе соответствующего метода (по сигнатуре). "Своевременность" вызова метода НИКАК нельзя проверить!
С "протокольными" описаниями ситуация прямо противоположная.
В принципе, классическое описание интерфейсов - частный случай описаний протокола взаимодействия: просто методы есть "выхваченные куски" из последовательности актов взаимодействия. Но протокольное описание - БОЛЕЕ естественно, МЕНЕЕ ущербно, да ещё и кучу всяческих удобств для исследований и оптимизации даёт.

Вызов метода - фрагмент акта обмена. Но если в протокольном описании мы чётко определяем последовательность прохождения и обмена "кусков информации" между общающимися объектами, то при вызове методов (при классическом описании интерфейсов) этого нет. Более того, мы даже вынуждены в высокоуровневое общение сущностей нашей предметной области вносить, например такие детали, как последовательность занесения аргументов в регистры и стек исполняющей системы...

По аналогии с минимизацией и изоморфными преобразованиями описаний грамматик, мы можем заняться оптимизацией и преобразованиями описаний протоколов...

И т.д. ... :D

Страница 3 из 5 Часовой пояс: UTC + 3 часа
Powered by phpBB® Forum Software © phpBB Group
https://www.phpbb.com/