Re[6]: [Lib] Принимаются пожелания по стандартной библиотеке
От: Ziaw Россия  
Дата: 19.12.10 19:19
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>На самом деле это не так. "is" в Немерле — это паттерн, а не булево выражение. Но смысл, да, близкий.


хм... был уверен, что булево а почему оно не возвращает bool? мне видится код ниже нелогичным, есть какие-то причины?
def s = "";

def test1 = if (s is string) true else false; // test1 : bool
def test2 = s is string;                           // test2 : string


VD>В данном случае это тоже не соввсем верно. ":" в паттерн-матчинге — это старый синтаксис для is. Его пометили как деприкейтед именно потому, что его действие шло в разрез со смыслом оператора ":" в языке. Так что впринципе upcast тоже будет работать:


эх... нужна внятная дока и спека по языку
Re[8]: [Lib] Принимаются пожелания по стандартной библиотеке
От: VladD2 Российская Империя www.nemerle.org
Дата: 19.12.10 19:47
Оценка: 1 (1)
Здравствуйте, hardcase, Вы писали:

H>А, ну значит двоеточие. Я эти времена не застал, просто видел мельком в исходниках.


Двоеточие и сейчас поддерживается. Только помечено как деприкетед. Надо бы до релиза убрать его поддержку.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[7]: [Lib] Принимаются пожелания по стандартной библиотеке
От: VladD2 Российская Империя www.nemerle.org
Дата: 19.12.10 19:58
Оценка:
Здравствуйте, Ziaw, Вы писали:

Z>хм... был уверен, что булево а почему оно не возвращает bool? мне видится код ниже нелогичным, есть какие-то причины?

Z>
Z>def s = "";

Z>def test1 = if (s is string) true else false; // test1 : bool
Z>def test2 = s is string;                           // test2 : string
Z>


Это уже использование аналогичного по имени макроса. Но этот макрос несколько сложнее нежели оператор шарпа. В нем допускается паттерн-матчинг. Например:
using System.Console;

def value : option[_] = Some(1);

WriteLine(value is Some(_)); // True
WriteLine(value is Some(1)); // True
WriteLine(value is Some(2)); // False

Более того оператор when тоже особым образом понимает этот оператор, так что можно писать даже так:
using System.Console;

def value : option[_] = Some(1);

when (value is Some(x))
  WriteLine(x); // 1


Z>эх... нужна внятная дока и спека по языку


Сделаем. Можешь присоединяться, кстати .
Язык Nemerle задумывался как книга-учебник-мануал. Я хочу сделать так... Дописать еще две части к ней. Одна будет посвящена ООП, а вторая макросам. Оставшаяся часть будет документацией в стиле QuickC (лучшей, на мой взгляд, образец документации). Она будет выстроена в форме: Фича -> краткое описание -> короткий пример.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[7]: [Lib] Принимаются пожелания по стандартной библиотеке
От: VladD2 Российская Империя www.nemerle.org
Дата: 19.12.10 20:30
Оценка:
Здравствуйте, Ziaw, Вы писали:

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


VD>>На самом деле это не так. "is" в Немерле — это паттерн, а не булево выражение. Но смысл, да, близкий.


Z>хм... был уверен, что булево а почему оно не возвращает bool? мне видится код ниже нелогичным, есть какие-то причины?

Z>
Z>def s = "";

Z>def test1 = if (s is string) true else false; // test1 : bool
Z>def test2 = s is string;                           // test2 : string
Z>


Почему второе строка? Оба выражения возвращают булеан. Просто в том виде что ты привел они вообще вряд ли работают, так как тип известен на этапе компиляции. А вот так:
def s : object = "";

def test1 = if (s is string) true else false; // test1 : bool
def test2 = s is string;

WriteLine(test1.GetType());
WriteLine(test2.GetType());

должно работать.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[8]: [Lib] Принимаются пожелания по стандартной библиотеке
От: Ziaw Россия  
Дата: 19.12.10 20:37
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Почему второе строка? Оба выражения возвращают булеан. Просто в том виде что ты привел они вообще вряд ли работают, так как тип известен на этапе компиляции. А вот так:

VD>
VD>def s : object = "";

VD>def test1 = if (s is string) true else false; // test1 : bool
VD>def test2 = s is string;

VD>WriteLine(test1.GetType());
VD>WriteLine(test2.GetType());
VD>

VD>должно работать.

Да все ок, где-то я облажался в тесте, но я его уже убил .
Re[4]: [Lib] Принимаются пожелания по стандартной библиотеке
От: Klapaucius  
Дата: 21.12.10 08:19
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Я ни разу не подлючал именно гугль-экаунты. У всех до этого были жмэйлы.


