Re[10]: Нет возможности использовать константные ссылки
От: prVovik Россия  
Дата: 13.11.06 14:00
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Здравствуйте, prVovik, Вы писали:


V>>Вот именно, я об этом и говорю. Но чем этот подход будет отличаться от const_cast'a? Ну да, чисто с эстетической точки зрения красивее, но суть таже.


VD>Вообще-то const_cast тут вообще ни с какого боку не уперся. Более того, он позволяет нарушить данный контракт. А это уже нарушение принципов типобезопасности.


Я точно также могу пометить, метод, который форматирует винчестер (удаляет все объекты, ваш вариант), как якобы безопасный с точки зрения инварианта типов программы (как ты предлагал помечать методы записи в лог) — и приплыли.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
лэт ми спик фром май харт
Re[6]: недостатки системы типов .NET
От: AndreiF  
Дата: 13.11.06 14:21
Оценка:
Здравствуйте, WolfHound, Вы писали:

WH>
WH>using SMByteEps = ConsoleApplication3.StateMachine<byte>.EpsTransition;
WH>


Плохо только, using придется писать для каждого типа и в каждом файле, где они используются.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[9]: недостатки системы типов .NET
От: AndrewVK Россия http://blogs.rsdn.org/avk
Дата: 13.11.06 14:22
Оценка:
Здравствуйте, AndreiF, Вы писали:

AF>Ну на самом деле в случае C++ отвтственность несет ни одна из этих сторон. Ответственность там несет компилятор.


Понятно, что компилятор. Ты просто не понял мысль — в С++ константность задается как свойство обрабатывающего метода, в шарпе как свойство самих данных. А уж кем конкретно это контроллируется, дело десятое.
... << RSDN@Home 1.2.0 alpha rev. 642>>
AVK Blog
Re[12]: недостатки системы типов .NET
От: WolfHound  
Дата: 13.11.06 14:37
Оценка:
Здравствуйте, AndreiF, Вы писали:

WH>>В твоей системе зависимоти не предсказуемые.

AF>С чего ты так решил?
Элементарно:
Допустим у нас есть некий класс типа такого:
public class Foo
{
    public mutable x : int;
    public mutable y : int;
    public mutable z : int;
    public static DoSome(..., fn : Foo -> Foo) : void
    {
        ....
    }
}

Это класс использует все кому не лень както так
    public static Asd(...) : void
    {
        ...
        Foo.DoSome(..., foo => {foo.x = foo.y - foo.z; foo});
        ...
    }
    public static Qwe(...) : void
    {
        ...
        Foo.DoSome(..., foo => {foo.x = foo.y + foo.z; foo});
        ...
    }

Наш мегакомпилятор пронюхал что все работают с Foo как с value типами и все под это дело заоптимизировал.

Теперь вдруг появляется какойто левый код в котором написали чтото типа такого:
    public static Zxc(...) : List<Foo>
    {
        ...
        def fooList = List<Foo>();
        ...
        Foo.DoSome(..., foo => {fooList.Add(foo); foo});
        ...
        fooList
    }

Те вдруг у нас начали работать с Foo как reference типом ибо в по факту у него именно такая семантика.
И по цепной реакции у нас все посыпалось...
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[16]: недостатки системы типов .NET
От: _FRED_ Черногория
Дата: 13.11.06 15:01
Оценка:
Здравствуйте, VladD2, Вы писали:

kan>>Константы времени компиляции в С++ сущность совсем другая, и со словом const они почти никак не связаны.


VD>Это не так.


Гхм…
Автор: c-smile
Дата: 10.01.06
... << RSDN@Home 1.2.0 alpha rev. 665>>
Now playing: «Тихо в лесу…»
Help will always be given at Hogwarts to those who ask for it.
Re[10]: недостатки системы типов .NET
От: Андрей Хропов Россия  
Дата: 13.11.06 16:59
Оценка: +2
Здравствуйте, VladD2, Вы писали:

VD>Хотя согласен, что идея помечать методы (да и классы) как неизменяемые — это хорошая идея. И надо будет ее реализовать.


На самом деле правильная идея (которая хорошо ложится на философию Немерле) как раз делать их (классы и методы) по умолчанию неизменяемыми, а как раз помечать изменяемые случаи!

А то ведь в основном людям лень дополнительно чего-то дописывать.
поэтому Nemerle провоцирует делать неизменяемые переменные (чтобы не писать mutable),
а C++ — изменяемые (чтобы не писать const) .
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[13]: недостатки системы типов .NET
От: AndreiF  
Дата: 14.11.06 03:47
Оценка:
Здравствуйте, WolfHound, Вы писали:

WH>Те вдруг у нас начали работать с Foo как reference типом ибо в по факту у него именно такая семантика.

