Модераторы: Partizan, gambit

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> F#, Личный опыт а общее мнение.... 
:(
    Опции темы
 
Ваше отнашение к F#
Изучил и активно использую [ 0 ]  [0.00%]
Учу и надеюсь пригодится [ 2 ]  [16.67%]
Интересуюсь [ 4 ]  [33.33%]
Нет никакого интереса [ 5 ]  [41.67%]
Очередная ерунда от Microsofta... [ 1 ]  [8.33%]
Всего проголосовавших: 12
В этом опросе возможен один вариант ответа
Гости не могут голосовать 
SKrivosein
Дата 15.3.2012, 15:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Идущий в даль
**


Профиль
Группа: Участник
Сообщений: 271
Регистрация: 9.6.2007
Где: Praha - Прага

Репутация: 4
Всего: 8



Собствено сабж. Сам "Интересуюсь" ну и хотелось бы акадимическое мнение  smile


--------------------
Оптимист - это плохо информированный человек.
user posted image

PM MAIL   Вверх
VSB
Дата 19.3.2012, 09:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 113
Регистрация: 23.8.2007

Репутация: 1
Всего: 2



"Приглядываю одним глазом"
PM MAIL   Вверх
SKrivosein
Дата 19.3.2012, 16:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Идущий в даль
**


Профиль
Группа: Участник
Сообщений: 271
Регистрация: 9.6.2007
Где: Praha - Прага

Репутация: 4
Всего: 8



В общем-целoм F# на VINGRAD проигрывает, никто ничего толком не знает (а если знает, не признаётся  smile )
Интересно бы было мнение (без рекламы MSDN), чегож он этот F такого умеет, что наш любимый С (у когото VB) с трудом...

Это сообщение отредактировал(а) SKrivosein - 19.3.2012, 21:12


--------------------
Оптимист - это плохо информированный человек.
user posted image

PM MAIL   Вверх
diadiavova
Дата 19.3.2012, 20:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 31
Всего: 142



Я поначалу воспринял язык с энтузиазмом(повелся на рекламу), начал изучать, но по мере изучения он нравился мне все меньше. В общем и целом не могу сказать, что я достаточно компетентен, чтобы мое мнение в этом вопросе имело вес, но, учитывая, что никто не высказывается... как говориться: "На безрыбье и рак - рыба".

За что обычно хвалят функциональные языки вообще и сабж в частности: в первую очередь это компактность изложения и удобство использования в многопоточных приложениях благодаря тому, что они обычно не работают с памятью непосредственно. Но применительно к сабжу компактность обеспечивается в большей степени питон-подобным синтаксисом. Да и я не уверен, что компактность - всегда так уж хорошо. Из основных языков нета я предпочтение отдаю вбнету, хотя он имеет более многословный синтаксис, чем к примеру си-шарп, но при этом код на нем гораздо читабельнее и работать с ним намного приятнее. 
Функциональных фишек в основных языках дотнета хватает, а то, что не реализовано - либо будет реализовано в ближайших версиях, либо является необходимостью в функциональных языках, а в ООЯ просто не нужно, в силу того, что там есть более удобные решения. Взять к примеру кортежи, для ФЯ это может и хорошее решение, но анонимные типы(решающие те же задачи) намного удобнее в использовании. Аналогично можно взять сравнение по образцу, которым так гордятся функциональщики, конечно вещь зачетная, но возникла она в силу особенности системы типов в функциональных языках.
При решении некоторых задач функциональные языки более удобны, поэтому некоторые функциональные DSL'ы - просто конфетки, но что до языков общего назначения, то я не уверен, что это хорошо. Кроме того, в настоящее время хорош тот язык, который хорошо поддерживаестя IDE, а с этим у ФЯ беда, я уже не говорю о том, что для них вообще плохо развиты некоторые типы инструментов, поскольку ФЯ никогда не были мейнстримом программирования. Например хороший средств оладки для них не существует. Иногда от функциональщиков можно услышать, что это дескать и не нужно для ФЯ, но это не так.

Это, конечно мое ИМХО и на объективность не претендую. Если есть желание освоиться с ФЯ, то изучение сабжа для дотнетчика  - самый комфортный путь, а ответить на вопрос
Цитата(SKrivosein @  19.3.2012,  17:01 Найти цитируемый пост)
чегож он этот F такого умеет, что наш любимый С (у когото VB) с трудом... 

я очень сильно затрудняюсь.


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
k0rvin
Дата 20.3.2012, 09:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 442
Регистрация: 24.1.2010

Репутация: нет
Всего: 5



Цитата(diadiavova @ 19.3.2012,  20:05)
Взять к примеру кортежи, для ФЯ это может и хорошее решение, но анонимные типы(решающие те же задачи) намного удобнее в использовании.

Можно такой пример использования анонимных типов вместо кортежей?

Цитата(diadiavova @ 19.3.2012,  20:05)
Аналогично можно взять сравнение по образцу, которым так гордятся функциональщики, конечно вещь зачетная, но возникла она в силу особенности системы типов в функциональных языках.

Так а чем вы недовольны в данном случае? Да, сопоставление с образцом и алгебраические типы данных неразрывны, но в чем проблема-то?


--------------------
“Object-oriented design is the roman numerals of computing.” — Rob Pike
All software sucks
PM MAIL   Вверх
diadiavova
Дата 20.3.2012, 10:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 31
Всего: 142



Цитата(k0rvin @  20.3.2012,  10:38 Найти цитируемый пост)
Можно такой пример использования анонимных типов вместо кортежей?

Для начала хотелось бы пример того, какие преимущества дают именно кортежи. Возможно я в них чего-то не понял, я ведь оговорился, что это было мнение дилетанта. Но насколько я понял, кортеж нужен для тех же целей, что и анонимный тип.
Цитата(k0rvin @  20.3.2012,  10:38 Найти цитируемый пост)
Так а чем вы недовольны в данном случае? Да, сопоставление с образцом и алгебраические типы данных неразрывны, но в чем проблема-то? 

Я разве сказал, что это проблема? Просто судя по отзывам функциональщиков это одна из вкусностей ФП, ради которых стоит заморачиваться на нем, в то время как на самом деле там это просто необходимость. То есть проблемы я тут не вижу, но и причин серьезно заняться функциональщиной тоже. В то же время, не стану возражать, если меня кто-то переубедит.



--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
k0rvin
Дата 20.3.2012, 11:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 442
Регистрация: 24.1.2010

Репутация: нет
Всего: 5



Цитата(diadiavova @ 20.3.2012,  10:06)
Для начала хотелось бы пример того, какие преимущества дают именно кортежи. Возможно я в них чего-то не понял, я ведь оговорился, что это было мнение дилетанта. Но насколько я понял, кортеж нужен для тех же целей, что и анонимный тип.

Например вернуть несколько значений из функции (синтаксис немного условный):
Код

fun quotientAndRemainder (x : Int, y : Int) : (Int, Int) {
    let q = 0;
    while (x > y) {
        x -= y;
        q += 1;
    }
    return (q, x);
}

let (q, r) = quotientAndRemainder (5, 3);

тут же вам и сразу разбор кортежа с помощью сопоставления с образцом в let-выражении. Как это будет выглядеть с анонимными типами?

Цитата(diadiavova @ 20.3.2012,  10:06)
Я разве сказал, что это проблема? Просто судя по отзывам функциональщиков это одна из вкусностей ФП, ради которых стоит заморачиваться на нем, в то время как на самом деле там это просто необходимость. То есть проблемы я тут не вижу, но и причин серьезно заняться функциональщиной тоже. В то же время, не стану возражать, если меня кто-то переубедит.

Необходимость не может быть "вкусной"? Впрочем вас никто не заставляет пользоваться сопоставлением, особенно в F#, где можно так же использовать классы. В хаскелле для размеченых кортежей автоматически создаются функции-геттеры для полей, думаю в F# это тоже есть. Но я просто не вижу причин им не пользоваться, там где оно удобно, а вот его отстутствие во многих мейнстримных языках меня сильно напрягает.

Это сообщение отредактировал(а) k0rvin - 20.3.2012, 11:28


--------------------
“Object-oriented design is the roman numerals of computing.” — Rob Pike
All software sucks
PM MAIL   Вверх
diadiavova
Дата 20.3.2012, 11:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 31
Всего: 142



Цитата(k0rvin @  20.3.2012,  12:26 Найти цитируемый пост)
Например вернуть несколько значений из функции (синтаксис немного условный):
Выделить всёкод C#

Анонимный тип для этого не подходит что ли? smile 

Цитата(k0rvin @  20.3.2012,  12:26 Найти цитируемый пост)
тут же вам и сразу разбор кортежа

Для анонимного типа разбор вообще не нужен, поскольку все объекты в него упакованные, по сути являются его свойствами и достучаться до них можно по именам, что намного удобнее.
Цитата(k0rvin @  20.3.2012,  12:26 Найти цитируемый пост)
Как это будет выглядеть с анонимными типами?
Как-то так я полагаю
Код

    static void Main(string[] args)
        {
            dynamic car = quotientAndRemainder(5, 3);
            Console.WriteLine("Quotient = {0}; Reminder = {1}", car.Quotient, car.Reminder);
        }

    static    object quotientAndRemainder(int x, int y)
        {
            int q = 0;
            while (x > y)
            {
                x -= y;
                q += 1;
            }
            return new { Quotient = q, Reminder = x };
        }
    }

