Re[4]: Можно ли полностью отказаться от динамически типизиро
От: nikov США http://www.linkedin.com/in/nikov
Дата: 19.11.10 00:42
Оценка: 9 (1) +1
Здравствуйте, hardcase, Вы писали:

H>Круто А для чего это можно использовать?


На мой взгляд, это нечто среднее между интерфейсами и dynamic.
В отличие от интерфейсов, реализацию которых нужно раз и навсегда указывать в декларации класса, здесь сигнатуры и имена требуемых методов задаются по месту использования, и к структурному типу можно привести любой тип, у которого есть указанные (или совместимые) сигнатуры.
И в отличие от dynamic, который позволяет вызвать вообще что угодно (с выбросом исключения в рантайме, если подходящего метода не оказалось), сохраняется полный статический контроль (хотя, конечно, всегда можно сделать явное приведение к structural типу с любыми сигнатурами, и получить поведение, полностью аналогичное dynamic — с возможным исключением при приведении типа в рантайме).
Re: Можно ли полностью отказаться от динамически типизирован
От: FR  
Дата: 18.11.10 16:05
Оценка: :))
Здравствуйте, dotneter, Вы писали:

D>Что я упустил? Можно ли всетаки отказаться от дт?

D>Хотелось бы еще услышать стороников дт, какие фичи в дт считаются особенно полезны.

Нельзя в результате просто получим работающую иллюстрацию разновидности десятого правила Гринспена:

Любая достаточно сложная программа на Си или Фортране содержит заново написанную, неспецифицированную, глючную и медленную
реализацию половины языка Common Lisp.


С заменой "Common Lisp" на "динамику".

Что та же например явишная любовь к XML уже и демонстрирует.
Re[8]: Можно ли полностью отказаться от динамически типизиро
От: FR  
Дата: 20.11.10 04:29
Оценка: 17 (1)
Здравствуйте, nikov, Вы писали:

N>Очень интересно. То есть структурный тип автоматически выводится из того, какие методы с какими параметрами мы вызвали, и максимально генерализуется?


Да.

N>А что будет, если я напишу так?

N>
N>let put o = o#put o
N>


Если не меняя ничего больше, то будет ошибка на первом применении функции put то есть на строке let _ = put o1

Error: This expression has type < put : unit >
       but an expression was expected of type < put : 'a -> 'b; .. > as 'a
       Types for method put are incompatible


Если же к методам добавить параметр

method put x = printf "O2\n"


то все нормально откомпилируется и запустится.

В общем в отличии от динамики вся типизация работает.
Re[2]: Можно ли полностью отказаться от динамически типизиро
От: dotneter  
Дата: 18.11.10 09:13
Оценка: :)
Здравствуйте, Wolverrum, Вы писали:

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


D>>Можно ли полностью отказаться от динамически типизированых

W>в 4й шарп всадили динамическую типизацию (dynamic)/ Видать, без нее — никак
Ну шарп не отличается умом и сообразительностью, всадили то что дешевле было.
... << RSDN@Home 1.2.0 alpha 4 rev. 1111>>
Talk is cheap. Show me the code.
Re: Можно ли полностью отказаться от динамически типизирован
От: Sinix  
Дата: 18.11.10 09:35
Оценка: :)
Здравствуйте, dotneter, Вы писали:

D>1) Не нужно явно указывать тип

Для статики это вредно — лучше явно указать компилятору, что ты от него хочешь, чем отлавливать слишком умный компилятор в рантайме.

D>2) Утиная типизация

Зачем? Шобыбыло?

D>3) Работа с динамическими данными

Для интеропа с DLR есть dynamic.

D>4) Ну и например изменение классов в рантайме

Зачем? Шобыбыло? Тогда — ExpandoObject

Я пока не видел явной пользы от динамика, перевешивающей все прелести статической типизации. Явное исключение — всякие DOM для документов с заранее неизвестной схемой.
Re[3]: Можно ли полностью отказаться от динамически типизиро
От: Wolverrum Ниоткуда  
Дата: 18.11.10 09:50
Оценка: +1
Здравствуйте, Sinix, Вы писали:

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


