Nemerle рулит! :)
От: VladD2 Российская Империя www.nemerle.org
Дата: 02.02.06 00:00
Оценка: 71 (9) -2 :))
Читая вот эту ветку Re[2]: System.IO
Автор: AndrewVK
Дата: 24.01.06

Озадачился тем, что даже в C# 3.0 с интелектом слабовато. Не может он вывести типы в ситауции:
Array.ConvertAll("1 4 2 0".ReadToEnd().Split(), int.Parse);

В чем дело понятно. Чтобы сделать вывод о типе возвращаемого значения Array.ConvertAll() нужно проделать нехилый анализ. Нужно сделать целое уравнение и решить его. Ведь Array.ConvertAll() требует в качестве второго параметра делегат, а int.Parse всего лишь функция которая может быть приведена к некоторому делегату. Если бы Array.ConvertAll() была бы хотя бы не дженерик-функцией, то было бы проще, но Array.ConvertAll() как раз дженерик.

Так вот, я и задумался. А возможно ли сделать такой вывод итпов? Вроде бы — да. Но может ли кто сделать это!
И тут я вспомнил, что создатели Nemerle вроде как хвалились, что в этом языке (созданном для .net Framework 2.0) вывод типов на высоте. Решил попробовать... и
using System;
using System.Console; // Nemerle допускает использовать в using члены классов.

class Program
{
    static Main() :  void
    {
        // Вывод типо допускает не указывать тип value! Он вычислится сам.
        // Причем можно даже не указывать лишнего ключевоего слова var как в C# 3.0.
        foreach (value in Array.ConvertAll("1 3 2 0".Split(' '), int.Parse))
            // Console я указал в using, так что здесь можно не писать лишнего :)
            WriteLine(value);
    }
}

получилось не то слово!
Этот код выводит:
1
3
2
0


Более того он умудряется вывести типы и в куда более сложных ситуациях. Например, если в строке среди значений окажется шесндцатирично число (например, "1 3 0x0F 2 0"), то привденный код работать не будет. Нужна более сложная функция для анализа префикса числа. Ее можно написать в виде анонимного метода или лямбды. Так вот Nemerle умудряется вывести типы даже для нее. Так что в прогамме можно вообще не вписать ни одной декларации типа и при этом программа будет не менее статически типизированная чем на C#:
using System;
using System.Console;
using System.Globalization;

class Program
{
    static Main() :  void
    {
        foreach (value in Array.ConvertAll("1 3 0x0F 2 0".Split(' '), 
            fun(str) // так в Nemerle описываются лябды (анонимные методы)
            { if (str.StartsWith("0x"))
                    int.Parse(str.Substring(2), NumberStyles.HexNumber)
                else
                    int.Parse(str)
            })
        )
            WriteLine(value); 
    }
}

Этот код выведет:
1
3
15
2
0


Эх, блин, к этому бы языку поддержку IDE с рефакторингом и боюсь лично для меня дни C# были бы сочтены. Хотя почему только C#? С++ бы потерял бы окончательный смысл тоже.
... << RSDN@Home 1.2.0 alpha rev. 637>>



03.02.06 12:28: Перенесено из '.NET'
http://nemerle.org/Banners/?g=dark
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re: Nemerle рулит! :)
От: Mckey Россия  
Дата: 02.02.06 05:05
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Читая вот эту ветку Re[2]: System.IO
Автор: AndrewVK
Дата: 24.01.06

VD>Озадачился тем, что даже в C# 3.0 с интелектом слабовато. Не может он вывести типы в ситауции:
VD>
VD>Array.ConvertAll("1 4 2 0".ReadToEnd().Split(), int.Parse);
VD>

VD>В чем дело понятно. Чтобы сделать вывод о типе возвращаемого значения Array.ConvertAll() нужно проделать нехилый анализ. Нужно сделать целое уравнение и решить его. Ведь Array.ConvertAll() требует в качестве второго параметра делегат, а int.Parse всего лишь функция которая может быть приведена к некоторому делегату. Если бы Array.ConvertAll() была бы хотя бы не дженерик-функцией, то было бы проще, но Array.ConvertAll() как раз дженерик.

