Re: Re: Re: Re: Re[4]: Популяризация

Sergeev Serge simne at yandex.ru
Sun Aug 8 15:22:09 PDT 2010




08.08.10, 23:44, "Alex Varyanick" <q at cono.org.ua>:
> 2010/8/8 Евгений Карпенко :
>  > Когда то давно это было задание на олимпиаду.
>  > Вот пример программы на паскале:
>  > type
>  >    my_type: 0..maxint;
>  > var
>  >   a: my_type;
>  > begin
>  >    a:=-1;
>  > end;
>  > ... которая идентичная
>  >>>
>  >>> % perl6 -e 'subset Positive of Int where { $_ > 0 }; my Positive $x =
>  >>> -1;'
>  >>> Type check failed for assignment

Это похоже на то что я имел в виду, но не совсем.
Допустим, у нас функция определена для некоторого диапазона входных значений.
Pascal, Modula, Ada как раз и предусматривают создание при необходимости специального типа, и ВСТРОЕННЫЕ в язык проверки не позволяют отправить в функцию какие-то значения, что за пределами этого диапазона, а в Perl5 это делается через расширения языка.

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

Кстати, кроме прочего, в Аде для таких типов еще и автоматически, ВСТРОЕННЫМИ СРЕДСТВАМИ ЯЗЫКА генерируются юнит-тесты.

>  > В Си можно использовать тип данных unsigned.
>  > В джаве только писать класс-обертку идентичную unsigned.

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

>  в п6, это нечто больше:
>  % perl6 -e 'multi sub nu ($x where {$_ > 0}) { say "positive $x" };
>  multi sub nu($x) { say "negative $x" }; nu(5); nu(-1);'
>  positive 5
>  negative -1

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

Вообще функциональный стиль тоже является вариантом системы повышения надежности, и для некоторого, достаточно обширного класса задач, функционал лучше чем надстройка ограничений типами над императивным языком, потому что в функционале результат функции зависит ТОЛЬКО от входных параметров функции, а в императиве результат зависит еще от некоего внутреннего состояния кода.



More information about the Kiev-pm mailing list