OberonCore
https://forum.oberoncore.ru/

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

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

Valery Solovey писал(а):
Кстати, ещё по поводу модулей. То, что написано в статье будет работать только в скриптовых языках. По крайней мере, я за два дня так и не придумал способа хотя бы откомпилировать command(pet) в случае использования нескольких модулей и раздельной компиляции (чтобы не было необходимости проверять принадлежность pet соответствующему классу).


Под скриптовыми подразумеваются языки с динамической типизацией?

Автор:  Valery Solovey [ Пятница, 16 Январь, 2009 12:15 ]
Заголовок сообщения:  Re: Сильная типизация против сильного тестирования

Нет, я имею в виду интерпретацию.

P.S. я дополнил предыдущее сообщение.

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

Alexey Veselovsky писал(а):
Поковырял давеча немного Eiffel. Там контракты, инварианты и проч. в полный рост. Так вот, там как раз для релизов РЕКОМЕНДУЕТСЯ отключать ВСЕ динамические проверки. ..... Убедившись что всё ок ... откючить все проверки и собрать релиз, которым и пользоваться.

Круто.

Автор:  Илья Ермаков [ Пятница, 16 Январь, 2009 22:01 ]
Заголовок сообщения:  Re: Сильная типизация против сильного тестирования

Слишком сложные проверки там с этими контрактами понаворотили....
Это не просто ASSERT - вот и прокололись на эффективности.

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

Илья Ермаков писал(а):
Слишком сложные проверки там с этими контрактами понаворотили....
Это не просто ASSERT - вот и прокололись на эффективности.


ASSERT'ы тоже можно так расставить, что будет тормозить в разы. В ББ разница между включенными/выключенными проверками не так заметна, потому что оптимизация со стороны компилятора отсутствует как класс :) Поэтому включенным ассертам ставить палки в колеса некому :) Впрочем это все в копилку различий в подходах: "компилятор для человека" vs "человек для компилятора".

Автор:  Илья Ермаков [ Суббота, 17 Январь, 2009 00:53 ]
Заголовок сообщения:  Re: Сильная типизация против сильного тестирования

Ну прям "человек для молотка" или "молоток для человека". :)

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

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

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

Отвык я от такого.

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

Иван Кузьмицкий писал(а):
Отвык я от такого.


Ужасы какие рассказываете... Я использую питон каждый день. Падения видел только на стресс-тестах, грузящих .NET assembly.

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

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

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

Vlad писал(а):
... Впрочем это все в копилку различий в подходах: "компилятор для человека" vs "человек для компилятора".
Это в другую копилку: насколько трудно молодежи с коротким горизонтом опыта оценить Принцип Калашникова.

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

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

Мысли о Python.
По роботе имею с ним немного дело.
Язык с низким барьером входа.
Как результат простые проги (скрипты) пишутся довольно легко.
Но язык сложный, навороченный -- все фитчи очень сложно осилить (но они и не нужны для скриптов на 100 строчек).
Проблемы начинаются с большими программами, скажем с тысяч строчек, написанные не Вами.
Понять код, в котором нет типов, еще сложнее, чем осилить templates в C++.

При не тривиальных случаях необходимо понимание инструмента, а разобраться как оно работает невероятно сложно -- сложность скрывает реализацию.
Как пример: "пробег по списку до конца" всегда заканчивается исключительной ситуацией.
Т.е. оказывается конец списка -- это "что то невероятное" в Питоне!
Пока код примитивный -- это незаметно (for elem in list:...).
Но в нетривиальных случаях количество catch'ев может превзойти количество if'ов.
Вот такой нетривиально сложный гнилой фундамент.

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

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

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

Вот это - да! Это - не шутка? Я просто Питон не знаю, но даже не представляю, в каком навороченно-неординарном подходе к проектированию, такое по трезвости в голову могло прийти?!
ЗЫ Это всё равно, как с детства волновавший меня вопрос, почему при введении буквы для звукосочетания "йо" решили ставить две точки над литерой "е", а не над "о"... 8) Ну точно академия после бодунища вопрос обсуждала!... Или женщина предложила...

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

