очередная попытка знакомства
От: MAMOHT  
Дата: 27.06.13 07:50
Оценка:
Использую VS2012 и NemerleSetup-net-4.5-v1.2.6.0

Создал библиотеку классов Nemerle. Переписал с C# пару классов.
Получаю такое сообщение.
1>------ Построение начато: проект: CoreN, Конфигурация: Debug Any CPU ------
1>C:\Program Files (x86)\Nemerle\Net-4.0\Nemerle.MSBuild.targets(289,5): error : internal compiler error: got some unknown exception of type System.IndexOutOfRangeException: Индекс находился вне границ массива.
1> в System.RuntimeType.MakeArrayType(Int32 rank)
1> в Nemerle.Compiler.FixedType.GetSystemType()
1> в Nemerle.Compiler.ILEmitter.emit(TExpr expr)
1> в Nemerle.Compiler.ILEmitter.emit(TExpr expr)
1> в Nemerle.Compiler.ILEmitter.emit_debug_info(DebugInfo di)
1> в Nemerle.Compiler.ILEmitter.emit(TExpr expr)
1> в Nemerle.Compiler.ILEmitter.emit(TExpr expr)
1> в Nemerle.Compiler.ILEmitter.emit_debug_info(DebugInfo di)
1> в Nemerle.Compiler.ILEmitter.emit(TExpr expr)
1> в Nemerle.Compiler.ILEmitter.emit(TExpr expr)
1> в Nemerle.Compiler.ILEmitter.emit(TExpr expr)
1> в Nemerle.Compiler.ILEmitter.emit(TExpr expr)
1> в Nemerle.Compiler.ILEmitter.Run()
1> в Nemerle.Compiler.MethodBuilder._N__N_lambda__69172__69279.apply_void()
1> в Nemerle.Compiler.TypeBuilder.BeforeFinalizeType()
1> в Nemerle.Compiler.TypeBuilder.EmitImplementation()
1> в Nemerle.Compiler.TypesManager._N_emit_impl__61958.apply_void(TypeBuilder ti)
1> в Nemerle.Compiler.TypesManager._N_maybe_f__62211.apply_void(TypeBuilder ti)
1> в Nemerle.Collections.NList.Iter[T](list`1 l, FunctionVoid`1 f)
1> в Nemerle.Compiler.TypesManager.Iter(list`1 builders, FunctionVoid`1 f)
1> в Nemerle.Compiler.TypesManager.compile_all_tyinfos(Boolean aux_phase)
1> в Nemerle.Compiler.TypesManager._N__N_lambda__61310__61413.apply_void()
1> в Nemerle.Compiler.Solver.Enqueue(FunctionVoid action)
1> в Nemerle.Compiler.ManagerClass.Run()
1> в Nemerle.CommandlineCompiler.MainClass.main_with_catching()
1>Построение проекта "CoreN.nproj" завершено с ошибкой.

Смущает то, что он почему-то ломится на Net-4.0
Re: очередная попытка знакомства
От: MAMOHT  
Дата: 27.06.13 09:18
Оценка:
Здравствуйте, MAMOHT, Вы писали:

MAM>Использую VS2012 и NemerleSetup-net-4.5-v1.2.6.0


MAM>Создал библиотеку классов Nemerle. Переписал с C# пару классов.

MAM>Получаю такое сообщение.
1>>------ Построение начато: проект: CoreN, Конфигурация: Debug Any CPU ------
1>>C:\Program Files (x86)\Nemerle\Net-4.0\Nemerle.MSBuild.targets(289,5): error : internal compiler error: got some unknown exception of type System.IndexOutOfRangeException: Индекс находился вне границ массива.
1>> в System.RuntimeType.MakeArrayType(Int32 rank)
1>> в Nemerle.Compiler.FixedType.GetSystemType()
1>> в Nemerle.Compiler.ILEmitter.emit(TExpr expr)
1>> в Nemerle.Compiler.ILEmitter.emit(TExpr expr)
1>> в Nemerle.Compiler.ILEmitter.emit_debug_info(DebugInfo di)

