LINUX.ORG.RU

Сообщения www_linux_org_ru

 

спаммер valen_1984

Форум — Linux-org-ru

гляньте на его сообщения

www_linux_org_ru
()

[c++] можно ли (1) недопустить «лишнее» наследование или (2) узнать реальный класс в конструкторе или (3) сделать надежный pattern matching

Форум — Development

Вот пример (наивной) попытки:

template<class T1, class T2> class MatchableFor
{
public:
  MatchableFor(): what(0) 
  { 
    if(настоящий класс это не T1 и не T2, узнается с помощью (2) )
      throw SomeError;
    else if( настоящий класс это T1 )
      what=1;
    else if( настоящий класс это T2 )
      what=2;
  }
  virtual void run(Runnable< MatchableFor<T1,T2> > r1, Runnable< MatchableFor<T1,T2> > r2) 
  {
    what==0 ? throw SomeError : 
    what==1 ? r1.run(dynamic_cast<T1*>this) :
    what==2 ? r2.run(dynamic_cast<T2*>this) :
              throw SomeError; 
  }
private:
  int what;
};
class Child1;
class Child2;

struct Parent: public MatchableFor<Child1, Child2>
{
  virtual void do_something()=0;
};

class Child1: public Parent { void do_something() { f(); } }; // ok
class Child2: public Parent { void do_something() { g(); } }; // ok
class Child3: public Parent { void do_something() { h(); } }; // а вот это можно недопустить с помощью (1)

вроде бы (2) вообще невозможно, а (1) и (3) мне неизвестно

 

www_linux_org_ru
()

[по мотивам fprog] как сделать «обратный» DSL на haskell (а не ocamlp4)

Форум — Development

http://fprog.ru/2009/issue3/dmitry-astapov-alexey-shchepin-building-google-wa...

Хочется то же, но на Хаскель.

1. Хаскель или примочка к нему позволяют иметь доступ хотя бы на чтение к AST?

2. Альтернативно мы можем определить какой-то параметризованный тип данных, который бы например сумму своих двух значений не вычислял, а отдавал бы выражение (надеюсь, идея понятна):

a + b = AST_Node_Plus a b

вопрос в том, обломится ли такой подход — ведь перегружать надо ВСЕ, в том числе так сказать «функцию паттерн матчинга» и «функцию определения функций».

www_linux_org_ru
()

[opera] как заставить оперу включать по умолчанию cached images? и еще странности ad-blocker-a

Форум — Desktop

Speed Dial по умолчанию идет с загрузкой изображений, как настроить на ней по умолчанию cached images — не нашел.

Какой-то странный ад-блокер у нее — на лоре категорически не хочет блочить фрейм с айбиэмевской рекламой и счетчик mail.ru. Как?

И вообще киньте ссылочкой по прикручиванию к ней чего-нить своими руками — особенно блокировать рекламу.

 

www_linux_org_ru
()

тема «перевод статьи <Инноватор ли Microsoft?>» не показывается в топ 10

Форум — Linux-org-ru

Это так и задумано, или баг?

www_linux_org_ru
()

Haskell vs. C++ : поддержка зависимых типов

Форум — Development

Дискуссия началась при обсуждении Хаскеля 2010

Мой тезис состоит в том, что в Хаскеле поддержка зависимых типов хуже, чем в с++. (А как дело обстоит с Template Haskell?)

И пока что Miguel не представил определение зависимых типов (или ссылку на нее), по которому можно однозначно рассудить, есть ли в с++ зависимые типы. Боюсь, что пока я не реализую ему на шаблонах всю agda, он не согласится на наличие зависимых типов в с++ :-)

В процессе обсуждение родилось задание, похожее вот на это:

создаем вектор a с размерностью вводимой юзером

создаем вектор b с размерностью вводимой юзером

попытка перемножить несовместимые вектора a*b не компилируется

создаем вектор с с размерностью, равной размерности вектора а

попытка перемножить совместимые вектора a*с компилируется

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

Вот как я это сделал:

