Модераторы: LSD

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> строгая vs не строгая типизация, что лучше 
:(
    Опции темы
 
Какая типизация лучше?
не строгая [ 15 ]  [23.44%]
строгая [ 49 ]  [76.56%]
Всего проголосовавших: 64
В этом опросе возможен один вариант ответа
Гости не могут голосовать 
Logo
Дата 10.2.2010, 10:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 694
Регистрация: 22.7.2008

Репутация: нет
Всего: 10



Что лучше? Какие преимущества у одной перед другой?
PM MAIL   Вверх
azesmcar
Дата 10.2.2010, 10:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 2
Всего: 211



Цитата(Logo @  10.2.2010,  10:18 Найти цитируемый пост)
Что лучше? Какие преимущества у одной перед другой? 

Мое мнение - строгая, преимущества? Уменьшает количество потенциальных ошибок, делает код более понятным..по моему у нестрогой было только одно преимущество, которого после добавления в C# var не стало.
PM   Вверх
Lazin
Дата 10.2.2010, 10:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

Репутация: 4
Всего: 154



строгая smile 
PM MAIL Skype GTalk   Вверх
nginx
Дата 10.2.2010, 10:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 81
Регистрация: 20.6.2009

Репутация: -4
Всего: -3



Logo, строгая, ненавижу, что начал свое знакомство с программирование с PHP
он не только динамично-типиз, он в свою очередь еще и слабо-типиз в отличии от Питона
лучше начинать с .NET или Java любому начинающему
PM MAIL   Вверх
Logo
Дата 10.2.2010, 12:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 694
Регистрация: 22.7.2008

Репутация: нет
Всего: 10



Я вот больше работал с языками с не строгой типизацией - PHP, Perl, JavaScript. Со строгими, вроде C++(относительно строгой), значительно меньше. Ну а начинал с бейсика)

Цитата

Уменьшает количество потенциальных ошибок


Можно пример подобных ошибок? smile 

PM MAIL   Вверх
azesmcar
Дата 10.2.2010, 12:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 2
Всего: 211



Цитата(Logo @  10.2.2010,  12:00 Найти цитируемый пост)
Можно пример подобных ошибок? smile 

ну например
Код

<?php
    $i = 0;
    $t = "";
    if ($i == $t)
        echo "true";
?>

да, этого можно избежать используя ===, но дело в том, что сравнение разных типов может являться ошибкой и тут нужно внимание программиста а не результат в виде false (или тем более true). В языках со строгой типизацией тут понадобился бы cast, тем самым вы сообщите компилятору/интерпретатору что вы на самом деле хотите сравнить два разных типа. Это нагляднее и для программиста, читающего код. Строгая типизация позволяет уберечься от многих ошибок, совершенных по невнимательности.

К примеру в C++ у людей нередко возникают ошибки в связи с неявным приведением int-а к bool.

Это сообщение отредактировал(а) azesmcar - 10.2.2010, 12:16
PM   Вверх
kemiisto
Дата 10.2.2010, 12:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дикий Кот. =^.^=
****
Награды: 1



Профиль
Группа: Участник Клуба
Сообщений: 3292
Регистрация: 29.7.2007

Репутация: 3
Всего: 160



Logo, прежде чем говорить о типизации, предоставьте определения: что Вы называете строгой и нестрогой типизацией. А пока разговор ниачём. smile 

К примеру, если в понятие строгая типизация включать невозможность неявного приведения типов (implicit type conversion), что, кстати говоря, делают часто, то Python нестрого типизированный язык.

Иногда строгой считают типизацию, где вообще запрещены любые приведения типов - будь то неавные или явные.

Так что - ждём-с определений. smile 


--------------------
PM MAIL WWW GTalk Jabber   Вверх
Logo
Дата 10.2.2010, 12:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 694
Регистрация: 22.7.2008

Репутация: нет
Всего: 10



Это да, операторы сравнения в некоторых языках черезчур перегружены, сравнивая числа и строки. Легко забыть, что имеет приоритет при сравнении разных типов, числовой или строковый.
Здесь мне нравится подход Perl, в котором разные операторы сравнения строк и чисел
Код

$i = 0;
$t = "";

if ($i == $t) {  #предупреждение о том что $t не число
  print "сравнение как числа, равны"
}

if ($i eq $t) {

} else {
   print "сравнение как строки, не равны";
}


С учетом этого, могут быть какие-то ошибки?

А PHP вообще отдельная история 
Код

<?php
  if("2" == "   2.000")
    echo 'Я сравнил их как числа';

Но это не значит что это гуд.

Это сообщение отредактировал(а) Logo - 10.2.2010, 13:15
PM MAIL   Вверх
Lazin
Дата 10.2.2010, 12:37 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3820
Регистрация: 11.12.2006
Где: paranoid oil empi re

Репутация: 4
Всего: 154



kemiisto, неявное приведение типов тоже бывает разным, к примеру, в приведении int к double я ничего плохого не вижу, а наоборот лучше только явно, причем функциями floor и ceil
PM MAIL Skype GTalk   Вверх
Logo
Дата 10.2.2010, 12:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 694
Регистрация: 22.7.2008

Репутация: нет
Всего: 10



Цитата

К примеру в C++ у людей нередко возникают ошибки в связи с неявным приведением int-а к bool.

А что там не понятного - 0 - false, остальное true, как везде
PM MAIL   Вверх
azesmcar
Дата 10.2.2010, 12:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


uploading...
****


Профиль
Группа: Участник Клуба
Сообщений: 6291
Регистрация: 12.11.2004
Где: Армения

Репутация: 2
Всего: 211



Цитата(Logo @  10.2.2010,  12:38 Найти цитируемый пост)
А что там не понятного - 0 - false, остальное true, 

я не говорил что непонятно smile я говорю проблемы возникают иногда..представь что переменная раньше была типа bool, хранила два статуса, потом расширили програмку (ну не учли этого) и сменили тип на int, вот забудешь в каком нибудь if -е поменять потом ищи проблему в логике, а ведь компилируется нормально. Кому как, по мне так лучше бы этого не было.
Цитата

как везде 

если не ошибаюсь, джава этого не позволяет.