VD>Так вот, я и задумался. А возможно ли сделать такой вывод итпов? Вроде бы — да. Но может ли кто сделать это!

VD>И тут я вспомнил, что создатели Nemerle вроде как хвалились, что в этом языке (созданном для .net Framework 2.0) вывод типов на высоте. Решил попробовать... и
VD>
VD>using System;
VD>using System.Console; // Nemerle допускает использовать в using члены классов.

VD>class Program
VD>{
VD>    static Main() :  void
VD>    {
VD>        // Вывод типо допускает не указывать тип value! Он вычислится сам.
VD>        // Причем можно даже не указывать лишнего ключевоего слова var как в C# 3.0.
VD>        foreach (value in Array.ConvertAll("1 3 2 0".Split(' '), int.Parse))
VD>            // Console я указал в using, так что здесь можно не писать лишнего :)
VD>            WriteLine(value);
VD>    }
VD>}
VD>

VD>получилось не то слово!
VD>Этот код выводит:
VD>
VD>1
VD>3
VD>2
VD>0
VD>


VD>Более того он умудряется вывести типы и в куда более сложных ситуациях. Например, если в строке среди значений окажется шесндцатирично число (например, "1 3 0x0F 2 0"), то привденный код работать не будет. Нужна более сложная функция для анализа префикса числа. Ее можно написать в виде анонимного метода или лямбды. Так вот Nemerle умудряется вывести типы даже для нее. Так что в прогамме можно вообще не вписать ни одной декларации типа и при этом программа будет не менее статически типизированная чем на C#:

VD>
VD>using System;
VD>using System.Console;
VD>using System.Globalization;

VD>class Program
VD>{
VD>    static Main() :  void
VD>    {
VD>        foreach (value in Array.ConvertAll("1 3 0x0F 2 0".Split(' '), 
VD>            fun(str) // так в Nemerle описываются лябды (анонимные методы)
VD>            { if (str.StartsWith("0x"))
VD>                    int.Parse(str.Substring(2), NumberStyles.HexNumber)
VD>                else
VD>                    int.Parse(str)
VD>            })
VD>        )
VD>            WriteLine(value); 
VD>    }
VD>}
VD>

VD>Этот код выведет:
VD>
VD>1
VD>3
VD>15
VD>2
VD>0
VD>


VD>Эх, блин, к этому бы языку поддержку IDE с рефакторингом и боюсь лично для меня дни C# были бы сочтены. Хотя почему только C#? С++ бы потерял бы окончательный смысл тоже.


Даааа.... А у него еще есть МАКРОСЫ (именно так) и такое метапрограммирование...
Но вот ИДЕшки точно не хватает...
Делай добро и бросай его в воду...
Re: Nemerle рулит! :)
От: ie Россия http://ziez.blogspot.com/
Дата: 02.02.06 07:04
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Озадачился тем, что даже в C# 3.0 с интелектом слабовато. Не может он вывести типы в ситауции:

VD>
VD>Array.ConvertAll("1 4 2 0".ReadToEnd().Split(), int.Parse);
VD>


Хмм. Далее по тексту поста ReadToEnd выпускается из рассмотрения. Да и действительно, тут выводом типов и не пахнет — банальный вызов конструктора StringReader или Nemerle и такое умеет? А как догадается что именно StringReader?

VD>Так вот, я и задумался. А возможно ли сделать такой вывод итпов? Вроде бы — да. Но может ли кто сделать это!

VD>И тут я вспомнил, что создатели Nemerle вроде как хвалились, что в этом языке (созданном для .net Framework 2.0) вывод типов на высоте. Решил попробовать... и

Да, недавно в проекте (fw1.1), над которым работаем, было написано несколько простеньких модулей на F#. Учим так сказать ФЯ. Видели ли вы, как пишут на ФЯ в императивном стиле — так вот это про нас . Думаю со временем станет лучше
Так вот были и моменты с похожими на ниженаписанный код участками. Так что, приведу аналогичные примеры на F#, что приятно все работает в fw1.1

VD>
VD>using System;
VD>using System.Console; // Nemerle допускает использовать в using члены классов.