/*

$ g++ -DTRY dependent-type5.cxx
dependent-type5.cxx: In function ‘int main()’:
dependent-type5.cxx:68: error: no match for ‘operator*’ in ‘a * b’
dependent-type5.cxx:35: note: candidates are: double Vector<dimension>::operator*(const Vector<dimension>&) [with unsigned int* dimension = (& x)]
$ g++ dependent-type5.cxx
$ ./a.out
please enter dimension for vector a: 2
please enter element #0 for vector a: 1
please enter element #1 for vector a: 2
please enter dimension for vector b: 1
please enter element #0 for vector b: 1
please enter element #0 for vector c: 1
please enter element #1 for vector c: 2
a*c = 5
please enter element #0 for vector d: 1
please enter element #1 for vector d: 2
f(a)= 5

*/
#include <iostream>
#include <vector>

template<unsigned int* dimension> class Vector
{
  public:
    Vector(const char* msg): v( *dimension = *dimension ? *dimension : get_dimension(msg) ), dim(dimension)
    {
      for(int i=0; i<*dimension; i++) {
        std::cout << "please enter element #" << i << " for vector " << msg << ": ";
        std::cin >> v[i];
      }
    }
    double operator* (const Vector<dimension>& that) /// вот тут мы следим за размерностью! зависимые типы, да.
    {
      double result=0;
      for(int i=0; i<*dimension; i++)
        result += v[i] * that.v[i];
      return result;
    }
  private:
    std::vector<double> v;
    const unsigned int* const dim; /// для полноты картины

    static unsigned int get_dimension(const char* msg)
    {
      unsigned int result;
      std::cout << "please enter dimension for vector " << msg << ": ";
      std::cin >> result;
      return result;
    }
};

template<unsigned int* dimension> double f(Vector<dimension> a)
{
  Vector<dimension> d("d");
  return a*d;
}

unsigned int x=0, y=0;

int main()
{
  Vector<&x> a("a");                     /// создаем вектор a с размерностью вводимой юзером
  Vector<&y> b("b");                     /// создаем вектор b с размерностью вводимой юзером
#ifdef TRY
  double z0 = a*b;                       /// попытка перемножить несовместимые вектора a*b не компилируется
#endif
  Vector<&x> c("c");                     /// создаем вектор с с размерностью, равной размерности вектора а
                                         /// (это можно записать по-другому: typeof(a) c("c"); но вероятно это не нужно)
                                         /// (однако если все же нужно, потребуется с++0х)
  double z1 = a*c;                       /// попытка перемножить совместимые вектора a*с компилируется
  std::cout << "a*c = " << z1 << "\n";   /// выводим результат -- скалярное произведение
  double z2 = f(a);                      /// теперь считаем то же самое, но как вызов функции f -- компилируется
                                         /// (важно то, что размерность в явном виде в функцию f не передается) 
  std::cout << "f(a)= " << z2 << "\n";   /// снова выводим результат -- скалярное произведение

  return 0;
}

Комментарий: если размерность, поданная вектору, нулевая, он ее читает от юзера, а если ненулевая — то использует.

(Кто знает Qi? интересно было бы взглянуть на решение на нем)

Решение на Template Haskell с UnsafeIO наверно подойдет, но интересно было бы попугать народ полноценным решением без UnsafeIO :-)

И еще меня интересуе, как переписать на (Template?) Haskell вот это (даже если тут нет зависимых типов):

const int n=17;

...

Z<n> f(int x) { return mod<n>(x+(n/2)); }

www_linux_org_ru
()

запрет слова на букву «а» из ЛОРа аналогично запрету void* из языка Си

Форум — Linux-org-ru

Понятно, что надо страться void* избегать, как и слова на букву «а», которое не понравилось Шаману007,

однако ЛОР — одно из мест,

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

В некоторых случаях это слово необходимо, хотя лично мне за 4000+ сообщений оно не понадобилось до момента, когда надо было ответить Шаману007.

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

т.к. таких исправить вообще невозможно,

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

____________________________________________

Популярность этого слова на ЛОРе обусловлена в том числе и объективными причиной — программирование, возможно, так еще не стало индустрией,

т.к. повторное или иное нестандартное использование честно купленного или свободного кода программистом, пользователем, или интегратором