W>>в 4й шарп всадили динамическую типизацию (dynamic)/ Видать, без нее — никак

S>Без неё — как. Dynamic упрощает писанину там, где статикой не обойтись
Боян (для меня)
Re[5]: Можно ли полностью отказаться от динамически типизиро
От: hardcase Пират http://nemerle.org
Дата: 18.11.10 20:44
Оценка: +1
Здравствуйте, WolfHound, Вы писали:

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

WH>Те вывод типов не создает проблем совсем.

Как человек, который поддерживет хренову тучу кода на Nemerle я готов побить авторов креативов, в которых на протяжении пары-тройки моих не самых маленьких экранов может не встречается ни одной аннотации типов.
Так что все хорошо в меру.
/* иЗвиНите зА неРовнЫй поЧерК */
Re[4]: Можно ли полностью отказаться от динамически типизиро
От: FR  
Дата: 19.11.10 06:02
Оценка: +1
Здравствуйте, hardcase, Вы писали:


H>Круто А для чего это можно использовать?


Ну в одном из прародителей Немерле — OCaml все записи и объекты структурно типизированы и
соответственно функции работающие с ними обобщенные без всяких генериков или шаблонов.
Re[5]: Можно ли полностью отказаться от динамически типизиро
От: hardcase Пират http://nemerle.org
Дата: 19.11.10 11:11
Оценка: +1
Здравствуйте, FR, Вы писали:

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



H>>Круто А для чего это можно использовать?


FR>Ну в одном из прародителей Немерле — OCaml все записи и объекты структурно типизированы и

FR>соответственно функции работающие с ними обобщенные без всяких генериков или шаблонов.

Это понятно. Проблема лишь в том, что система типов .NET (как и JVM) не слишком подходит для реализации структурной типизации, которая, как я понял, мощнее чем классическое ООП.
/* иЗвиНите зА неРовнЫй поЧерК */
Re[6]: Можно ли полностью отказаться от динамически типизиро
От: D. Mon Великобритания http://thedeemon.livejournal.com
Дата: 19.11.10 16:59
Оценка: +1
Здравствуйте, nikov, Вы писали:

FR>>Ну в одном из прародителей Немерле — OCaml все записи и объекты структурно типизированы и

FR>>соответственно функции работающие с ними обобщенные без всяких генериков или шаблонов.

N>А каким образом структурные типы позволяют заменить дженерики? Как там можно абстрагироваться от какого-нибудь конкретного типа в сигнатуре?


Там абстрагирование не от "какого-нибудь конкретного типа", а более широкое — от неиспользуемых деталей. Например, если у объектов разных типов есть какие-то одинаковые методы, то можно с ними одинаково работать без объявления отдельного интерфейса, при том что типы тех объектов различны.
Re[8]: Можно ли полностью отказаться от динамически типизиро
От: D. Mon Великобритания http://thedeemon.livejournal.com
Дата: 19.11.10 18:28
Оценка: +1
Здравствуйте, nikov, Вы писали:

N>А как это решается со structural типами без дженериков?


Это просто разные задачи, одно другое не заменяет. Речь про то, что грубо говоря x.foo + x.bar будет работать для любых структур, имеющих подходящие foo и bar, какие бы другие поля там ни были. Абстрагируемся не от типа конкретного поля, а от типов всех неупомянутых полей.
А то, что делают генерики, в Окамле делают параметры типов.
Re[7]: Можно ли полностью отказаться от динамически типизиро
От: VladD2 Российская Империя www.nemerle.org
Дата: 19.11.10 21:17
Оценка: +1
Здравствуйте, nikov, Вы писали:

N>Возможно такое же решение, как для dynamic в DLR: reflection + runtime codegen + кеширование. Да, некоторое замедление будет. Но в некоторых сценариях удобство перевешивает. И уж подавно во многих сценариях structural типы могли бы потеснить dynamic.


Мне кажется что такие вещи нужно на уровне рантайма реализовывать. Тогда и "замедления" (что в у простого народа тормозами зовется) не было бы.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[8]: Можно ли полностью отказаться от динамически типизиро
От: VladD2 Российская Империя www.nemerle.org
Дата: 19.11.10 21:21
Оценка: +1
Здравствуйте, nikov, Вы писали:

