Re[3]: Почему в качестве statement может быть только assigment, call, increment
От: IT Россия linq2db.com
Дата: 23.01.14 14:41
Оценка:
Здравствуйте, Doc, Вы писали:

Doc>На nemerle не писал, поэтому как-то не заметил что данный код легко читаемый.


Это быстро проходит.

Doc>А вот конструкция вида

...
Doc>IMHO будет понятна большей части разрабочиков, писавших на C#, C/C++, JS, PHP, VB.

Синтаксис лямбд в C# уже не требует return и как-то все до сих пор живы и счастливы. Так что return действительно лишний элемент в языке.
Если нам не помогут, то мы тоже никого не пощадим.
Re[6]: Почему в качестве statement может быть только assigment, call, increment
От: DarkEld3r  
Дата: 23.01.14 15:35
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>А вот если ты знаешь, что return-ов нет в принципе, то ситуация в корне меняется.

Хочу уточнить один момент — ты выше пишешь, что в Немерле ретурн использовать можно. То есть гарантий (что его не будет) всё-таки нет? Или он там ведёт себя как-то иначе?
Re[6]: Почему в качестве statement может быть только assigment, call, increment
От: Doc Россия http://andrey.moveax.ru
Дата: 23.01.14 16:29
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>А вот если ты знаешь, что return-ов нет в принципе, то ситуация в корне меняется. Ты уже знаешь, что выполнение не прервется где-то выше.


Т.е. в исходном примере точки true, false и name1.Equals(name2) не являются прерывающими?

VD>И код начинает выглядеть по другому. В коде появляются четкие потоки управления.


Ну тогда это вполне реализуемо и на C#

bool retVal;

if (name1 == name2)
  retVal = true;
else if (null == name1 || null == name2)
  retVal = false
else
  retVal = name1.Equals(name2)

return retVal;


Хотя кончено, как говориться, на вкус и цвет товарищей нет.
Re[4]: Почему в качестве statement может быть только assigment, call, increment
От: Doc Россия http://andrey.moveax.ru
Дата: 23.01.14 16:32
Оценка:
Здравствуйте, IT, Вы писали:

Doc>>На nemerle не писал, поэтому как-то не заметил что данный код легко читаемый.

IT>Это быстро проходит.

Ну с привычной и asm читать легко

IT>Синтаксис лямбд в C# уже не требует return и как-то все до сих пор живы и счастливы. Так что return действительно лишний элемент в языке.


Что-то не встречал лямбд в экране высотой.
Re[5]: Почему в качестве statement может быть только assigment, call, increment
От: IT Россия linq2db.com
Дата: 23.01.14 17:27
Оценка:
Здравствуйте, Doc, Вы писали:

Doc>>>На nemerle не писал, поэтому как-то не заметил что данный код легко читаемый.

IT>>Это быстро проходит.
Doc>Ну с привычной и asm читать легко

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

IT>>Синтаксис лямбд в C# уже не требует return и как-то все до сих пор живы и счастливы. Так что return действительно лишний элемент в языке.

Doc>Что-то не встречал лямбд в экране высотой.

У тебя есть прибор для измерения правильности лямбд? Дай попользоваться.
Если нам не помогут, то мы тоже никого не пощадим.
Re[7]: Почему в качестве statement может быть только assigment, call, increment
От: IT Россия linq2db.com
Дата: 23.01.14 17:38
Оценка:
Здравствуйте, DarkEld3r, Вы писали:

VD>>А вот если ты знаешь, что return-ов нет в принципе, то ситуация в корне меняется.

DE>Хочу уточнить один момент — ты выше пишешь, что в Немерле ретурн использовать можно. То есть гарантий (что его не будет) всё-таки нет? Или он там ведёт себя как-то иначе?

return в Немерле представляет собой подключаемый макрос и для его использования нужно сделать определённые телодвижения. Отличие одно — им можно сделать выход из глубин вложенности, что само по себе уже является функциональной ересью.
Если нам не помогут, то мы тоже никого не пощадим.
Re[7]: Почему в качестве statement может быть только assigment, call, increment
От: VladD2 Российская Империя www.nemerle.org
Дата: 23.01.14 17:39
Оценка: 1 (1)
Здравствуйте, DarkEld3r, Вы писали:

DE>Хочу уточнить один момент — ты выше пишешь, что в Немерле ретурн использовать можно. То есть гарантий (что его не будет) всё-таки нет? Или он там ведёт себя как-то иначе?


Дело в том, что return, continue, break реализованы в виде макросов. Для использования return, continue, break нужно открыть (using-ом) пространство имен Nemerle.Imperative.

В коде может быть именованный блок:
public FirstFailedIndex : int
{
  get
  {
    ret:
    {
      def state = _parseResult.ast[AstPointer + 2];
      when (state != ParseResult.AstParsedState)
      {
        foreach (rule in Sequence.Subrules with i)
          when (rule.State > state)
            ret(i - 1);

        ret(Sequence.Subrules.Length - 1);
      }
      -1
    }
  }
}


