All streams
Search
Write a publication
Pull to refresh
69
0
Александр Фомин @Sane

User

Send message
Я запустил панели, убрал все пакеты unity и logout/login
Очень бы хотелось в коментариях увидеть подробности — какого рода проект, сколько времени ушло и т.п.
А какого рода проект?
Всем участникам подарили полный набор реклам партнеров (HP, Kingston, еще кого-то), флэшку на 2GB и бокал с логотипом VS2010 и MSDN. Также были розыгрыши кепок, бит и маек (? сам не видел, но люди с битами улыбали). После перезентаций разыгрывали призы — сертификаты на покупку софта, Microsoft Expression 3 (мне посчастливилось выйграть одну коробку :) ), один XBox, один нетбук, один ящик пива и байка с автографом не помню кого (которая ушла замечательной девушке Алле).
Мы создавали для нашего репозитроия: 6383 кадра, 3,5 суток рендеринга кадров, логи за четыре года, ~100000 коммитов, видео получилось 4 с половиной минуты.
На других компьютерах это будут обычные папки. Чтобы работало так, как ты хочешь — на другом компьютере тоже надо настроить хардлинки.
Только не линки, а хард-линки. Вот здесь описано подробнее. wiki.dropbox.com/TipsAndTricks/SyncOtherFolders
Смысл — в строгой типизации. Если бы был оператор methodof, то, например, при рефакторинге я бы не заботился о том, что надо еще поменять имена функций в строковых константах. Поэтому, например, я предпочитаю использовать вот такой вот метод:
private static string GetMethodName<T>(Expression<Action<T>> action)
{
	Expression body = action.Body;
	var mce = body as MethodCallExpression;
	if (mce != null)
		return mce.Method.Name;
	return null;
}

Который потом вызывается, например, так:
string beginMethodName = GetMethodName<Stream>(s => s.Read(null, 0, 0));
Оператора нет, а IL вызов есть. Именно такой код показывает Reflector.
У нас используется генерация asp страниц из xml — там используется рефлекшн, думаем перейти на expressions.
Expressions не в пример проще для создания, нежели Emit
i1 замыкается, но каждый цикл замыкается новая переменная, так что вроде все честно.
Вот такой вот код:
int s = 0;
for(int i=0;i<int.MaxValue;i++)
{
    int i1 = i;
    Expression<Func<int, int>> x = j => j + i1;
    Func<int, int> f = x.Compile();
    s += f(i);
    if (i % 100 == 0)
    {
        Console.WriteLine(s);
        GC.Collect();
    }
}
Console.WriteLine(s);


стабильно держится на 15 мегабайтах и не растет уже минут 10. А как сделано — тут я пас.
Параметров — это каких? (я забыл дженерик-параметры, да) Затраты на карринг несравнимо меньше, чем для поддержанание ооп в си. Вывод типов — да, в сишарпе никакой. Пары черех библиотеку классов — так и эксепшены тоже только через библиотеку.
Да, здесь согласен. Хотя DSL по большому счету — это разбор, так что считаем это вариантом разбора.
Поддержка карринга — это, в принципе, синтаксический сахар. Вполне можно написать набор вот таких вот функций:
Func<T1,Func<T2,TResult>> Curry(this Func<T1, T2, TResult> f)
{
  return a=>b=>f(a,b);
}
<pre/>

А вывод типов (хоть и ущербный) есть и в C#.
Опять-таки, вы реализовали ваш проект на C#. То есть, эта не та задача, которую ищет автор.
Писать в стиле и иметь поддержку в языке — немного разные вещи. C# имеет языковую поддержку.
Extension everything — это, конечно, прикольно, но extension static methods — это уже перебор.

Целью, кстати, было, именно найти задачи, а не фичи языка. Вот одна задача — синтаксический разбор, который действительно проще делать на F#. Но когда последний раз в коммерческом проекте вы делали синтаксический разбор, для которого Regex было мало?
Да, это понятно. Думаю, что F# откусит большой кусок функционального программирования, благодаря IDE и .NET. Но вряд ли он появится в рабочем наборе инструментов программиста. Тем более, что C# вобрал в себя многое из функционального программирования.

Information

Rating
Does not participate
Location
Минская обл., Беларусь
Date of birth
Registered
Activity