N>Очень интересно. То есть структурный тип автоматически выводится из того, какие методы с какими параметрами мы вызвали, и максимально генерализуется?


ОКамл выводит наиболее общий тип, если не ошибаюсь.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Можно ли полностью отказаться от динамически типизированых я
От: dotneter  
Дата: 18.11.10 08:54
Оценка:
Днем и ночью меня мучает данный вопрос.
Отказаться — это с минимальными потерями заменить все полезные фичи динамики на статику.
Так как на динамике я ничего серьезного не писал, то о полезности того или иного имею достаточно смутное представление.
1) Не нужно явно указывать тип
x = 1
Вроде вывод типов в большенство своем должен решить эту проблему
x = 1
Там где все же придется явто указывать, скорее всего не большая потеря.
2) Утиная типизация
def foo(x)
x.bar + 1
Структурные типы вроде должны эту проблему решать

x::{bar::Num}
3) Работа с динамическими данными
p = getPersonJson(1)
print p.Name
Самое правильное это конечно было бы иметь какое то описание для источника по которому можно было бы сгенерировать обертку, eсли описания нет, тогда выглядет не проблемой использовать те же структурные типы
p::{Name::String}
4) Ну и например изменение классов в рантайме
class Person
property Name
p = Person()
p.Age = 20
Опять же включая воображение, можно что нибудь придумать, например при компиляции p::Persoin,{Age:Int}, или вообще так не делать.

Так как языка с такими фичами скорее всего не сущетсвут, то нельзя с увереность сказать что это все может взлететь.
Соответственно два вопроса.
Что я упустил? Можно ли всетаки отказаться от дт?
Хотелось бы еще услышать стороников дт, какие фичи в дт считаются особенно полезны.
... << RSDN@Home 1.2.0 alpha 4 rev. 1111>>
Talk is cheap. Show me the code.
Re: Можно ли полностью отказаться от динамически типизирован
От: Wolverrum Ниоткуда  
Дата: 18.11.10 09:01
Оценка:
Здравствуйте, dotneter, Вы писали:

D>Можно ли полностью отказаться от динамически типизированых

в 4й шарп всадили динамическую типизацию (dynamic)/ Видать, без нее — никак
Re: Можно ли полностью отказаться от динамически типизирован
От: любой  
Дата: 18.11.10 09:09
Оценка:
Здравствуйте, dotneter, Вы писали:

...

Сделали бы лучше динамическую генерацию кода. А динамическую типизацию — на помойку.
художников никогда не обижал
Re[2]: Можно ли полностью отказаться от динамически типизиро
От: Sinix  
Дата: 18.11.10 09:38
Оценка:
Здравствуйте, Wolverrum, Вы писали:

W>в 4й шарп всадили динамическую типизацию (dynamic)/ Видать, без нее — никак

Без неё — как. Dynamic упрощает писанину там, где статикой не обойтись

In most cases, it functions like it has type object. At compile time, an element that is typed as dynamic is assumed to support any operation. Therefore, you do not have to be concerned about whether the object gets its value from a COM API, from a dynamic language such as IronPython, from the HTML Document Object Model (DOM), from reflection, or from somewhere else in the program. However, if the code is not valid, errors are caught at run time.

Re[2]: Можно ли полностью отказаться от динамически типизиро
От: dotneter  
Дата: 18.11.10 09:58
Оценка:
Здравствуйте, Sinix, Вы писали:

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


D>>1) Не нужно явно указывать тип

S>Для статики это вредно — лучше явно указать компилятору, что ты от него хочешь, чем отлавливать слишком умный компилятор в рантайме.
Что значит вредно? var вреден? Про рантайм тоже не понятно.

D>>2) Утиная типизация

S>Зачем? Шобыбыло?
Например у вас есть два класс A B с набором полей Foo Bar, и вы с ним хотите что то сделать
DoSomething(list)
return list.Select(x => x.Foo + x.Bar);
Что будете делать?

D>>3) Работа с динамическими данными

S>Для интеропа с DLR есть dynamic.
Вот от него и хочется отказаться.

D>>4) Ну и например изменение классов в рантайме

