Здравствуйте, Jack128, Вы писали:
J>а чем в данном конкретном коде проблема??
В коде zz-sergant?
Дело в том, что макросы работают на уровне AST, а не на уровне строк. А квазицитаты это такой сахар для конструктора AST (это важно для понимания как составления квазицитат, так и матчинга).
Соответственно квазицитата <[ mutable $expr ]> где expr : PExpr, превращается в вызов конструктора PExpr.DefMutable, конструктор берет два параметра, но в данному случае парсер видит только один, поэтому вторым параметром он ставит DEFAULT, который будет преобразован в значение по умолчанию.
Здравствуйте, zz-sergant, Вы писали:
ZS>mutable выглядит инородно.
Это как раз повод использовать меньше изменяемых переменных
ZS>Ради интереса посчитал сколько раз используется mutable в исходниках Nemerle в *.n файлах, включая сниппеты и другие подпроекты: ZS>Файлов *.n: — 2337 ZS>mutable: — 5062
ZS>Не так уж и мало.
Количество mutable в проекте компилятора велико не потому что это хорошо
Если посмотреть на свежий код, то mutable используется гораздо реже чем в старом коде.
Здравствуйте, BogdanMart, Вы писали:
BM>Здравствуйте, VladD2, Вы писали:
VD>>Так что mutable неплохая лакмусовая бумажка выявляющая недостатки в коде. Это конечно не железное правило, но хорошая эвристика.
BM>Его, наверно, специально сделали из 7 букв, чтобы людям было лень его использовать и писали def.
А мне нравится mutable его видно при объявлении. def/var по длине равны и потому заметить мутабельную переменную сложнее:
Спасибо, это оно
__>P.S. __>Чем не нравится mutable ? __>Если его много и от него корежит, может стоит улучшить код ?
mutable выглядит инородно.
Если кто-то захочет осознано сделать проект на immutable переменных, то он это сделает независимо от того, какой модификатор используется для изменяемых переменных: var или mutable. А спотыкаться каждый раз при чтении не хочется.
Ради интереса посчитал сколько раз используется mutable в исходниках Nemerle в *.n файлах, включая сниппеты и другие подпроекты:
Файлов *.n: — 2337
mutable: — 5062
Здравствуйте, zz-sergant, Вы писали:
ZS>Не так уж и мало.
А теперь посмотри где и при каких обстоятельствах используется mutable в Nemerle.Peg.
Этот проект достаточно полно описывает сценарии появления изменяемых переменных: mutable появляется как аккумулятор в циклах foreach либо как некая автогенерированная переменная.
Это мой первый макрос у вас в expr передается <[x = 100]>. Соответственно код выходит <[mutable (x = 100);]>. А (x = 100) — некорректное имя переменной.
Поэтому вам придется деконструировать expr, как уже было написано.
Здравствуйте, zz-sergant, Вы писали:
ZS>Ради интереса посчитал сколько раз используется mutable в исходниках Nemerle в *.n файлах, включая сниппеты и другие подпроекты: ZS>Файлов *.n: — 2337 ZS>mutable: — 5062
А теперь сравним это с появлением def — 30374.
Кроме того mutable используется и для полей. По умолчанию поля доступны только для чтения. Ну, и как верно заметил _nn_, то что mutable встречается в компиляторе часто не делает чести компилятору. Его код писался разными людьми которые в то время имели разный опыт. Если бы mutable было бы меньше, то качество проекта от этого было бы только выше.
Так что mutable неплохая лакмусовая бумажка выявляющая недостатки в коде. Это конечно не железное правило, но хорошая эвристика.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, VladD2, Вы писали:
VD>Так что mutable неплохая лакмусовая бумажка выявляющая недостатки в коде. Это конечно не железное правило, но хорошая эвристика.
Его, наверно, специально сделали из 7 букв, чтобы людям было лень его использовать и писали def.
Здравствуйте, VladD2, Вы писали:
VD>Здравствуйте, zz-sergant, Вы писали:
ZS>>Ради интереса посчитал сколько раз используется mutable в исходниках Nemerle в *.n файлах, включая сниппеты и другие подпроекты: ZS>>Файлов *.n: — 2337 ZS>>mutable: — 5062
VD>А теперь сравним это с появлением def — 30374.
def используются не только для переменных, но и для локальных функций.
Поэтому сравнивать просто количество def не совсем корректно.
Но даже если принять, что количество def правильное, то соотношение 1 к 6 все равно большое.
VD>Кроме того mutable используется и для полей. По умолчанию поля доступны только для чтения. Ну, и как верно заметил _nn_, то что mutable встречается в компиляторе часто не делает чести компилятору. Его код писался разными людьми которые в то время имели разный опыт. Если бы mutable было бы меньше, то качество проекта от этого было бы только выше.
Я лично не вижу прямой зависимости качества проекта от количества mutable (не Nemerle, а проектов в общем).
VD>Так что mutable неплохая лакмусовая бумажка выявляющая недостатки в коде. Это конечно не железное правило, но хорошая эвристика.
VD>>Кроме того mutable используется и для полей. По умолчанию поля доступны только для чтения. Ну, и как верно заметил _nn_, то что mutable встречается в компиляторе часто не делает чести компилятору. Его код писался разными людьми которые в то время имели разный опыт. Если бы mutable было бы меньше, то качество проекта от этого было бы только выше.
ZS>Я лично не вижу прямой зависимости качества проекта от количества mutable (не Nemerle, а проектов в общем).
Здравствуйте, hardcase, Вы писали:
H>А мне нравится mutable его видно при объявлении. def/var по длине равны и потому заметить мутабельную переменную сложнее:
Оно то да, внутри метода. А вот поля класса делать мутабельными слегка напрягает (особенно когда портировали прогу с С#)
Здравствуйте, BogdanMart, Вы писали:
BM>Оно то да, внутри метода. А вот поля класса делать мутабельными слегка напрягает (особенно когда портировали прогу с С#)
Используй автосвойства.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, VladD2, Вы писали:
BM>>Оно то да, внутри метода. А вот поля класса делать мутабельными слегка напрягает (особенно когда портировали прогу с С#)
VD>Используй автосвойства.
Ага, а из обычных свойств в обработчике обращаться к авто свойствам