Функпрог

Feb 02, 2010 02:13

Попробовал на днях F#. 
Для начала, о том, что меня поразило больше всего, так это смысловая красота языка) Прикольно до ужаса. Но за все надо платить.
Мне кто-то говорил, что MSIL генерируется F# лучше, чем С#. Но компиллятор, представляющий из себя тупую относительно человека программу, которая, к тому же, занимается дополнительным вычислением типов, на мой взгляд ПРИНЦИПИАЛЬНО НЕ МОЖЕТ посчитать это лучше, чем это сделает человек. Не буду голословен: 
(в начале  и в конце вывода - время начала выполнения и время конца выполнения соответственно).

Код на F#:

let d = System.DateTime.Now.ToLongTimeString()
printf "%s" d

let res1=[for i in 0..100 -> (i,i*i)]
printfn "Res1: =%A" res1

let f=System.DateTime.Now.ToLongTimeString();
printf "%s"f

Результат выполнения - 4 секунды. Однако... : 



Аналогичный код на C#:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace cs_anti
{
    class Program
    {
         struct mx{
             public mx(int _a, int _b)
             {
                 a = _a;
                 b = _b;
             }

public  int a;
              public  int b;
            }

static void Main(string[] args)
        {
            Console.WriteLine(DateTime.Now.ToLongTimeString());
            List m = new List();//особенно обратить внимание. НЕ массив, а именно List.
                                                              //Поправьте, если я не прав.

for (int i = 0; i < 100; ++i)
           {
               m.Add(new mx(i, i * i));
           }
           for (int i = 0; i < 100; ++i)
           {
               Console.Write(m[i].a.ToString()+" _"+m[i].b.ToString()+"_ ");
           }
           Console.WriteLine(DateTime.Now.ToLongTimeString());
           Console.ReadKey();
        }
    }
}

... и результат: менее секунды. Функпрог, да. Зато на F#  короче код.       Аминь.
 

Тест проводился на моем нетбуке HP Mini, 1.2 проц, 2 гига оперативы, IDE VS2010 для обоих.

Теперь немного о том, кто я такой (и заодно, половина объяснений, как формировалось мнение):

Языки: C++(MFC,STL,QT, всего дохуя), C#(в т.ч.ASP.NET), Assembler x86, Python(азы).
С++: в последнее время добавился богатый опыт переписки низкопроизводительных скриптов на Basic'ах вроде питона и матлаба (в тч VB.NET), которые использовались для решения разных задач на кафедре. На нем же пишу все для себя.
C# - опыт прикладного программирования (от правки кусков сайтов до написания программы обслуживания клиентов, персонала, и склада стрелкового объекта), решение научных задач (посчитать-сделать выводы-принять решение-показать кучу графиков. Выбрал из-за .NET оптимизатора, а также высоких темпов разработки, хотя немного медленней чем С++, даже на .NET'e),
Assembler (пара драйверов для клавиатуры, вирусы из дешевых книжек, пара курсовых богатым студентам =)), 
Python - как-то по непробиваемой дурости попытался написать на нем задачку для кафедры (как никак, для научных задач же), что кончилось выполнением программы в течении 5 минут, в то время как на C# это вылетало при первом проходе за 20, при втором уже за 3 секунды.
Exp Over.

Мысли добавить в эту копилку немного функпрога летают давно, но вот производительность и несколько непривычный синтаксис... Область применения - смелая молодежь, в пром. программировании практически не применяются, производительность - см. выше. Стоит ли..? Что-то я демотивирован.

P.S. Особо жду комментариев little_arhat'a. Благо шарит в сабже.

.net, c#, f#, программирование

Previous post Next post
Up