Кроме того, если говорить о задаче возвращения результата целочисленного деления и остатка, то в библиотечной функции для этой цели используется аут-параметр, то есть возможность выбора способа.
Цитата(k0rvin @  20.3.2012,  12:26 Найти цитируемый пост)
Необходимость не может быть "вкусной"?

Я об этом и говорю. Так что же тогда там "вкусно"? smile 
Цитата(k0rvin @  20.3.2012,  12:26 Найти цитируемый пост)
 Впрочем вас никто не заставляет пользоваться сопоставлением, особенно в F#, где можно так же использовать классы.

Если на F# писать так же как на C#, то тогда вообще смысл теряется, хотя бы даже потому, что, как я уже писал выше, C# лучше поддерживается...намного лучше.
Цитата(k0rvin @  20.3.2012,  12:26 Найти цитируемый пост)
Но я просто не вижу причин им не пользоваться, там где оно удобно, а вот его отстутствие во многих мейнстримных языках меня сильно напрягает.

А я вот не вижу чем оно удобно, особенно если есть более удобные средства. 


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
k0rvin
Дата 20.3.2012, 12:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 442
Регистрация: 24.1.2010

Репутация: нет
Всего: 5



Цитата(diadiavova @ 20.3.2012,  11:53)
Анонимный тип для этого не подходит что ли? smile 

