Re[4]: Компиляция C# 4.0 в рамках проекта Nemerle
От: VladD2 Российская Империя www.nemerle.org
Дата: 17.10.10 13:37
Оценка:
Здравствуйте, Jack128, Вы писали:

J>а как на практике эту фичу заюзать??? Простого добавления файла *.cs в проэкт недостаточно.


Достаточно. Просто для этого нужно использовать последнюю версию компилятора которая еще не доступна в виде инсталлятора.

Чтобы попробовать это дело можно самостоятельно собрать проект:
http://nemerle.googlecode.com/svn/nemerle/trunk/snippets/peg-parser/CSharp/CSharpParser.sln
и скопировать получившиеся файлы в каталог где установлен Nemerle (по умолчанию %ProgramFiles%\Nemerle).
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[4]: Компиляция C# 4.0 в рамках проекта Nemerle
От: hardcase Пират http://nemerle.org
Дата: 17.10.10 13:39
Оценка: +1
Здравствуйте, Jack128, Вы писали:

J>а как на практике эту фичу заюзать??? Простого добавления файла *.cs в проэкт недостаточно.


Ну и добавлять нужно так, чтобы он был <Compile>, а не <Content> или <None>.

И оверквотить не надо.
/* иЗвиНите зА неРовнЫй поЧерК */
Re[5]: Компиляция C# 4.0 в рамках проекта Nemerle
От: Jack128  
Дата: 17.10.10 14:05
Оценка:
Здравствуйте, VladD2, Вы писали:

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


J>>а как на практике эту фичу заюзать??? Простого добавления файла *.cs в проэкт недостаточно.


VD>Достаточно. Просто для этого нужно использовать последнюю версию компилятора которая еще не доступна в виде инсталлятора.


VD>Чтобы попробовать это дело можно самостоятельно собрать проект:

VD>http://nemerle.googlecode.com/svn/nemerle/trunk/snippets/peg-parser/CSharp/CSharpParser.sln
VD>и скопировать получившиеся файлы в каталог где установлен Nemerle (по умолчанию %ProgramFiles%\Nemerle).

Угу, работает, сенкс. Правда студия ошибки показывает, но компилит..
Re[6]: Компиляция C# 4.0 в рамках проекта Nemerle
От: VladD2 Российская Империя www.nemerle.org
Дата: 17.10.10 14:12
Оценка:
Здравствуйте, Jack128, Вы писали:

J>Угу, работает, сенкс. Правда студия ошибки показывает, но компилит..


Это интеллисенс от MS. Он ни о C# 4.0, ни о Nemerle ничего не знает. Так что комплитить он будет только то, что есть в этом файле и некотором наборе (который известен только кому-то из MS) стандартных сборок.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[7]: Компиляция C# 4.0 в рамках проекта Nemerle
От: VladD2 Российская Империя www.nemerle.org
Дата: 17.10.10 14:13
Оценка:
Здравствуйте, VladD2, Вы писали:

J>>Угу, работает, сенкс. Правда студия ошибки показывает, но компилит..


VD>Это интеллисенс от MS. Он ни о C# 4.0, ни о Nemerle ничего не знает. Так что комплитить он будет только то, что есть в этом файле и некотором наборе (который известен только кому-то из MS) стандартных сборок.


Извиняюсь... прочел "комплитит" вместо "компилит".
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re: [Bug]
От: Jack128  
Дата: 17.10.10 15:05
Оценка: 18 (1)
Здравствуйте, hardcase, Вы писали:

при подключении такого файлика cs файлика к nemerle проэкту при компиляции вылазит ошибка:


Error 21 bad method name C:\Users\Женя\Documents\Visual Studio 2008\Projects\Project1\WindowsFormsApplication3\WindowsFormsApplication3\Maybe.cs 60 10 WindowsFormsApplication3


на вот этом методе: public static Maybe<U> SelectMany<T, U>(
this Maybe<T> m,
Func<T, Maybe<U>> k)


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

namespace Es.Common.Monads
{
    public class Maybe<T> : IEquatable<Maybe<T>>
    {
        public readonly static Maybe<T> Nothing = new Maybe<T>();
        public T Value { get; private set; }
        public bool HasValue { get; private set; }
        Maybe()
        {
            HasValue = false;
        }
        public Maybe(T value)
        {
            Value = value;
// ReSharper disable RedundantCast
            HasValue = ((object)value != null);
// ReSharper restore RedundantCast
        }

        public bool Equals(Maybe<T> other)
        {
            if (ReferenceEquals(null, other)) return false;
            if (ReferenceEquals(this, other)) return true;
            return Equals(other.Value, Value) && other.HasValue.Equals(HasValue);
        }

        public override bool Equals(object obj)
        {
            if (ReferenceEquals(null, obj)) return false;
            if (ReferenceEquals(this, obj)) return true;
            if (obj.GetType() != typeof (Maybe<T>)) return false;
            return Equals((Maybe<T>) obj);
        }

        public override int GetHashCode()
        {
            unchecked
            {
                return (Value.GetHashCode() * 397) ^ HasValue.GetHashCode();
            }
        }