На практике, они встречаются очень редко.

Кроме того в команде вырабатывается соглашение (у нас оно негласно выработалось) не применять return, continue, break или именованные блоки внутри больших функций и вообще, без особой необходимости. Так что на практике можно быть уверенным, что код их не содержит.

Хотя есть код где не только return, но и goto есть. Мне даже пришлось реализовать макрос goto для этого, так как раньше в языке goto не поддерживалось. Wolfhound считает, что с ними писать алгоритмы парсинга проще. В основном это генерируемый код. Но 7 goto в гражданском коде есть .

В общем, ничего не должно становиться догмой. 99% нашего кода не имеет даже return-ов, но это не означает, что мы совсем против него. Просто это дает реальные преимущества на практике.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[7]: Почему в качестве statement может быть только assigment, call, increment
От: VladD2 Российская Империя www.nemerle.org
Дата: 23.01.14 18:00
Оценка:
Здравствуйте, Doc, Вы писали:

Doc>Т.е. в исходном примере точки true, false и name1.Equals(name2) не являются прерывающими?


Нет. Это естественные окончания ветвей исполнения. Если после них написать что-то вроде:
public static @==(name1 : Identifier, name2 : Identifier) : bool
{
  if (name1 : object == name2)
    true
  else if (null == name1 || null == name2)
    false
  else
    name1.Equals(name2);

  true
}

то функция всегда будет возвращать true, а компилятор выдаст предупреждение о том, что значение выражения "if..." теряется.
Первое время это не привычно, но потом не понимаешь как жил без этого раньше.

Doc>Ну тогда это вполне реализуемо и на C#

Doc>
Doc>bool retVal;

Doc>if (name1 == name2)
Doc>  retVal = true;
Doc>else if (null == name1 || null == name2)
Doc>  retVal = false
Doc>else
Doc>  retVal = name1.Equals(name2)

Doc>return retVal;
Doc>


Для частного случая — да. В общем, это очень неудобно/невозможно и никто так писать не будет. А для приведенного случая и return-ы сойдут. Тут ведь весь код на ладони.

Doc>Хотя кончено, как говориться, на вкус и цвет товарищей нет.


Все знакомые кто пробовал так писать дольше месяца сходятся во мнении, что "return не нужен". Как правильно сказал IT в лямбдах шарпа тоже обходятся без return-ов и не видят в этом проблемы. Это просто шаг к улучшению поддержки функционального стиля программирования.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[6]: Почему в качестве statement может быть только assigment, call, increment
От: VladD2 Российская Империя www.nemerle.org
Дата: 23.01.14 18:07
Оценка:
Здравствуйте, IT, Вы писали:

IT>Это так. С другой стороны некоторые, чтобы доказать всем правильность своих суждений, любят отрицать очевидные вещи, в которых сами ничего не понимают.


Проблема в том, что очевидны они только для тех кто сам на практике их познал. А для теоретизирующих они не очевидны. Более того, даже краткое знакомство не поможет оценить многие решения. Ведь для их оценки нужно немного перестроить сознание. А для этого нужно время и практика.

Обычно понимание приходит когда возвращаться обратно. Никак не забуду тот батхерт/ломку когда после месячного программирования на Немерле вызвал обратный переход на Шарп. Казалось что мне выкрутили руки. Потом привык и стал относиться даже как-то по философски. Но первая реакция была просто потрясающей.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[6]: Почему в качестве statement может быть только assigment, call, increment
От: Doc Россия http://andrey.moveax.ru
Дата: 24.01.14 03:25
Оценка:
Здравствуйте, IT, Вы писали:

IT>Это так. С другой стороны некоторые, чтобы доказать всем правильность своих суждений, любят отрицать очевидные вещи, в которых сами ничего не понимают.


Эк куда тебя понясло. Куча воды и не слова по сути.

Doc>>Что-то не встречал лямбд в экране высотой.

IT>У тебя есть прибор для измерения правильности лямбд? Дай попользоваться.

Как "измерение правильности лямбд" относится к объему кода?
Re[8]: Почему в качестве statement может быть только assigment, call, increment
От: Doc Россия http://andrey.moveax.ru
Дата: 24.01.14 03:30
Оценка:
Здравствуйте, VladD2, Вы писали:

VD>Первое время это не привычно, но потом не понимаешь как жил без этого раньше.


Со стороны больше похоже на "сахар". Если подставить return, то, за рядом моментов, получится C# код.

VD>Тут ведь весь код на ладони.


Если код не влезает в экран, то для меня это повод задуматься над его разделением на методы.

VD>Все знакомые кто пробовал так писать дольше месяца сходятся во мнении, что "return не нужен". Как правильно сказал IT в лямбдах шарпа тоже обходятся без return-ов и не видят в этом проблемы.


Только стоит еще отметить, что там обычно несколько строк кода, а то и вовсе что-то вроде a+b.

VD>Это просто шаг к улучшению поддержки функционального стиля программирования.