WH>И по цепной реакции у нас все посыпалось...

Ничего не посыпалось. Никто не запрещает использовать один и тот же тип как по ссылке, так и по значению в зависимости от контекста.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[10]: недостатки системы типов .NET
От: AndreiF  
Дата: 14.11.06 03:47
Оценка:
Здравствуйте, AndrewVK, Вы писали:

AVK>Понятно, что компилятор. Ты просто не понял мысль — в С++ константность задается как свойство обрабатывающего метода, в шарпе как свойство самих данных. А уж кем конкретно это контроллируется, дело десятое.


В С++ никто не запрещает создавать неизменяемые типы, если есть такая необходимость. А вот создать константную ссылку в шарпе нельзя. В этом и есть главное различие
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[17]: недостатки системы типов .NET
От: VladD2 Российская Империя www.nemerle.org
Дата: 14.11.06 03:48
Оценка:
Здравствуйте, _FRED_, Вы писали:

_FR>Гхм…
Автор: c-smile
Дата: 10.01.06


И это тоже.
При некоторых обстаятельствах компилятор порождает именно константы.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[11]: Нет возможности использовать константные ссылки
От: VladD2 Российская Империя www.nemerle.org
Дата: 14.11.06 03:48
Оценка:
Здравствуйте, prVovik, Вы писали:

V>Я точно также могу пометить, метод, который форматирует винчестер (удаляет все объекты, ваш вариант), как якобы безопасный с точки зрения инварианта типов программы (как ты предлагал помечать методы записи в лог) — и приплыли.


Это твои проблемы.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[6]: недостатки системы типов .NET
От: VladD2 Российская Империя www.nemerle.org
Дата: 14.11.06 03:48
Оценка: +2
Здравствуйте, AndrewVK, Вы писали:

AVK>>>Как раз очень правильно. Потому что утилитный метод лучше делать статическим.


AF>>А почему тогда у List<T> его сделали экземплярным?


AVK>Потому что пиип.