S>Зачем? Шобыбыло? Тогда — [url=http://msdn.microsoft.com/en-us/magazine/ff796227.aspx
S>]ExpandoObject[/url]
Суть поста как разв в попытке понять, можно ли от этого всего отказаться. Но эта фича, да, чисто для галочки.

S>Явное исключение — всякие DOM для документов с заранее неизвестной схемой.

Пожете привести пример, зачем там вообще нужна какая либо типизация?
... << RSDN@Home 1.2.0 alpha 4 rev. 1111>>
Talk is cheap. Show me the code.
Re[3]: Можно ли полностью отказаться от динамически типизиро
От: Sinix  
Дата: 18.11.10 11:28
Оценка:
Здравствуйте, dotneter, Вы писали:

S>>Для статики это вредно — лучше явно указать компилятору, что ты от него хочешь, чем отлавливать слишком умный компилятор в рантайме.

D>Что значит вредно? var вреден? Про рантайм тоже не понятно.
Чуть-чуть обсуждалось тут
Автор: Ziaw
Дата: 29.04.10
.
Сам по себе не вреден, но для долгоживущего кода лучше var не использовать.

D>>>2) Утиная типизация

S>>Зачем? Шобыбыло?
D>Например у вас есть два класс A B с набором полей Foo Bar, и вы с ним хотите что то сделать
DoSomething(list)
{
  return list.Select(x => x.Foo + x.Bar); 
}

D>Что будете делать?

Убъю архитектора. Чтобы не разводил багодром на ровном месте. Если подобное будет действительно оправдано — буду использовать интерфейсы/обёртки, реализующие интерфейсы.

D>>>3) Работа с динамическими данными

S>>Для интеропа с DLR есть dynamic.
D>Вот от него и хочется отказаться.
Зачем?

D>>>4) Ну и например изменение классов в рантайме

S>>Зачем? Шобыбыло? Тогда — [url=http://msdn.microsoft.com/en-us/magazine/ff796227.aspx
S>>]ExpandoObject[/url]
D>Суть поста как разв в попытке понять, можно ли от этого всего отказаться. Но эта фича, да, чисто для галочки.
Можно. Если формализовать задачу вместо сиюминутного решения.

S>>Явное исключение — всякие DOM для документов с заранее неизвестной схемой.

D>Пожете привести пример, зачем там вообще нужна какая либо типизация?
Чтобы проверять схему(если она известна на этапе компиляции). Не знаю как вам, но мне бы сэкономило немало нервных клеток

Кстати, полная цытата меня:

Я пока не видел явной пользы от динамика, перевешивающей все прелести статической типизации. Явное исключение — всякие DOM для документов с заранее неизвестной схемой.

Вам не кажется, что я говорил как раз об обратном — что dynamic хорош для работы с DOM?
Re[4]: Можно ли полностью отказаться от динамически типизиро
От: WolfHound  
Дата: 18.11.10 12:01
Оценка:
Здравствуйте, Sinix, Вы писали:

D>>Что значит вредно? var вреден? Про рантайм тоже не понятно.

S>Чуть-чуть обсуждалось тут
Автор: Ziaw
Дата: 29.04.10
.

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

Как человек который пишет на немерле где вывод типов нааамного круче чем var могу сказать что данное утверждение не верно.
Те вывод типов не создает проблем совсем.
За то очень сильно сокращает код и убирает массу визуального шума.
... << RSDN@Home 1.2.0 alpha 4 rev. 1472>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[4]: Можно ли полностью отказаться от динамически типизиро
От: dotneter  
Дата: 18.11.10 12:04
Оценка:
Здравствуйте, Sinix, Вы писали:

S>Убъю архитектора. Чтобы не разводил багодром на ровном месте. Если подобное будет действительно оправдано — буду использовать интерфейсы/обёртки, реализующие интерфейсы.

Вот что бы на каждый чих не создавать интерфейсы, и существую ут.

S>Зачем?

Вы не знаете какие плюсы у статика по сравнению с динамиком?

D>>>>4) Ну и например изменение классов в рантайме

