Здравствуйте, Marty, Вы писали:
M>Язык мог бы помочь, если бы элипсис преобразовывался к какому-то более-менее типизированному хранилищу. M>Как нибудь так: M>
Уточню немного.
В вышеприведенной фантазии ключевое слово ellipsis указывает, в первом случае, что правило применяется к указанной функции. И, если компилятор встречает вызов print c подходящими параметрами (до const arg_array &args) то может трактовать список параметров как переменный, и подыскивает конструктор с ellipsis (ну или без), и для каждой ',' подыскивает в классе некий '& operator push_op()'.
Здравствуйте, __kot2, Вы писали:
__>>>я у питона только описание читал. как дочитал до места, что там автоматическое управление памятью, закрыл и забыл про него. это очередное баловство, а не язык. N>>Вау. И C# баловство, и Java баловство? Да Вы, батенька, эстет. __>точно с той точки зрения что и iPad — баловство. очень узкая область применения. хотя иногда очень современно и быстро что-то можно сделать.
Завидую Вам — потому, что не знаете, что эта "очень узкая область применения" сейчас преобладает во всей области так называемого "внутреннего ПО" (по Спольски), которая в свою очередь занимает, по разным оценкам, от 70 до 90 процентов всех усилий программистов. Как в анекдоте — "бросить всё и уехать в этот Урюпинск".
N>>>>Фиксированный размер массива на стеке отменён в C99, то есть 12 лет назад. __>>>в смысле неизменяемый N>>Ну предположим. И какой сверхглубокий смысл устанавливать неизменяемость размера массива как неотъемлемую характеристику его понятия? __>значит, у него нет операции добавления элемента и всего гемора, что с этим связано — переноса данных, выбор шага увеличения, отложенная инициализация и т.д.
Я вообще-то не о том. С тем, что даже в C++/C#/Java/etc. иногда полезно вводить понятие массива неизменяемого размера, я заранее согласен. Вопрос в том, почему только такой реализации позволять гордо нести имя "массив", а для изменяемого размера требовать что-то иное?
Здравствуйте, Qbit86, Вы писали:
NB>>хз. меня после sql линк как-то не впечатлил. NB>>дело привычки, в общем.
Q>Linq — это не только SQL-like запросы (можешь SQL-like синтаксис вообще не использовать, просто применять ФВП). Это унифицированный доступ к разным сущностям. Скажем, к потоку событий (т.е. push-, а не pull-модель), с его фильтрацией, отображением, свёрткой. etc.
возможно.
однако заметь, я не рассказываю какое линк г*но, потому что синтаксис условий on убог, или потому что нет группировки по нескольким полям...
Здравствуйте, netch80, Вы писали:
N>Я вообще-то не о том. С тем, что даже в C++/C#/Java/etc. иногда полезно вводить понятие массива неизменяемого размера, я заранее согласен. Вопрос в том, почему только такой реализации позволять гордо нести имя "массив", а для изменяемого размера требовать что-то иное?
о. терминологический спор, это так увлекательно
давайте обсудим шарповский List.
Здравствуйте, SleepyDrago, Вы писали:
N>>Честно говоря, не понял проблему. N>>Вопрос в том, куда попадает лог, или в выборе конкретных чисел в каком-нибудь %10.4f для их показа? N>>Или в том, что кому-то религия запрещает вызвать printf в цикле?
SD>то есть вы в выборе между SD>
SD>logstream("at:" << point);
SD>
SD>и
>>вызвать printf в цикле
SD>добровольно выбираете 2е зная что это нужно каждые 50 строк ? Я чесслово не смог бы лучше за вас описать насколько это эпик.
Вы не объяснили сколь-нибудь внятно, чего именно хотите, а теперь рассказываете про эпик на основании своих домыслов о том, как бы я решал эту задачу. Вам действительно интересны такие игры? Или проще было бы просто ответить на вопросы, а затем уже слушать ответы собеседника?
SD>А геометрия она бывает не только из чисел. Вот например 2d грань это 2 точки и направление
Охотно верю. То есть, если я правильно Вас понял, вся суть ситуации в том, что объект знает, как именно его выводить в конкретном случае, и Вы не хотите расшифровывать внутреннее содержимое потому что 1) это куча громоздкой писанины, 2) это нарушение инкапсуляции. Я правильно понял?
Здравствуйте, netch80, Вы писали: N>Завидую Вам — потому, что не знаете, что эта "очень узкая область применения" сейчас преобладает во всей области так называемого "внутреннего ПО" (по Спольски), которая в свою очередь занимает, по разным оценкам, от 70 до 90 процентов всех усилий программистов. Как в анекдоте — "бросить всё и уехать в этот Урюпинск".
автоматизация работы предприятия? скучно. я не для этого программистом хотел в детстве стать
Здравствуйте, netch80, Вы писали:
N>Здравствуйте, SleepyDrago, Вы писали:
...
N>Вы не объяснили сколь-нибудь внятно, чего именно хотите, а теперь рассказываете про эпик на основании своих домыслов о том, как бы я решал эту задачу. Вам действительно интересны такие игры? Или проще было бы просто ответить на вопросы, а затем уже слушать ответы собеседника?
SD>>А геометрия она бывает не только из чисел. Вот например 2d грань это 2 точки и направление
N>Охотно верю. То есть, если я правильно Вас понял, вся суть ситуации в том, что объект знает, как именно его выводить в конкретном случае, и Вы не хотите расшифровывать внутреннее содержимое потому что 1) это куча громоздкой писанины, 2) это нарушение инкапсуляции. Я правильно понял?
да на 1). Самая популярная описка это спутать ось координат точки в выражении .
про 2 я вас не понял. Для простоты не нужна там инкапсуляция.
На счет локализации да там будет идеален вариант "текст {идентификатор1} текст {идентификатор2} текст". Но такие программы редко нуждаются в локализации. Так что локализация не нужна.
Здравствуйте, SleepyDrago, Вы писали:
Q>>В нормальном API это выглядит так: Q>>
Q>>Console.WriteLine(GetPointFormatString(), point); // Где GetFormatString() это «Current point: {0}.» или «Текущая точка: {0}.».
Q>>
Q>>А в C++ как динамически менять выводимое сообщение и его структуру (скажем, вывести точку дважды при каких-то настройках в логе)?
SD>Стоп стоп стоп я популярно объяснил что пойнт консольке не знаком? Или надо еще раз. Читайте медленно — поинт это структура из программы.
Что значит «консольке не знаком»? В C++ по умолчанию знаком, что ли? Или таки требует реализацию каких-то методов (типа оператор вывода)?
Такой код перестанет компилироваться, как только разработчики структуры Point добавят свой собственный вывод в поток (обнаруживаемый через ADL) — будет неоднозначность. Или, скажем, такой оператор уже есть, просто неподходящий, а нам нужно своё форматирование.
если > кто-то до сих пор продолжает использовать printf вместо потоков, он не понимает > философии С++ и ему вообще писать на нем не следует. а тем более делать какие-то > там стандарты С++ кода
Ага, засунь свою философию знаешь куда ?
С++ уже был нормальным языком лет десять, прежде чем эту потоковую библиотечку
изобрели, вместе с шаблонами.
Здравствуйте, MasterZiv, Вы писали: MZ>Ага, засунь свою философию знаешь куда ?
да ты я вижу крут, чувачок.
MZ>С++ уже был нормальным языком лет десять, прежде чем эту потоковую библиотечку MZ>изобрели, вместе с шаблонами.
только вот я покруче тебя буду. я писал на С++ с тех пор когда еще stl не стандартизовали.
он тогда все равно был, но не стандартизован. вместо <iostream> писали <iostream.h>, не было namespace std, все было в глобальном и мелочи были типа не ios_base::in, а ios::in
stl появился почти сразу с С++, как только туда шаблоны добавили
Здравствуйте, night beast, Вы писали:
NB>однако заметь, я не рассказываю какое линк г*но, потому что синтаксис условий on убог, или потому что нет группировки по нескольким полям...
Группировка по нескольким полям:
group x by new { x.Field1, x.Field2}
Не?
Насчёт синтаксиса on. Сдаётся мне, вы пытаетесь использовать linq ненадлежащим образом. Сколько встречал опытных разработчиков баз данных, практически все пытаются переводить sql-запросы тупо один в один на linq-запросы. Но это неправильно! Это разные технологии.
Аналогично, например, программеры пытаются перенести свой опыт ООП из таких языков, как C++,C#,Java на JavaScript: плюются на дурацкое, с их точки зрения, прототипное ООП. Оно не дурацкое, оно другое!
Может, всё же стоит освоить linq?
Вот, например, кратенько-кратенько: http://www.linqpad.net/WhyLINQBeatsSQL.aspx Полагаю, некоторые предубеждения по прочтении развеются сами.
Вообще, для понимания LINQ рекомендую книги Албахари.
Здравствуйте, SleepyDrago, Вы писали:
SD>Здравствуйте, Qbit86, Вы писали:
Q>>В нормальном API это выглядит так: Q>>
Q>>Console.WriteLine(GetPointFormatString(), point); // Где GetFormatString() это «Current point: {0}.» или «Текущая точка: {0}.».
Q>>
SD>Стоп стоп стоп я популярно объяснил что пойнт консольке не знаком? Или надо еще раз. Читайте медленно — поинт это структура из программы.
В данном случае автоматически вызовется метод ToString. Если он не переопределён, то по умолчанию выведется что-то вроде:
MyNamespace.MyClass+Point
Стоит отметить, что перегрузка метода ToString — практически обязательное условие при написании нового класса/структуры. Таким образом, консольке point знаком в любом случае.
Здравствуйте, koodeer, Вы писали:
K>Стоит отметить, что перегрузка метода ToString — практически обязательное условие при написании нового класса/структуры. Таким образом, консольке point знаком в любом случае.
Он, может, и знаком, но, возможно, делает не то, что нужно в конкретном синтетическом примере.
Однако функции форматирования содержат перегрузки, принимающие IFormatProvider. Достаточно его реализовать (вместе с ICustomFormatter'ом) требуемым образом.
> MZ>Ага, засунь свою философию знаешь куда ? > да ты я вижу крут, чувачок.
Да, в общем, не дурак.
Ты извини уж, резковато получилось, но вот чего в С++ нет и никогда не было,
так это философии. Единственная его философия -- это компромис между
производительностью и типобезопасностью и другими безопасностями.
> MZ>С++ уже был нормальным языком лет десять, прежде чем эту потоковую библиотечку > MZ>изобрели, вместе с шаблонами. > только вот я покруче тебя буду. я писал на С++ с тех пор когда еще stl не > стандартизовали.
Да я тоже писал.
Вообще-то с ... эээ ... с 1990-го где-то...
Здравствуйте, Qbit86, Вы писали:
Q>Здравствуйте, SleepyDrago, Вы писали:
...
Q>
SD>logstream("at:" << point);
Q>Такой код перестанет компилироваться, как только разработчики структуры Point добавят свой собственный вывод в поток (обнаруживаемый через ADL) — будет неоднозначность. Или, скажем, такой оператор уже есть, просто неподходящий, а нам нужно своё форматирование.
поскольку диспетчеризуем по 2м аргументам то необязательно быть автором структуры чтобы в наш лог она выводилась однозначно. Проблемы только у тех кто гвоздями прибивает в коде единственно правильный поток
ps и принтэфы в цикле и print_point'ы все я успел повидать.
Q>>Такой код перестанет компилироваться, как только разработчики структуры Point добавят свой собственный вывод в поток (обнаруживаемый через ADL) — будет неоднозначность. Или, скажем, такой оператор уже есть, просто неподходящий, а нам нужно своё форматирование.
SD>поскольку диспетчеризуем по 2м аргументам то необязательно быть автором структуры чтобы в наш лог она выводилась однозначно. Проблемы только у тех кто гвоздями прибивает в коде единственно правильный поток :beer:
Т.е. ты выводишь не в std::ostream, а в свой поток конкретного типа? Что такое logstream?
SD>ps и принтэфы в цикле и print_point'ы все я успел повидать.
В соседней ветке я описал, как это будет выглядеть в C#. Без обёрток типа print_point. Грубо говоря, аналогом плюсового оператора вывода будет реализация одного метода в ICustomFormatter.
Здравствуйте, koodeer, Вы писали:
NB>>однако заметь, я не рассказываю какое линк г*но, потому что синтаксис условий on убог, или потому что нет группировки по нескольким полям...
K>Группировка по нескольким полям:
K>
K>group x by new { x.Field1, x.Field2 }
K>
K>Не?
возможно.
K>Насчёт синтаксиса on. Сдаётся мне, вы пытаетесь использовать linq ненадлежащим образом. Сколько встречал опытных разработчиков баз данных, практически все пытаются переводить sql-запросы тупо один в один на linq-запросы. Но это неправильно! Это разные технологии.
ага. это фича. знакомо.
K>Аналогично, например, программеры пытаются перенести свой опыт ООП из таких языков, как C++,C#,Java на JavaScript: плюются на дурацкое, с их точки зрения, прототипное ООП. Оно не дурацкое, оно другое!
то же можно сказать про stl, не?
K>Может, всё же стоит освоить linq? K>Вот, например, кратенько-кратенько: http://www.linqpad.net/WhyLINQBeatsSQL.aspx Полагаю, некоторые предубеждения по прочтении развеются сами.
обычная агитка, ничего интересного.
веселье начинается когда начинаешь переносить рабочие запросы в шарп.
K>Вообще, для понимания LINQ рекомендую книги Албахари.
Здравствуйте, Marty, Вы писали:
M>Здравствуйте, Marty, Вы писали:
M>>Язык мог бы помочь, если бы элипсис преобразовывался к какому-то более-менее типизированному хранилищу.
std::initializer_list вместе с собственным лисапедом?