Здравствуйте, L.C.R., Вы писали:
LCR>Зайди в "коллеги улыбнитесь" — там шикарная подборка 19 гениальных заблуждений в науке и технике. Так что здравый смысл не канает
Сколько лет смаллтолку?... И сколько лет шарпу?... А теперь сравни популярность.
LCR>Шаг в сторону: как ты считаешь, нужно ли обычному программисту (ремесленнику практически (!)) вдохновение?
Тем кто пишет бизнес код оно только мешает.
Я бизнескод не пишу и ремеслиноком не являюсь
... << RSDN@Home 1.1.4 beta 6a rev. 436>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Здравствуйте, Gaperton, Вы писали:
G>Здесь идет речь о твоем собственном профессионализме, как разработчика.
Плавный перешод на личности G>Его предлагается "шлифовать". Тебе это не интересно (о чем ты заявил) — не занимайся.
Мне не интересно заниматься чемто абстрактным. Реализация реальных задач позволяет это делать на порядки эффективней.
... << RSDN@Home 1.1.4 beta 6a rev. 436>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
VD>Не он, в данном случае, тебя функциональными фичами Питона пытался накормить. Видимо незнал, что кое-что можно и на Шарпе. Тут отвечать нужно как-то так :
VD>
VD>int sum = 0;
VD>Array.ForEach(File.ReadAllLines(@"C:\data.txt"), delegate(string elem) { sum += int.Parse(elem); });
VD>
VD>И ты заведомо в неудобном положении так как вынужден подбирать примеры составленнве в расчете под конкретные функции. У дотнета тоже функций хватает... таких что нет в питоне или есьб но более громоздкие. Ну, и надо еще учитывать строкую типизацию, рефакторинг, решарпер, отладчик и т.п. чего нет у Питона.
Все равно по размеру программы шарп проиграет, я привел готовую программу которую можно запустить и она будет работать, а ты кусок кода
VD>Кстати, если говорить о Питоне, то стоит глянуть на Boo. Это типизированный клон Питона для дотнета. Единственная проблема — это то что в нем так же не требуется декларировать перемнные. Бесит страшно.
интересно но пока сильно сыро.
WH>>А самое главное что все что ты привел очень синтетические задачи не имеющие с реальностью ничего общего.
VD>+1
так я просил чтобы что-то реальное привели, но не дождался.
> > Ну, там частенько понятия подменяли. Все же динамическая типизация и отсутствие указания типов в коде — это не одно и то же. Вывод типов в ФЯ достиг очень высокого уровня и может порой казаться динамической типизацией, но при этом все же остаеются почти все приемущества статической типизации. А вот приемущества истенно динамической типизации при сравнении ее с компонентным подходом и хорошего качества ООП я так и не увидил. Я плохо смотрел?
Мое и не только мнение — сколько не смотри, а вкус блюда не узнаешь не
попробовав.
Тут дело в способе мышления, а не в знании конструкций и паттернов.
http://www.livejournal.com/users/behrk/318434.html
Человек стал работать со смолтоком после того, как устроил голосование
какой новый язык стоит изучить. Так что мнение можно считать
не-"фанатическим".
Здравствуйте, AndrewVK, Вы писали:
AVK>Не в порядке флейма, а интересу ради. Как на Питоне будет выглядеть решение задачки из сообщения Re[2]: Хочу стать .Net-чиком
Я не совсем понял про длину ключей и значений, в приведенном примере длины же не корректны. В общем сформулируй более понятно задачу и желательно кусочек реальных данных.
Здравствуйте, Andrei N.Sobchuck, Вы писали:
AVK>>Расскажи это МС, которая сделала так, что СОМ сервер можно зарегистрировать только из под администратора.
ANS>Да те их проги которыми я пользовался нормально работали под любым пользователем.
Разумеется. Но при этом о развертывании без инсталлятора речь не идет. Так что тут нужно выбирать — либо простота развертывания, либо возможность работы не из под администратора. Мне первое показалось более важным.
AVK>>Проблема ровно одна — при этом янус лишится одного очень вкусного свойства, а именно deploy by copy.
ANS>Да я не настаиваю. Просто этот фактор — одна из тех одёжек по которым я встречаю программы (и провожаю).
Вобщем наверное да. А в частности цели у проекта несколько иные.
AVK>Разумеется. Но при этом о развертывании без инсталлятора речь не идет. Так что тут нужно выбирать — либо простота развертывания, либо возможность работы не из под администратора. Мне первое показалось более важным.
Сделай опцию. Типа "регистрировать при старте или нет". Плюс, при ошибке регистрации прога должна таки запускатся.
Здравствуйте, Andrei N.Sobchuck, Вы писали:
ANS>Сделай опцию. Типа "регистрировать при старте или нет".
Опасно. Потом будет куча воплей — почему у меня при обновлении все перестало работать. Наверное лучше будет автоматически, в зависимости от доступных прав, регистрировать протокол либо в системе, либо только внутри процесса. Проблема только во времени
ANS> Плюс, при ошибке регистрации прога должна таки запускатся.
Еще вопросы: перевод строки считается за символ? Или чтение построчное?
Если построчное то данные не могут начинатся с K V или END?
Файл должен быть корректным в том отношении что у каждого ключа есть значение?
Эти вопросы возникли потому что я вижу не стыковку тут:
V 37
efwrweagf
tgfrh
trs
ht
rsh
trs
K 12
тут ни как ни набирается 37 символов.
Извини за назойливость, для меня задача полностью абстрактна.
Здравствуйте, FR, Вы писали:
FR>Еще вопросы: перевод строки считается за символ? Или чтение построчное?
Я тебе реальные данные привел. Погляди сам.
FR>Если построчное то данные не могут начинатся с K V или END?
Могут.
FR>Файл должен быть корректным в том отношении что у каждого ключа есть значение?
Да.
FR>Эти вопросы возникли потому что я вижу не стыковку тут:
FR>V 37 FR>efwrweagf FR>tgfrh FR>trs FR>ht FR>rsh FR>trs
FR>K 12
FR>тут ни как ни набирается 37 символов.
Вот рабочий алгоритм на первом шарпе:
private void FillFromHashToDisk(string file, IDictionary props)
{
string currentKey = "";
using (StreamReader sr = new StreamReader(file))
while (true)
{
string tag = sr.ReadLine();
if (tag == "END")
return;
string[] parts = tag.Split(' ');
if (parts[0] == "K")
currentKey = ReadCharBlock(int.Parse(parts[1]), sr);
else if (parts[0] == "V")
props[currentKey] = ReadCharBlock(int.Parse(parts[1]), sr);
}
}
private static string ReadCharBlock(int length, StreamReader sr)
{
char[] buffer = new char[length];
sr.Read(buffer, 0, length);
return new string(buffer);
}
Здравствуйте, WolfHound, Вы писали:
WH>Здравствуйте, Gaperton, Вы писали:
G>>Здесь идет речь о твоем собственном профессионализме, как разработчика. WH>Плавный перешод на личности
Это не переход на личности. Это не наезд. Мне показалось, что ты неправильно понял пост, на который отвечаешь. Я хотел акцентировать твое внимание на том, что в этом посте речь идет о личном профессионализме — твоем, моем — чьем угодно, который надо "шлифовать". В то, что ты отказываешься это делать (а ты это написал) я не верю — кто будет так себя оговаривать? G>>Его предлагается "шлифовать". Тебе это не интересно (о чем ты заявил) — не занимайся. WH>Мне не интересно заниматься чемто абстрактным. Реализация реальных задач позволяет это делать на порядки эффективней.
В последнем я с тобой полностью согласен. Не согласен с первым — тем самым ты отрицаешь положительное влияние теории на практику. Касательно языков — многим кажется, например, что знакомство с языками вроде Смоллтока улучшает способности к ОО дизайну даже если твой основной язык Java или C#. Думаю, мы все равно останемся каждый при своем мнении.
Здравствуйте, WolfHound, Вы писали:
WH>Здравствуйте, L.C.R., Вы писали:
LCR>>Зайди в "коллеги улыбнитесь" — там шикарная подборка 19 гениальных заблуждений в науке и технике. Так что здравый смысл не канает WH>Сколько лет смаллтолку?... И сколько лет шарпу?... А теперь сравни популярность.
На вопросы ответил, сравнил. Что предлагается делать дальше?
Здравствуйте, FR, Вы писали:
FR>Все равно по размеру программы шарп проиграет, я привел готовую программу которую можно запустить и она будет работать, а ты кусок кода
Не особо то. Но можно и проще:
foreach (string value in File.ReadAllLines(@"C:\data.txt"))
sum += int.Parse(elem);
Не так же нужно забывать, что это проще читается и намного быстрее пишется.
И вообще, наличие пары функций которые можно реализовать на другом языке еще не даютк каких-то приемуществ. Если кому-то нужны все функциональные изыски, то сделать их не так уж и сложно.
Я тебе тоже могу привести кучу примеров где у дотнета имеется готовые решения и ты задолбашся колатить код чтобы их реализовать.
Ну, и про скорость забывать не стоит. Этот пример вырожденный и скорость в нем не важна, но в реальности скорость все же важана. А без вэлью-типов и достаточно информации о типах скорости дотичь не удастся. Если дотнетный код хоать как-то сореврунется с С++-ным, то у Питона (даже при использовании разных ускорителей вроде преджитов) тут явная труба.
VD>>Кстати, если говорить о Питоне, то стоит глянуть на Boo. Это типизированный клон Питона для дотнета. Единственная проблема — это то что в нем так же не требуется декларировать перемнные. Бесит страшно.
FR>интересно но пока сильно сыро.
Ну, я тут не причем. Хотя мне тоже понраилось. Как миниуму есть очень правльная мысль о замене динамической типизации на статический вывод типов.
Мне кажется за этим будущее. Вкупе с компонентнотстью, джит- и инстол-тайм-компиляцией и другими решениями это может дать то самое более оптимальное решение которое было бы и простым в написании, и строгим, и порождало бы быстрый код.
FR>так я просил чтобы что-то реальное привели, но не дождался.
А что тебе пойдет? Вот у меня почти доделанные:
* R# — парсер, метапреобразователь и генератор кода написанный на C#.
* Rsdn.Editor — редактор кода вроде Синтилы написанный на C#.
* RSDN@Home — опять же написанный на C#.
Не у меня еще куча софта в том числе несколько интерактивных 3D-игр полностью написанных на C#.
Хотелось бы увидить хотя бы что-то похожее написанное на Питоне или Руби.
ЗЫ
Чтобы было яснее моя позиция... Мне нравятся многие вещи в Питоне и Руби. Это действительно удачные языки. Но их заточенность на интерпретацию, наплевательское отношение к статической типизации и вольное отношение к безопастности программирования (например, то же наплевательское отношение при декларации переменных) делают их для меня эти языки не более чем интересными. В общем, забавная игрушка у которой можно поучиться некотороым удачным решениям.
Кстати, если уж говорить о подобных языках, то лучше обратить внимание на Руби. С производительностью у него еще хуже чем у Питона, да и проблемы почти те же, но вот многие решения намного олее мощьны (если можно так выразиться).Те же континюэйшоны в Руби сделаны на пять с плюсом. Анонимные блоки очень кратики и элегантны. И многое другое. Но опять те же проблемы, что и у Питона.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, Sinclair, Вы писали:
S>А вот задача копирования группы файлов элегантнее решается на языке командной строки DOS (не говоря уже о более продвинутых шеллах). S>Кстати, раз уж речь зашла: S>
S>sort < out.txt > out2.txt
S>
S>)
Как показала моя практика как раз задачи копирования и обработки файлов лучше решать опять жен на полноценных языках программирования. Да пока тебе нужно скопировать несколько файлов, то командная строка проста и достаточна. Но как только нужно прибавить мало мальски сложную логику, то она пасует по полной программе. У полноценного ЯП и возможности по формулированию логики по больше, и возможности по отладке куда шире.
Дотнет же сдель дает ко всему прочему еще и то приемущество, что недостающую функциональность можно сварганить на нем же сомом. При этом производительность получается сравнимая с С++-ной, а скорость разработки с Питоном и Руби (а то и выше за счет отладчика, рефакторинга и IDE).
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, FR, Вы писали:
FR>Так питон тем и удобен что очень много упаковано в его стандартные библиотеки. Там же тот же принцип что и в плюсах все что возможно вынести в библиотеку выносится.
В дотнете упаковано не меньше. Вернее точно больше.
FR>Про затраты как раз и идет разговор, что на питоне писать проще.
Очень убедительно.
FR>так чем же плох питон если на нем эта задача решается практически так же просто, и просто решаются задачи которые на любом шеле неразрешимы.
Да ни чем. Но точно так же он не имеет каких-то серьезных приемуществ. То что в некоторых облостях его библиотека шире — это еше не приемуществао. А вот то, что на нем самом эту библиотеку не всегда можно расширить — это явный недостаток.
Например, средства парсинга командной строки в дотнете и Шарпе явно не фантан. Однако народ разработал очень приятную библиотечку с которой парсинг командной строки становится декларативным процессом. Например, вот декларация параметров командой строки для одной из наших утилит:
class Arguments
{
[Argument(
ArgumentType.AtMostOnce,
HelpText="Enable archiver. Only for -type:diff",
DefaultValue = false)
]
public bool Zip = false;
[Argument(
ArgumentType.Required,
HelpText="Work type.")
]
public WorkType Type = WorkType.Diff;
[DefaultArgument(
ArgumentType.MultipleUnique,
HelpText="Input files to count.")
]
public string[] Files = null;
public bool ParseArgumentsWithUsage(string[] args)
{
return Parser.ParseArgumentsWithUsage(args, this);
}
}
А вот использование:
arguments = new Arguments();
if (arguments.ParseArgumentsWithUsage(args))
Work();
...
private void Work()
{
switch (arguments.Type)
{
case WorkType.Diff:
{
Diff.DiffFiles(arguments.Files[0], arguments.Files[1],
arguments.Files[2], arguments.Zip, this);
break;
}
case WorkType.Patch:
{
Patch.Do(arguments.Files[0], arguments.Files[1],
arguments.Files[2]);
break;
}
}
}
То есть все описание аргументов польностью декларативно.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, FR, Вы писали:
FR>Не нужно среды,сейчас подобные задачи чаще всего решаются перлом, питон в этом мало уступает ему, и все что ты перечислил есть в стандартных библиотеках.
С чего бы это? Простые задачи можно решать на любом языке. А сложные требуют фрэймворков. Ты на своем Перле и Питоне задолбашся серьезный парсер писать. А я его и на С с каким-нить Бизоном в раз сварганю. А по скорости так они оба в даун уйдут что по сравнеию с С, что по сравнению с C#.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, WFrag, Вы писали:
WF>До LISP-а ему в этом плане все равно далеко. В случае LISP-а мы имеем:
WF>1) Любой синтаксис, который нам понравится.
WF>2) DSL будет компилироваться (в LISP-код, а затем и в нативный при необходимости), а не интерпретироваться. В том числе есть обширные возможности для оптимизации или применения Partial Evaluation. И это все будет работать при компиляции кода, а не при его выполнении.
Как сказать. С одной стороны макросы Лиспа — это действительно мощьное средство. Но "любой синтаксис" — это явное преувеличение. От моря скобок ты не избавишся.
Что до компиляции, то опять же списки более медленны чем массивы и жрут больше памяти. По сравнению с Питоном может что-то и можно получить. Но по сравнению со связками вроде XML + статически типизированный язык с хорошим компилятором или некое средство метапрограммия вроде генераторов парсеров плюс опять же статически типизированный язык с хорошим компилятором ты получишь только более сложное и медленное решение.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.