S>>>Зачем? Шобыбыло? Тогда — [url=http://msdn.microsoft.com/en-us/magazine/ff796227.aspx
S>>>]ExpandoObject[/url]
D>>Суть поста как разв в попытке понять, можно ли от этого всего отказаться. Но эта фича, да, чисто для галочки.
S>Можно. Если формализовать задачу вместо сиюминутного решения.
Да, но есть задачи для которых сиюминутные решения предпочтительны(прототипирование, быстро сделать что нибудь полезное но не особо важное).

S>Чтобы проверять схему(если она известна на этапе компиляции). Не знаю как вам, но мне бы сэкономило немало нервных клеток



S>Кстати, полная цытата меня:

S>

S>Я пока не видел явной пользы от динамика, перевешивающей все прелести статической типизации. Явное исключение — всякие DOM для документов с заранее неизвестной схемой.

S>Вам не кажется, что я говорил как раз об обратном — что dynamic хорош для работы с DOM?
Я вот как раз и пытаюсь понять чем он так хорош, если интерфейс известен заранее, но не лучше ли сгенерировать ст обертку? Если же интерфейс не известен, но вам там динамик мало чем поможет. Давайте всетаки расмотрим какой нибудь конкретный пример.
... << RSDN@Home 1.2.0 alpha 4 rev. 1111>>
Talk is cheap. Show me the code.
Re: Можно ли полностью отказаться от динамически типизирован
От: netch80 Украина http://netch80.dreamwidth.org/
Дата: 18.11.10 17:52
Оценка:
Здравствуйте, dotneter, Вы писали:

D>Днем и ночью меня мучает данный вопрос.


Не верю. Про ночь, по крайней мере.

Особенно после того, как только что отшумела дискуссия
Автор: rsdn2010
Дата: 10.10.10
.

D>Что я упустил? Можно ли всетаки отказаться от дт?


Можно. В камне жизни нет, только кто-то слово из трёх иероглифов нацарапал.
The God is real, unless declared integer.
Re: Можно ли полностью отказаться от динамически типизирован
От: MasterZiv СССР  
Дата: 18.11.10 18:16
Оценка:
On 18.11.2010 11:54, dotneter wrote:

> 1) Не нужно явно указывать тип

> 2) Утиная типизация
> 3) Работа с динамическими данными
> 4) Ну и например изменение классов в рантайме
> Так как языка с такими фичами скорее всего не сущетсвут, то нельзя с увереность
> сказать что это все может взлететь.

Существуют языки с такими фичами. Common Lisp, Python
как минимум.

> Что я упустил?


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

Можно ли всетаки отказаться от дт?

Так в языке это либо есть, либо нет.
Posted via RSDN NNTP Server 2.1 beta
Re[2]: Можно ли полностью отказаться от динамически типизиро
От: dotneter  
Дата: 18.11.10 18:30
Оценка:
Здравствуйте, MasterZiv, Вы писали:

MZ>Существуют языки с такими фичами. Common Lisp, Python

MZ>как минимум.
Имелся в виду ст язык.
... << RSDN@Home 1.2.0 alpha 4 rev. 1111>>
Talk is cheap. Show me the code.
Re: Можно ли полностью отказаться от динамически типизирован
От: hardcase Пират http://nemerle.org
Дата: 18.11.10 20:41
Оценка:
Здравствуйте, dotneter, Вы писали:

D>Так как языка с такими фичами скорее всего не сущетсвут, то нельзя с увереность сказать что это все может взлететь.


Казалось бы...
/* иЗвиНите зА неРовнЫй поЧерК */
Re[2]: Можно ли полностью отказаться от динамически типизиро
От: nikov США http://www.linkedin.com/in/nikov
Дата: 18.11.10 23:00
Оценка:
Здравствуйте, hardcase, Вы писали:

H>Казалось бы...


В Nemerle разве есть structural typing?
Вот в Scala точно есть (с поддержкой всевозможного variance). Наподобие такого:

val x : { def foo[T](y : T) : String; val y : Integer }
val y : { def foo[T <: C](y : T) : Any; }

y = x
y.foo(new C)
Re[3]: Можно ли полностью отказаться от динамически типизиро
От: hardcase Пират http://nemerle.org
Дата: 18.11.10 23:23
Оценка:
Здравствуйте, nikov, Вы писали:

N>Вот в Scala точно есть (с поддержкой всевозможного variance). Наподобие такого:


N>
N>val x : { def foo[T](y : T) : String; val y : Integer }
N>val y : { def foo[T <: C](y : T) : Any; }

N>y = x
N>y.foo(new C)
N>


Круто А для чего это можно использовать?
/* иЗвиНите зА неРовнЫй поЧерК */
Re[5]: Можно ли полностью отказаться от динамически типизиро
От: nikov США http://www.linkedin.com/in/nikov
Дата: 19.11.10 16:41
Оценка:
Здравствуйте, FR, Вы писали:

FR>Ну в одном из прародителей Немерле — OCaml все записи и объекты структурно типизированы и

FR>соответственно функции работающие с ними обобщенные без всяких генериков или шаблонов.

А каким образом структурные типы позволяют заменить дженерики? Как там можно абстрагироваться от какого-нибудь конкретного типа в сигнатуре?
Re[6]: Можно ли полностью отказаться от динамически типизиро
От: nikov США http://www.linkedin.com/in/nikov
Дата: 19.11.10 16:46
Оценка:
Здравствуйте, hardcase, Вы писали:

H>Это понятно. Проблема лишь в том, что система типов .NET (как и JVM) не слишком подходит для реализации структурной типизации


Возможно такое же решение, как для dynamic в DLR: reflection + runtime codegen + кеширование. Да, некоторое замедление будет. Но в некоторых сценариях удобство перевешивает. И уж подавно во многих сценариях structural типы могли бы потеснить dynamic.
Re[7]: Можно ли полностью отказаться от динамически типизиро
От: nikov США http://www.linkedin.com/in/nikov
Дата: 19.11.10 17:30
Оценка:
Здравствуйте, D. Mon, Вы писали:

DM>Там абстрагирование не от "какого-нибудь конкретного типа", а более широкое — от неиспользуемых деталей. Например, если у объектов разных типов есть какие-то одинаковые методы, то можно с ними одинаково работать без объявления отдельного интерфейса, при том что типы тех объектов различны.


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

interface IConverter<T>
{
    T Convert(T x);
}

class IntConverter : IConverter<int>
{
    public int Convert(int x)
    {
        return x * 2;
    }
}

class StringConverter : IConverter<string>
{
    public string Convert(string x)
    {
        return x.ToUpper();
    }
}

static void Foo<T>(IConverter<T> conv, T x)
{
    T y = conv.Convert(x); // здесь может быть вызван и IntConverter.Convert(int), и StringConverter.Convert(string)
}


А как это решается со structural типами без дженериков?
Re[6]: Можно ли полностью отказаться от динамически типизиро
От: FR  
Дата: 19.11.10 19:21
Оценка:
Здравствуйте, nikov, Вы писали:


N>А каким образом структурные типы позволяют заменить дженерики? Как там можно абстрагироваться от какого-нибудь конкретного типа в сигнатуре?


Функции принимающие структурный тип автоматически становятся обобщенными, то есть принимают любой структурный тип имеющий нужные
для данной функции сигнатуры, вот простейшие пример на объектах:
open Printf

let o1 = object 
  method put = printf "O1\n"
  end
  
  
let o2 = object 
  method put = printf "O2\n"
  end


let put o = o#put


let _  = put o1
let _  = put o2


o1 и o2 анонимные и никак ни связанные друг с другом объекты. Функция put может работать с любым объектом имеющим метод
put с подходящей сигнатурой. Тип у этой функции обобщенный: value put : < put : 'a; .. > -> 'a = <fun>
Re[7]: Можно ли полностью отказаться от динамически типизиро
От: nikov США http://www.linkedin.com/in/nikov
Дата: 19.11.10 20:20
Оценка:
Здравствуйте, FR, Вы писали:

FR>o1 и o2 анонимные и никак ни связанные друг с другом объекты. Функция put может работать с любым объектом имеющим метод

FR>put с подходящей сигнатурой. Тип у этой функции обобщенный: value put : < put : 'a; .. > -> 'a = <fun>

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

