В менеджед-языках перед замером времени нужно обязательно сделать одни холостой прогон, чтобы метод хотя бы разок выполнился иначе ты начинашь измерять скорость джит-компиляции. Плюс нужно сделать Sleep() на 100-200 мс. чтобы рантайм успел доинициализироваться. Ну, и не стоит не стоит повторять ошибки орлов с того сатйа и измерять скорость вывода в консоль.
В общем, лучше как-то так:
using System.Console;
using System.Diagnostics;
def Akk(a, b)
{
if (a == 0)
b + 1
else if (b == 0)
Akk(a - 1, 1)
else
Akk(a - 1, Akk(a, b - 1))
}
def AkkDecl(a, b)
{ | (0, _) => b + 1
| (_, 0) => AkkDecl(a - 1, 1)
| (_, _) => AkkDecl(a - 1, AkkDecl(a, b - 1))
}
def time(f)
{
def timer = Stopwatch();
timer.Start();
def result = f();
timer.Stop();
WriteLine(timer.Elapsed);
WriteLine("result = {0}", result : int);
}
_ = Akk(3, 2);
_ = AkkDecl(3, 2);
System.Threading.Thread.Sleep(200);
time(() => Akk(3, 11));
time(() => AkkDecl(3, 11));
WriteLine("===============");
time(() => Akk(3, 11));
time(() => AkkDecl(3, 11));
WriteLine("===============");
time(() => Akk(3, 11));
time(() => AkkDecl(3, 11));
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[17]: Tcl как обоснование ненужности поддержки компонентно
Здравствуйте, Геннадий Васильев, Вы писали:
IT>>Вот расскажи мне. Ты когда нибудь пользовался такой фигнёй в плюсах как mutable? Я никогда. Не понадобилось за 10 лет ни разу
ГВ>Простейший случай: объект синхронизации, затрагиваемый внутри const-метода. ГВ>Второй простейший случай: отложенное вычисление в каком-нибудь указателе.
Боюсь даже просить тебя привести пример. Последний раз в этом топике это закончилось ничем.
ГВ>Потому что property и в самом деле эмулируются, как два байта.
Ну так в чём проблема?
ГВ>А вот ты мне скажи, виртуальные проперти бывают или нет?
Бывают.
ГВ>А абстрактные?
И абстрактные бывают.
ГВ>А можно ли передать проперть как объект в какой-нить метод?
Что имеется ввиду? Значение свойства, метадату или метод реализующий свойство?
ГВ>А сделать его параметром шаблона?
Возвращаемое значение? Можно конечно.
ГВ>А сделать проперть отдельным классом и отнаследоваться?
Этого вопроса я не понял. Можешь пояснить свою мысль?
... << RSDN@Home 1.2.0 alpha rev. 0>>
Если нам не помогут, то мы тоже никого не пощадим.
Re[30]: Tcl как обоснование ненужности поддержки компонентно
Здравствуйте, IT, Вы писали:
IT>>>Началось всё с #import. Там без свойств никак. ГВ>>Ошибаешься. IT>В чём именно?
В том, что при импорте COM-интерфейсов директивой #import (я полагаю, ты именно о ней?) нельзя обойтись без свойств в коде C++-программы.
ГВ>>Есть ещё raw (кажется, не помню на вскидку модификатор). Прекрасно импортирует COM-интерфейсы без пропертей. IT>#import мне понравился больше. Поддержка свойсв + обработка ошибок с человеческим лицом.
Я имел ввиду модификатор для #import.
<< Под музыку: silent >>
<< При помощи Януса: 1.2.0 alpha rev. 650 >>
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re: [Benchmark] Еще раз про Аккерман на разных языках
Кстати, по ходу дела выяснил одну забавную вещь. Почему-то локальные функции Немерле объявляет с лшиним неиспльзуемым параметром. По этому если код оформить как методы, то скорость возрастает (не сильно правда, но все же). Так же становится возможным выполнить первый вариант теста со значениями (3, 12), что как я понимаю вообще не возможно у многих конкурентов.
using System.Console;
using System.Diagnostics;
public module Test
{
public Akk(a : int, b : int) : int
{
if (a == 0)
b + 1
else if (b == 0)
Akk(a - 1, 1)
else
Akk(a - 1, Akk(a, b - 1))
}
public AkkDecl(a : int, b : int) : int
{ | (0, _) => b + 1
| (_, 0) => AkkDecl(a - 1, 1)
| (_, _) => AkkDecl(a - 1, AkkDecl(a, b - 1))
}
}
def time(f)
{
def timer = Stopwatch();
timer.Start();
def result = f();
timer.Stop();
WriteLine(timer.Elapsed);
WriteLine("result = {0}", result : int);
}
_ = Test.Akk(3, 2);
_ = Test.AkkDecl(3, 2);
System.Threading.Thread.Sleep(200);
time(() => Test.Akk(3, 11));
time(() => Test.AkkDecl(3, 11));
WriteLine("===============");
time(() => Test.Akk(3, 11));
time(() => Test.AkkDecl(3, 11));
WriteLine("===============");
time(() => Test.Akk(3, 11));
time(() => Test.AkkDecl(3, 11));
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[31]: Tcl как обоснование ненужности поддержки компонентно
Здравствуйте, Геннадий Васильев, Вы писали:
ГВ>>>Ошибаешься. IT>>В чём именно? ГВ>В том, что при импорте COM-интерфейсов директивой #import (я полагаю, ты именно о ней?) нельзя обойтись без свойств в коде C++-программы.
Разве я утверждал обратное?
... << RSDN@Home 1.2.0 alpha rev. 0>>
Если нам не помогут, то мы тоже никого не пощадим.
Re[31]: Tcl как обоснование ненужности поддержки компонентно
Здравствуйте, Cyberax, Вы писали:
C>Свойства — это не более чем простенький синтаксический сахар.
Да, тысячу раз да! Почти все конструкции современных ЯП — это синтаксический сахар. Иначе нельзя было бы писать на Лисп-е или ассемблере. Всем кто хочет и дальше жрать кактус даже не закусывая сахаром мой большой привет. Только не нащдо пропагандировать нищету и убожество. ОК?
C> Причем сахар с солью (как взять ссылку на свойство?).
Ты еще ссылку на конструктор возьми или на пространство имен. Тоже ведь как аргумент использовать можно. "А вот ххх дерьмо, так как в нем нельзя получить ссылку на пространство имен..."
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[32]: Tcl как обоснование ненужности поддержки компонентно
Здравствуйте, IT, Вы писали:
ГВ>>>>Ошибаешься. IT>>>В чём именно? ГВ>>В том, что при импорте COM-интерфейсов директивой #import (я полагаю, ты именно о ней?) нельзя обойтись без свойств в коде C++-программы. IT>Разве я утверждал обратное?
Началось всё с #import. Там без свойств никак.
<< Под музыку: silent >>
<< При помощи Януса: 1.2.0 alpha rev. 650 >>
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[33]: Tcl как обоснование ненужности поддержки компонентно
Здравствуйте, Геннадий Васильев, Вы писали:
ГВ>>>В том, что при импорте COM-интерфейсов директивой #import (я полагаю, ты именно о ней?) нельзя обойтись без свойств в коде C++-программы. IT>>Разве я утверждал обратное?
ГВ>
ГВ>Началось всё с #import. Там без свойств никак.
ГВ>
Молодец, ты победил. Возьми на полке пирожок! Ты очень смело и решительно вмешался и присёк несправедливость на корню. Продолжай в том же духе, у тебя это хорошо получается.
А #import я действительно без свойств никогда не использовал. Собственно говоря, как раз только ради нормального читабельного синтаксиса и использовал. А raw я видел в документации один раз и честно говоря усомнился в полезности такой фичи. Кстати, не помнишь такая возможность была в #import с самого начала или добавилась только в последней версии?
... << RSDN@Home 1.2.0 alpha rev. 0>>
Если нам не помогут, то мы тоже никого не пощадим.
Re[18]: Tcl как обоснование ненужности поддержки компонентно
Здравствуйте, IT, Вы писали:
IT>Здравствуйте, Геннадий Васильев, Вы писали:
IT>>>Вот расскажи мне. Ты когда нибудь пользовался такой фигнёй в плюсах как mutable? Я никогда. Не понадобилось за 10 лет ни разу
ГВ>>Простейший случай: объект синхронизации, затрагиваемый внутри const-метода. ГВ>>Второй простейший случай: отложенное вычисление в каком-нибудь указателе.
IT>Боюсь даже просить тебя привести пример. Последний раз в этом топике это закончилось ничем.
Лехко.
class Mutex
{
public:
void lock(); // Очевидно - non-const, поскольку состояние объекта меняетсяvoid unlock()
private:
// куча-куча счётчиков и прочего
};
class SomeClassForMultiThreadUsage
{
public:
size_t get_values(std::vector<int> *result) const
{
Guard g(&mutex_); // scope guard
*result = values_;
}
protected:
mutable Mutex mutex_;
std::vector<int> values_;
};
ГВ>>Потому что property и в самом деле эмулируются, как два байта. IT>Ну так в чём проблема?
Дык нет же её, в том-то и дело. Просто не нужны особо.
ГВ>>А вот ты мне скажи, виртуальные проперти бывают или нет? IT>Бывают.
OK
ГВ>>А абстрактные? IT>И абстрактные бывают.
OK
ГВ>>А можно ли передать проперть как объект в какой-нить метод? IT>Что имеется ввиду? Значение свойства, метадату или метод реализующий свойство?
Само свойство, в том-то и дело.
ГВ>>А сделать его параметром шаблона? IT>Возвращаемое значение? Можно конечно.
Само свойство.
ГВ>>А сделать проперть отдельным классом и отнаследоваться? IT>Этого вопроса я не понял. Можешь пояснить свою мысль?
class Property
{
// Механика реализации свойства
};
class AdvancedProperty : public Property
{
// Что-то придумали пооригинальнее.
};
<< Под музыку: silent >>
<< При помощи Януса: 1.2.0 alpha rev. 650 >>
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[19]: Tcl как обоснование ненужности поддержки компонентно
Здравствуйте, Геннадий Васильев, Вы писали:
ГВ>Лехко.
Демонстрация хака, больше ничего
ГВ>>>Потому что property и в самом деле эмулируются, как два байта. IT>>Ну так в чём проблема?
ГВ>Дык нет же её, в том-то и дело. Просто не нужны особо.
Понятно. А ты никогда не задумывался почему тебе свойства не нужны, а другие их находят весьма полезной штукой? Я бы конечно мог попытаться это объяснить и привести примеры, но боюсь, это бесполезно. Раз ты решил, что свойства тебе не нужны, потому что я их нахожу полезными, то объяснять что-либо безсмысленно.
ГВ>>>А можно ли передать проперть как объект в какой-нить метод? IT>>Что имеется ввиду? Значение свойства, метадату или метод реализующий свойство?
ГВ>Само свойство, в том-то и дело.
В чём дело? Что ты понимаешь под "само свойство"?
ГВ>>>А сделать его параметром шаблона? IT>>Возвращаемое значение? Можно конечно.
ГВ>Само свойство.
Вот опять. Ты хотя бы сам понимаешь что такое свойство?
ГВ>>>А сделать проперть отдельным классом и отнаследоваться? IT>>Этого вопроса я не понял. Можешь пояснить свою мысль?
ГВ>
ГВ>class Property
ГВ>{
ГВ> // Механика реализации свойства
ГВ>};
ГВ>class AdvancedProperty : public Property
ГВ>{
ГВ> // Что-то придумали пооригинальнее.
ГВ>};
ГВ>
И дальше что? Как ты собираешься это использовать?
... << RSDN@Home 1.2.0 alpha rev. 0>>
Если нам не помогут, то мы тоже никого не пощадим.
Re[34]: Tcl как обоснование ненужности поддержки компонентно
Здравствуйте, IT, Вы писали:
IT>А raw я видел в документации один раз и честно говоря усомнился в полезности такой фичи. Кстати, не помнишь такая возможность была в #import с самого начала или добавилась только в последней версии?
VC6 точно поддерживает, а что было раньше, я не в курсе.
<< Под музыку: silent >>
<< При помощи Януса: 1.2.0 alpha rev. 650 >>
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[26]: Tcl как обоснование ненужности поддержки компонентно
Здравствуйте, VladD2, Вы писали:
E>>Вот здесь C++ виноват в провоцировании всех показанных проблем или те, кто спроектировал такой маппинг CORBA на C++? Причем они ведь знали что такое C++ и чем черевато его неправильное использование.
VD>Конечно виноваты тупые пользователи. Ведь те дядьки что седят в OMG они же тупые ламеры. А те что в комитете по С++ крутые гуру консенсуса.
Складывается впечатление, что кому-то крепко стукнуло в башку сделать Java из C++. А из этого мало что хорошего выходит, как правило...
Впрочем, это моя неверифицируемая имха.
<< Под музыку: silent >>
<< При помощи Януса: 1.2.0 alpha rev. 650 >>
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[26]: Tcl как обоснование ненужности поддержки компонентно
Здравствуйте, IT, Вы писали:
IT>А теперь включаем фантазию и попробуем представить проект, в котором одновременно используются MFC, ATL, #import и STL. В качестве примера можно взять какое-нибудь приложение на MFC, работающее как сервер автоматизации, поддерживающее дуальный IDispatch.
Самая большщая проблема в этом — разобраться с импортом.
<< Под музыку: silent >>
<< При помощи Януса: 1.2.0 alpha rev. 650 >>
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[28]: Tcl как обоснование ненужности поддержки компонентно
Здравствуйте, IT, Вы писали:
IT>К тому же, из-за подобных строковых преобразований в коде и логики-то не видно.
Да ну? Набор простейших конвертеров и про строковые преобразования забываешь вообще.
<< Под музыку: silent >>
<< При помощи Януса: 1.2.0 alpha rev. 650 >>
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[20]: Tcl как обоснование ненужности поддержки компонентно
Здравствуйте, IT, Вы писали:
ГВ>>Лехко. IT>Демонстрация хака, больше ничего
Фи, как неинтеллигентно.
ГВ>>>>Потому что property и в самом деле эмулируются, как два байта. IT>>>Ну так в чём проблема? ГВ>>Дык нет же её, в том-то и дело. Просто не нужны особо. IT>Понятно. А ты никогда не задумывался почему тебе свойства не нужны, а другие их находят весьма полезной штукой? Я бы конечно мог попытаться это объяснить и привести примеры, но боюсь, это бесполезно. Раз ты решил, что свойства тебе не нужны, потому что я их нахожу полезными, то объяснять что-либо безсмысленно.
Связи не вижу, ну да ладно.
ГВ>>>>А можно ли передать проперть как объект в какой-нить метод? IT>>>Что имеется ввиду? Значение свойства, метадату или метод реализующий свойство? ГВ>>Само свойство, в том-то и дело. IT>В чём дело? Что ты понимаешь под "само свойство"?
Вот мне и интересно, что под этим можно понимать? Под термином "данные объекта", или "функция объекта", или "класс" ясно, что скрывается. А вот что такое "свойство"? Класс? Или не класс?
ГВ>>>>А сделать его параметром шаблона? IT>>>Возвращаемое значение? Можно конечно. ГВ>>Само свойство. IT>Вот опять. Ты хотя бы сам понимаешь что такое свойство?
См. выше.
ГВ>>>>А сделать проперть отдельным классом и отнаследоваться? IT>>>Этого вопроса я не понял. Можешь пояснить свою мысль?
ГВ>>
ГВ>>class Property [...]
ГВ>>class AdvancedProperty : public Property [...]
ГВ>>
IT>И дальше что? Как ты собираешься это использовать?
Да как-как. Вот так, к примеру:
template<template <class> class PropImpl>
class MyClass
{
public:
PropImpl<int> prop1;
PropImpl<double> prop2;
};
Пример упрощённый, ещё, скорее всего, понадобится связь с MyClass. А может, и не понадобится.
<< Под музыку: silent >>
<< При помощи Януса: 1.2.0 alpha rev. 650 >>
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[28]: Tcl как обоснование ненужности поддержки компонентно
Здравствуйте, VladD2, Вы писали:
_>>MFC, ATL могут использовать один и тот же CString VD>Это теперь. А в 98-ом не могли. Да и вопрос не в этом, а в том зачем вообще было делать 10 варинтов строк? Почему было не ввести строки в язык? Ведь они нужны в любом приложении?
Вопрос: какие именно строки? В турбо-паскале, вон, были строки: до 255 символов. Это такие, как надо, или не такие? А сейчас какие они должны быть? CORBA-like, Java-like, C#-like? 16- или 32-битовые символы? Что делать с тем софтом, который уже написан на C и использует const char* ?
VD>Это такие же вопросы как "Почему не добавить свойства? Они же никому не помешали бы." или "кому помешали бы функциональные типы?". На эти вопросы есть только отбрехи фанатов С++ и комитета. Отбрехи эти пахнут маргинальностью и старперством.
А требования дать свойства любой ценой пахнут непониманием неоднозначности ответа на это вопрос.
<< Под музыку: silent >>
<< При помощи Януса: 1.2.0 alpha rev. 650 >>
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[28]: Tcl как обоснование ненужности поддержки компонентно
Здравствуйте, VladD2, Вы писали:
VD>А ты задумайся почему в куче языков хватает одной строки, а в С++ понадобилось создавать такое количество? Ответ тут очень простой.
Ну, как водится... Любая сложная проблема имеет простое неправильное решение. (с)
VD>Та строка которая была в СТЛ настолько не устраивала пользователей и разработчиков библиотек, что им пришлось вводить заменители. А кто не обеспечил наличие полноценной строки в языке или его библиотеке?
Сферической такой строки, вакуумдышащей.
<< Под музыку: Shocking Blue — Venus >>
<< При помощи Януса: 1.2.0 alpha rev. 650 >>
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[25]: Tcl как обоснование ненужности поддержки компонентно
Здравствуйте, VladD2, Вы писали:
VD>>>Но тут мы быстро прийдем, что для хорошего дизайна хорошо бы иметь GC и безопасный язык. E>>Еще раз -- C++ не задумывался как безопасный язык. VD>Страуступ постоянно говорит обратное.
Да? А где он такое говорит?
<< Под музыку: Shocking Blue — Venus >>
<< При помощи Януса: 1.2.0 alpha rev. 650 >>
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[13]: Tcl как обоснование ненужности поддержки компонентно
Здравствуйте, Andrei N.Sobchuck, Вы писали: ANS>И что с того? Пример то куцый. Ты лучше покажи код, который в виджете для редактирования текста при наведении мышки на слово выведет некую подсказку.
У меня есть тут как раз такой кусочек тиклевого кода :