VD>class Program
VD>{
VD>    static Main() :  void
VD>    {
VD>        // Вывод типо допускает не указывать тип value! Он вычислится сам.
VD>        // Причем можно даже не указывать лишнего ключевоего слова var как в C# 3.0.
VD>        foreach (value in Array.ConvertAll("1 3 2 0".Split(' '), int.Parse))
VD>            // Console я указал в using, так что здесь можно не писать лишнего :)
VD>            WriteLine(value);
VD>    }
VD>}
VD>


[F#] — такого тэга нет

open System
let _ = 
    Array.foreach 
        (Array.transform ("1 3 2 0".Split [|' '|]) (fun st -> int.Parse st)) 
        (fun n -> Console.WriteLine n);


Однако, тут мне не нравится: приходится писать fun st -> int.Parse st вместо банального int.Parse. Тоже и для Console.WriteLine. Вообще не понимаю что мешает разработчикам F# сделать неявное преобразование всех .NET методов к лямдам. Хотя

VD>Более того он умудряется вывести типы и в куда более сложных ситуациях. Например, если в строке среди значений окажется шесндцатирично число (например, "1 3 0x0F 2 0"), то привденный код работать не будет. Нужна более сложная функция для анализа префикса числа. Ее можно написать в виде анонимного метода или лямбды. Так вот Nemerle умудряется вывести типы даже для нее. Так что в прогамме можно вообще не вписать ни одной декларации типа и при этом программа будет не менее статически типизированная чем на C#:

VD>
VD>using System;
VD>using System.Console;
VD>using System.Globalization;

VD>class Program
VD>{
VD>    static Main() :  void
VD>    {
VD>        foreach (value in Array.ConvertAll("1 3 0x0F 2 0".Split(' '), 
VD>            fun(str) // так в Nemerle описываются лябды (анонимные методы)
VD>            { if (str.StartsWith("0x"))
VD>                    int.Parse(str.Substring(2), NumberStyles.HexNumber)
VD>                else
VD>                    int.Parse(str)
VD>            })
VD>        )
VD>            WriteLine(value); 
VD>    }
VD>}
VD>


На F# не менее красиво, ну и с выводом типов у них тоже все в порядке:

open System
open System.IO
open System.Globalization

let _ = 
    Array.foreach 
        (Array.transform 
            ("1 3 0x0F 2 0".Split [|' '|]) 
            (fun st -> 
                if st.StartsWith("0x") then 
                    int.Parse(st.Substring(2),NumberStyles.HexNumber) 
                else 
                    int.Parse st
            )
        ) 
        (fun n -> Console.WriteLine n);


Кстати, недавно прочитал статейку про стравливание F# и LINQ, сам пока не пробовал, но статейка занимательная.
... << RSDN@Home 1.1.4 beta 7 rev. 447>>
Превратим окружающую нас среду в воскресенье.
Re: Nemerle рулит! :)
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 02.02.06 09:14
Оценка: 1 (1) +5 -2 :))
Здравствуйте, VladD2, Вы писали:

VD>
VD>        foreach (value in Array.ConvertAll("1 3 0x0F 2 0".Split(' '), 
VD>            fun(str) // так в Nemerle описываются лябды (анонимные методы)
VD>            { if (str.StartsWith("0x"))
VD>                    int.Parse(str.Substring(2), NumberStyles.HexNumber)
VD>                else
VD>                    int.Parse(str)
VD>            })
VD>        )
VD>


Мне интересно, ты всегда в прикладном коде, где нужно распарсить строку с числами, будешь явно лямбду реализовывать (хардкодить, я бы сказал)? Или же ты ее в виде библиотечной функции оформишь?

VD>Эх, блин, к этому бы языку поддержку IDE с рефакторингом и боюсь лично для меня дни C# были бы сочтены. Хотя почему только C#? С++ бы потерял бы окончательный смысл тоже.


Не ровно ты дышишь к C++, однако. А зачем его списывать, если он уже давно подобные вещи позволяет делать. Вот пример кода двухгодичной давности:
using namespace std;
using namespace cpp_util_2;
using namespace cpp_util_2::lexcasts;