Я не знаю, что такое анонимные типы в C# потому и спрашиваю.

Цитата(diadiavova @ 20.3.2012,  11:53)
Для анонимного типа разбор вообще не нужен, поскольку все объекты в него упакованные, по сути являются его свойствами и достучаться до них можно по именам, что намного удобнее.

Это лишь субъективное мнение, не более. Я не вижу в данном случае большего удобства. Опять же никто не мешает вам сохранить кортеж полностью в одну переменную, если нужно.

Цитата(diadiavova @ 20.3.2012,  11:53)
Как-то так я полагаю
Код

...
new { Quotient = q, Reminder = x };

Теперь я знаю, что такое анонимные типы в C#. Это и есть размеченый кортеж.

Цитата(diadiavova @ 20.3.2012,  11:53)
Кроме того, если говорить о задаче возвращения результата целочисленного деления и остатка, то в библиотечной функции для этой цели используется аут-параметр, то есть возможность выбора способа.

Я рад за библиотечную функцию, но целочисленное деление и остаток был выбран лишь для примера. Я не вижу, чем использование out-параметров удобней возвращения кортежа.

Цитата(diadiavova @ 20.3.2012,  11:53)
А я вот не вижу чем оно удобно, особенно если есть более удобные средства.

Какие более удобные средства?


--------------------
“Object-oriented design is the roman numerals of computing.” — Rob Pike
All software sucks
PM MAIL   Вверх
diadiavova
Дата 20.3.2012, 12:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 31
Всего: 142



Цитата(k0rvin @  20.3.2012,  13:20 Найти цитируемый пост)
Я не вижу, чем использование out-параметров удобней возвращения кортежа.

Я не сказал, что это удобнее всегда, просто есть выбор и иногда это действительно удобнее. В данном случае удобно тем, что не требуются дополнительные типы для выполнения элементарной арифметической операции.
Цитата(k0rvin @  20.3.2012,  13:20 Найти цитируемый пост)
Это лишь субъективное мнение, не более. Я не вижу в данном случае большего удобства.

Если в конечном итоге это не более чем дело привычки, то опять-таки это плохой аргумент для того, чтобы окунуться в чудесный мир функционального программирования.
Цитата(k0rvin @  20.3.2012,  13:20 Найти цитируемый пост)
Теперь я знаю, что такое анонимные типы в C#. Это и есть размеченый кортеж.

Вопрос тогда в том, для чего нужны не размеченные? Да и я ведь с самого начала сказал, что все хорошее, что есть в ФП постепенно заимствуется, а кортежи привел в пример и сказал, что анонимные типы решают те же задачи. С этого и начался спор, не так ли?
Цитата(k0rvin @  20.3.2012,  13:20 Найти цитируемый пост)
Какие более удобные средства? 