Заинтересовали, если вдруг найду время — попробую
Re[7]: Почему в качестве statement может быть только assigment, call, increment
От: IT Россия linq2db.com
Дата: 24.01.14 04:28
Оценка:
Здравствуйте, Doc, Вы писали:

IT>>Это так. С другой стороны некоторые, чтобы доказать всем правильность своих суждений, любят отрицать очевидные вещи, в которых сами ничего не понимают.

Doc>Эк куда тебя понясло. Куча воды и не слова по сути.

Началось.

Doc>>>Что-то не встречал лямбд в экране высотой.

IT>>У тебя есть прибор для измерения правильности лямбд? Дай попользоваться.
Doc>Как "измерение правильности лямбд" относится к объему кода?

Какое отношение имеет экран к лямбдам?
Если нам не помогут, то мы тоже никого не пощадим.
Re[8]: Почему в качестве statement может быть только assigment, call, increment
От: Doc Россия http://andrey.moveax.ru
Дата: 24.01.14 04:52
Оценка:
Здравствуйте, IT, Вы писали:

Doc>>Как "измерение правильности лямбд" относится к объему кода?

IT>Какое отношение имеет экран к лямбдам?

Просто — объем кода. Переспрошу — у тебя часто получаются / встречаются лямбды занимающие весь экран (где-то 50 строк кода).
Re[8]: Почему в качестве statement может быть только assigment, call, increment
От: Doc Россия http://andrey.moveax.ru
Дата: 24.01.14 04:57
Оценка:
Здравствуйте, VladD2:

Кстати, под VS2013 планы есть? Что-то не хочется 12 ставить ради попробовать.

+ на nemerle.org страница Wiki дает 404
Re[9]: Почему в качестве statement может быть только assigment, call, increment
От: IT Россия linq2db.com
Дата: 24.01.14 05:15
Оценка: :)
Здравствуйте, Doc, Вы писали:

Doc>Просто — объем кода. Переспрошу — у тебя часто получаются / встречаются лямбды занимающие весь экран (где-то 50 строк кода).


А почему не 49 или 51?
Если нам не помогут, то мы тоже никого не пощадим.
Re[10]: Почему в качестве statement может быть только assigment, call, increment
От: Doc Россия http://andrey.moveax.ru
Дата: 24.01.14 07:42
Оценка:
Здравствуйте, IT, Вы писали:

Doc>>где-то 50 строк кода

IT>А почему не 49 или 51?

49 и 51 это "где-то 50"

Почему "где-то 50" — примерно столько входит по высоте на экран. Т.е. примерно столько можно окинуть взглядом за раз, без скрола.

Но ты опять в сторону — сколько строк в среднем занимают у тебя (написанным тобой коде, не тобой но с которым ты работаешь) лямбды, а сколько функции?
Re[9]: Почему в качестве statement может быть только assigment, call, increment
От: VladD2 Российская Империя www.nemerle.org
Дата: 24.01.14 09:08
Оценка:
Здравствуйте, Doc, Вы писали:

Doc>Кстати, под VS2013 планы есть? Что-то не хочется 12 ставить ради попробовать.


Для 2013 сборка есть, но он пока не автоматизирована. Вручную можно из исходников собрать.
Качаешь репозиторий (он большой) и запускаешь BuildInstallerFast-4.5.1.cmd (чтобы собрать инсталлятор) или DevBuildQuick-4.5.1.cmd (чтобы собрать и зарегистрировать отладочную весрию).

Doc>+ на nemerle.org страница Wiki дает 404


У меня все ОК. Видимо работы какие-то велись.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[10]: Почему в качестве statement может быть только assigment, call, increment
От: Doc Россия http://andrey.moveax.ru
Дата: 24.01.14 09:28
Оценка:
Здравствуйте, VladD2, Вы писали:

Doc>>+ на nemerle.org страница Wiki дает 404

VD>У меня все ОК. Видимо работы какие-то велись.

По прежнему 404.
Попробовал refresh + принудительно с сервера и потом с другого девайса — стабильно 404.
Re[11]: Почему в качестве statement может быть только assigment, call, increment
От: hardcase Пират http://nemerle.org
Дата: 24.01.14 09:33
Оценка:
Здравствуйте, Doc, Вы писали:

Doc>По прежнему 404.

Doc>Попробовал refresh + принудительно с сервера и потом с другого девайса — стабильно 404.

В связи с переездом, на сервере скорее все сайт не подняли (либо накосячили с обратным прокси), я вечером посмотрю, в чем дело.
/* иЗвиНите зА неРовнЫй поЧерК */
Re[11]: Почему в качестве statement может быть только assigment, call, increment
От: VladD2 Российская Империя www.nemerle.org
Дата: 24.01.14 10:25
Оценка:
Здравствуйте, Doc, Вы писали:

Doc>По прежнему 404.

Doc>Попробовал refresh + принудительно с сервера и потом с другого девайса — стабильно 404.

Что-то не так с DNS. Мы тут переезжали недавно. Наверно какие-то проблемы. От меня видно.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.