Вроде падает из-за такой конструкции:


   def l = array();
вуа
Re[2]: очередная попытка знакомства
От: _NN_ www.nemerleweb.com
Дата: 27.06.13 09:43
Оценка:
Здравствуйте, MAMOHT, Вы писали:

MAM>
MAM>   def l = array();
MAM>


Баг.
Так тоже падает.
def a = array.[1]();



Неясно только как у вас получился такой код
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re[2]: очередная попытка знакомства
От: WolfHound  
Дата: 27.06.13 10:10
Оценка:
Здравствуйте, MAMOHT, Вы писали:

MAM>Вроде падает из-за такой конструкции:

MAM>
MAM>   def l = array();
MAM>

Бага. Тут должно быть нормальное сообщение об ошибке, а не вылет.

Не очень понятно, что ты хотел этим кодом сказать? array(размер) создаёт массив определенного размера. Так что ему нужно передать размер.
... << RSDN@Home 1.2.0 alpha 5 rev. 62>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[3]: очередная попытка знакомства
От: MAMOHT  
Дата: 27.06.13 10:53
Оценка:
Здравствуйте, WolfHound, Вы писали:

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


MAM>>Вроде падает из-за такой конструкции:

MAM>>
MAM>>   def l = array();
MAM>>

WH>Бага. Тут должно быть нормальное сообщение об ошибке, а не вылет.

WH>Не очень понятно, что ты хотел этим кодом сказать? array(размер) создаёт массив определенного размера. Так что ему нужно передать размер.


чудовищно оптимизированный код на шарпе
Сейчас я переписал на array(0), вроде работает.

protected Card[] _list = null;
public Pack(String aStr)
{
    _list = new Card[0];
                
    String[] cards = aStr.Trim().Split(' ');
    
    int i=0;
    foreach(var c in cards)
    {
        Add(new Card(c){
            Index = i
            });
        i++;
    }
}

public int Add(Card aCard)
{            
    int res = _list.Length + 1;
    Array.Resize(ref _list, res);
    _list[Count - 1] = new Card(aCard);
    return res;
}


Если подскажете, как это будет выглядеть на Nemerle — буду благодарен.

Буду читать статьи и по возможности избавляться от императивщины.
Re[4]: очередная попытка знакомства
От: WolfHound  
Дата: 27.06.13 11:01
Оценка:
Здравствуйте, MAMOHT, Вы писали:

MAM>чудовищно оптимизированный код на шарпе

Ты уверен, что этот код оптимизирован?
Просто я вижу алгоритм со сложностью O(N^2) на ровном месте.
... << RSDN@Home 1.2.0 alpha 5 rev. 62>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[2]: очередная попытка знакомства
От: hardcase Пират http://nemerle.org
Дата: 27.06.13 11:13
Оценка:
Здравствуйте, MAMOHT, Вы писали:


MAM>Вроде падает из-за такой конструкции:



MAM>
MAM>   def l = array();
MAM>



Fixed. Странно, что никто раньше на эти грабли не наступал.
/* иЗвиНите зА неРовнЫй поЧерК */
Re[4]: очередная попытка знакомства
От: _NN_ www.nemerleweb.com
Дата: 27.06.13 11:16
Оценка:
Здравствуйте, MAMOHT, Вы писали:


MAM>Буду читать статьи и по возможности избавляться от императивщины.

Если нужна супер оптимизация, то от императива в итоге не уйти.
Но его можно спрятать за красивым слоем макросов как сделано в Nemerle.Peg
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re[5]: очередная попытка знакомства
От: MAMOHT  
Дата: 27.06.13 11:24
Оценка:
Здравствуйте, WolfHound, Вы писали:

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


MAM>>чудовищно оптимизированный код на шарпе

WH>Ты уверен, что этот код оптимизирован?
WH>Просто я вижу алгоритм со сложностью O(N^2) на ровном месте.

Ну вот люблю я абстракции . Увлекся.
Хотя, да, при желании, можно в одну строку запилить.
Сейчас сам попробую.