Это сообщение отредактировал(а) azesmcar - 10.2.2010, 12:45
PM   Вверх
Logo
Дата 10.2.2010, 12:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 694
Регистрация: 22.7.2008

Репутация: нет
Всего: 10



Цитата(kemiisto @ 10.2.2010,  12:19)
Logo, прежде чем говорить о типизации, предоставьте определения: что Вы называете строгой и нестрогой типизацией. А пока разговор ниачём. smile 

К примеру, если в понятие строгая типизация включать невозможность неявного приведения типов (implicit type conversion), что, кстати говоря, делают часто, то Python нестрого типизированный язык.

Иногда строгой считают типизацию, где вообще запрещены любые приведения типов - будь то неавные или явные.

Так что - ждём-с определений. smile

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

Добавлено через 2 минуты и 31 секунду
Цитата

как везде 

... при приведении типов
PM MAIL   Вверх
kemiisto
  Дата 10.2.2010, 13:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дикий Кот. =^.^=
****
Награды: 1



Профиль
Группа: Участник Клуба
Сообщений: 3292
Регистрация: 29.7.2007

Репутация: 3
Всего: 160



Цитата(Lazin @  10.2.2010,  13:37 Найти цитируемый пост)
kemiisto, неявное приведение типов тоже бывает разным, к примеру, в приведении int к double я ничего плохого не вижу, а наоборот лучше только явно, причем функциями floor и ceil

Спасибо, что просветил, мил человек. smile А то я ведь не знал. Думал, что только 2 типа данных существует на свете: int и bool. 

Насчёт приведение целое -> The IEEE Standard for Floating-Point Number: тут тоже есть свои подводные камни. Не всякое целое число точно представимо. Думаю, ты про это прекрасно знаешь и, конечно же, читал What Every Computer Scientist Should Know About Floating-Point Arithmetic. Но уж коли ты решил мне рассказать про общечеловеческие ценности, я тоже в долгу не останусь. smile 

А так, да, согласен. В Oberon фенкция называиццо ENTIER(x). Аргумент - real type, тип результате - LONGINT. Возвращает largest integer not greater than x.

Это сообщение отредактировал(а) kemiisto - 10.2.2010, 13:16


--------------------
PM MAIL WWW GTalk Jabber   Вверх
UniBomb
Дата 10.2.2010, 13:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
***
Награды: 1



Профиль
Группа: Участник Клуба
Сообщений: 1754
Регистрация: 24.10.2006
Где: Санкт-Петербург

Репутация: нет
Всего: 97



Цитата(azesmcar @  10.2.2010,  13:11 Найти цитируемый пост)

<?php
    $i = 0;
    $t = "";
    if ($i == $t)
        echo "true";
?>

В руби такое не проходит. 0 и nil там всё же разные вещи. Даже оператор === говорит не эквивалентны

Цитата(Logo @  10.2.2010,  13:36 Найти цитируемый пост)

<?php
  if("2" == "   2.000")
    echo 'Я сравнил их как числа';


Раби и тут говорит, что ни о каком равенстве никакой речи и быть не может.

Цитата(Logo @  10.2.2010,  13:38 Найти цитируемый пост)
0 - false, остальное true, как везде

Вы таки наверное уже догадались?


Мне нравится нестрогая типизация в Ruby, но я в этом ничего не понимаю  smile 


--------------------
PM MAIL ICQ Skype   Вверх
MAKCim
Дата 10.2.2010, 13:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 8
Всего: 207



юзайте аннотации и декораторы для проверки типов
Код

#!/usr/bin/python3

import inspect
import functools

def strictly_typed(function):
    annotations = function.__annotations__
    arg_spec = inspect.getfullargspec(function)
    assert "return" in annotations, "missing type for return value"
    for arg in arg_spec.args + arg_spec.kwonlyargs:
        assert arg in annotations, "missing type for parameter '{1}'".format(arg)
    @functools.wraps(function)
    def wrapper(*args, **kwargs):
        for name, arg in list(zip(arg_spec.args, args)) + list(kwargs.items()):
            assert isinstance(arg, annotations[name]), "expected argument '{0}' of {1} got {2}".format(name, annotations[name], type(arg))
        result = function(*args, **kwargs)
        assert isinstance(result, annotations["return"]), "expected return of {0} got {1}".format(annotations["return"], type(result))
        return result
    return wrapper

@strictly_typed
def main(argv : tuple, value) -> int:
    return value

# main((), 1)
# main((), 1.)
# main([], 1)


ps. код честно взят из одного источника ;)


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
GrayCardinal
Дата 10.2.2010, 13:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Фигасе
****


Профиль
Группа: Завсегдатай
Сообщений: 3039
Регистрация: 9.11.2003

Репутация: нет
Всего: 58



Что значит лучше ? Юзать можно обе. А ошибки из-за невнимательности в любом случае будут...

Добавлено через 21 секунду
(не голосовал)


--------------------
PM MAIL WWW   Вверх
Logo
Дата 10.2.2010, 23:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 694
Регистрация: 22.7.2008

Репутация: нет
Всего: 10



Цитата(azesmcar @  10.2.2010,  12:43 Найти цитируемый пост)
я не говорил что непонятно smile я говорю проблемы возникают иногда..представь что переменная раньше была типа bool, хранила два статуса, потом расширили програмку (ну не учли этого) и сменили тип на int, вот забудешь в каком нибудь if -е поменять потом ищи проблему в логике, а ведь компилируется нормально. Кому как, по мне так лучше бы этого не было.


Да, согласен. Ситуация хотя и очень маловероятная, но возможная.

Цитата(kemiisto @  10.2.2010,  13:15 Найти цитируемый пост)
Насчёт приведение целое -> The IEEE Standard for Floating-Point Number: тут тоже есть свои подводные камни. Не всякое целое число точно представимо. Думаю, ты про это прекрасно знаешь и, конечно же, читал What Every Computer Scientist Should Know About Floating-Point Arithmetic. Но уж коли ты решил мне рассказать про общечеловеческие ценности, я тоже в долгу не останусь. smile 


Тоже верно, если с большими числами работать. Хотя с точность чисел с плавающей точкой и так надо держать ухо востро.


