Re[2]: [Этюд, C#] Долгая компиляция
Здравствуйте, HowardLovekraft, Вы писали:
HL>Какая-нибудь засада с рекурсивным определением generic'ов?
Типа того.
Re[2]: [Этюд, C#] Долгая компиляция
Здравствуйте, 0K, Вы писали:
0K>Не связано с ResourceProvider'ом?
Нет.
Re: [Этюд, C#] Долгая компиляция
Здравствуйте, nikov, Вы писали:
N>Какой самый короткий код вы можете написать, чтобы он компилировался больше минуты?
Думаю, цель достигнута:
struct R<T1, T2, T3>
{
T1 m1;
T2 m2;
T3 m3;
}
struct R3<T>
{
R<T, T, T> m;
}
struct A<T>
{
R3<R3<R3<T>>> m;
}
struct B<T>
{
A<A<A<T>>> m;
}
struct C<T>
{
B<B<T>> m;
}
class R
{
C<int > q;
static void Main(string [] args)
{
}
}
Re[2]: [Этюд, C#] Долгая компиляция
Здравствуйте, Nuseraro, Вы писали:
N>Думаю, цель достигнута:
Неплохая первая попытка. А можешь уложиться меньше, чем в 100 байт?
Re[3]: [Этюд, C#] Долгая компиляция
От:
Spiceman
Дата: 22.07.10 10:44
Оценка:
Здравствуйте, nikov, Вы писали:
N>Неплохая первая попытка. А можешь уложиться меньше, чем в 100 байт?
А почему оно долго компилится?
Re[3]: [Этюд, C#] Долгая компиляция
Здравствуйте, nikov, Вы писали:
N>Здравствуйте, Nuseraro, Вы писали:
N>>Думаю, цель достигнута:
N>Неплохая первая попытка. А можешь уложиться меньше, чем в 100 байт?
Могу. 99.
struct R<T>{T a,b,c,d;}struct A<T>{R<R<R<R<T>>>>m;}struct B{A<A<A<A<int >>>>q;static void Main(){}}
Re[4]: [Этюд, C#] Долгая компиляция
Здравствуйте, Nuseraro, Вы писали:
N>Могу. 99.
N>struct R<T>{T a,b,c,d;}struct A<T>{R<R<R<R<T>>>>m;}struct B{A<A<A<A<int >>>>q;static void Main(){}}
Если выбросить ненужный метод Main, то получится 88. У меня есть решение в 65.
Re: [Этюд, C#] Долгая компиляция
Здравствуйте, nikov, Вы писали:
N>Какой самый короткий код вы можете написать, чтобы он компилировался больше минуты?
Вложенные лямбды, ломающие эвристики компайлера?
... << RSDN@Home 1.2.0 alpha 4 rev. 1476 on Windows 7 6.1.7600.0>>
Re[2]: [Этюд, C#] Долгая компиляция
Здравствуйте, AndrewVK, Вы писали:
N>>Какой самый короткий код вы можете написать, чтобы он компилировался больше минуты?
AVK>Вложенные лямбды, ломающие эвристики компайлера?
Такой способ есть, но, боюсь, в 100 байт здесь никак не уложиться.
Re[5]: [Этюд, C#] Долгая компиляция
От:
SaZ
Дата: 23.07.10 12:10
Оценка:
Здравствуйте, nikov, Вы писали:
N>Если выбросить ненужный метод Main, то получится 88. У меня есть решение в 65.
оффтоп: Владимир, не томите, выкладывайте уже
Re[6]: [Этюд, C#] Долгая компиляция
Здравствуйте, SaZ, Вы писали:
N>>Если выбросить ненужный метод Main, то получится 88. У меня есть решение в 65.
SaZ>оффтоп: Владимир, не томите, выкладывайте уже
Даже 62:
class X<A,B,C,D,E>{class Y:X<Y,Y,Y,Y,Y>{Y.Y.Y.Y.Y.Y.Y.Y.Y y;}}
Re[7]: [Этюд, C#] Долгая компиляция
Здравствуйте, nikov, Вы писали:
N>N>class X<A,B,C,D,E>{class Y:X<Y,Y,Y,Y,Y>{Y.Y.Y.Y.Y.Y.Y.Y.Y y;}}
N>
Жесть
Re[7]: [Этюд, C#] Долгая компиляция
От:
Spiceman
Дата: 23.07.10 12:27
Оценка:
Здравствуйте, nikov, Вы писали:
N>Даже 62:
N>N>class X<A,B,C,D,E>{class Y:X<Y,Y,Y,Y,Y>{Y.Y.Y.Y.Y.Y.Y.Y.Y y;}}
N>
Кажется я ошибся в выборе профессии.
Re[7]: [Этюд, C#] Долгая компиляция
От:
SE
Дата: 23.07.10 12:34
Оценка:
Здравствуйте, nikov, Вы писали:
N>N>class X<A,B,C,D,E>{class Y:X<Y,Y,Y,Y,Y>{Y .Y.Y.Y.Y.Y.Y.Y.Y y;}}
N>
У, шайтан. У меня студия завалилась даже без компиляции, я просто подвел указатель мыши к выделенному символу
Re[8]: [Этюд, C#] Долгая компиляция
Здравствуйте, SE, Вы писали:
SE>У, шайтан. У меня студия завалилась даже без компиляции, я просто подвел указатель мыши к выделенному символу
Такие вещи надо из командной строки компилировать
Кстати, получается сборка в 28 Мб.
Re[8]: [Этюд, C#] Долгая компиляция
От:
Nuseraro
Дата: 23.07.10 12:51
Оценка:
Здравствуйте, SE, Вы писали:
SE>Здравствуйте, nikov, Вы писали:
N>>N>>class X<A,B,C,D,E>{class Y:X<Y,Y,Y,Y,Y>{Y .Y.Y.Y.Y.Y.Y.Y.Y y;}}
N>>
SE>У, шайтан. У меня студия завалилась даже без компиляции, я просто подвел указатель мыши к выделенному символу
Ну такого результата я достиг довольно быстро за счет цепочки
using L1 = X<int,int,int>
using L2 = X<L1,L1,L1>
...
наводим мыхой на L10
Re[7]: [Этюд, C#] Долгая компиляция
Здравствуйте, nikov, Вы писали:
N>N>class X<A,B,C,D,E>{class Y:X<Y,Y,Y,Y,Y>{Y.Y.Y.Y.Y.Y.Y.Y.Y y;}}
N>
С++ аналогичное куда как быстрее рожает:
template <typename A, typename B, typename C, typename D, typename E>
struct X {
struct Y : public X<Y, Y, Y, Y, Y> {
typedef X<Y, Y, Y, Y, Y> base;
typename base::Y::base::Y::base::Y::base::Y::base::Y::base::Y::base::Y *x;
};
};
Ввиду того, что Y::Y — это сигнатура конструктора, присутствующего в С++ всегда по умолчанию, и перекрывающая вложенный тип Y, доставшийся от базового X, пришлось к вложенному Y указать явный путь через базовый тип. В любом случае, компилятор отрабатывает мгновенно.
Для дотнета там 5*5*9=255 всего типов надо сгенерить, т.е. C# компилятору тоже делать особо нечего в течении минуты. Как показала попытка посмотреть это все рефлектором, тормозит сам рантайм, а не компилятор, а вот это уже крайне неприятно. Да и 28 метров сборка — перегиб.
Re[3]: [Этюд, C#] Долгая компиляция
Здравствуйте, nikov, Вы писали:
N>Такой способ есть, но, боюсь, в 100 байт здесь никак не уложиться.
Ага. Надо Хейльсбергу про частичное применение рассказать
.
Есть логика намерений и логика обстоятельств,
последняя всегда сильнее .
Re[7]: [Этюд, C#] Долгая компиляция
Здравствуйте, nikov, Вы писали:
N>N>class X<A,B,C,D,E>{class Y:X<Y,Y,Y,Y,Y>{Y.Y.Y.Y.Y.Y.Y.Y.Y y;}}
N>
Что-то я туплю. Что здесь означает Y.Y?
Есть логика намерений и логика обстоятельств,
последняя всегда сильнее .
Re[8]: [Этюд, C#] Долгая компиляция
Здравствуйте, VladD2, Вы писали:
VD>Здравствуйте, nikov, Вы писали:
N>>N>>class X<A,B,C,D,E>{class Y:X<Y,Y,Y,Y,Y>{Y.Y.Y.Y.Y.Y.Y.Y.Y y;}}
N>>
VD>Что-то я туплю. Что здесь означает Y.Y?
А блин, понял. Это же рекурсивное определение.
А по уму как на такую фигню нужно реагировать? И вообще, в реальной жизни это может быть применено?
Есть логика намерений и логика обстоятельств,
последняя всегда сильнее .
Пока на собственное сообщение не было ответов, его можно удалить.
Удалить