Здравствуйте, Курилка, Вы писали:
S>>а теперь? все равно в морг?
К>Дак почему в морг? Я против динамической типизации ничего не имею.
я тоже...но речь не о том. с чего все началось и чем продолжилось.
Здравствуйте, Shabi, Вы писали:
S>Здравствуйте, Курилка, Вы писали:
S>>>а теперь? все равно в морг?
К>>Дак почему в морг? Я против динамической типизации ничего не имею. S>я тоже...но речь не о том. с чего все началось и чем продолжилось.
S>резюме: как считаешь, по пункту S>
* статически типизированный и компилируемый;
S>его можно советовать зачинателю ветки?
Нельзя, т.к. client-side меня не интересует
Но за участие в обсуждении спасибо!
SObjectizer: <микро>Агентно-ориентированное программирование на C++.
К>>>Чем описывается "большинство"?
S>и это кста. "не вечер"... ActionScript 3.0 (по ставнению с 2.0 огромный, качествеенный скачёк) сейчас на том уровне, что вполне комфортно можно можно писать... даже пересаживаясь с JAVA. S>не спроста эти жЫрные коты в сане и микрософте зашевелились.
Давай называть вещи своими именами — это не скачок между ActionScript 2.0 и ActionScript 3.0, это развитие ECMAScript. Посмотри на реализацию JS в современной мозилле — увидишь те же самые фичеры, т.к. это суть один и тот же язык.
А сан с майкрософтом в чём виноваты, кстати? Они тоже в меру сил и возможностей ECMAScript реализуют — JScript в нотации майкрософт и встроенный в Java 1.5 интерпретатор ECMAScript (название его не помню, т.к. немного не в теме).
Здравствуйте, Left2, Вы писали:
К>>>>Чем описывается "большинство"?
S>>и это кста. "не вечер"... ActionScript 3.0 (по ставнению с 2.0 огромный, качествеенный скачёк) сейчас на том уровне, что вполне комфортно можно можно писать... даже пересаживаясь с JAVA. S>>не спроста эти жЫрные коты в сане и микрософте зашевелились.
L>А сан с майкрософтом в чём виноваты, кстати?
Здравствуйте, VladD2, Вы писали:
FR>>А мы разве про F# , кстати в SML.NET функторы есть, но ограничены при использовании с NET класами.
VD>Что вы фанкторами называете?
Здравствуйте, VladD2, Вы писали:
VD>Что вы фанкторами называете?
Грубо полиморфный загрузчик модулей, позволяет жестко типизированному языку иметь модульность на уровне динамических языков, например можно сделать полную эмуляцию ООП (в смысле наследования и полиморфизма) на модулях. Ну и как следствие модули в ML являеются как и функции первоклассными объектами.
Здравствуйте, FR, Вы писали:
FR>Грубо полиморфный загрузчик модулей, позволяет жестко типизированному языку иметь модульность на уровне динамических языков, например можно сделать полную эмуляцию ООП (в смысле наследования и полиморфизма) на модулях. Ну и как следствие модули в ML являеются как и функции первоклассными объектами.
Т.е. нечто вроде интерфейсов? Ясно...
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, VladD2, Вы писали:
DM>>Скорее типа шаблонов в С++.
VD>Шаблоны как раз не способны экспортировать интерфейс вне модуля. По крайней мере в доступных мне компиляторах С++ экспорт не реализован.
Невозможность экспорта это деталь реализации.
Функторы сильно схожи с шаблонами в том что также могут параметризироватся. Вот например использование функтора Make из стандартного модуля Set:
module Int_set = Set.Make(
struct
type t = int
let compare = compare
end
);;
Здесь объявлется модуль Set параметризированный структурой содержащей нужный тип и функцию сравнения. На С++ шаблонах получается очень похоже:
Здравствуйте, D. Mon, Вы писали:
VD>>Шаблоны как раз не способны экспортировать интерфейс вне модуля. По крайней мере в доступных мне компиляторах С++ экспорт не реализован.
DM>Аналогом интерфейсов в Окамле скорее служат модули.
А ты то про что говорил?
Или я уже ничего не понимаю...
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, D. Mon, Вы писали:
DM>Про функторы. Т.е. получаются аналогии: модули — интерфейсы, функторы — шаблоны.
Все же я этого понять не могу. Можно подробно обяснить?
Как я понимаю модуль есть вещь статическая. Экзепляр модуля не создашь. Интерфейс есть публичное описание набора методов объекта которое можно полиморфно реализовывать в разных типах. Вот пример на C# 2.0:
interface IClonable<T>
{
T Clone();
}
class A : IClonable<A>
{
public A(int x) { _x = x; }
int _x;
public A Clone()
{
return new A(_x);
}
}
class B : IClonable<B>
{
public B(string y) { _y = y; }
string _y;
public A Clone()
{
return new A(_y);
}
}
static class TestModule
{
public static void Test<T>(IClonable<T> clonable)
{
T copy = clonable.Clone();
// ... use copy
}
static void Main()
{
Test<T>(new A(123));
Test<T>(new B("Test"));
}
}
Здесь мне все очевидно. А как тоже самое будет выглядеть на ОКамле?
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Вот примерный аналог. Я заменил Clone на чуть более интересную функцию удвоения, которая число умножает на два, а строку повторяет два раза.
module type Doubleable = (* тут как бы абстрактный интерфейс *)
sig
type t
val double: t -> t (* наша операция *)
end;;
module A = (* реализация интерфейса с интом *)
struct
type t = int
let double x = x * 2
end;;
module B = (* реализация интерфейса со строкой *)
struct
type t = string
let double x = x ^ x
end;;
module TestModule = (* функтор - как бы шаблон, параметризованный нашим интерфейсом *)
functor (Smthng: Doubleable) ->
struct
let test x = Smthng.double x
end;;
module TestModuleA = TestModule(A);; (* подстановка шаблона для получения конкретного типа *)
module TestModuleB = TestModule(B);;
print_int(TestModuleA.test 2);; (* использование конкретных типов *)
print_string(TestModuleB.test "hi");;
Здравствуйте, Алексей., Вы писали:
СТ>>Зато баги правят сильно оперативнее. Да и насколько сложилось впечатление, что в нем нет только Windows-specific вещей, вроде поддержки COM+
А>Вот эту https://bugzilla.novell.com/show_bug.cgi?id=314903 ошибку 3,5 года пытаются исправить.
Судя по тому, что это normal P3 его ещё столько же чинить будут