Здравствуйте, VladD2, Вы писали:
A>>В C# сделано логично ― от источника данных через ряд фильтров и преобразований постепенно продвигаешься к финальному результату. VD>Это не логично, а близко к модели в которую переписывается выражение. С точки зрения английской грамматики Select something from some table не менее логично.
Не менее логично, когда у тебя одна таблица и ты выбираешь готовые данные из неё, а иначе и по-английски выходит бред: Select cat from submarines...
Re[4]: [Голосование] Используете ли вы синтаксис в LINQ?
Здравствуйте, VladD2, Вы писали:
VD>Это аргумент высосан из пальца пиарщиками из Макрософт. На практике нет никаких проблем написать "SELECT FROM xs", а потом вернуться к секции SELECT и пользоваться комплиту.
Это вопрос уровня нужен ли return в Немерле. Т.е. в чистом виде вкусовщина. Причём вкусовщина при интенсивном неиспользовании return в Немерле постепенно склоняется к его ненужности вообще. from в начале выражения так же как и отсутствие return со временем становится гораздо удобнее SELECT впереди.
По сути вопроса. Синтаксис LINQ очень удобная штука. Не хватает ещё нескольких ключевых слов типа left join, take, skip, tolist, first, etc. Надеюсь на Нитре не будет проблем их добавить самому. Или ты затеял этот вопрос потому что синтаксис LINQ оказалось сделать не так просто даже на Нитре?
Если нам не помогут, то мы тоже никого не пощадим.
Re[6]: [Голосование] Используете ли вы синтаксис в LINQ?
Здравствуйте, VladD2, Вы писали:
A>>Не вижу в этом смысла. VD>SQL и английский язык бессмысленны?
SQL разработчиками языка задумывался как язык для домохозяек. Именно этим обосновывается маниакальное желание сделать его близким к английскому. Но что-то как-то среди домохозяек оно не попёрло. Особенно у российским в 70-х.
Если нам не помогут, то мы тоже никого не пощадим.
Re[5]: [Голосование] Используете ли вы синтаксис в LINQ?
Здравствуйте, IT, Вы писали:
VD>>Это аргумент высосан из пальца пиарщиками из Макрософт. На практике нет никаких проблем написать "SELECT FROM xs", а потом вернуться к секции SELECT и пользоваться комплиту.
IT>Это вопрос уровня нужен ли return в Немерле.
Аналогия хреновая. "return" действительно не нужен, а "SELECT" таки нужен. Вопрос только где его ставить.
IT>Т.е. в чистом виде вкусовщина.
+1
Я об этом уже говорил.
IT>Причём вкусовщина при интенсивном неиспользовании return в Немерле постепенно склоняется к его ненужности вообще. from в начале выражения так же как и отсутствие return со временем становится гораздо удобнее SELECT впереди.
Думаю, что ты тут все перепутал. Но по жизни ничего удобнее не становится. Ты просто привыкаешь к еще одному синтаксису.
Как ты верно заметил — это вопрос вкуса или привычки.
Я утверждал только одно — "аргумент" с интелисенсом высосан из пальца. Единственный реальный аргумент здесь это — так было проще описать правило преобразования с синтаксиса в линк-паттерн.
IT>По сути вопроса. Синтаксис LINQ очень удобная штука. Не хватает ещё нескольких ключевых слов типа left join, take, skip, tolist, first, etc. Надеюсь на Нитре не будет проблем их добавить самому. Или ты затеял этот вопрос потому что синтаксис LINQ оказалось сделать не так просто даже на Нитре?
Здравствуйте, IT, Вы писали:
IT>SQL разработчиками языка задумывался как язык для домохозяек. Именно этим обосновывается маниакальное желание сделать его близким к английскому. Но что-то как-то среди домохозяек оно не попёрло. Особенно у российским в 70-х.
Зато среди программистов имеет не хилую популярность. И что-то ни одного вопля, что SELECT не на месте я за все его существование так и не услышал. Комплит тоже для него поддерживается.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[4]: [Голосование] Используете ли вы синтаксис в LINQ?
Здравствуйте, VladD2, Вы писали:
VD>Это аргумент высосан из пальца пиарщиками из Макрософт. На практике нет никаких проблем написать "SELECT FROM xs", а потом вернуться к секции SELECT и пользоваться комплиту. Парсеру совершенно фиолетово где этот самый SELECT находится.
Проблем вернуться то нет, но неудобств добавляет это да.
Я вижу как люди работающие с БД пишут в следующем порядке
1. SELECT * FROM Table
2. Возвращаемся к '*' и получаем водсказки
А я пользуясь LINQ пишу просто и сразу получаю подсказки без прыжков
1. from Table select <Ctrl+Enter>
Здравствуйте, _NN_, Вы писали:
VD>>Это аргумент высосан из пальца пиарщиками из Макрософт. На практике нет никаких проблем написать "SELECT FROM xs", а потом вернуться к секции SELECT и пользоваться комплиту. Парсеру совершенно фиолетово где этот самый SELECT находится. _NN>Проблем вернуться то нет, но неудобств добавляет это да.
Это только если в случае, когда стоит задача без остановки стругать SQL-запросы. 100 запросов в минуту, если на 2 штуки меньше — лишение премии.
Если это не так, то совершенно пофиг, что в каком месте стоит.
Re[6]: [Голосование] Используете ли вы синтаксис в LINQ?
Здравствуйте, AlexRK, Вы писали:
ARK>Это только если в случае, когда стоит задача без остановки стругать SQL-запросы. 100 запросов в минуту, если на 2 штуки меньше — лишение премии. ARK>Если это не так, то совершенно пофиг, что в каком месте стоит.
Ну мне удобно когда не нужно прыгать туда сюда.
У каждого свои предпочтения
Здравствуйте, VladD2, Вы писали:
Y>>Ага, ну то есть тот факт, что в sql запрос как раз "перевёрнут" вы таки признали. VD>Это ты только что сам придумал. Видимо для собственного успокоения. Я утверждаю, что в SQL это работает. А вопрос где что перевернуто — это вопрос философский.
Нет, это вы так и сказали: сначала пишется конец, потом возаращаемся в начало.
Это у вас не "философский вопрос" а банальное упрямство.
VD>В аргументах же пиарщиков говорилось именно о невозможности реализации качественного интеллисенса. И это явная ложь.
Это явная правда. Ну или у вас какой-то уникальный автокомплит, который угадывает откуда будут браться данные.
VD>Вам промыли голову пиаром и вы защищаете навязанные ложные утверждения. VD>Я понимаю, что обидно понимать, что ты поддался на рекламу и маркетинг. Но реальность лучше признавать. Это помогает лучше оценивать обстановку.
Ну это какая-то теория заговора в чистом виде. У меня мысли "почемсу оно так глупо сделано" появились когда я и слова "маркетинг"-то не знал.
ИМХО ситуация как раз обратная: вы отрицаете реальность, защищаете явно абсурдные идеи о том, что можно писать задом наперёд и это вполне можно вытерпеть(зачем?) а всем "промыли мозги", "обидно признавать" и так далее. Типичный "спор без аргументов, спор на темперамент".
Re[6]: [Голосование] Используете ли вы синтаксис в LINQ?
Здравствуйте, AlexRK, Вы писали:
_NN>>Проблем вернуться то нет, но неудобств добавляет это да. ARK>Это только если в случае, когда стоит задача без остановки стругать SQL-запросы. 100 запросов в минуту, если на 2 штуки меньше — лишение премии. ARK>Если это не так, то совершенно пофиг, что в каком месте стоит.
Хотя и очень хорошо знаю синтаксис SQL, но не использую его в LINQ по нескольким причинам:
1. Для оптимизации генерируемых LINQ2SQL запросов и для сборки вложенных запросов из других подзапросов по различным условиям пользуюсь самописным билдером выражений (условие поддерживает вложенные подзапросы из различных сущностей). Поэтому результирующие выражение в LINQ выглядят следующим образом:
Expression<Func<T, bool>> condition = ...
var linqexpr = dc.Entity.Where(condition);
2. использую собственные расширения LINQ2SQL для генерации SQL запросов, которых нет в синтаксисе LINQ-а, например, выборку иерархических объектов:
dc.Hierarchical.Descendants(t => t.Id, t => t.ParentId, ...) // производит выборку дерева элементов с полем ключа Id и полем ключа родителя ParentId;
Таким образом для меня использование синтаксиса LINQ накладывает большие ограничения на использование функциональности поставщика запросов.
Здравствуйте, _NN_, Вы писали:
_NN>А я пользуясь LINQ пишу просто и сразу получаю подсказки без прыжков _NN>1. from Table select <Ctrl+Enter>
Ну, вот то что нужно куда-то там возвращаться — это никак не "невозможность реализации интеллисенса". А люди здесь именно этой утверждали (наслушавшись пропагандистов из МС). Это небольшое неудобство при написании. Таких неудобств ты испытываешь по 100 раз на дню, так как периодически приходится куда-то возвращаться и дописывать ранее написанный код.
Но мы пишем код во много раз реже нежели его читаем. И смотреть здесь нужно именно на то как он читается, а не на то как он пишется.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[7]: [Голосование] Используете ли вы синтаксис в LINQ?
Здравствуйте, Yoriсk, Вы писали:
Y>Нет, это вы так и сказали: сначала пишется конец, потом возаращаемся в начало. Y>Это у вас не "философский вопрос" а банальное упрямство.
Из того что приходится возвращаться в начало никак не следует, что что-то там перевернуто. С тем же успехом можно линковский подход назвать перевернутым и неестественным, так как люди так не пишут.
И это не моя упертость, а твои проблемы в логическом мышлении. Ты делаешь выводы там где их делать нельзя.
VD>>В аргументах же пиарщиков говорилось именно о невозможности реализации качественного интеллисенса. И это явная ложь.
Y>Это явная правда.
Это у вас не "философский вопрос" а банальное упрямство. (ц)
Y>Ну или у вас какой-то уникальный автокомплит, который угадывает откуда будут браться данные.
Я просто знаю о чем говорю, а не треплюсь по чем зря. Парсеру и типизатору совершенно фиолетово как распространяются области видимости.
Угадывать при этом ничего не надо. Если будет секция FROM с описанием таблиц, комплит будет работать отлично. И есть не мало реализаций комплита для SQL.
Y>Ну это какая-то теория заговора в чистом виде.
Это правда. Но тебе проще назвать всех вокруг дураками чем признать, что тебя банально обманули пиарщики.
Y>У меня мысли "почемсу оно так глупо сделано" появились когда я и слова "маркетинг"-то не знал.
Ты всеведущий раз где-нибудь свои мысли опубликуй, чтобы можно было потом дать ссылку. А, то как-то до появления линка я ни разу не слышал подобных высказываний. Всех удовлетворяло наличие SELECT-а спереди.
Y>ИМХО ситуация как раз обратная: вы отрицаете реальность, защищаете явно абсурдные идеи о том, что можно писать задом наперёд и это вполне можно вытерпеть(зачем?) а всем "промыли мозги", "обидно признавать" и так далее. Типичный "спор без аргументов, спор на темперамент".
Я утверждаю, то что можно проверить. Я утверждаю, что утверждение о том, что в случае селекта спереди нельзя сделать интеллисенс — ложно. Больше я ничего не утверждаю. А, вот ты просто не хочешь понять, что поддерживаешь ложные предпослыки и споришь со мной о чем-то тебе угодном, но никак не пересекающемся с моими словами.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[6]: [Голосование] Используете ли вы синтаксис в LINQ?
Здравствуйте, VladD2, Вы писали:
VD>Аналогия хреновая. "return" действительно не нужен, а "SELECT" таки нужен. Вопрос только где его ставить.
Аналогия прекрасна. А Select в LINQ бывает так же часто не нужен, как и нужен. По сути нужен он только когда нужна проекция. По большому счёту "SELECT *" в SQL — это синтаксический мусор.
VD>Думаю, что ты тут все перепутал. Но по жизни ничего удобнее не становится. Ты просто привыкаешь к еще одному синтаксису.
Думаю, что ты сам запутался в причинах и следствиях. Становится удобнее потому что привыкаешь, или привыкаешь потому что становится удобнее?
VD>В Нитре не проблема добавить любой синтаксис. Линк доступен из коробки.
А в нём есть синтаксический distinct или возможность его добавить самостоятельно?
VD>Меня просто разрдражает, когда люди повторяют булшит за евангелистами и попрагандонами.
Пусть повторяют. Зачем из-за этого раздражаться? Или ты всё ещё хочешь сделать мир лучше?
Если нам не помогут, то мы тоже никого не пощадим.
Re[8]: [Голосование] Используете ли вы синтаксис в LINQ?
Здравствуйте, VladD2, Вы писали:
VD>Зато среди программистов имеет не хилую популярность. И что-то ни одного вопля, что SELECT не на месте я за все его существование так и не услышал.
Это как раз тот случай, когда всем по барабану из-за отсутсвия альтернативы в самом SQL. Что толку вопить, если тебя всё равно никто не услышит. Зато когда касается альтернатив самому SQL, то сегодня воплей предостаточно.
VD>Комплит тоже для него поддерживается.
Комплит для него не столько поддерживается сколько нещадно глючит и люто раздражает.
Если нам не помогут, то мы тоже никого не пощадим.
Re[8]: [Голосование] Используете ли вы синтаксис в LINQ?
VD>Я утверждаю, то что можно проверить. Я утверждаю, что утверждение о том, что в случае селекта спереди нельзя сделать интеллисенс — ложно. Больше я ничего не утверждаю. А, вот ты просто не хочешь понять, что поддерживаешь ложные предпослыки и споришь со мной о чем-то тебе угодном, но никак не пересекающемся с моими словами.
Утверждаешь — так доказывай
В случае с линком и решарпером после var x = from a in | <- уже здесь автокомплит может вывести подсказку со всем что в локальной области видимости IEnumerable, IQueryable и т.п. А когда дело до ходит до select| автокомплиту уже вообще ясно чеиу можно сделать select а чему точно нет.
А теперь давай рассмотрим случай со спереди SELECT| и скажи что тут может подсказать автокомплит? В SQL Management Studio 2014 он в этот момент сначала не показывает ничего, а после Ctrl+Space вываливает вообще всё — т.е. бесполезен чуть менее чем полностью. Оракловский в этой же ситуации просто молчит в обоих случаях. И это мы даже близко не рассматриваем такие случаи как вложенные запросы, с несбалансированными скобками, где автокомплит SQL-я лежит не вставая.
И особенно хотел бы отметить безумную идею набирать сначала select, а потом прыгать влево и набирать начало. Да, хорший парсер может и такое подтянуть, но сама идея такого набора в мэйнстрим языке — совершенное безумие. Я как-то linq запросы пишу слева направо и даже решарперовскими сниппетами не очень пользуюсь, несмотря на то что они сами за меня прыгать умеют.
Nemerle — power of metaprogramming, functional, object-oriented and imperative features in a statically-typed .NET language
Re[7]: [Голосование] Используете ли вы синтаксис в LINQ?
Здравствуйте, IT, Вы писали: VD>>В Нитре не проблема добавить любой синтаксис. Линк доступен из коробки. IT>А в нём есть синтаксический distinct
Нет. IT>или возможность его добавить самостоятельно?
Есть.
Но, честно говоря, мне данная грамматика не нравится.
Слишком правильная, а значит плохо расширяемая.
ИМХО лучше так:
Скрытый текст
namespace CSharp
{
syntax module Linq
{
using Nitra.Core;
using CSharp.TokenNames;
using Literals;
using CSharp.CsIdentifiers;
using Types;
using Expressions;
keyword regex ['A'..'Z', 'a'..'z', '_'..'_']+ rule S;
alias BooleanExpression = Expression;
extend syntax Expression
{
| Query = &("from") LinqClause+;
}
token LinqKeyword
{
| Name=LinqKeywordToken !CsIdentifiers.IdentifierPartCharacters
{
// "from" ignored
regex LinqKeywordToken = "where" | "join" | "on" | "equals" | "into" | "let" | "orderby" | "ascending" | "descending" | "select" | "group" | "by";
}
}
syntax LinqExpression = !LinqKeyword Expression;
syntax LinqType = !LinqKeyword AnyType;
syntax LinqName = !LinqKeyword Name;
syntax LinqClause
{
| FromCommon = "from" sm LinqName sm "in" sm LinqExpression;
| FromCasted = "from" sm LinqType sm LinqName sm "in" sm LinqExpression;
| Let = "let" sm LinqName sm "=" sm LinqExpression; // let-clause
| Where = "where" sm BooleanExpression; // where-clause
| JoinCommon = "join" sm LinqName sm "in" sm LinqExpression sm "on" sm LinqExpression sm "equals" sm LinqExpression (sm IntoClause)?; // join-clause && join-into-clause
| JoinCasted = "join" sm LinqType sm LinqName sm "in" sm LinqExpression sm "on" sm LinqExpression sm "equals" sm LinqExpression (sm IntoClause)?; // join-clause && join-into-clause
| Orderby = "orderby" sm (Ordering; ","sm)+ // orderby-clause
{
regex OrderingDirection = "ascending" | "descending";
syntax Ordering = LinqExpression OrderingDirection?;
}
| Select = "select" sm LinqExpression;
| Group = "group" sm LinqExpression sm "by" sm LinqExpression;
| IntoClause = "into" sm LinqName;
}
}
}
Здравствуйте, IT, Вы писали:
IT>Здравствуйте, VladD2, Вы писали:
VD>>Аналогия хреновая. "return" действительно не нужен, а "SELECT" таки нужен. Вопрос только где его ставить.
IT>Аналогия прекрасна. А Select в LINQ бывает так же часто не нужен, как и нужен. По сути нужен он только когда нужна проекция. По большому счёту "SELECT *" в SQL — это синтаксический мусор.
Кстати да.
Я смотрел на работу DBA.
Делают сначала
SELECT * FROM TheTable
Смотрят что там есть и только потом изменяют на
SELECT TheColumn FROM TheTable
Я согласен с тем, что 'FROM TheTable' должно быть валидно и просто выбирать всё.
Здравствуйте, VladD2, Вы писали:
VD>Вам же втюхали (по средством пиара) мысль о том, что именно так правильно. И теперь вы считаете это логичным.
Наоборот, fluent интерфейс за 10 лет до linq именно так и использовался — источник-преобразования-результат
Корни таких идей растут еще в железе — очень легко понять, что откуда растет. Многие модели в программировании взяты из других областей. Самый простой способ выразить известные модели в языке — просто переписать один к одному. Что и видим — источник-преобразования-результа
Более того — люди пишут слева направо. Именно эту особнность и использует интеллисенс. Никто в своем уме не будет пилить интеллисенс под фокусы вида "прыгни назад после донабора справа перед дополнением слева"
VD>Человеческий разум без проблем "прыгает". Это не аргумент. Миллиарды людей каждый день говорят на английском, в котором постоянно приходится прыгать. Я уже не говорю уже о сотнях миллионах русских которые постоянно воспринимают предложения слова в которых стоят то так, то эдак. Нам совершенно все равно попросят ли нас:
У людей, который английский не родной, полно ошибок "я взял", "меня взяли", "взяли мне"
То есть, путаница между главным и второстепенным, объектом и субъектом и тд и тд.
VD>Нам плевать на последовательность. Мы анализируем предложение целиком. Если нам нужно разобраться в деталях, то мы можем перейти к любой части предложения и проанализировать ее более глубоко.
Поищи среди знакомых синхронного переводчика с немецкого. Там часто самое важное, глагол, в некоторых формах идет в конце.
Отсюда постоянный напряг с длинными фразами. Так что издержки есть даже в простейших случаях.
Кроме того — надо учесть, что язык программирования учат слишком поздно относительно первых двух естественых(родной с рождения, второй в школе).
VD>Те кто создавал SQL исходили из того, что запросы должны быть нормальными фразами на английском языке. В этом тоже есть смысл.
И ожидаемо, что для тех, у кого английский неродной или сильно условный, смысла в этом никакого не будет.
Здравствуйте, VladD2, Вы писали:
VD>Из того что приходится возвращаться в начало никак не следует, что что-то там перевернуто.
Если ты не заметил, то возвращаться в начало собственно потому и нужно, что где то чтото перевернуто. Иначе сам возврат не нужен.
VD>И это не моя упертость, а твои проблемы в логическом мышлении. Ты делаешь выводы там где их делать нельзя.
Скорее последствия разрыва шаблона — оказывается, большинство-то c разной частотой, но используют query comprehension.
А вот 5-6 лет назад query comprehension только студенты на собеседованиях показывали