Цитата(UniBomb @  10.2.2010,  13:36 Найти цитируемый пост)
Цитата(azesmcar @  10.2.2010,  13:11 Найти цитируемый пост)

<?php
    $i = 0;
    $t = "";
    if ($i == $t)
        echo "true";
?>

В руби такое не проходит. 0 и nil там всё же разные вещи. Даже оператор === говорит не эквивалентны


Руби проверил, он тут себя ведет тоже не лучшим образом. И ошибку не возвращает, и сравнение не проводит. Питон, кстати, так же работает.



PM MAIL   Вверх
Akella
Дата 13.2.2010, 10:44 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 1
Всего: 329



Да, строгая лучше. Меньше потенциальных ошибок. Хотя иногда приходится и очень удобно применять вариантный тип, который как бы не имеет типа smile
Т.е. можно было бы в опрос добавить ещё пункт: строгая с применением вариантных типов smile

Это сообщение отредактировал(а) Akella - 13.2.2010, 10:45
PM MAIL   Вверх
segrey
Дата 13.2.2010, 12:57 (ссылка)    | (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 54
Регистрация: 26.12.2006

Репутация: нет
Всего: нет



Честно говоря, в php не хватает что - то вроде такого:
Код

function __construct (array $arg) {}
function __construct (MyCollection $arg) {}
function __construct (int a, int b, int c) {}


чтобы как в С++, в зависимости от того какие аргументы пришли - та функция и вызвалась. Можно конечно условие в конструкторе поставить, но это не кошерно  smile 
PM MAIL   Вверх
UniBomb
Дата 19.2.2010, 12:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
***
Награды: 1



Профиль
Группа: Участник Клуба
Сообщений: 1754
Регистрация: 24.10.2006
Где: Санкт-Петербург

Репутация: нет
Всего: 97



Цитата(Logo @  11.2.2010,  00:21 Найти цитируемый пост)
Руби проверил, он тут себя ведет тоже не лучшим образом.

Ну почему же - в ruby есть оператор сравнения <=>, который будет равен nil если сравниваемые величины не подлежат сравнению (как в данном случае). Подмешанный оператор == основан на предыдущем и вероятно выдаёт false всегда, когда не true. По-моему тут всё логично.


--------------------
PM MAIL ICQ Skype   Вверх
mrbrooks
Дата 19.2.2010, 12:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


трололомен
****


Профиль
Группа: Завсегдатай
Сообщений: 4259
Регистрация: 4.10.2006
Где: Дол Гулдур

Репутация: нет
Всего: 306



строгая, ибо это не только гламурно, но и кошерно.
PM MAIL   Вверх
Logo
Дата 20.2.2010, 12:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 694
Регистрация: 22.7.2008

Репутация: нет
Всего: 10



Цитата

Ну почему же - в ruby есть оператор сравнения <=>, который будет равен nil если сравниваемые величины не подлежат сравнению (как в данном случае). 

Но nil и 0 в контексте if одно и тоже ведь.
И вообще речь не о том. Он не выдает ошибки при сравнении "1" и 1. Что бы, как Java, избавить от потенциальных ошибок. Вместо этого продолжает выполнять программу. Однако и сравнение он тоже не производит.  Что бы, как Perl, что бы не заботится типах.
Таким образом совмещая недостатки того и другогоsmile

PM MAIL   Вверх
fixxer
Дата 20.2.2010, 16:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 672
Регистрация: 14.9.2006
Где: Саратов, Россия

Репутация: нет
Всего: 27



Цитата(Logo @ 20.2.2010,  12:32)
Цитата

Ну почему же - в ruby есть оператор сравнения <=>, который будет равен nil если сравниваемые величины не подлежат сравнению (как в данном случае). 

Но nil и 0 в контексте if одно и тоже ведь.
И вообще речь не о том. Он не выдает ошибки при сравнении "1" и 1. Что бы, как Java, избавить от потенциальных ошибок. Вместо этого продолжает выполнять программу. Однако и сравнение он тоже не производит.  Что бы, как Perl, что бы не заботится типах.
Таким образом совмещая недостатки того и другогоsmile

Таким образом не стоит забывать, что в Ruby все объект и == это метод. Таким образом это можно сравнивать с методом equals в Java, а не с == в Java.


--------------------
user posted image
PM MAIL ICQ   Вверх
k0rvin
Дата 12.3.2010, 21:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 442
Регистрация: 24.1.2010

Репутация: 1
Всего: 5



Цитата(Akella @ 13.2.2010,  10:44)
Да, строгая лучше. Меньше потенциальных ошибок. Хотя иногда приходится и очень удобно применять вариантный тип, который как бы не имеет типа smile
Т.е. можно было бы в опрос добавить ещё пункт: строгая с применением вариантных типов smile

я надеюсь Вы не про Variant из Делфи (точнее COM/OLE, я таких тонкостей не знаю)?


--------------------
“Object-oriented design is the roman numerals of computing.” — Rob Pike
All software sucks
PM MAIL   Вверх
A5uKa
Дата 27.3.2010, 23:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


TЋ♥s F1rȜ iƧ BurȠiƞg
***


Профиль
Группа: Awaiting Authorisation
Сообщений: 1928
Регистрация: 30.8.2008

Репутация: 1
Всего: 16



строгая с возможностью не строгой  smile 
PM   Вверх
Akella
Дата 23.4.2010, 14:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Творец
****


Профиль
Группа: Модератор
Сообщений: 18485
Регистрация: 14.5.2003
Где: Корусант

Репутация: 1
Всего: 329



k0rvin, когда я говорил о вариантном типе, то имел ввиду именно Variant. Но есть ещё OleVariant.
PM MAIL   Вверх
k0rvin
Дата 23.4.2010, 18:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 442
Регистрация: 24.1.2010

Репутация: 1
Всего: 5



Цитата(Akella @ 23.4.2010,  14:47)
k0rvin, когда я говорил о вариантном типе, то имел ввиду именно Variant. Но есть ещё OleVariant.

но это же ужасный костыль и имеет отношение не к строгой/нестрогой типизации, а к статической/динамической =)