// Загрузить файл, в котором содержится шестнадцатиричное
// представление сообщения для разбора.
string
load_message_file(
    // Имя файла.
    const string & file,
    // Предыдущее значение. Возвращается, если разбор файла
    // завершиться неудачно.
    const string & old )
{
    std::ifstream f( file.c_str(), ios::in );
    if( f )
    {
        string content;
        for( istream_iterator< string > it( f ), it_end; it != it_end; ++it )
            content.append( 1, lexcast< char >( *it, def_putter(), hex_getter() ) );

        return content;
    }

    return old;
}


Берет файл вида:
0 f1 5D ed
00 23
16
27

и возвращает объект std::string, в котором содержится двоичные значения из файла.
Функции lexcast, def_putter, hex_getter -- это готовые функции из моей библиотеки.
Вместо hex_getter-а можно сделать своего getter-а, который будет распознавать систему счисления числа по его префиксу. И затем повторно использовать этого getter-а.

Так что, вместо того, чтобы списывать C++, можно всего лишь научиться им пользоваться.


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[2]: Nemerle рулит! :)
От: dshe  
Дата: 02.02.06 09:48
Оценка: +3 :))) :))
Здравствуйте, eao197, Вы писали:

E>Не ровно ты дышишь к C++, однако. А зачем его списывать, если он уже давно подобные вещи позволяет делать. Вот пример кода двухгодичной давности:


E>и возвращает объект std::string, в котором содержится двоичные значения из файла.

E>Функции lexcast, def_putter, hex_getter -- это готовые функции из моей библиотеки.

E>Так что, вместо того, чтобы списывать C++, можно всего лишь научиться им пользоваться.


Уникальная особенность C++ на мой взгляд заключается в том, что он настолько легко позволяет писать библиотеки, что по всему миру уже существуют миллионы "моих" библиотек, которые делают практически одно и то же.
--
Дмитро
Re[3]: Nemerle рулит! :)
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 02.02.06 09:56
Оценка: 1 (1) +1
Здравствуйте, dshe, Вы писали:

D>Уникальная особенность C++ на мой взгляд заключается в том, что он настолько легко позволяет писать библиотеки, что по всему миру уже существуют миллионы "моих" библиотек, которые делают практически одно и то же.


Есть такое дело. Очень просто объясняется -- нет в C++ единого центра масс, который бы аккумулировал усилия в наполнении C++ стандартными библиотеками. Никто не вкладывает в C++ тех денег, как MS в .NET или Sun в Java. Поскольку C++ никому не принадлежит.

Но, надеюсь, ситуация изменится. И, например, Boost станет таким центром. С Python/Ruby/Perl такое произошло. Значит это возможно.


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[2]: Nemerle рулит! :)
От: Programmierer AG  
Дата: 02.02.06 10:01
Оценка:
Здравствуйте, ie, Вы писали:

ie>[F#] — такого тэга нет

F# — это ОКамл, вид сбоку, есть тэг ml .
ie>
ie>open System
ie>let _ = 
ie>    Array.foreach 
ie>        (Array.transform ("1 3 2 0".Split [|' '|]) (fun st -> int.Parse st)) 
ie>        (fun n -> Console.WriteLine n);
ie>


ie>Однако, тут мне не нравится: приходится писать fun st -> int.Parse st вместо банального int.Parse. Тоже и для Console.WriteLine. Вообще не понимаю что мешает разработчикам F# сделать неявное преобразование всех .NET методов к лямдам. Хотя

Действительно, странно. Во всех ML-ах (fun x -> g x) эквивалентно g.

ie>На F# не менее красиво, ну и с выводом типов у них тоже все в порядке:

Ничего удивительного, ML все-таки. Если я не ошибаюсь, именно в ML впервые на практике применили вывод типов. Автор языка — Милнер, а система типов, до сих пор применяющаяся во многих ФЯ, называется системой типов Хиндли-Милнера.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[4]: Nemerle рулит! :)
От: MatFiz Россия  
Дата: 02.02.06 10:06
Оценка: 22 (1) +4 -1 :)
Здравствуйте, eao197, Вы писали:

E>Здравствуйте, dshe, Вы писали:


D>>Уникальная особенность C++ на мой взгляд заключается в том, что он настолько легко позволяет писать библиотеки, что по всему миру уже существуют миллионы "моих" библиотек, которые делают практически одно и то же.


E>Есть такое дело. Очень просто объясняется -- нет в C++ единого центра масс, который бы аккумулировал усилия в наполнении C++ стандартными библиотеками. Никто не вкладывает в C++ тех денег, как MS в .NET или Sun в Java. Поскольку C++ никому не принадлежит.


См. boost, например. Его же вроде даже в стандарт хотели включить.

Visual C++ принадлежит MS. И было время, когда MS вкладывала огромные деньги в плюсы. И не только деньги, а что более важно, закладывала технологии, основанные на плюсах (имею в виду MFC, например)
Просто время C++ прошло. Все.
Ты посмотри на свой код и скажи, сколько времени уйдет у нормального человека на то, чтобы в него воткнуть!
How are YOU doin'?
Re[5]: Nemerle рулит! :)
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 02.02.06 10:17
Оценка: 1 (1) +4
Здравствуйте, MatFiz, Вы писали:

MF>См. boost, например. Его же вроде даже в стандарт хотели включить.


Интересно, а ты мое сообщение внимательно прочитал?

Но, надеюсь, ситуация изменится. И, например, Boost станет таким центром.


MF>Visual C++ принадлежит MS. И было время, когда MS вкладывала огромные деньги в плюсы. И не только деньги, а что более важно, закладывала технологии, основанные на плюсах (имею в виду MFC, например)


Visual C++ -- это компилятор. А MFC -- это не технология. А уж стандартной библиотекой C++ (именно стандартной) MFC вообще никогда не была.

MF>Просто время C++ прошло. Все.


Еще один пророк. Может быть ты сможешь с ходу перечислить все предметные области, где C++ применяется сейчас? И покажешь, заодно, почему в этих областях время C++ прошло?

MF>Ты посмотри на свой код и скажи, сколько времени уйдет у нормального человека на то, чтобы в него воткнуть!


Этот вопрос лучше было бы в форуме по C/C++ задать.




2VladD2: извини, Влад. Здесь офтопик начался. Лучше эту ветку выделить куда-нибудь или вообще грохнуть.


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[3]: Nemerle рулит! :)
От: ie Россия http://ziez.blogspot.com/
Дата: 02.02.06 10:25
Оценка:
Здравствуйте, Programmierer AG, Вы писали:

PA>Здравствуйте, ie, Вы писали:


ie>>[F#] — такого тэга нет

PA>F# — это ОКамл, вид сбоку, есть тэг ml .

Гут, не знал про такой тэг. Моя версия RSDN@Home тоже не знает

ie>>Однако, тут мне не нравится: приходится писать fun st -> int.Parse st вместо банального int.Parse. Тоже и для Console.WriteLine. Вообще не понимаю что мешает разработчикам F# сделать неявное преобразование всех .NET методов к лямдам. Хотя

PA>Действительно, странно. Во всех ML-ах (fun x -> g x) эквивалентно g.

Да и тут так же, просто с .NET методами так. Почему так сделано, пока не нашел, буду курить мануалы.

ie>>На F# не менее красиво, ну и с выводом типов у них тоже все в порядке:

PA>Ничего удивительного, ML все-таки. Если я не ошибаюсь, именно в ML впервые на практике применили вывод типов. Автор языка — Милнер, а система типов, до сих пор применяющаяся во многих ФЯ, называется системой типов Хиндли-Милнера.

Да собственно и не удивляюсь Хотя если не использовать отчего-то ставший deprecated Array.foreach, а использовать Array.iter, то в выделенном возникает проблема с выводом:
Array.iter 
    (fun n -> Console.WriteLine n)
    (Array.map 
        (fun st -> int.Parse st)
        ("1 3 2 0".Split [|' '|]) 
    );


Хотя проблем с выводом типа n я не вижу. Однако, так проблем с выводом уже не возникает:

(Array.map 
    (fun st -> int.Parse st)
    ("1 3 2 0".Split [|' '|]) 
) |> Array.iter (fun n -> Console.WriteLine n);
... << RSDN@Home 1.1.4 beta 7 rev. 447>>
Превратим окружающую нас среду в воскресенье.
Re[2]: Nemerle рулит! :)
От: Дарней Россия  
Дата: 02.02.06 10:38
Оценка: 1 (1) +6 :))) :))) :))) :))) :))
Здравствуйте, eao197, Вы писали:

E> for( istream_iterator< string > it( f ), it_end; it != it_end; ++it )

E> content.append( 1, lexcast< char >( *it, def_putter(), hex_getter() ) );


честное слово, на это даже смотреть страшно.

E>Так что, вместо того, чтобы списывать C++, можно всего лишь научиться им пользоваться.


Наверно, хорошо приготовленные кошки — это тоже неплохо. Но я всё-таки предпочитаю свинину
... << RSDN@Home 1.1.4 stable rev. 510>>
Всех излечит, исцелит
добрый Ctrl+Alt+Delete
Re[3]: Nemerle рулит! :)
От: VladGalkin Украина  
Дата: 02.02.06 11:25
Оценка: +1 :))) :)
Здравствуйте, Дарней, Вы писали:
Д>Наверно, хорошо приготовленные кошки — это тоже неплохо. Но я всё-таки предпочитаю свинину
Ну почему, почему у форума С/С++ нет своего подразделения розовых слоников?
... << RSDN@Home 1.1.4 stable rev. 510>>
ДЭ!
Re[6]: Nemerle рулит! :)
От: MatFiz Россия  
Дата: 02.02.06 11:33
Оценка: +1 :)
Здравствуйте, eao197, Вы писали:

E>Здравствуйте, MatFiz, Вы писали:


E>Visual C++ -- это компилятор. А MFC -- это не технология. А уж стандартной библиотекой C++ (именно стандартной) MFC вообще никогда не была.

Компилятор порождает язык
Не важно. Смысл в том, что МС делала большие ставки на C++, используя его в своих продуктах, но тем не менее отказалась от него. Очевидно, это неспроста. Это было к твоему утверждению, что

Никто не вкладывает в C++ тех денег, как MS в .NET или Sun в Java. Поскольку C++ никому не принадлежит.

А про стандартность MFC я ничего и не говорил.


MF>>Просто время C++ прошло. Все.


E>Еще один пророк. Может быть ты сможешь с ходу перечислить все предметные области, где C++ применяется сейчас? И покажешь, заодно, почему в этих областях время C++ прошло?

Нет, не перечислю. Боюсь забыть что-нибудь — я же человек .
Код пишет человек. Человек ошибается и забывает очищать память. Язык без сборки мусора на уровне языка — не язык для современных разработок.
Плюсы — антигуманны.
На C++ можно DSP-микросхемы прогать (хотя там компиляторы только для чистого C делаются обычно).

MF>>Ты посмотри на свой код и скажи, сколько времени уйдет у нормального человека на то, чтобы в него воткнуть!


E>Этот вопрос лучше было бы в форуме по C/C++ задать.

Это не вопрос. Максимум, это риторический вопрос.
Или ты видишь знак вопроса в конце моего предложения (не этого )?

Прошу прощения за элементы флудности.
How are YOU doin'?
Re[2]: Nemerle рулит! :)
От: VladD2 Российская Империя www.nemerle.org
Дата: 02.02.06 15:16
Оценка:
Здравствуйте, eao197, Вы писали:

E>Мне интересно, ты всегда в прикладном коде, где нужно распарсить строку с числами, будешь явно лямбду реализовывать (хардкодить, я бы сказал)? Или же ты ее в виде библиотечной функции оформишь?


Когда это удобно. Нечь в сообщении не о том.

E>Не ровно ты дышишь к C++, однако. А зачем его списывать, если он уже давно подобные вещи позволяет делать.


Что? Выводить типы? У тебя случаем не галюцинации?

E> Вот пример кода двухгодичной давности:


Учись читать то о чем идет речь. А речь шала о возможности вывода типа. Попробуй на досуге написать на С++ программу в которой не будет указано ни одного типа.
... << RSDN@Home 1.2.0 alpha rev. 637>>
http://nemerle.org/Banners/?g=dark
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[3]: Nemerle рулит! :)
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 02.02.06 16:17
Оценка: +1 -1 :)
Здравствуйте, VladD2, Вы писали:

VD>Когда это удобно. Нечь в сообщении не о том.


E>>Не ровно ты дышишь к C++, однако. А зачем его списывать, если он уже давно подобные вещи позволяет делать.


VD>Что? Выводить типы? У тебя случаем не галюцинации?


Нет, не галюцинации. Смотрим:
            { if (str.StartsWith("0x"))
                    int.Parse(str.Substring(2), NumberStyles.HexNumber)
                else
                    int.Parse(str)
            })


Тип указан? Указан.
У меня:
lexcast< char >( *it, def_putter(), hex_getter() )

так же указан тип, но при обращении к def_putter::operator() и hex_getter::operator() компилятор сам выводит тип операнда для этих операторов.

VD>Попробуй на досуге написать на С++ программу в которой не будет указано ни одного типа.


У меня встречное предложение: попробуй переписать свой пример без указания типов. Получится?


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re: Nemerle рулит! :)
От: Константин Ленин Турция  
Дата: 02.02.06 17:04
Оценка: 11 (1) +1 -3
Здравствуйте, VladD2, Вы писали:

Это конечно все круто, но есть 2 нюанса

1) зачем городить такой код для таких простейших операций?
2) Если его городить для "непростых" операций, то как вы это все будете сопровождать

И вывод: узкая применимость, возможность получить неудобочитаемые ошибки( впрочем как и в с++ при большом нагромождении шаблонов и метапрогр. ) и непредвиденное поведение. Человек все равно умнее, и полагаться на "выводы" компайлера/интерпретера нужно осторожно
Re[4]: Nemerle рулит! :)
От: Воронков Василий Россия  
Дата: 02.02.06 17:29
Оценка: +1
Здравствуйте, eao197, Вы писали:

E>У меня встречное предложение: попробуй переписать свой пример без указания типов. Получится?


А для вас есть указание типов, ы? Если заменить int.Parse на Convert.ToInt32, то указание типов исчезнет?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[3]: Nemerle рулит! :)
От: Воронков Василий Россия  
Дата: 02.02.06 17:33
Оценка: -3
Здравствуйте, Дарней, Вы писали:

E>> for( istream_iterator< string > it( f ), it_end; it != it_end; ++it )

E>> content.append( 1, lexcast< char >( *it, def_putter(), hex_getter() ) );

Д>честное слово, на это даже смотреть страшно.

А мне вот на аналог кода на F# смотреть страшно
Да и у версии на этом N# тоже, как говорится, "вкус специфический".

E>>Так что, вместо того, чтобы списывать C++, можно всего лишь научиться им пользоваться.

Д>Наверно, хорошо приготовленные кошки — это тоже неплохо. Но я всё-таки предпочитаю свинину

Это тоже вопрос — что лучше: хорошо приготовленная кошка или свинина "с душком"
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[5]: Nemerle рулит! :)
От: Константин Ленин Турция  
Дата: 02.02.06 17:36
Оценка:
Здравствуйте, Воронков Василий, Вы писали:

ВВ>Здравствуйте, eao197, Вы писали:


E>>У меня встречное предложение: попробуй переписать свой пример без указания типов. Получится?


ВВ>А для вас есть указание типов, ы? Если заменить int.Parse на Convert.ToInt32, то указание типов исчезнет?


В том то и дело, что не исчезнет. Нельзя сказать сделай то, сам не знаю чего
Re[5]: Nemerle рулит! :)
От: GlebZ Россия  
Дата: 02.02.06 18:37
Оценка: +1
Здравствуйте, Воронков Василий, Вы писали:

E>>У меня встречное предложение: попробуй переписать свой пример без указания типов. Получится?

ВВ>А для вас есть указание типов, ы? Если заменить int.Parse на Convert.ToInt32, то указание типов исчезнет?
Выводимость типов не значит что их нет. Это значит что типы откуда-то выводятся. А значит это откуда-то существует.(без явного указания обычно по константам и далее по графу).
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.