Internal Error
От: Аноним  
Дата: 01.05.11 22:30
Оценка:
Доброго времени суток...

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

скажите, пожалуйста, возможно это уже исправлено?

спасибо большое
Re: Internal Error
От: Дмитрий Украина  
Дата: 01.05.11 22:33
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Доброго времени суток...


ругается так:

Internal compiler error 'unbound internal type Nemerle.Builtins.Tuple`1', please report a bug to bugs.nemerle.org. You can try modifying program near this location
internal compiler error: assertion failed in file ncc\hierarchy\NamespaceTree.n, line 666: unbound internal type Nemerle.Builtins.Tuple`1


з.ы. повезло ведь еще, строка 666
Re: Internal Error
От: _nn_ www.nemerleweb.com
Дата: 02.05.11 09:01
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Доброго времени суток...


А>писал тут макрос, пишет, что проблема, отошли на багтрекер,

А>но я так понял, что все переехало на гугл.код, короче бросаю тут,

А>скажите, пожалуйста, возможно это уже исправлено?


А>спасибо большое


Не собралось.

Минимальный код:
namespace MacroLibrary1
{
    public macro Test1(e)
    {
        def intCode = [ <[ $(1 : int) ]> ];

        <[ (..$intCode) ]>
    }
}


using MacroLibrary1;

module Program
{
  Main() : void
  {
    def x = Test1("");
  }
}
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re[2]: Internal Error
От: Дмитрий Украина  
Дата: 02.05.11 09:57
Оценка:
Здравствуйте, _nn_, Вы писали:

короче, оно не хочет возвращать развернутую в кортеж последовательность,
это уже исправлено? или мне что-то нужно предпринять,
сейчас я возвращаю список, но по логике нужен именно кортеж.

спасибо большое!
Re[3]: Internal Error
От: _nn_ www.nemerleweb.com
Дата: 02.05.11 11:14
Оценка:
Здравствуйте, Дмитрий, Вы писали:

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


Д>короче, оно не хочет возвращать развернутую в кортеж последовательность,

Д>это уже исправлено? или мне что-то нужно предпринять,
Не исправлено.

Д>сейчас я возвращаю список, но по логике нужен именно кортеж.

Тут два варианта, либо оставить список, либо исправлять баг.
Если есть желание, можете попробовать его найти и исправить.

Д>спасибо большое!


http://rsdn.nemerleweb.com
http://nemerleweb.com
Re[2]: Internal Error
От: WolfHound  
Дата: 02.05.11 12:15
Оценка: 3 (2)
Здравствуйте, Дмитрий, Вы писали:

Д>

Д>Internal compiler error 'unbound internal type Nemerle.Builtins.Tuple`1', please report a bug to bugs.nemerle.org. You can try modifying program near this location
Д>internal compiler error: assertion failed in file ncc\hierarchy\NamespaceTree.n, line 666: unbound internal type Nemerle.Builtins.Tuple`1

Ты создаешь кортеж из одного элемента.
А в немерле их нет.

Я думаю что это скорее бага чем фича.
Хотя в рукописном коде оно и не нужно но в автогенеренном может пригодится.

Но в твоем случае результат используется в пользовательском коде.
Так что тебе нужно в любом случае смотреть сколько элементов возвращается.
И если возвращается один элемент то возвращать его, а не кортеж.
... << RSDN@Home 1.2.0 alpha 4 rev. 1472>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[3]: Internal Error
От: _nn_ www.nemerleweb.com
Дата: 02.05.11 12:41
Оценка: 2 (1)
Здравствуйте, WolfHound, Вы писали:

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


Д>>

Д>>Internal compiler error 'unbound internal type Nemerle.Builtins.Tuple`1', please report a bug to bugs.nemerle.org. You can try modifying program near this location
Д>>internal compiler error: assertion failed in file ncc\hierarchy\NamespaceTree.n, line 666: unbound internal type Nemerle.Builtins.Tuple`1

WH>Ты создаешь кортеж из одного элемента.
WH>А в немерле их нет.

WH>Я думаю что это скорее бага чем фича.

WH>Хотя в рукописном коде оно и не нужно но в автогенеренном может пригодится.

WH>Но в твоем случае результат используется в пользовательском коде.

WH>Так что тебе нужно в любом случае смотреть сколько элементов возвращается.
WH>И если возвращается один элемент то возвращать его, а не кортеж.

В макросе все просто:
        match (intCode)
        {
            | [a] => a
            | _ => <[ (..$intCode) ]>
        }


А вот в пользовательском коде как это используется?
Если имеем кортеж с одним элементом просто:
def x = Test1("");
def first = x[0];


А без кортежа только через late ?
Иначе получается, что на каждую компиляцию можем получить другой тип и под него нужно писать другой код.
using MacroLibrary1;

using System.Console;
using Nemerle.Late;

module Program
{
  F(a : int) : int
  {
      a
  }
  
  F[T](a : T) : int
  {
      (late a.Field0) :> int;
  }
    
  Main() : void
  {
      def x = Test1("");
      
      def first = F(x);
        
      System.Console.WriteLine($"$first");
  }
}


Тут бы пригодился ITuple, так можно просто было бы отличить тупл от значения.
А почему его нет ?
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re[4]: Internal Error
От: Дмитрий Украина  
Дата: 02.05.11 13:32
Оценка:
спасибо, все опять как всегда на поверхности
Re: Internal Error
От: _nn_ www.nemerleweb.com
Дата: 02.05.11 15:50
Оценка:
Здравствуйте, Аноним, Вы писали:

А>Доброго времени суток...


А>писал тут макрос, пишет, что проблема, отошли на багтрекер,

А>но я так понял, что все переехало на гугл.код, короче бросаю тут,

А>скажите, пожалуйста, возможно это уже исправлено?


А>спасибо большое


Я тут открыл бранч.
Добавил ITuple и тупл с одним элементом.

Проблемы которые нужно решить:
1. Не удалось добиться доступа по индексу:
Как это вообще реализовано в туплах ?
def a = (1,2);
def aa = a[0];

def x = Nemerle.Builtins.Tuple(1);
def xx = x[0]; // Как включить ?

2. Нет специального синтаксиса для тупла с одним элементом.
Как следствие нет возможности сопоставления с образцом.

А какой синтаксис должен собственно быть ?
Можно как в Python:
(a) — Просто переменная
(a,) — Тупл с одним аргументом

3. Нет возможности вызвать метод с одним аргументом имея тупл с одним аргументом.

Разрешите проблемы, и будет вам счастье
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re[2]: Internal Error
От: hardcase Пират http://nemerle.org
Дата: 02.05.11 17:13
Оценка: +1
Здравствуйте, _nn_, Вы писали:

__>А какой синтаксис должен собственно быть ?

__>Можно как в Python:
__>(a) — Просто переменная
__>(a,) — Тупл с одним аргументом

Вот потому их и нет в языке.
/* иЗвиНите зА неРовнЫй поЧерК */
Re[3]: Internal Error
От: hardcase Пират http://nemerle.org
Дата: 02.05.11 17:50
Оценка:
Здравствуйте, WolfHound, Вы писали:

WH>Я думаю что это скорее бага чем фича.

WH>Хотя в рукописном коде оно и не нужно но в автогенеренном может пригодится.

Я думаю где-то тут просто протекла абстракция.

1) Кортеж из двух и более элементов — Nemerle.Builtin.Tuple<...>
2) Кортеж из одного элемента — собственно сам элмент
3) Кортеж без элементов — тип void

Видимо где-то косяк с раскрытием кортежа с одного элемента.
/* иЗвиНите зА неРовнЫй поЧерК */
Re[2]: Internal Error
От: Аноним  
Дата: 03.05.11 21:07
Оценка:
Здравствуйте, _nn_, Вы писали:
__>Разрешите проблемы, и будет вам счастье

как по мне, то тюпл с одним элементом не нужен,
тюплы — они ведь в некотором смысле статичны,
т.е. на этапе компиляции программист прекрасно знает
сколько у него там элементов.

в моем случае (кстати это
Автор: _nn_
Дата: 02.05.11
мне очень помогло)
нужно возвращать одну строку из запроса,
я хотел написать макрос, чтобы можно было так:
def (id1, id2) = getOneRow("select id1, id2 from ...");


т.е чтобы возвращался тюпл, а кол-во элементов в нем зависела от запроса,
но поскольку запрос у меня статичный (для работы макроса),
то там где я это использую я точно знаю, что оно вернет.
а в случае одной колонки будет так:
def id1 = getOneRow("select id1 from ...");

а не так:
def (id1) = getOneRow("select id1 from ...");

и это я считаю полностью логичным.

как по мне, добавление тюпла с одним элементом не расширяет общность.

кстати, как тогда бы выглядело объявление типа тюпла с одним элементом?
Re[4]: Internal Error
От: _nn_ www.nemerleweb.com
Дата: 04.05.11 06:05
Оценка:
Здравствуйте, hardcase, Вы писали:

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


WH>>Я думаю что это скорее бага чем фича.

WH>>Хотя в рукописном коде оно и не нужно но в автогенеренном может пригодится.

H>Я думаю где-то тут просто протекла абстракция.


H>1) Кортеж из двух и более элементов — Nemerle.Builtin.Tuple<...>

H>2) Кортеж из одного элемента — собственно сам элмент
H>3) Кортеж без элементов — тип void

Следуя этой логиче должна быть возможность матчить туплы по размеру:
match (myTuple)
{
  | (a, b, c) => ()
  | (a, b) => ()
  | (a) => ()
  | () => ()
}


Но это не компилируется.

H>Видимо где-то косяк с раскрытием кортежа с одного элемента.
http://rsdn.nemerleweb.com
http://nemerleweb.com
Re[5]: Internal Error
От: hardcase Пират http://nemerle.org
Дата: 04.05.11 06:17
Оценка: 1 (1)
Здравствуйте, _nn_, Вы писали:

__>Следуя этой логиче должна быть возможность матчить туплы по размеру:

__>
__>match (myTuple)
__>{
__>  | (a, b, c) => ()
__>  | (a, b) => ()
__>  | (a) => ()
__>  | () => ()
__>}
__>


__>Но это не компилируется.


А теперь вопрос — какой тип у myTuple на этапе компиляции?
/* иЗвиНите зА неРовнЫй поЧерК */
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.