По-моему, это одно и то же.

VD>Если я правильно понял, твой экаунт это klapaucius.the.constructor?

VD>Я его подключил в коммитеры. Попробуй. Если я ошибся, сообщи мне об этом и напиши точное имя экаунта.

Все в порядке. По крайней мере, я теперь числюсь коммитером.

VD>Ну, так может поднажмешь?


Да, но вообще мне нужно на многих фронтах поднажать, помимо этого.

VD>Или возьмешь кого-то в помощники?


А что, есть желающие мне помогать?

VD>Я очень хочу до конца года выолжить релиз-кандидат в который хочу включить и эту библиотеку. А то не будет реальных откликов.


Я, конечно, постараюсь, но ничего гарантировать не могу.
... << RSDN@Home 1.2.0 alpha 4 rev. 1476>>
'You may call it "nonsense" if you like, but I'VE heard nonsense, compared with which that would be as sensible as a dictionary!' (c) Lewis Carroll
Re[2]: [Lib] Принимаются пожелания по стандартной библиотеке
От: Klapaucius  
Дата: 21.12.10 08:19
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Поглядел исходники. В них используется пространство имен System.Linq и типы от туда (например, Enumerable).

VD>Многие высказывались, что используют 2-ой фрэймворк для развертывания своих приложений. Так что стандартная бибилотека не должна быть основана на библиотеках из 3+ фрэймворков.

Это, конечно, плохо. Придется писать свой HashSet.

VD>Что такое SeqSeq в таблице API?


Там перечислены методы с окончанием Seq (т.е. не обобщенные версии, которые выбирают конкретную реализацию, а именно версии для IEnumerable. Многие из них я вообще сделаю private или internal) из модуля Seq.
Это автогенерируемая таблица для моего собственного удобства. главное — не нужно думать, что для окончания работы нужны плюсы во всех клетках. Надо будет, наверное, указать то, что планируется реализовать, а то такая таблица может постороннего наблюдателя дизориентировать.

VD>Может лучше переименовать MaxIndex в UpperBound?


Я думал об этом, это был первоначальный вариант, но тут из названия не ясно, верхняя граница включительно или не включительно, т.е. можно ли обращаться по индексу равному UpperBound. А в случае MaxIndex это очевидно. Поскольку весь смысл этого метода — возможность писать
i in [0 .. arr.MaxIndex()]

а не
i in [0 .. arr.Length-1]

я решил что MaxIndex лучше, хотя это вопрос дискуссионный, конечно.

VD>В добавок к методам XxxOrNone нужно бы добавить методы XxxOrDefault.


Да, для быстрых операций вроде Head это имеет смысл, там накладные расходы при использовании WithDefault вроде конструирования и деконструкции option будут заметны.
... << RSDN@Home 1.2.0 alpha 4 rev. 1476>>
'You may call it "nonsense" if you like, but I'VE heard nonsense, compared with which that would be as sensible as a dictionary!' (c) Lewis Carroll
Re[3]: [Lib] Принимаются пожелания по стандартной библиотеке
От: VladD2 Российская Империя www.nemerle.org
Дата: 21.12.10 12:42
Оценка:
Здравствуйте, Klapaucius, Вы писали:

K>Это, конечно, плохо. Придется писать свой HashSet.


Да, но его можно написать на базе хэш-таблицы. Я сейчас в компиляторе частенько ее использую вместо HashSet-а. А при переходе на 4-й фрэймворк можно подставить базовым классом стандартный HashSet.

VD>>Может лучше переименовать MaxIndex в UpperBound?


K>Я думал об этом, это был первоначальный вариант, но тут из названия не ясно, верхняя граница включительно или не включительно, т.е. можно ли обращаться по индексу равному UpperBound. А в случае MaxIndex это очевидно.


Может я конечно очень давно живу, но как-то еще со времен Васика привык что Bound — это граница. А для длинны обычно Length используется.

VD>>В добавок к методам XxxOrNone нужно бы добавить методы XxxOrDefault.


K>Да, для быстрых операций вроде Head это имеет смысл, там накладные расходы при использовании WithDefault вроде конструирования и деконструкции option будут заметны.


Это для всех методов полезно будет. Во-первых, иногда приходится и скорость выжимать, а создание объектов (option[]) точно ее не добавляет. Во-вторых, частенько бывает так, что default() — это то что нужно в качестве стартового значения. Например, для целых "0" почти всегда хорошо подходит. Получается меньше писанины.

ЗЫ

В ближайшее время хотим выложить релиз-кандитат. Было бы здорово если бы ты к этому времени таки перенес библиотеку в Nemerle.dll.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.