        public static bool operator ==(Maybe<T> left, Maybe<T> right)
        {
            return Equals(left, right);
        }

        public static bool operator !=(Maybe<T> left, Maybe<T> right)
        {
            return !Equals(left, right);
        }
    }

    public static class MaybeExtentions
    {
        public static Maybe<U> SelectMany<T, U>(
             this Maybe<T> m,
             Func<T, Maybe<U>> k)
        {
            return m.HasValue ? k(m.Value) : Maybe<U>.Nothing;
        }

        public static Maybe<V> SelectMany<T, U, V>(
            this Maybe<T> m,
            Func<T, Maybe<U>> k,
            Func<T, U, V> s)
        {
            return m.SelectMany(x => k(x).SelectMany(y => s(x, y).ToMaybe()));
        }

        public static Maybe<T> ToMaybe<T>(this T value)
        {
            return new Maybe<T>(value);
        }
    }
}
Re[2]: [Bug]
От: hardcase Пират http://nemerle.org
Дата: 17.10.10 17:06
Оценка:
Здравствуйте, Jack128, Вы писали:

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


J>при подключении такого файлика cs файлика к nemerle проэкту при компиляции вылазит ошибка:


Поправил (два бага).

Сейчас компилятору не нравятся экстеншн методы:
m.SelectMany(x => k(x).SelectMany(y => s(x, y).ToMaybe()));


При замене на
MaybeExtentions.SelectMany(m, x => MaybeExtentions.SelectMany(k(x), y => MaybeExtentions.ToMaybe(s(x, y))));

файл компилируется (за исключением давней проблемы с реализацией IEquatable<T>).
/* иЗвиНите зА неРовнЫй поЧерК */
Re[3]: [Bug]
От: VladD2 Российская Империя www.nemerle.org
Дата: 17.10.10 19:36
Оценка:
Здравствуйте, hardcase, Вы писали:

H>Поправил (два бага).


H>Сейчас компилятору не нравятся экстеншн методы:

H>
H>m.SelectMany(x => k(x).SelectMany(y => s(x, y).ToMaybe()));
H>


Попытался воспроизвести этот баг на самом Nemerle:
using System;
using System.Console;
using System.Linq;

public class Maybe[T]
{
    public static Nothing : Maybe[T] = Maybe();
    public Value : T { get; private set; }
    public HasValue : bool { get; private set; }
}

public module Program
{
    public static SelectMany[T, U](this m : Maybe[T], k : Func[T, Maybe[U]]) : Maybe[U]
    {
        if (m.HasValue) k(m.Value) else Maybe.Nothing;
    }
        
  public static SelectMany[T, U, V](
      this m : Maybe[T],
      k : Func[T, Maybe[U]],
      s : Func[T, U, V]) : Maybe[V]
  {
    m.SelectMany(x => k(x).SelectMany(y => s(x, y).ToMaybe()))
  }

  public static ToMaybe[T](this _value : T) : Maybe[T] { null }

  Main() : void { }
}


Код успешно компилируется.

Так что одно из трех:
1. Ошибка все же в конверторе C# -> Nemerle.
2. Я не смог воспроизвести проблему.
3. Я пофиксил данную проблему в последнем комите.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[4]: [Bug]
От: VladD2 Российская Империя www.nemerle.org
Дата: 17.10.10 19:43
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>3. Я пофиксил данную проблему в последнем комите.


Мало-вероятно. Я поставил точку останова в то место обнаруживается зацикливание кортежа, но управление туда не пришло. Так что надо искать ошибку в другом месте.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[4]: [Bug]
От: hardcase Пират http://nemerle.org
Дата: 17.10.10 20:17
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Попытался воспроизвести этот баг на самом Nemerle:

VD>Код успешно компилируется.


Ок, я на недели посмотрю что там за ерунда творится.
/* иЗвиНите зА неРовнЫй поЧерК */
Re[5]: Компиляция C# 4.0 в рамках проекта Nemerle
От: Воронков Василий Россия  
Дата: 19.10.10 10:11
Оценка:
Здравствуйте, VladD2, Вы писали:

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

J>>а как на практике эту фичу заюзать??? Простого добавления файла *.cs в проэкт недостаточно.
VD>Достаточно. Просто для этого нужно использовать последнюю версию компилятора которая еще не доступна в виде инсталлятора.

А есть где список неподдерживаемых фич? Я так понимаю нет goto, наверное, еще что-то.
Re[6]: Компиляция C# 4.0 в рамках проекта Nemerle
От: hardcase Пират http://nemerle.org
Дата: 19.10.10 10:26
Оценка:
Здравствуйте, Воронков Василий, Вы писали:

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


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

J>>>а как на практике эту фичу заюзать??? Простого добавления файла *.cs в проэкт недостаточно.
VD>>Достаточно. Просто для этого нужно использовать последнюю версию компилятора которая еще не доступна в виде инсталлятора.

ВВ>А есть где список неподдерживаемых фич? Я так понимаю нет goto, наверное, еще что-то.


Тут
Автор: hardcase
Дата: 24.08.10
было.
Как появится свободное время, соберу все в одном месте.