Спасибо всем.
Re[4]: очередная попытка знакомства
От: STDray http://stdray.livejournal.com
Дата: 27.06.13 15:46
Оценка:
MAM>Если подскажете, как это будет выглядеть на Nemerle — буду благодарен.

Я может не очень понял, смысл происходящего, но стандартный список будет быстрее колдунства в Add. Могу предложить такой вариант на Nemerle:
[Record]
class Card {
    public Str   : string;
    public Index : int;
}
class Test {
    _list : List[Card] = List();
    public Pack(str : string) : void {
        str.Trim().Split(' ').Select((s, i) => Card(s, i))
        |> _list.AddRange
    }
    public Add(card : Card) : int {
        _list.Add(card);
        _list.Count
    }
}

Не знаю, насколько это соответствует изначальной идее, поскольку не указанно, что именно требуется сделать.
Re[5]: очередная попытка знакомства
От: MAMOHT  
Дата: 28.06.13 04:43
Оценка:
Здравствуйте, STDray, Вы писали:

MAM>>Если подскажете, как это будет выглядеть на Nemerle — буду благодарен.


STD>Я может не очень понял, смысл происходящего, но стандартный список будет быстрее колдунства в Add. Могу предложить такой вариант на Nemerle:


Смысл был в глюке компилятора, на который может напороться только зеленый новичек. Ну и доку надо читать. Хотя работа с массивами в немерле очень непривычна Чего только точка стОит, до сих пор не пойму ее смысл.

За код спасибо.
й
Re[6]: очередная попытка знакомства
От: _NN_ www.nemerleweb.com
Дата: 28.06.13 07:09
Оценка: 3 (1)
Здравствуйте, MAMOHT, Вы писали:

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


MAM>>>Если подскажете, как это будет выглядеть на Nemerle — буду благодарен.


STD>>Я может не очень понял, смысл происходящего, но стандартный список будет быстрее колдунства в Add. Могу предложить такой вариант на Nemerle:


MAM>Смысл был в глюке компилятора, на который может напороться только зеленый новичек. Ну и доку надо читать. Хотя работа с массивами в немерле очень непривычна Чего только точка стОит, до сих пор не пойму ее смысл.



Про какую точку идет речь ?

Если про массивы, тут вот есть описание зачем точка.
Вкратце , чтобы отличать array[2] — массив с одним элементом 2 от array.[2] — двумерный массив.

http://www.rsdn.ru/article/nemerle/Nemerle-design.xml
Автор(ы): Чистяков Владислав Юрьевич
Дата: 20.02.2012
Те, кто начинает изучать язык программирования Nemerle после C#, зачастую задаются вопросом, почему при общей похожести языков в Nemerle введены те или иные синтаксические отличия. Эта статься посвящена описанию отличий и объяснению причин их возникновения.




var ary = new int[1];
ary[0] = 42;

var ary = new int[] { 42 };
var ary = new [] { 42 };

// явное указание типа переменной
int[] ary = new [] { 42 };

// массив массивов (вложенный массив)
int[][] ary = new[] { new[] { 42 } };
var ary = new[] { new[] { 42 }, new[] { 33, 1 } };

// многомерные массивы
var ary = new[,] { { 42, 1 }, { 33, 2 } };
Console.WriteLine(ary[0, 0]);


def ary = array(1);
ary[0] = 42; // тип выводится из использования

def ary = array[1];


// явное указание типа переменной
def ary : array[int] = array[1];

// массив массивов (вложенный массив)
def ary : array[array[int]] = array[array[42]];
def ary = array[array[42], array[33, 1]];

// многомерные массивы
def ary = array.[2][[42]];
def ary = array.[2][[42, 1], [33, 2]];

Или же про типы ? List.[int] ?
То тут это объясняется тем что есть неоднозначность — либо индекс, либо тип.
В C# решается за счет введения <> для обобщений , что приводит к другой неоднозначности
В Nemerle для обобщений используется [], а для доступа .[].
Компилятор старается помочь и вывести точку сам, но не всегда удается.