--------------------
“Object-oriented design is the roman numerals of computing.” — Rob Pike
All software sucks
PM MAIL   Вверх
qweqwe
Дата 23.4.2010, 18:17 (ссылка)    | (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 55
Регистрация: 31.1.2007

Репутация: нет
Всего: 0



Цитата(mrbrooks @  19.2.2010,  12:33 Найти цитируемый пост)
строгая, ибо это не только гламурно, но и кошерно.

даже не знаю, за что тебя заминусовали, бро

сразу видно - форум быдлокодеров, но не гламурных!

Добавлено через 37 секунд
только строгая, абсолютно всегда и везде smile 
PM MAIL   Вверх
nerezus
Дата 23.4.2010, 22:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вселенский отказник
****


Профиль
Группа: Участник
Сообщений: 3330
Регистрация: 15.6.2005

Репутация: 13
Всего: 43



При динамической(как правило в нестрогой она, ну за исключением всяких там C) все равно приходится вести xxxdoc теги, в итоге кода больше выходит, а проферок типизации нету.


--------------------
Сообщество художников Artsociety.ru
PM MAIL WWW   Вверх
SneG0K
Дата 23.4.2010, 23:29 (ссылка)  | (голосов:5) Загрузка ... Загрузка ... Быстрая цитата Цитата


Max Mara
***


Профиль
Группа: Завсегдатай
Сообщений: 1887
Регистрация: 1.12.2007
Где: Wis Dells

Репутация: нет
Всего: 54



Цитата(mrbrooks @  19.2.2010,  11:33 Найти цитируемый пост)
строгая, ибо это не только гламурно, но и кошерно. 

Ага, кошерно как еврейское рождество.

В зависимости от задачи. При строгой типизации производительность выше, вроде.
PM WWW Skype   Вверх
k0rvin
Дата 24.4.2010, 00:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 442
Регистрация: 24.1.2010

Репутация: 1
Всего: 5



Цитата(nerezus @ 23.4.2010,  22:42)
При динамической(как правило в нестрогой она, ну за исключением всяких там C) все равно приходится вести xxxdoc теги, в итоге кода больше выходит...

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

Цитата(nerezus @ 23.4.2010,  22:42)
При динамической ... проферок типизации нету.

Код

CL-USER> (numberp 1)
T

CL-USER> (numberp "a")
NIL

CL-USER> (stringp "a")
T

CL-USER> (type-of 1)
FIXNUM

CL-USER> (type-of "a")
SIMPLE-TEXT-STRING

ня?

Это сообщение отредактировал(а) k0rvin - 24.4.2010, 00:43


--------------------
“Object-oriented design is the roman numerals of computing.” — Rob Pike
All software sucks
PM MAIL   Вверх
qweqwe
Дата 24.4.2010, 09:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 55
Регистрация: 31.1.2007

Репутация: нет
Всего: 0



Цитата(nerezus @  23.4.2010,  22:42 Найти цитируемый пост)
а проферок типизации нету

есть, но только в рантайме

Цитата(SneG0K @  23.4.2010,  23:29 Найти цитируемый пост)
В зависимости от задачи.

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

Цитата(SneG0K @  23.4.2010,  23:29 Найти цитируемый пост)
При строгой типизации производительность выше, вроде.

товарищ главнокомандующий, вы путаете строгую типизацию и статическую типизацию
PM MAIL   Вверх
JackYF
Дата 24.4.2010, 19:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 2
Всего: 162



Цитата(qweqwe @  24.4.2010,  08:52 Найти цитируемый пост)
вот приведи пример задачи, которая выигрывает от нестрогой типизации

Любая задача, выполнение которой занимает меньше времени, чем написание кода для неё. Например, скрипты.


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
kemiisto
Дата 24.4.2010, 19:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дикий Кот. =^.^=
****
Награды: 1



Профиль
Группа: Участник Клуба
Сообщений: 3292
Регистрация: 29.7.2007

Репутация: 3
Всего: 160



Цитата(JackYF @  24.4.2010,  20:00 Найти цитируемый пост)
Любая задача, выполнение которой занимает меньше времени, чем написание кода для неё. Например, скрипты.

Хм... Что-то я сомневаюсь. 

Итак,
Цитата(Logo @  10.2.2010,  13:45 Найти цитируемый пост)
Да как и все - строгая, когда не производятся не явные приведения типов, не строгая - когда производятся.
Динамическая - когда можно менять тип по ходу выполнения программы, и соответственно проверка типов на этапе исполнения - статическая, наоборот, на этапе компиляции.


JackYF, я бы ещё понял, если бы речь шла о преимуществах динамической типизации в плане высокой скорости прототипирования. Но нестрогая будет только мешать. Если исходить из вышеупомянутых определений, то, скажем, в Python типизация динамическая строгая, а в PHP - динамическая нестрогая. Бенефиты от динамической типизации получим и там и там, а вот об грабли нестрогой типизации, расставленные в PHP, мы весь лоб расшибём.

P.S. В Python типизация не совсем строгая...


--------------------
PM MAIL WWW GTalk Jabber   Вверх
k0rvin
Дата 24.4.2010, 19:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 442
Регистрация: 24.1.2010

Репутация: 1
Всего: 5



Цитата(qweqwe @ 24.4.2010,  09:52)

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

пример:
Код

(let ((x (assoc 'b '((a . 1) (b . 2) (c . 3)))))
  (when x (cdr x)))
; => 2

будь типизация сильно строгой, результат assoc необходимо было бы писать "(when (not (null x)) ..." или типа того
мелочь, но чем больше кода, тем количество таких мелочей растет в геометрической прогресси => растёт трудность восприятия кода

Цитата(qweqwe @ 24.4.2010,  09:52)

товарищ главнокомандующий, вы путаете строгую типизацию и статическую типизацию

не совсем, чем строже типизация, тем уверенней компилятор может производить оптимизации, ведь он может однозначно установить тип, а не думать "тут возможны такие типы: ..."

Это сообщение отредактировал(а) k0rvin - 24.4.2010, 19:51


--------------------
“Object-oriented design is the roman numerals of computing.” — Rob Pike
All software sucks
PM MAIL   Вверх
kemiisto
Дата 24.4.2010, 20:14 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дикий Кот. =^.^=
****
Награды: 1



Профиль
Группа: Участник Клуба
Сообщений: 3292
Регистрация: 29.7.2007

Репутация: 3
Всего: 160



Цитата(k0rvin @  24.4.2010,  20:49 Найти цитируемый пост)
пример

k0rvin, я смотрю ты Лисп(?) используешь строго по назначению - толстый троллинг. smile Ты бы хоть пояснял нам, императивным нищебродам, что там происходит. smile 

Цитата(k0rvin @  24.4.2010,  20:49 Найти цитируемый пост)
не совсем, чем строже типизация, тем уверенней компилятор может производить оптимизации, ведь он может однозначно установить тип, а не думать "тут возможны такие типы: ..."

qweqwe, вот, смотри. И ещё один путает. Речь идёт о том, что со строгой типизацией нужно явно указывать свои намерения при приведении типов. Таким образом транслятор языка со строгой типизацией будет увереннее находить ошибки, которые транслятор языка с нестрогой типизацией будет "проглатывать", предполагая неявное приведение типов. Эти ошибки очень часто являются логическими ошибками. Чем раньше они будут отловлены, тем лучше.

Логическую ошибку можно:
  • отловить в compile-time;
  • отловить в run-time;
  • не отловить вовсе.
Чем раньше - тем лучше. Вероятность успешного "отлова" в compile-time будет максимально в случае использование компиляторов языков со строгой типизацией. Если для этих языков использовать интерпретаторы - мы просто спускаемся на уровень ниже. Вероятность локализовать ошибку - та же. В случаем нестрогой типизации ошибку очень трудно локализовать.

Это сообщение отредактировал(а) kemiisto - 24.4.2010, 20:15


--------------------
PM MAIL WWW GTalk Jabber   Вверх
nerezus
Дата 24.4.2010, 20:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вселенский отказник
****


Профиль
Группа: Участник
Сообщений: 3330
Регистрация: 15.6.2005

Репутация: 13
Всего: 43



Цитата

что? переформулируйте мысль на более литературном или техническом языке.
какие слова не понятны? буду разъяснять их значение.

Цитата

Любая задача, выполнение которой занимает меньше времени, чем написание кода для неё. Например, скрипты.
 Попробуйте скрипты документировать. И сравните )