либо соврешенно бессмысленно запрещено лицензией

либо требует действий, аналогичных удалению гланд через отверстие с противоположной стороны человеческого тела :-)

www_linux_org_ru
()

ClearView автоматически отслеживает нарушения работы программы и создает для нее бинарные патчи

Новости — Проприетарное ПО
Группа Проприетарное ПО

Эта программа создана под руководством Martin C. Rinard, профессора MIT. ClearView не нуждается в исходном коде программы. Работа ClearView состоит из следующих стадий:

  • Обучение — наблюдая за нормальной работой приложения создается модель работы программы. Модель — это набор утверждений (инвариантов) о состоянии регистров и памяти.
  • Мониторинг — с помощью подключаемых мониторов (в проекте использовались Heap Guard & Determina Memory Firewall) выявляются нарушения функционирования (типа срыва стэка).
  • Идентификация связанных инвариантов — в случае нарушения функционирования устанавливаются бинарные патчи недалеко от точки нарушения, которые выявляют связанные с нарушением инварианты.
  • Генерация бинарных патчей — кандидатов на починку. Патчи меняют функционирование программы только при нарушении связанных инвариантов.
  • Проверка того, что патч-кандидат решает проблему и выбор одного из кандидатов.

Таким образом программа может продолжать работать до внесения исправления в исходники.

>>> pdf с описанием принципов работы

 

www_linux_org_ru
()

Несколько вопросов: языки высокого уровня и С++ с точки зрения программистов на С (kernel, embedded, realtime, ...)

Форум — Development

Если бы вы изобретали С++ с чистого листа, то как бы вы...?

___

Чтобы тема была чуть определеннее, приведу несколько обычных притензий к С++, и мои предложения как это исправить:

1. Вроде-как-объявление переменной Something s=1; может вызвать сколь угодно длинное вычисление

Решение: разный синтаксис:

Something s=1; означает, что конструктор s завершается за заранее известное число таков (и деструктора нет?)

Something s(1); означает... что ожидать можно что угодно.

2. С++ поддерживает перегрузку оператора [] -- и это значит, что a["asdf"] может обращаться за значением к серверу на другой стороне Земли, не говоря уж о произвольном таймауте и возможном выбросе исключения. В то же время абстрактная запись типа a["asdf"] для языка высокого уровня *НУЖНА*. Поэтомо, возможно, следует *на уровне синтаксиса* различать абстрактное и гарантированно-себя-хорошо-ведущее.

Решение: разный синтаксис:

a.[i] означает, что компилятор гарантирует, что i не выйдет за пределы границ массива а, операция завершается за заранее известное число таков, и проверка в ран-тайме *не нужна*, как например в случае for(int i=0; i<sizeof(a)/sizeof(a.[0]); i++) do_something(a.[i]);

a.at(i) (или a.at[i]?) означает, что проверка диапазона (или наличия значения в хэше, или ... ) производится, операция завершается за заранее известное число тактов; выход за границы -- это критическая ошибка логики программы, и при ее наличии программа должна gracefully завершиться.

a[i] означает... что ожидать можно что угодно.

3. Исключительно тормозные плюсовые исключения (на десятичные порядки) http://www.linux.org.ru/view-message.jsp?msgid=3856841

Решение: ввести быстрые "статические" исключения, эквивалентные сишной проверке возвращенного значения (при этом компиятор должен проверять то, что все варианты кода возврата проверены, либо проверен просто факт неудачи). Но это отдельный разговор.

(Понятно, что все это требует более умного компилятора)

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

www_linux_org_ru
()

Пятилетний юбилей Ubuntu

Новости — Ubuntu Linux
Группа Ubuntu Linux

5 лет назад, 20 октября 2004 года, вышел первый релиз Убунту.

>>> То самое сообщение об этом Марка Шаттлворта

 , ,

www_linux_org_ru
()

[haskell] есть ли что-то типа reflection? (недемократизм языка?)

Форум — Development

Обычная фраза: deriving (Read, Show, Eq, Ord)