Тут
Автор(ы): Чистяков Владислав Юрьевич
Дата: 20.02.2012
Данная часть посвящена синтаксису Nemerle.
вот об этом написано:

Обратите внимание, что при указании параметров типов у конструкторов обобщенных типов необходимо указывать «.» для устранения неоднозначности с индексаторами. Это не очень красивое решение. Однако в Nemerle почти всегда можно просто не указывать параметры типов вовсе. Как показано в примере выше, Nemerle сам выводит значения параметров типов из использования.

http://rsdn.nemerleweb.com
http://nemerleweb.com
Re[7]: очередная попытка знакомства
От: MAMOHT  
Дата: 28.06.13 08:59
Оценка:
Здравствуйте, _NN_, Вы писали:

_NN>Про какую точку идет речь ?


_NN>Если про массивы, тут вот есть описание зачем точка.

_NN>Вкратце , чтобы отличать array[2] — массив с одним элементом 2 от array.[2] — двумерный массив.

Да, именно про эту точку. К счастью, многомерный массив не часто нужен.
Спасибо за разъяснения.
Re[5]: очередная попытка знакомства
От: MAMOHT  
Дата: 28.06.13 09:03
Оценка:
Здравствуйте, STDray, Вы писали:

MAM>>Если подскажете, как это будет выглядеть на Nemerle — буду благодарен.

STD> _list : List[Card] = List();
STD> public Pack(str : string) : void {
STD> str.Trim().Split(' ').Select((s, i) => Card(s, i))
STD> |> _list.AddRange
STD> }

А что за конструкция "|>"? Во всех статья поискал — нету, только ":>".
По смыслу, вроде "направить все что слева, как аргумент вправо". Да?
Re[6]: очередная попытка знакомства
От: hardcase Пират http://nemerle.org
Дата: 28.06.13 09:18
Оценка:
Здравствуйте, MAMOHT, Вы писали:

MAM>А что за конструкция "|>"? Во всех статья поискал — нету, только ":>".

MAM>По смыслу, вроде "направить все что слева, как аргумент вправо". Да?

Да.
x |> f |> g
переписывается в
g(f(x))
/* иЗвиНите зА неРовнЫй поЧерК */
Re[6]: очередная попытка знакомства
От: Sinclair Россия https://github.com/evilguest/
Дата: 05.07.13 07:24
Оценка:
Здравствуйте, MAMOHT, Вы писали:

MAM>Ну вот люблю я абстракции . Увлекся.

Дело не в абстракциях, а об понимании поведения платформы. Если хочется залудить свой List<T>, то неплохо бы разобраться, почему List<T> реализован так, как он реализован (а не так, как у вас).
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[7]: очередная попытка знакомства
От: MAMOHT  
Дата: 06.07.13 13:11
Оценка:
Здравствуйте, Sinclair, Вы писали:

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


MAM>>Ну вот люблю я абстракции . Увлекся.

S>Дело не в абстракциях, а об понимании поведения платформы. Если хочется залудить свой List<T>, то неплохо бы разобраться, почему List<T> реализован так, как он реализован (а не так, как у вас).

Да да, мне очень стыдно, честно. Зато я знаю, когда надо писать предлог "о", а когда "об"
Re[8]: очередная попытка знакомства
От: DarthSidius  
Дата: 08.08.13 07:17
Оценка: +1 :)
Здравствуйте, MAMOHT, Вы писали:

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


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


MAM>>>Ну вот люблю я абстракции . Увлекся.

S>>Дело не в абстракциях, а об понимании поведения платформы. Если хочется залудить свой List<T>, то неплохо бы разобраться, почему List<T> реализован так, как он реализован (а не так, как у вас).

MAM>Да да, мне очень стыдно, честно. Зато я знаю, когда надо писать предлог "о", а когда "об"


Ну да, ну да
Там должен быть "в"
... << RSDN@Home (RF) 1.2.0 alpha 5 rev. 58>>
♠♠♥♠♠♦♥
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.