--------------------
Сообщество художников Artsociety.ru
PM MAIL WWW   Вверх
kemiisto
Дата 24.4.2010, 20:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Дикий Кот. =^.^=
****
Награды: 1



Профиль
Группа: Участник Клуба
Сообщений: 3292
Регистрация: 29.7.2007

Репутация: 3
Всего: 160



k0rvin, кстати говоря, все Лиспы, вроде как, строго типизированные языки. 


--------------------
PM MAIL WWW GTalk Jabber   Вверх
qweqwe
Дата 24.4.2010, 20:44 (ссылка) |  (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 55
Регистрация: 31.1.2007

Репутация: нет
Всего: 0



Цитата(k0rvin @  24.4.2010,  19:49 Найти цитируемый пост)
не совсем, чем строже типизация, тем уверенней компилятор может производить оптимизации, ведь он может однозначно установить тип, а не думать "тут возможны такие типы: ..."

нестрогая типизация, это когда компилятор видит, скажем сравнение строки и null, и генирирует такой код, который проверяет, пустая ли строка, и если она пустая - сравнение возвращает true, это крайне весело и остроумно, но к счастью - не ведет к ускорению программ (иначе ПэХаПэ был бы самым быстрым языком на свете) smile 

Цитата(kemiisto @  24.4.2010,  20:24 Найти цитируемый пост)
все Лиспы, вроде как, строго типизированные языки

так точно, лиспы не пальцем деланы smile 
PM MAIL   Вверх
k0rvin
Дата 24.4.2010, 21:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 442
Регистрация: 24.1.2010

Репутация: 1
Всего: 5



Цитата(kemiisto @ 24.4.2010,  20:14)
k0rvin, я смотрю ты Лисп(?) используешь строго по назначению - толстый троллинг. smile Ты бы хоть пояснял нам, императивным нищебродам, что там происходит. smile 

Нет такого языка "лисп". а Common Lisp весьма императивный язык. в том числе.
Код

(assoc 'b '((a . 1) (b . 2) (c . 3))) ; => (b . 2)
(cdr '(b . 2)) ; => 2

(macroexpand '(when x (cdr x))) ; => (if x (progn (cdr x)))


Добавлено @ 21:27
Цитата(nerezus @ 24.4.2010,  20:23)
какие слова не понятны? буду разъяснять их значение.

все слова понятны. по-отдельности. вместе же они у Вас составляют кашу

Добавлено @ 21:37
Цитата(kemiisto @ 24.4.2010,  20:24)
k0rvin, кстати говоря, все Лиспы, вроде как, строго типизированные языки.

откуда такая уверенность? "диалектов лиспа больше, чем программ, написанных на нём".

в Common Lisp типизация не сильно строгая:
nil используется и как пустой список, и как "ложь",
истиной является значение любого типа, кроме nil.
ну и полиморфизм никто не отменял, благо CLOS предоставляет классы для всех встроенных типов, соответственно можно написать свои сколь угодно нестрогие функции =)

в Scheme чуть по-строже, есть специальные булевы константы: #t и #f, пустой список '() не является "ложью", однако как и любое другое значение, отличное от #f, является "истиной"

ну и конечно же и в том, и в другом списки и массивы гетерогенны
однако типизация в CL и Scheme построже Сишной

Это сообщение отредактировал(а) k0rvin - 24.4.2010, 22:08


--------------------
“Object-oriented design is the roman numerals of computing.” — Rob Pike
All software sucks
PM MAIL   Вверх
k0rvin
Дата 24.4.2010, 21:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 442
Регистрация: 24.1.2010

Репутация: 1
Всего: 5



Цитата(qweqwe @ 24.4.2010,  20:44)
нестрогая типизация, это когда компилятор видит, скажем сравнение строки и null, и генирирует такой код, который проверяет, пустая ли строка, и если она пустая - сравнение возвращает true, это крайне весело и остроумно, но к счастью - не ведет к ускорению программ (иначе ПэХаПэ был бы самым быстрым языком на свете) smile 

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

впрочем Вы правы, для статически типизированных языков разницы в производительности никакой. для динамически типизированных разница есть, ведь проверки типов придётся проводить в рантайме


--------------------
“Object-oriented design is the roman numerals of computing.” — Rob Pike
All software sucks
PM MAIL   Вверх
qweqwe
Дата 24.4.2010, 23:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 55
Регистрация: 31.1.2007

Репутация: нет
Всего: 0



Цитата(k0rvin @  24.4.2010,  21:43 Найти цитируемый пост)
впрочем Вы правы, для статически типизированных языков разницы в производительности никакой. для динамически типизированных разница есть, ведь проверки типов придётся проводить в рантайме 

проверки типов есть всегда, только в случае строгой типизации - проверка приведет к одному результату, а в случае не строгой - к другому
PM MAIL   Вверх
nerezus
Дата 25.4.2010, 16:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вселенский отказник
****


Профиль
Группа: Участник
Сообщений: 3330
Регистрация: 15.6.2005

Репутация: 13
Всего: 43



Цитата

вместе же они у Вас составляют кашу
 Жаль (
Тогда советую перечитывать до тех пор, пока полностью не поймете смысл, но не более 4 часов подряд.

Добавлено через 4 минуты и 39 секунд
Цитата

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

При динамической типизации(как правило она "в комплекте" с нестрогой типизацией, за исключением языков типа C) все равно приходится вести phpdoc/etc теги для работы автокомплита типов и документации, в итоге кода больше выходит...


--------------------
Сообщество художников Artsociety.ru
PM MAIL WWW   Вверх
qweqwe
Дата 25.4.2010, 18:04 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 55
Регистрация: 31.1.2007

Репутация: нет
Всего: 0



Цитата(nerezus @  25.4.2010,  16:26 Найти цитируемый пост)
При динамической типизации(как правило она "в комплекте" с нестрогой типизацией, за исключением языков типа C) все равно приходится вести phpdoc/etc теги для работы автокомплита типов и документации, в итоге кода больше выходит... 

у вас PHP головного мозга, уважаемый
нестрогая и динамическая типизация - ортогональные вещи smile 
PM MAIL   Вверх
nerezus
Дата 25.4.2010, 20:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вселенский отказник
****


Профиль
Группа: Участник
Сообщений: 3330
Регистрация: 15.6.2005

Репутация: 13
Всего: 43



qweqwe, а у вас ПГМ)
читаем первую часть моего поста, долго думаем. Специально же РАЗДЕЛИЛ эти понятия в сообщении.


--------------------
Сообщество художников Artsociety.ru
PM MAIL WWW   Вверх
qweqwe
Дата 25.4.2010, 20:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 55
Регистрация: 31.1.2007

Репутация: нет
Всего: 0



Цитата(nerezus @  25.4.2010,  20:39 Найти цитируемый пост)
ПГМ

Православие Головного Мозга? smile

Добавлено через 1 минуту и 57 секунд
Цитата(nerezus @  25.4.2010,  20:39 Найти цитируемый пост)
читаем первую часть моего поста, долго думаем. Специально же РАЗДЕЛИЛ эти понятия в сообщении. 

зачем? мысль я понял, она не оригинальна, во первых, а во вторых, нестрогими могут быть и статические ЯП, а не только PHP
PM MAIL   Вверх
k0rvin
Дата 25.4.2010, 21:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 442
Регистрация: 24.1.2010

Репутация: 1
Всего: 5



так значительно лучше

-----

Цитата(nerezus @ 25.4.2010,  16:26)
автокомплита типов


что это?

Добавлено через 1 минуту и 25 секунд
Цитата(qweqwe @ 25.4.2010,  20:43)
нестрогими могут быть и статические ЯП, а не только PHP

ну так он и написал "обычно, за исключением всяких С" =)


--------------------
“Object-oriented design is the roman numerals of computing.” — Rob Pike
All software sucks
PM MAIL   Вверх
qweqwe
Дата 25.4.2010, 21:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 55
Регистрация: 31.1.2007

Репутация: нет
Всего: 0



Цитата(k0rvin @  25.4.2010,  21:13 Найти цитируемый пост)
что это?

он имел ввиду автокомплит в IDE, в php можно указывать аннотации, по которым IDE разберется что показывать в автокомплите smile 
PM MAIL   Вверх
k0rvin
Дата 25.4.2010, 21:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 442
Регистрация: 24.1.2010

Репутация: 1
Всего: 5



Цитата(qweqwe @ 25.4.2010,  21:19)
Цитата(k0rvin @  25.4.2010,  21:13 Найти цитируемый пост)
что это?

он имел ввиду автокомплит в IDE, в php можно указывать аннотации, по которым IDE разберется что показывать в автокомплите smile

эээ... а типы тут при чём? или имеется в виду для конструкций вида (хз как в пхп, пишу в С-подобном синтаксисе):
Код

myObject->myMeth<нажимаем хоткей для автокомплита и имя метода дополняется>

?


--------------------
“Object-oriented design is the roman numerals of computing.” — Rob Pike
All software sucks
PM MAIL   Вверх
nerezus
Дата 25.4.2010, 23:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вселенский отказник
****


Профиль
Группа: Участник
Сообщений: 3330
Регистрация: 15.6.2005

Репутация: 13
Всего: 43



Цитата

myObject->myMeth<нажимаем хоткей для автокомплита и имя метода дополняется>
 Да. Т.е. IDE будет знать тип myObject, то сможет правильно дополнить.

Именно поэтому для PHP есть нормальные IDE, а для python - нету и не будет.


--------------------
Сообщество художников Artsociety.ru
PM MAIL WWW   Вверх
k0rvin
Дата 26.4.2010, 06:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 442
Регистрация: 24.1.2010

Репутация: 1
Всего: 5



Цитата(nerezus @ 25.4.2010,  23:52)
Цитата

myObject->myMeth<нажимаем хоткей для автокомплита и имя метода дополняется>
 Да. Т.е. IDE будет знать тип myObject, то сможет правильно дополнить.

Именно поэтому для PHP есть нормальные IDE, а для python - нету и не будет.

откуда такая уверенность? может гвидо разрешит питонистам что-то типа того же, что есть в пхп для этого.

ну и да, что в пхп, что в пейтоне объектная модель -- уг =)