Компилятор умеет выводить инстансы этих typeclass-ов. А что делать, если хочется их выводить чуть-чуть по-другому или добавить еще один, который автоматически бы выводился? (Для этого, возможно, подошло что-то похожее на reflection, патчить компилятор не предлагайте)

__________________________________________________

Недемократизм языка в моем понимании -- это

1. Частичная реализация некой фичи и одновременно отстутствие инструмента для расширения реализации этой фичи. Например в яве оператор + для сложения целых, вещественных, строк и все: комплексные, кватернионы, вектора, матрицы... складывай уже через add.

2. Невозможность смены конкретной реализации фичи (зачастую связано с п.1). Например, невозможность создать в рамках с++ свой virtual dispatch (для того, что сделать множественный virtual dispatch, т.е. п.1). В принципе, п.2 до некоторой степени неизбежен, так как иногда намного проще сделать фичу, чем API для написания фич).

__________________________________________________

Более глобальный вопрос -- а насколько хаскель демократичен? (для обеспечения демократизма разрешается использовать ключи компилятора, template haskell, ...)

 

www_linux_org_ru
()

в http://www.linux.org.ru/rules.jsp «напишите нам» — линк на емейл, а не на тему форума.

Форум — Linux-org-ru

Предлагаю исправить -- вставить линк на http://www.linux.org.ru/view-message.jsp?msgid=3959726 , а может еще лучше -- сделать статический адрес, который бы переадресовывался в текущую жалобную книгу.

www_linux_org_ru
()

Что за маркетоидный понос на главной странице? Почему нельзя было подать техническую инфу?

Форум — Linux-org-ru

Речь идет о http://www.linux.org.ru/view-message.jsp?msgid=3998050

> ... диспетчер совершенно нового уровня, интегрированный во все элементы системы для максимально чёткой работы ... который теперь будет шагать в ногу со временем вместе с такими же ...

Маркетоидный понос.

> ... OpenCL позволяет разработчикам программ ощутить всю полноту графической фантазии ...

С каких пор OpenCL отосится к графике??? это не OpenGL, это язык для юзания GPU, не более того.

Подчеркну, что я __за__ новости об Apple, и даже как-то сам постил новость о том, что Mac-у исполнилось 25 лет.

_________________________________________________

Отдельно Макскому:

твой аргумет "Хочешь сделать лучше - ссылка на форму добавления новости на главной странице внизу" -- не проходит, т.к. мою новость про "25 лет мак-у" модераторы не пропустили.

www_linux_org_ru
()

Pi, тема не была офтопиком и детсадом, и даже если бы была детсадом, удалять ее не стоило

Форум — Linux-org-ru

http://www.linux.org.ru/view-message.jsp?msgid=3973125

Как минимум, представь, что ЛОР бы отдавался прямыми запросами к БД и отрисовывался клиентским кодом типа Google Native Client в браузере -- это было бы и прямее, и удобнее.

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

www_linux_org_ru
()

у нас тут филиал podrobnosti.ua? почему модеры пропускают новость без ссылки на патент?

Форум — Linux-org-ru

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

Речь идет о новости http://www.linux.org.ru/view-message.jsp?msgid=3955302

www_linux_org_ru
()

как юзать iTCO_wdt (watchdog timer) и как гарантировано сделать kernel oops для симуляции ?

Форум — Admin

Гугление результатов не принесло.

Задача: заставить материнку перезагружаться в случае, если линукс мертво завис (было пару раз за полгода).

Ядро железку видит:

iTCO_wdt: Intel TCO WatchDog Timer Driver v1.02 (26-Jul-2007)                                                                       
iTCO_wdt: Found a ICH5 or ICH5R TCO device (Version=1, TCOBASE=0x0860)                                                              
iTCO_wdt: initialized. heartbeat=30 sec (nowayout=0) 

root         5  0.0  0.0      0     0 ?        S<   Aug07   0:00 [watchdog/0]

Еще надо как-то симулировать мертвое зависание... oops, что ли, сделать? как?

Еще вопрос — материнку на перезагрузку будет толкать железка или все же ядро?

www_linux_org_ru
()

2 root-а, несколько сетевых карт — какой виртуализатор выбрать?

Форум — Admin