Анонимный тип удобнее кортежа(по крайней мере не размеченного smile )


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
k0rvin
Дата 20.3.2012, 12:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 442
Регистрация: 24.1.2010

Репутация: нет
Всего: 5



Цитата(diadiavova @ 20.3.2012,  12:34)
Анонимный тип удобнее кортежа(по крайней мере не размеченного smile )

Я не вижу, чем это:
Код

dynamic car = quotientAndRemainder(5, 3);
Console.WriteLine("Quotient = {0}; Reminder = {1}", car.Quotient, car.Reminder);

удобней этого:
Код

let (q, r) = quotientAndRemainder(5, 3);
Console.WriteLine("Quotient = {0}; Reminder = {1}", q, r);

Лишней и ненужной переменной (car)?


--------------------
“Object-oriented design is the roman numerals of computing.” — Rob Pike
All software sucks
PM MAIL   Вверх
diadiavova
Дата 20.3.2012, 12:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 31
Всего: 142



Цитата(k0rvin @  20.3.2012,  13:41 Найти цитируемый пост)
Лишней и ненужной переменной (car)? 

Ну здесь же q и r фактически объявлены, разве нет? А если их будет не две, а больше? А если в рамках одной области видимости потребуется обработать несколько таких объектов(я имею в виду кортежи)? А как это сделать, чтобы отдельные элементы кортежей не смешивались с аналогичными элементами других кортежей того же типа? Ведь это был упрощенный частный пример. Анонимный тип позволяет сохранять его элементы упакованными в отдельные объекты и при этом работать с элементами, а здесь элементы должны быть сначала извлечены и причем отдельная переменная создается для каждого.


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
SKrivosein
Дата 20.3.2012, 14:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Идущий в даль
**


Профиль
Группа: Участник
Сообщений: 271
Регистрация: 9.6.2007
Где: Praha - Прага

Репутация: 4
Всего: 8



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

P.S. Например начинаются проблемы с забыванием родного (русского) языка  smile

Это сообщение отредактировал(а) SKrivosein - 20.3.2012, 14:06


--------------------
Оптимист - это плохо информированный человек.
user posted image

PM MAIL   Вверх
k0rvin
Дата 20.3.2012, 14:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 442
Регистрация: 24.1.2010

Репутация: нет
Всего: 5



Цитата(diadiavova @ 20.3.2012,  12:55)
Ну здесь же q и r фактически объявлены, разве нет? А если их будет не две, а больше? А если в рамках одной области видимости потребуется обработать несколько таких объектов(я имею в виду кортежи)? А как это сделать, чтобы отдельные элементы кортежей не смешивались с аналогичными элементами других кортежей того же типа? Ведь это был упрощенный частный пример. Анонимный тип позволяет сохранять его элементы упакованными в отдельные объекты и при этом работать с элементами, а здесь элементы должны быть сначала извлечены и причем отдельная переменная создается для каждого.

Угу, это был простой пример с простым решением, но ты как истинный ООПшник взял и все усложнил. =)


--------------------
“Object-oriented design is the roman numerals of computing.” — Rob Pike
All software sucks
PM MAIL   Вверх
diadiavova
Дата 20.3.2012, 16:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Доктор Зло(диагност, настоящий, с лицензией и полномочиями)
****


Профиль
Группа: Модератор
Сообщений: 5821
Регистрация: 14.8.2008
Где: В Коньфпольте

Репутация: 31
Всего: 142



Цитата(k0rvin @  20.3.2012,  15:34 Найти цитируемый пост)
Угу, это был простой пример с простым решением, но ты как истинный ООПшник взял и все усложнил. =) 

На этом простом примере код в обоих случаях получился практически одинаковым и различий не видно. К сожалению на практике все несколько сложнее и боюсь, в реальных примерах анонимные типы все-таки окажутся более удобными. Собственно об этом и речь. smile 
Цитата(SKrivosein @  20.3.2012,  15:02 Найти цитируемый пост)
Относительно F# буду и дальше "интересоватся" для расширения горизонта... но особо упорствовать навижу смысла.

Ну вот я примерно о том и сказал, что смысл если и есть, то увидеть его ну ооооочень сложно smile 


--------------------
Хочешь получить мудрый совет - читай подписи участников форумов.
Злой доктор Щасзаболит smile
PM   Вверх
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.1050 ]   [ Использовано запросов: 23 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.