--------------------
“Object-oriented design is the roman numerals of computing.” — Rob Pike
All software sucks
PM MAIL   Вверх
nerezus
Дата 26.4.2010, 07:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Вселенский отказник
****


Профиль
Группа: Участник
Сообщений: 3330
Регистрация: 15.6.2005

Репутация: 13
Всего: 43



Цитата

откуда такая уверенность?
 В невозможности определить тип в питоне в IDE, т.к. он нигде не указан.

Цитата

может гвидо разрешит питонистам что-то типа того же, что есть в пхп для этого.
 Когда разрешит - тогда и поговорим. Сейчас этого нету.

Цитата

ну и да, что в пхп, что в пейтоне объектная модель -- уг =)
 Это твои эротические фантазии ;)
PHP копирует джаву. На вскидку нету видимости пакетов, анонимных классов, перегрузки сравнения. Остальное вполне себе скопировано и переделано в динамику с кучей добавлений.


--------------------
Сообщество художников Artsociety.ru
PM MAIL WWW   Вверх
NLspieler
Дата 26.4.2010, 07:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 619
Регистрация: 13.10.2008
Где: Берлин

Репутация: нет
Всего: 19



У php не строгая типизация?
В общем то это так, но нельзя забывать, что в php есть несколько операторов сравнения, а именно
не только == , != , 
но и === , !==   которые требуют строгое совпадение типа.