Ко всему прочему еще не в полной мере работают операторы присваивания и инкремента/декремента (сейчас они имею семантику Nemerle и возвращают void).
/* иЗвиНите зА неРовнЫй поЧерК */
Re[7]: Компиляция C# 4.0 в рамках проекта Nemerle
От: Воронков Василий Россия  
Дата: 19.10.10 10:33
Оценка:
Здравствуйте, hardcase, Вы писали:

H>Тут
Автор: hardcase
Дата: 24.08.10
было.

H>Как появится свободное время, соберу все в одном месте.

Да, это было бы полезно.

H>Ко всему прочему еще не в полной мере работают операторы присваивания и инкремента/декремента (сейчас они имею семантику Nemerle и возвращают void).


Я так понимаю и присваивание возвращает void?
Re[8]: Компиляция C# 4.0 в рамках проекта Nemerle
От: hardcase Пират http://nemerle.org
Дата: 19.10.10 10:37
Оценка:
Здравствуйте, Воронков Василий, Вы писали:

ВВ>Я так понимаю и присваивание возвращает void?


Имеенно.
К сожалению (или счастью?), являясь крайне ленивым человеком, я никак не соберусь отрехакторить конвертер (вернее я уже пытался, но звезды не сошлись на небе) и наконец добавить пару воркэраундов для инкрементов и присваиваний.
/* иЗвиНите зА неРовнЫй поЧерК */
Re[6]: Компиляция C# 4.0 в рамках проекта Nemerle
От: VladD2 Российская Империя www.nemerle.org
Дата: 19.10.10 11:03
Оценка:
Здравствуйте, Воронков Василий, Вы писали:

ВВ>А есть где список неподдерживаемых фич? Я так понимаю нет goto, наверное, еще что-то.


http://rsdn.ru/forum/nemerle/3945731.1.aspx
Автор: hardcase
Дата: 03.09.10
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[6]: Компиляция C# 4.0 в рамках проекта Nemerle
От: VladD2 Российская Империя www.nemerle.org
Дата: 19.10.10 11:04
Оценка:
Здравствуйте, Воронков Василий, Вы писали:

ВВ>А есть где список неподдерживаемых фич? Я так понимаю нет goto, наверное, еще что-то.


Как раз goto можно и реализовать. Сложнее буде реализовать goto case.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[7]: Компиляция C# 4.0 в рамках проекта Nemerle
От: Воронков Василий Россия  
Дата: 19.10.10 11:12
Оценка:
Здравствуйте, VladD2, Вы писали:

ВВ>>А есть где список неподдерживаемых фич? Я так понимаю нет goto, наверное, еще что-то.

VD>http://rsdn.ru/forum/nemerle/3945731.1.aspx
Автор: hardcase
Дата: 03.09.10


Я так понимаю, этот список не совсем точен. ref/out прикрутили (?). Но при этом операции типа инкремента и присваивания работают не так, как в Шарпе. Может, еще какие вещи.
Re[7]: Компиляция C# 4.0 в рамках проекта Nemerle
От: Воронков Василий Россия  
Дата: 19.10.10 11:13
Оценка:
Здравствуйте, VladD2, Вы писали:

ВВ>>А есть где список неподдерживаемых фич? Я так понимаю нет goto, наверное, еще что-то.

VD>Как раз goto можно и реализовать. Сложнее буде реализовать goto case.

Почему? По идее особой разницы тут быть не должно.
Re[8]: Компиляция C# 4.0 в рамках проекта Nemerle
От: VladD2 Российская Империя www.nemerle.org
Дата: 19.10.10 11:15
Оценка: 1 (1)
Здравствуйте, Воронков Василий, Вы писали:

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


ВВ>>>А есть где список неподдерживаемых фич? Я так понимаю нет goto, наверное, еще что-то.

VD>>http://rsdn.ru/forum/nemerle/3945731.1.aspx
Автор: hardcase
Дата: 03.09.10


ВВ>Я так понимаю, этот список не совсем точен. ref/out прикрутили (?).


Да.

ВВ>Но при этом операции типа инкремента и присваивания работают не так, как в Шарпе.


Не уверен. Они в приципе могут быть реализованы не через немерловые макры ++ и --, а через:
<[ { $x++; $x } ]>

или что-то вроде того.

ВВ>Может, еще какие вещи.


Может.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[9]: Компиляция C# 4.0 в рамках проекта Nemerle
От: Воронков Василий Россия  
Дата: 19.10.10 11:20
Оценка:
Здравствуйте, VladD2, Вы писали:

ВВ>>Но при этом операции типа инкремента и присваивания работают не так, как в Шарпе.

VD>Не уверен. Они в приципе могут быть реализованы не через немерловые макры ++ и --, а через:
VD>
VD><[ { $x++; $x } ]>
VD>

VD>или что-то вроде того.
ВВ>>Может, еще какие вещи.

Хардкейс говорит, что такого нет. Понятно в принципе, что это не должно быть большой проблемой в реализации. Не уверен, впрочем, что и отсутствие этого является большой проблемой.
Хотелось бы просто увидеть полный актуальный список, так сказать.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.