Два линукса, 2 рута. Сетевые карты желательно разделить между ними -- каждому свои карты. Жесткие диски, возможно, тоже каждому свои, а возможно и рейд, который совместно используется -- возможно такое? Интересуют все варианты.

www_linux_org_ru
()

[бенчмарк] С++ медленне С в 5 раз при уже при 0.1% кидаемых исключений [ЧЯДНТ ?]

Форум — Development

Вот исходники

#include <stdio.h>

#define BITS 10    // 0<=BITS<=16

unsigned int i0=0, i1=0;

int f(unsigned int arg)
{
    if( ( (arg>>16) & ((1<<BITS)-1) ) == 0 )
        return 1; // exception
    else
        ++i0; // do some good work here, i.e. increment i0
    return 0; // ok
}
int main()
{
    unsigned int i=0, x=1;

    do {
        ++i;
        x+=x<<2; // x == 5 power i
        if( f(x) )
            ++i1; // exception
    }
    while(x!=1);

    printf("i=%u i0=%u i1=%u i0+i1=%u\n", i,i0,i1,i0+i1 );
    printf("  %u    %u    %u       %u\n", 0x40000000u, i-i1, (1<<(16-BITS))<<14, 0x40000000u );
    return 0;
}

#include <stdio.h>

#define BITS 10    // 0<=BITS<=16

unsigned int i0=0, i1=0;
class E1 {};
E1 e1;

void f(unsigned int arg)
{
    if( ( (arg>>16) & ((1<<BITS)-1) ) == 0 )
        throw &e1;
    else
        ++i0; // do some good work here, i.e. increment i0
}
int main()
{
    unsigned int i=0, x=1;

    do {
        ++i;
        x+=x<<2; // x == 5 power i
        try{ f(x); }
        catch( E1* e ){ ++i1; }
    }
    while(x!=1);

    printf("i=%u i0=%u i1=%u i0+i1=%u\n", i,i0,i1,i0+i1 );
    printf("  %u    %u    %u       %u\n", 0x40000000u, i-i1, (1<<(16-BITS))<<14, 0x40000000u );
    return 0;
}

Вот выхлопы [ gcc (GCC) 4.1.2 20061115 (prerelease) (Debian 4.1.1-21) ]:

$ gcc -O3 1.c && time ./a.out 
i=1073741824 i0=1072693248 i1=1048576 i0+i1=1073741824
  1073741824    1072693248    1048576       1073741824

real    0m2.368s
user    0m2.256s
sys     0m0.004s

$ g++ -O3 1.cxx && time ./a.out 
i=1073741824 i0=1072693248 i1=1048576 i0+i1=1073741824
  1073741824    1072693248    1048576       1073741824

real    0m11.741s
user    0m10.921s
sys     0m0.008s

Кто сможет протестить на icc, других версиях gcc и других железках? Возможно, я не указал полезные опции? А дальше флейм :-)

www_linux_org_ru
()

Министерство юстиции США начало расследование в отношении Google и Apple

Форум — Talks

Министерство юстиции США начало расследование в отношении Google, Apple, Yahoo и некоторых других крупных компаний (в частности, Genentech) по обвинению в сговоре не переманивать друг у друга ключевых сотрудников.

Напомню также, что в мае FTC начала расследование отношений Google и Apple по поводу того, что ряд сотрудников входит в совет директоров обоих компаний. Например, в совет директоров Apple входит исполнительный директор Google Эрик Шмидт, и что членом совета директоров обеих компаний является Артур Левинсон, бывший исполнительным директором Genentech. Это, по мнению коммисии, препятствует свободной конкуренции компаний, являющихся естественными конкурентами (iPhone <=> Android, iTunes <=> YouTube).
Подробности

Перемещено Shaman007 из Apple

www_linux_org_ru
()

Добавть, пожалуста, в опрос «Что побудило вас зарегистрироваться на Linux.org.ru» пункт «Наличие анонимного постинга».

Форум — Linux-org-ru

Обратный пункт "Отсутствие анонимного постинга" есть. А прямого нет.

З.Ы. Для тех, кто не видит логики:

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

www_linux_org_ru
()

RSS подписка на новые темы