Код

if ('' === FALSE) 
{
    echo 'TRUE' ;
}
else 
{
    echo 'FALSE' ;
}
//Выведет FALSE
 
if ('' ==   FALSE) 
{
    echo 'TRUE' ;
}
else 
{
    echo 'FALSE' ;
}
//Выведет TRUE ;


Таким образом, при необходимости можно пользоваться любым видом типизации. И при некотором опыте, никаких ошибок 
от этого больше не возникает.

Правда, в php можно производить операции над разными типами данных,
например

Код

echo 10 / "0.5" ;  //Деление целого числа на строку, которая преобразуется в double, результат 20

Возможно это и может привести к ошибках, но в моей практике никогда такого не было.

С другой стороны это очень удобно. Можно сразу, без преобразования типов, приступить к вычислениям. 
Обращаемся к скрипту по get-ссылке test.php?a=10&b=0.5
Код

<?
echo $_GET['a'] / $_GET['b'] ; //Результат опять же 20
?>

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




Это сообщение отредактировал(а) NLspieler - 26.4.2010, 08:12
PM MAIL   Вверх
k0rvin
Дата 26.4.2010, 12:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 442
Регистрация: 24.1.2010

Репутация: 1
Всего: 5



Цитата(nerezus @ 26.4.2010,  07:09)
Это твои эротические фантазии ;)
PHP копирует джаву. На вскидку нету видимости пакетов, анонимных классов, перегрузки сравнения. Остальное вполне себе скопировано и переделано в динамику с кучей добавлений.

Это факт, лучшие объектные модели в SmallTalk и CLOS

Добавлено @ 12:30
Цитата(NLspieler @ 26.4.2010,  07:55)
У php не строгая типизация?
В общем то это так, но нельзя забывать, что в php есть несколько операторов сравнения, а именно
не только == , != , 
но и === , !==   которые требуют строгое совпадение типа.

Код

if ('' === FALSE) 
{
    echo 'TRUE' ;
}
else 
{
    echo 'FALSE' ;
}
//Выведет FALSE
 
if ('' ==   FALSE) 
{
    echo 'TRUE' ;
}
else 
{
    echo 'FALSE' ;
}
//Выведет TRUE ;


Таким образом, при необходимости можно пользоваться любым видом типизации. И при некотором опыте, никаких ошибок 
от этого больше не возникает.

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

Это сообщение отредактировал(а) k0rvin - 26.4.2010, 12:31


--------------------
“Object-oriented design is the roman numerals of computing.” — Rob Pike
All software sucks
PM MAIL   Вверх
neutrino
Дата 28.4.2010, 23:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Gothic soul
****


Профиль
Группа: Модератор
Сообщений: 3041
Регистрация: 25.3.2002
Где: Верхняя Галилея, Кармиэль

Репутация: нет
Всего: 62



Панацеи нет. Плохо везде использовать нестрогую типизацию. Но иногда она спасает делая код легкочитаемым => легкоподдерживаемым. 
Код

        private static void DefineAcceptingStates(Dictionary<State, HashSet<State>> dStates)
        {
            foreach (var kvp in dStates)
            {
                foreach (State state in kvp.Value)
                {
                    if (state.IsAccepting)
                    {
                        kvp.Key.IsAccepting = true;
                        break;
                    }
                }
            }
        }



Код

        private static void DefineAcceptingStates(Dictionary<State, HashSet<State>> dStates)
        {
            foreach (KeyValuePair<State, HashSet<State>> kvp in dStates)
            {
                foreach (State state in kvp.Value)
                {
                    if (state.IsAccepting)
                    {
                        kvp.Key.IsAccepting = true;
                        break;
                    }
                }
            }
        }






--------------------
The truth comes from within ...

Покойся с миром, Vit 
PM MAIL WWW ICQ Skype GTalk   Вверх
qweqwe
Дата 29.4.2010, 05:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 55
Регистрация: 31.1.2007

Репутация: нет
Всего: 0



neutrino, вывод типов <> нестрогой типизации
PM MAIL   Вверх
Sentox
Дата 30.5.2012, 11:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


как то так
**


Профиль
Группа: Участник
Сообщений: 392
Регистрация: 27.1.2009
Где: Зимбабве

Репутация: нет
Всего: 7



k0rvin
Цитата

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


Это один из способов типизации, да же мануал по этому говорит что проверка происходит на тип.
Так же в PHP есть is_... int,string,array и instanceof что позволяет вручную делать проверку на типы.


PM MAIL   Вверх
k0rvin
Дата 30.5.2012, 13:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 442
Регистрация: 24.1.2010