Лично я на это дело сморю так. Если в языке есть методы расширения и IDE их понимает, то возможно действительно лучше оформлять утилитарные методы как статические методы расширения. Но если мы имеем дело с языком не поддерживающим методы расширения (C# 1-2), то лучше уж сделать их экземплярными просто для удобства и краткости. Так что ребята писавшие List<T> поступили совершенно верно.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[7]: недостатки системы типов .NET
От: VladD2 Российская Империя www.nemerle.org
Дата: 14.11.06 03:48
Оценка: 14 (1)
Здравствуйте, AndreiF, Вы писали:

AF>Здравствуйте, WolfHound, Вы писали:


WH>>
WH>>using SMByteEps = ConsoleApplication3.StateMachine<byte>.EpsTransition;
WH>>


AF>Плохо только, using придется писать для каждого типа и в каждом файле, где они используются.


Тогда переходи на Nemerle . В нем объявляешь:
type SMByteEps = ConsoleApplication3.StateMachine<byte>.EpsTransition;

и используй SMByteEps в любом месте.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[11]: Нет возможности использовать константные ссылки
От: AndreiF  
Дата: 14.11.06 03:50
Оценка:
Здравствуйте, prVovik, Вы писали:

V>Я точно также могу пометить, метод, который форматирует винчестер (удаляет все объекты, ваш вариант), как якобы безопасный с точки зрения инварианта типов программы (как ты предлагал помечать методы записи в лог) — и приплыли.


Ты точно так же можешь назвать метод форматирования винчестера PrintDocument или ValidateData, и потом вызвавший этот метод программист очень сильно удивится. И что ты этим докажешь?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[7]: недостатки системы типов .NET
От: Sinclair Россия https://github.com/evilguest/
Дата: 14.11.06 05:07
Оценка:
Здравствуйте, AndrewVK, Вы писали:
AVK>Но в таком раскладе вернемся к тому, от чего пытались уйти — придется делать две реализации одного и того же метода — типизированную и нетипизированную.
Ага. Несмотря на тривиальную реализацию, это не вполне удобно.
1.2.0 alpha rev. 655
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[12]: Нет возможности использовать константные ссылки
От: prVovik Россия  
Дата: 14.11.06 06:39
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Здравствуйте, prVovik, Вы писали:


V>>Я точно также могу пометить, метод, который форматирует винчестер (удаляет все объекты, ваш вариант), как якобы безопасный с точки зрения инварианта типов программы (как ты предлагал помечать методы записи в лог) — и приплыли.


VD>Это твои проблемы.


Точно. Это проблемы программиста. Как и в случае с const_cast'ом.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
лэт ми спик фром май харт
Re[12]: Нет возможности использовать константные ссылки
От: prVovik Россия  
Дата: 14.11.06 06:39
Оценка:
Здравствуйте, AndreiF, Вы писали:

AF>Здравствуйте, prVovik, Вы писали:


V>>Я точно также могу пометить, метод, который форматирует винчестер (удаляет все объекты, ваш вариант), как якобы безопасный с точки зрения инварианта типов программы (как ты предлагал помечать методы записи в лог) — и приплыли.


AF>Ты точно так же можешь назвать метод форматирования винчестера PrintDocument или ValidateData, и потом вызвавший этот метод программист очень сильно удивится. И что ты этим докажешь?


То, что это будет аналог const_cast'a. Теже яйца, вид сбоку.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
лэт ми спик фром май харт
Re[11]: недостатки системы типов .NET
От: _FRED_ Черногория
Дата: 14.11.06 06:54
Оценка:
Здравствуйте, Андрей Хропов, Вы писали:

VD>>Хотя согласен, что идея помечать методы (да и классы) как неизменяемые — это хорошая идея. И надо будет ее реализовать.


АХ>На самом деле правильная идея (которая хорошо ложится на философию Немерле) как раз делать их (классы и методы) по умолчанию неизменяемыми, а как раз помечать изменяемые случаи!


Что значит "делать … классы … неизменяемыми" Разве, если объявить все поля класса как readonly (в C#), он не станет сам по себе "неизменяемым"?

АХ>А то ведь в основном людям лень дополнительно чего-то дописывать.


Да и неизменяемые методы нужны, ИМХО, _только_ для изменяемых классов (в неизменяемых классах не может быть изменяемых методов по определению), а классы — по умолчанию неизменяемы, => в изменяемых классах довольно часто надо будет делать методы изменяемыми в то время, как в неизменяемых классах — никогда. Получается, что было бы удобнее всего, если бы в изменяемых классах по-умолчанию методы были бы изменяемыми.

АХ>поэтому Nemerle провоцирует делать неизменяемые переменные (чтобы не писать mutable),


Дело, скорее всего, не в Немерле, а в концепции (функционального программирования), диктуемой языком. Я, когда начал использовать Linq и обработку последовательностей через класс Sequence, так же заметил за собой маниакальное пристрастие к отметке полей класса как readonly и попытке построить архитектуру так, что бы количество [public] set-терров свойств свести к минимуму.
... << RSDN@Home 1.2.0 alpha rev. 665>>
Now playing: «Тихо в лесу…»
Help will always be given at Hogwarts to those who ask for it.
Re[13]: Нет возможности использовать константные ссылки
От: AndreiF  
Дата: 14.11.06 07:47
Оценка:
Здравствуйте, prVovik, Вы писали:

V>То, что это будет аналог const_cast'a. Теже яйца, вид сбоку.


Нет, ты просто не понимаешь. От преднамеренных диверсий, равно как и от непробиваемой глупости (которая часто бывает намного хуже по своим последствиям), никакая защита не даст гарантий. Но это не значит, что на защиту надо вообще забить.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[8]: недостатки системы типов .NET
От: _FRED_ Черногория
Дата: 14.11.06 08:00
Оценка:
Здравствуйте, VladD2, Вы писали:

AF>>Плохо только, using придется писать для каждого типа и в каждом файле, где они используются.


VD>Тогда переходи на Nemerle . В нем объявляешь:

VD>type SMByteEps = ConsoleApplication3.StateMachine<byte>.EpsTransition;

VD>и используй SMByteEps в любом месте.

Блин, вот ведь: всё, как надо :о) А этот type виден на уровне исходников, в пределах сборки или каким-то образом "экспортируется"?
... << RSDN@Home 1.2.0 alpha rev. 665>>
Now playing: «Тихо в лесу…»
Help will always be given at Hogwarts to those who ask for it.
Re[7]: недостатки системы типов .NET
От: konsoletyper Россия https://github.com/konsoletyper
Дата: 14.11.06 08:51
Оценка: +1
Здравствуйте, VladD2, Вы писали:

VD>Лично я на это дело сморю так. Если в языке есть методы расширения и IDE их понимает, то возможно действительно лучше оформлять утилитарные методы как статические методы расширения. Но если мы имеем дело с языком не поддерживающим методы расширения (C# 1-2), то лучше уж сделать их экземплярными просто для удобства и краткости. Так что ребята писавшие List<T> поступили совершенно верно.


Ага, а потом, если нужно сделать свой нестандартный IList, то сортировку придётся писать отдельно (хорошо, что хоть PowerCollections помогает). Просто это бессмысленно. Неужели было тяжело сделать статический класс с методом Sort, а затем в List просто написать дополнитльный метод?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.