А что будет, если я напишу так?
let put o = o#put o
Re[6]: Можно ли полностью отказаться от динамически типизиро
От: VladD2 Российская Империя www.nemerle.org
Дата: 19.11.10 21:08
Оценка:
Здравствуйте, hardcase, Вы писали:

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

H>Так что все хорошо в меру.

Это все потому что интерграция не работает с компилятором. Если поддержка IDE есть, то проблем нет.

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

В общем, с IDE — полет нормальный. Без нее конечно иногда трудновато бывает. Особенно когда имена переменных и функций в стиле add_sr встречаются.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[5]: Можно ли полностью отказаться от динамически типизиро
От: VladD2 Российская Империя www.nemerle.org
Дата: 19.11.10 21:16
Оценка:
Здравствуйте, FR, Вы писали:

FR>Ну в одном из прародителей Немерле — OCaml все записи и объекты структурно типизированы и

FR>соответственно функции работающие с ними обобщенные без всяких генериков или шаблонов.

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

Так что "Никогда не говори никогда!".
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[6]: Можно ли полностью отказаться от динамически типизиро
От: FR  
Дата: 20.11.10 04:36
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>В немерле их тен только потому, что система типов дотнета для этого плохо подходит. В прочем с генерацией промежуточных оберток это возможно. Более того уже есть реализация на макросах — ObjectExpressions.


Влад, поворчу, у вас с WolfHound вырабаталась дурная привычка давать ссылки уже даже не на исходники а в дебри svn.
Мне вот влом с таким разбираться и 99% тем кто не знает немерли наверняка также.
Но я потыкал и ничего кроме инициализации объектов похожей на на окамловские записи не увидел.

VD>Так что "Никогда не говори никогда!".


Ну тут как раз тот случай когда можно, без поддержки рантайма толку от структурных типов мало.
Re[7]: Можно ли полностью отказаться от динамически типизиро
От: VladD2 Российская Империя www.nemerle.org
Дата: 21.11.10 02:16
Оценка:
Здравствуйте, FR, Вы писали:

VD>>В немерле их тен только потому, что система типов дотнета для этого плохо подходит. В прочем с генерацией промежуточных оберток это возможно. Более того уже есть реализация на макросах — ObjectExpressions.


FR>Влад, поворчу, у вас с WolfHound вырабаталась дурная привычка давать ссылки уже даже не на исходники а в дебри svn.

FR>Мне вот влом с таким разбираться и 99% тем кто не знает немерли наверняка также.

Вообще-то там мелкий проект и его тесты. ОК, буду сразу давать ссылки на тесты.

FR>Но я потыкал и ничего кроме инициализации объектов похожей на на окамловские записи не увидел.


Там макрос позволяющий по месту объявить реализацию интерфейса или абстрактного класса. Это конечно не тоже самое, но проблему отсутствия реализации интерфейса решает.

VD>>Так что "Никогда не говори никогда!".


FR>Ну тут как раз тот случай когда можно, без поддержки рантайма толку от структурных типов мало.


Ну, почему же? Эмулировать поведение конечно можно. Но будет некоторый рантайм оверхэд, которого можно было бы легко избежать при реализации рантаймом.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[8]: Можно ли полностью отказаться от динамически типизиро
От: FR  
Дата: 21.11.10 06:19
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Вообще-то там мелкий проект и его тесты. ОК, буду сразу давать ссылки на тесты.


Я их смотрел, http://code.google.com/p/nemerle/source/browse/nemerle/trunk/snippets/ObjectExpressions/ObjectExpressionsTest/Main.n
мало что понятно.

FR>>Но я потыкал и ничего кроме инициализации объектов похожей на на окамловские записи не увидел.


VD>Там макрос позволяющий по месту объявить реализацию интерфейса или абстрактного класса. Это конечно не тоже самое, но проблему отсутствия реализации интерфейса решает.


Ну это вообще никакого отношения к теме не имеет.

FR>>Ну тут как раз тот случай когда можно, без поддержки рантайма толку от структурных типов мало.


VD>Ну, почему же? Эмулировать поведение конечно можно. Но будет некоторый рантайм оверхэд, которого можно было бы легко избежать при реализации рантаймом.


Можно, но это не тривиальная вещь.
В том же F# отказались.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.