Репутация: 1
Всего: 5



Цитата(Sentox @ 30.5.2012,  11:30)
Это один из способов типизации, да же мануал по этому говорит что проверка происходит на тип.
Так же в PHP есть is_... int,string,array и instanceof что позволяет вручную делать проверку на типы.

Конечно спасибо, капитан, но что ты этим хотел сказать?


--------------------
“Object-oriented design is the roman numerals of computing.” — Rob Pike
All software sucks
PM MAIL   Вверх
Sentox
Дата 30.5.2012, 14:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


как то так
**


Профиль
Группа: Участник
Сообщений: 392
Регистрация: 27.1.2009
Где: Зимбабве

Репутация: нет
Всего: 7



Цитата(k0rvin @ 30.5.2012,  13:53)
Цитата(Sentox @ 30.5.2012,  11:30)
Это один из способов типизации, да же мануал по этому говорит что проверка происходит на тип.
Так же в PHP есть is_... int,string,array и instanceof что позволяет вручную делать проверку на типы.

Конечно спасибо, капитан, но что ты этим хотел сказать?

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

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


И почему в обязательном порядке должно быть именно так
Цитата

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

Всё остально привёл просто в информативном поле.

Это сообщение отредактировал(а) Sentox - 30.5.2012, 14:19
PM MAIL   Вверх
Logo
Дата 31.5.2012, 01:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 694
Регистрация: 22.7.2008

Репутация: нет
Всего: 10



Хороший принцип нестрогой типизации есть в perl/perl6(все еще разрабатываемом)
Там в для базовых типов используется свой тип оператора.
Таким образом происходит приведение типов, и программист всегда явно указывает, что он имел ввиду.
Так, операции с числами/строками в perl 
Код

+    .    # сложение/конкатенация
<=>  cmp  # сравнение
==   eq   # равно (equal)
>    gt   # больше (greater to)
>=   ge   # больше или равно (greater or equal)


в perl5 из коробки вообще нет способов определить, является ли переменная строкой, или числом, да и это в подавляющем большинстве случаев и не нужно, т.к. операция определяется оператором.

в perl6 пошли еще дальше, теперь многие операторы, допускающие двойное использование, начинаются с соответствующего символа.
+ числовой контекст
~ строковый контекст (~ теперь оператор конкатенации)
! логический контекст

так, +| побитовое или для чисел, а ~| побитовое или для строк
В результате операторов в perl 6 довольно много http://glyphic.s3.amazonaws.com/ozone/mark...A4%20300dpi.jpg


PM MAIL   Вверх
k0rvin
Дата 31.5.2012, 07:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 442
Регистрация: 24.1.2010

Репутация: 1
Всего: 5



Цитата(Sentox @ 30.5.2012,  14:11)
Сказать хотел что оператор эквивалента проверяет и типы значений, что само по себе говорит о строгости типизации  именно этого оператора.

Нет, не говорит.

Добавлено через 1 минуту и 19 секунд
Цитата(Sentox @ 30.5.2012,  14:11)
И почему в обязательном порядке должно быть именно так

Потому что строгая типизация не разрешает неявное приведение типов.


--------------------
“Object-oriented design is the roman numerals of computing.” — Rob Pike
All software sucks
PM MAIL   Вверх
Nikolja
Дата 1.7.2012, 12:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 48
Регистрация: 24.2.2009
Где: Черкассы

Репутация: нет
Всего: -1



проголосовал за строгую типизацию
PM MAIL   Вверх
Karadul
Дата 24.7.2012, 06:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 378
Регистрация: 18.5.2006

Репутация: нет
Всего: 1



Цитата(Logo @  10.2.2010,  12:00 Найти цитируемый пост)
Можно пример подобных ошибок?

В питоне
Код

"s" + 1


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

Цитата(MAKCim @  10.2.2010,  13:42 Найти цитируемый пост)
юзайте аннотации и декораторы для проверки типов

Это только в тройке?

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

Edit: плохо прочитал заголовок темы. Конечно же строгая, перл и неявные преобразования str<->unicode в питоне двойке не нужны.

Это сообщение отредактировал(а) Karadul - 24.7.2012, 06:22
PM MAIL   Вверх
Karadul
Дата 24.7.2012, 06:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 378
Регистрация: 18.5.2006

Репутация: нет
Всего: 1



Цитата(nerezus @  26.4.2010,  07:09 Найти цитируемый пост)
может гвидо разрешит питонистам что-то типа того же, что есть в пхп для этого.
 Когда разрешит - тогда и поговорим. Сейчас этого нету.

Разрешил, но никто этим не пользуется. Срач здесь.
PM MAIL   Вверх
ТарасАтавин
Дата 16.9.2013, 09:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 370
Регистрация: 26.8.2013

Репутация: нет
Всего: нет



Цитата(Logo @  10.2.2010,  10:18 Найти цитируемый пост)
Что лучше? Какие преимущества у одной перед другой? 
В процедурной и алгоритмической парадигме лучше строгая явная, так как типы любых величин однозначно вытекают из задачи, а всякие приведения вроде округления действительного и присоединения к целому нулевой дробной части или не нужны вовсе, или чётко прописаны в алгоритме решения конкретной задачи, в объектно-ориентированной - смешанная: не строгая не явная для родственных классов и строгая явная для остальных, так как объект может быть экземпляром нескольких классов одновременно. Например амфибия - это автомобиль, или судно? А гидроплан - катер, или самолёт? А гигантский гидроэкраноплан Каспийский Монстр - самолёт, обычный корабль, или корабль на воздушной подушке? Здесь неясностей столько, что заранее определить классы всех объектов не всегда возможно, а привидения родственных классов предусмотреть не возможно почти ни когда.



--------------------
Не так всё плохо, как оно есть на самом деле.
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила ведения Религиозных войн
Smartov
1. Уважайте собеседника
2. Собеседник != враг
3. Старайтесь воздерживаться от тем вида "Windows Rulez" или "Linux Rulez"

С уважением, Smartov.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Религиозные войны | Следующая тема »


 




[ Время генерации скрипта: 0.4506 ]   [ Использовано запросов: 24 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.