Владимир Лось писал(а):
ЗЫ Это всё равно, как с детства волновавший меня вопрос, почему при введении буквы для звукосочетания "йо" решили ставить две точки над литерой "е", а не над "о"... 8) Ну точно академия после бодунища вопрос обсуждала!... Или женщина предложила...

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

Автор:  Пётр Кушнир [ Суббота, 17 Январь, 2009 21:01 ]
Заголовок сообщения:  Re: Сильная типизация против сильного тестирования

Владимир Лось писал(а):
Я просто Питон не знаю, но даже не представляю, в каком навороченно-неординарном подходе к проектированию, такое по трезвости в голову могло прийти?!
Как лодку назовёшь - так и поплывёт :-) Язык Питон, например, назвали в честь цирка Монти Пайтона(Monty Python), а не в честь большой змеи :-)

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

Пётр Кушнир писал(а):
Как лодку назовёшь - так и поплывёт :-) Язык Питон, например, назвали в честь цирка Монти Пайтона(Monty Python), а не в честь большой змеи :-)
Добавлю: Летающего цирка! (Monty Python's Flying Circus)

Автор:  Alexey Veselovsky [ Суббота, 17 Январь, 2009 21:10 ]
Заголовок сообщения:  Re: Сильная типизация против сильного тестирования

slava писал(а):
Как пример: "пробег по списку до конца" всегда заканчивается исключительной ситуацией.
Т.е. оказывается конец списка -- это "что то невероятное" в Питоне!
Пока код примитивный -- это незаметно (for elem in list:...).
Но в нетривиальных случаях количество catch'ев может превзойти количество if'ов.


А можно пример?

Автор:  slava [ Суббота, 17 Январь, 2009 22:13 ]
Заголовок сообщения:  Re: Сильная типизация против сильного тестирования

цикл for
по определению эквивалентен (while+try-except+break):
Код:
for x in c:
    statement(s)

попробуйте ЭТО переписать через while без break.
Код:
_temporary_iterator = iter(c)
while True:
    try:
        x = _temporary_iterator.next( )
    except StopIteration:
        break
    statement(s)

Теперь представьте, что необходимо организовать поиск по списку (WHILE (list # NIL) & ~found DO... list := list.next END)
Либо for+if+break либо если без break, to while+try-except+if+if+ -- короче ну очень заворочено.
А если поиск не тривиальный?!

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

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

PS Конечно можно опять спихнуть все на программиста, но язык поощряет "такое городить".
PPS На простых задачах обработки/конвертации текста таких эффектов не замечал -- все схемы циклов были FOR EACH.

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

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


Код:
_temporary_iterator = iter(c)
try:
    while True:
        x = _temporary_iterator.next()
        statement(s)
except StopIteration:
    pass

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

Vlad писал(а):
Илья Ермаков писал(а):
Ну и, конечно, потрясающий перл в конце: "единственной гарантией правиль­ности является прохождение всех тестов, определяющих правильность програм­мы". Аж десять раз )

Если вместо слов "единственной гарантией" (интересно, как в оригинале?) поставить слова "необходимым условием", то получится вполне осмысленное утверждение

Утверждение и так вполне правильное.

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

В некоторых частных случаях для некоторых классов программ и некоторых специфических "свойств правильности" возможна, правда, формальная верификация методами логического вывода. Только в статье речь-то идет, конечно, не о таких частных случаях.

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

Info21 писал(а):
Vlad писал(а):
... Впрочем это все в копилку различий в подходах: "компилятор для человека" vs "человек для компилятора".
Это в другую копилку: насколько трудно молодежи с коротким горизонтом опыта оценить Принцип Калашникова.


А Калашников и не знает, что кое-кто упорно пытается поставить его знак качества на не самый удачный ЯП. Нехорошо.

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