Здравствуйте, VladD2, Вы писали:
VD> поливание D грязью опущено
Секундочку. Т.е. "правильные" языки позволяют вызывать недетерминированные ф-ции в compile-time? Как тогда в них решаются проблемы мной описанные?
P.S. Я не спрашивал почему D такой хреновый, я спросил как в языках поддерживающих compile time вычисления решаются проблемы с вызовом недетриминированных ф-ций (или может это не считается проблемой вовсе и программист вправе превратить процесс компиляции в процесс генерации случайного байт-кода).
Здравствуйте, Disappear, Вы писали:
VD>>Все отличие тебя от них в том, что ты немного задумался над тем, что происходит. Но как только тебе попробовали показать "как глубока эта заячья нора" ты сразу же решил, что лучше зашорить глаза и оставаться жить в своем мире.
D>Почему вы так часто переходите на личности?
Потому что ты споришь со своим отражением. Как, позволь узнать, говорить об этом явлении не упоминая тебя?
D>Этот и другие языке мне интересны чисто из академических интересов.
Хм. "Не пора ли нам перейти на D" это академические соображения?
D> Для работы, по прежнему нет ничего лучше старых добрых инструментов — это дело привычки.
Значит ты сам ответил на свой вопрос "не пора". Точнее "всегда — нет".
D>Речь шла, о возможности постепенного перехода к использованию других инструментов.
А как же "нет ничего лучше старых добрых инструментов"? И зачем тогда новые если старый — добрые?
D> И что бы дала эта возможность. D>По сути дела, то что было высказано в этой ветке, могло бы нести обьективный характер — за и против. Но, как оказалось, многие не считают, что можно обсуждать такие темы, потомучто в массах преобладает "эффект блаба", народная истерия, костность дедушкиной бороды или что еще там... D>Быть может, люди не такие тупые, как Вы о них думаете? И даже С++ программисты.
Я не думаю. Я циничный наблюдатель. Просто ты первый раз сталкнулся с эффектом блаба и не понял что это такое. Причем самое смешное, что ты при все при том сам болен этим же синдромом.
И лично меня синдром блаба нисколько не удивляет и темболее не раздражает. По началу я был удивлен, но потмо понял, что и сам подвержен ему. Это нормальное проявление человеческих недостатков. Единственное что можно тут сделать — это осознать что сам являшся блабом и изучить разные языки чтобы потом можно было оценивать их более-менее осознанно и бесрпистрасно.
Эта же ветка не более чем отличная демонстрация этого эффекта.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, WolfHound, Вы писали:
WH>Нет у нативности никаких преимуществ. Вобще никаких. Он не нужен нигде. Ну кроме может быть микрокода и чегото в этом духе.
Нет. Но я ни капельки даже не расстроен. Никто вообще и не говорил что круче D только яйца, а про то что Nemerle есть Слово Господне... (ну в крайнем случае идеальный язык всех времен и народов) по крайней мере на этом форуме твердится постоянно.
Относительно примера — вызов метода из рантайма во время компиляции — это конечно интересная идея, но на практике это есть великое зло.
VD>>>В обличии от D или C++ мы вольны произвести в макросе вычисления любой сложности. Так если у нас уже есть нужная функция которую нужно вычислить во время компиляции, то мы просто вызваем ее в макросе и получаем требуемый результатм. VD>>>То есть для нас нет разницы между кодом программы и метакодом. В D же и в С++ мы вынждены писать метакод на птичьех языках которые сильно отличаются от того языка что мы вынуждены применять в реальной программе. С>>Ну D это уже не относится. VD>Еще как отностися. Метакод в D пишется не на базовом D, а на статических расширениях.
И что из этого. Правильное решение. D как впрочем и CLI не может гарантировать отсутсвие побочных эффектов. Сомневаюсь — что кому нибудь понравится функция которая вычисляет правильное значение только по чертвергам в полнолуние.
На сим откланяюсь.
P.S. Принимать участие в дальнейшем флейме не вижу никакого смысла.
для забивания гвоздя надо выбирать правильный микроскоп.
Здравствуйте, jedi, Вы писали:
J>P.S. Я не спрашивал почему D такой хреновый, я спросил как в языках поддерживающих compile time вычисления решаются проблемы с вызовом недетриминированных ф-ций (или может это не считается проблемой вовсе и программист вправе превратить процесс компиляции в процесс генерации случайного байт-кода).
Программист даже на самом строгом языке может с легкостью нагенерить совершенно случайного кода.
Язык должен представлять защиту от случайных ошибок. Если же програмист использует кодогенерацию на основе вызовов rand(), то тут никакая защита не поможет...
Здравствуйте, Disappear, Вы писали:
F>>Похоже, это уже даже не софт для АЭС...
D>И даже не CRM система для нового склада памперсов...
Небольшая справка. "Софт для АЭС" — это такой прикло который постоянно всплывает как последний аргумент против управляемых сред. В общем, "Софт для АЭС" стал таким примера притянутого за уши аргумента.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, jedi, Вы писали:
J>Секундочку. Т.е. "правильные" языки позволяют вызывать недетерминированные ф-ции в compile-time? Как тогда в них решаются проблемы мной описанные?
Я не в курсе какие проблемы ты описал. Но правильные языки действительно повзволюят вызвать во время компиляции любой код.
J>P.S. Я не спрашивал почему D такой хреновый, я спросил как в языках поддерживающих compile time вычисления решаются проблемы с вызовом недетриминированных ф-ций (или может это не считается проблемой вовсе и программист вправе превратить процесс компиляции в процесс генерации случайного байт-кода).
Программист всегда прав. Если он вменяем, то его код будет дейсвовать только во благо. Ошибки конечно возможны, но в большинстве случаев они приввдут только в выдаче соотвествующих сообщений об ошибках.
Если есть боязнь за то что можно "свалить" компилятор, то утешу тем, что свалить его можно и так. Создай вечный цикл в компиляторе. Этого будет достаточно.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, Tilir, Вы писали:
T>Вы только что назвали г@вном библиотеку, которая стабильно использовалась для написания невероятного количества кода. Рабочего, активно использующегося, стабильного. Хочу добавить — мою любимую библиотеку. Минус ставить не буду, но прошу сбавить градус снобизма.
Извини, но хвастаться макросными мапами — это смешно. Это даже для С++ дремучее и страшное прошлое. А для языков поддреживающих функции высшего порядка вообще смешно.
Вот как может выглядить подключение обработчика события без макросов:
listView.AfterSelect += fun(_, e) { Text = e.Node.Text; };
Здесь мы подлючаемся на событие смены выделенного элемента и копируем его текст в заголовок формы.
Заметь, никаких макросов. А стало быть никаких ошибок и грязи.
T>А что вы предлагаете для программирования COM-серверов и ActiveX на D вместо ATL? Вы хоть раз пробовали делать это без ATL? Или всё, про COM дружно забываем?
В Ди можно полностью потворить стиль ATL используя миксины.
Но лично я предпочитаю просто не связываться с КОМ. Уж больно некрасивая реализация у этой технолгии. Компонентная модель у дотнета и Явы куда лучше. Чтобы создать контрол не нужно так извращаться и "набивать" свой класс тонной непонятной функциональности (которая потом еще неясно как будет сосуществовать). Мне достаточно просто создать наследника от подходящего класса и все будет работать.
T>Насколько я понимаю, для WTL D использовать тоже не стоит (множественное наследование, да?). В общем резюме такое — для разработки программ чуточку сложнее Hello World, язык D пока что не имеет ни достаточной инфраструктуры, ни средств для переноса на него существующих библиотек с C++.
Во истину если у тебя в руках молоток, то все вокург кажется гвоздями.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, fmiracle, Вы писали:
F>Программист даже на самом строгом языке может с легкостью нагенерить совершенно случайного кода. F>Язык должен представлять защиту от случайных ошибок. Если же програмист использует кодогенерацию на основе вызовов rand(), то тут никакая защита не поможет...
Дело не в том ... rand() — это просто пример недетерминированной функции. Другим примером может быть предположение о наличии какого-то файла на диске, какие-то тонкие предположения о наличии у пользователя каких то-прав в системе, наличие интернета в момент компиляции, да мало ли еще что.
Т.е. возникает неявная (!) возможность того, что компилируемость кода зависит от внешних факторов никак не отраженных в исходнике (напр. если происходит вызов внешней либы).
Вот еще подумалось — если такие языки распространятся, то скачав безобидный исходник из сети и поставив его на компиляцию, я могу стать жертвой
очень хитрого вируса. Нет, в самом коде не будет "format c:", но какой-то хитрый макрос будет вызывать какую-то стандартную либу и использовать дыры в ней. Да мало ли ужастей можно придумать?
Я понимаю, что это все может показаться надуманным, но все-таки ... Одно дело plain-text code, который не больше чем код, а совсем другое — зверь, который во время компиляции может приконнектиться куда нужно и сдать нахрен все номера моих кредитных карточек
Здравствуйте, VladD2, Вы писали:
VD>Я не в курсе какие проблемы ты описал. Но правильные языки действительно повзволюят вызвать во время компиляции любой код.
Хороший повод читать всю ветку, а не последнее сообщение в ней .
Ок, самоцитируюсь (было 4-мя постами выше):
А вдруг:
1) функция factorial зависит от некторых глобальных переменных (которые инициализируются в main и соответственно не проиницализированы в момент выполнения этой функции на этапе компиляции);
2) функция factorial вызывает функции из внешних библиотек, о которых неизвестно детерминированы они или нет (я уж не говорю оразных версиях этих библиотек в момент компиляции и исполнения);
3) тупо зовет rand() или time();
VD>Программист всегда прав. Если он вменяем, то его код будет дейсвовать только во благо.
Ага, он также прав когда пишет =, а имел в виду ==. От глупых ошибок никто не застрахован (тем более в сторонних либах).
VD>Ошибки конечно возможны, но в большинстве случаев они приввдут только в выдаче соотвествующих сообщений об ошибках.
Вот, уже ближе. Теперь конкртней, что за сообщения об ошибках? Как компилятор вообще узнает что их нужно выдать?
VD>Если есть боязнь за то что можно "свалить" компилятор, то утешу тем, что свалить его можно и так. Создай вечный цикл в компиляторе. Этого будет достаточно.
Нет, этого я не боюсь.
P.S. Ради бога, не нужно сводить все к флейму. Я задал вполне конкретный вопрос, а в результате услышал:
1) D — отстой;
2) "Программист всегда прав";
3) "правильные языки действительно повзволюят вызвать во время компиляции любой код".
Здравствуйте, jedi, Вы писали:
J>Я понимаю, что это все может показаться надуманным, но все-таки ... Одно дело plain-text code, который не больше чем код, а совсем другое — зверь, который во время компиляции может приконнектиться куда нужно и сдать нахрен все номера моих кредитных карточек
Та же самая байда, если plain-text код, скажем, на С использует вызов из бинарной библиотеки, который сделает чертичто при запуске приложения (ты ж его вряд ли только компилируешь, но скорее всего и запускаешь?)
Аналогично, нет гарантии как эта библиотека поведет себя в четверг после осадков.
Значит, если имеется приступ паранойи, то по любому надо изучать исходники всех используемых библиотек
Ну так в Nemerle макросы времени компиляции — это точно такая же библиотека, как и библиотеки времени исполнения.
Так что не думаю, что тут что-то серьезно меняется по сравнению с тем, что есть.
Здравствуйте, Слоноежик, Вы писали:
С>Нет. Но я ни капельки даже не расстроен. Никто вообще и не говорил что круче D только яйца, а про то что Nemerle есть Слово Господне... (ну в крайнем случае идеальный язык всех времен и народов) по крайней мере на этом форуме твердится постоянно.
Не нат. Говорят что это один из лучших языков на текущий момент.
С>Относительно примера — вызов метода из рантайма во время компиляции — это конечно интересная идея, но на практике это есть великое зло.
Это еще по чему?
С>На сим откланяюсь.
С>P.S. Принимать участие в дальнейшем флейме не вижу никакого смысла.
Разговор только начался, а ты уже в кусты?
... << RSDN@Home 1.2.0 alpha rev. 673>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Здравствуйте, jedi, Вы писали:
J>Дело не в том ... rand() — это просто пример недетерминированной функции. Другим примером может быть предположение о наличии какого-то файла на диске, какие-то тонкие предположения о наличии у пользователя каких то-прав в системе, наличие интернета в момент компиляции, да мало ли еще что. J>Т.е. возникает неявная (!) возможность того, что компилируемость кода зависит от внешних факторов никак не отраженных в исходнике (напр. если происходит вызов внешней либы).
Если программист совсем больной то да. А если нет то все будет нормально. И мы имеем огромную мощь недоступную подавляющему большинству языков.
J>Я понимаю, что это все может показаться надуманным, но все-таки ... Одно дело plain-text code, который не больше чем код, а совсем другое — зверь, который во время компиляции может приконнектиться куда нужно и сдать нахрен все номера моих кредитных карточек
Угу с тем же успехом можно скачать просто исходник (скажем на С++) из инета, скомпилировать и запустить то что получилось. И результат потырит все твои кредитки.
... << RSDN@Home 1.2.0 alpha rev. 673>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Здравствуйте, VladD2, Вы писали:
VD>Здравствуйте, minorlogic, Вы писали:
M>>Я пытался найти реальные недостатки МН, но к сожалению не смог. Единственный недостаток о котором я слышал это передваваемое из уст в уста легенда о недостатках МН . Пожалуйста подскажите мне , где я могу почитать об этом ?
VD>http://en.wikipedia.org/wiki/Diamond_problem
Вы же прочли что эта проблема решена в С++ ? на тоже вики странице ?
M>>Надеюсь вы читали , что по этому поводу пишет Страуструп , ?
VD>Да, читал. И не только по этому поводу. Мне интересно другое. Появилось бы в С++ МН если бы Страуструп в свое время додумался бы до трэйтсов/миксинов?
Или что то путаю , или миксины создают различную имплементацию много раз ?
Здравствуйте, VladD2, Вы писали:
VD>Что касается конкуренов С++, то для меня это само по себе смешно. С++ маральный урод. Он устарел еще 10 лет назад. Его испоьзуют не потому что он лучий, а потому, что к нему привыкли и потому что вокруг него море фобий. Конкуренты ему попросту не нужны.
Что ж, а я всё уже думал сам высказаться по поводу "C++ vs !C++", правда не хочется опять флейм поднимать. Но раз уж начало положено (причём не в первый раз в этой ветке) то и я выскажусь.
Недавно прочитал замечательную книжку "The UNIX-HATERS Handbook". Книжка выпущена в далёком 1994 году. Собственно, кое-где авторы (ИМХО) перегибают палку, но в общем и целом мысли высказаны вполне адекватные (причём высказаны очень весело, я под столом валялся, когда читал, хотя некоторым бы впору горько плакать).
Не обошли авторы стороной и C++. Ему посвящена целая глава: "C++ — The COBOL of the 90s". Причём в самом начале есть замечание, что сравнивать C++ и COBOL было бы нечестно по отношению к COBOL'у.
Собственно, не буду приводить здесь полную аргументацию, кому нужно сами прочитайте, или постучитесь ко мне (мыло в профиле указано) и мы сразимся в "СВ". Показательно лишь одно: даже более 10 лет назад его считали неудачным. По сути, книжка утверждает, что "C++ was never formally designed: it grew". Причём, вырос он, преимущественно, согласно UNIX-овской философии (по мнению авторов): простота реализации — главное, в ущерб её можно (и нужно) проносить надёжность. А вот получается после этого сложный неповоротливый монстрик.
Короче, на всякий случай повторюсь: если кто-то хочет развить флейм, давайте начнём его в "СВ". Не хочется "ФП" засорять...
Здравствуйте, jedi, Вы писали:
J>Хороший повод читать всю ветку, а не последнее сообщение в ней .
J>Ок, самоцитируюсь (было 4-мя постами выше):
J>А вдруг: J>1) функция factorial зависит от некторых глобальных переменных (которые инициализируются в main и соответственно не проиницализированы в момент выполнения этой функции на этапе компиляции); J>2) функция factorial вызывает функции из внешних библиотек, о которых неизвестно детерминированы они или нет (я уж не говорю оразных версиях этих библиотек в момент компиляции и исполнения); J>3) тупо зовет rand() или time();
Это я читал. Только проблемы тут я не увидил. Это же приемущество, что мой код может сделать что-то полезное.
VD>>Программист всегда прав. Если он вменяем, то его код будет дейсвовать только во благо.
J>Ага, он также прав когда пишет =, а имел в виду ==. От глупых ошибок никто не застрахован (тем более в сторонних либах).
Ну, конкретно от этого не застрахован только тот кто пользуется С++, а точнее его плохими компиляторами. Хотя конечно ошибки бывают у всех. Но ошибка есть ошибка. Ее надо устранять. Кроме того язык надо проектировать так, чтобы избегать максимальное количество классов ошибок. И тут у Nemerle есть немало приемуществ. Потому на нем можно без проблем писать мета-код.
VD>>Ошибки конечно возможны, но в большинстве случаев они приввдут только в выдаче соотвествующих сообщений об ошибках.
J>Вот, уже ближе. Теперь конкртней, что за сообщения об ошибках? Как компилятор вообще узнает что их нужно выдать?
Если твой код приводит к ошибкам времени выполнения, то он с огромной вероятностью вызовет исключение. Если это произойдет, то компилятор тебе об этом сообщит.
Естествно, что паравишьный язык позволяет выдавать и сообщения об ошибки штатными средствами компилятора. Но это умеет и Ди. Это только С++ не умеет.
VD>>Если есть боязнь за то что можно "свалить" компилятор, то утешу тем, что свалить его можно и так. Создай вечный цикл в компиляторе. Этого будет достаточно.
J>Нет, этого я не боюсь.
Ну, а тогда какие проблемы? Мета-код — это такой же код как и обычный но выполняемый во время компиляции. Ошибки в нем возможны. Их нужно просто отлаживать. Для этого есть все редства.
J>P.S. Ради бога, не нужно сводить все к флейму.
Вообще-то эта тема флэйм и есть. Ее сюда именно по этому передвинули.
Но лично я за конструктив в любой дисскусси. Темболее, что не часто приходится поговорить с ортодоксальными С++-никами (это я в общем).
J> Я задал вполне конкретный вопрос, а в результате услышал: J>1) D — отстой;
Почему отстой? Он просто недостаточно хорош чтобы претендовать на лидерство.
J>2) "Программист всегда прав"; J>3) "правильные языки действительно повзволюят вызвать во время компиляции любой код".
J>Конструктивнее, пожалуйста
А что не конструктивно? Может быть лучше повернуть вопрос по другому?
Может лучше ты сам обоснуешь почему нельзя вызвать недетерминированные фукнции внутри мета-кода?
Лично у меня даже нет сомнений, что без этого смысл в мета-коде стремится к нулю. Ну, что простите, за фигня если я не могу вызвать библиотечную функцию внутри мета-программы?
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, Слоноежик, Вы писали: VD>>Что не выходит?
С>Нет.
От и я о том же.
С> Но я ни капельки даже не расстроен.
Оптимизм — это хорошо!
С>Никто вообще и не говорил что круче D только яйца, а про то что Nemerle есть Слово Господне...
И правда такого наверно никто не говорил. Но сама данная тема явно свидетельствует о том, что D в глазах автора являет нечто большее чем просто заурядный ЯП. А ее развитие (закономерное с моей точки зрения) показывает, что его явно не понимают/не принимают его точки зрения.
С>Относительно примера — вызов метода из рантайма во время компиляции — это конечно интересная идея, но на практике это есть великое зло.
Дык, обоснуй. Обсудим. С моей точки зрения (того кто пробовал это делать) все ОК. Ну, и следовательно слова "на практике это есть великое зло" не более чем фобия.
VD>>Еще как отностися. Метакод в D пишется не на базовом D, а на статических расширениях. С>И что из этого. Правильное решение.
В чем его правильность? В том что надо использовать второй — ограниченный и интерпретируемый язык вместо того чтобы использовать исходный и мощьный язык?
С> D как впрочем и CLI не может гарантировать отсутсвие побочных эффектов. Сомневаюсь — что кому нибудь понравится функция которая вычисляет правильное значение только по чертвергам в полнолуние.
Побочный эффект — это главное что добиваются от шаблонного метапрограммирования (ШМП) в С++ и Ди. Причем С++ реализация более чистая, так как ди имеет откровенные средства императивного программирования времени компиляции.
Суть ШМП в том, чтобы порождать некие структуры или код в зависимости от некоторых входных настроек (данных). Так что просто несерьезное утверждение.
С>P.S. Принимать участие в дальнейшем флейме не вижу никакого смысла.
Правильно. Для этого прийдется изучить что-то нове. А это всегда напрягает.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, ie, Вы писали:
ie>Не знаю. Но C# программеры в моем окружении относятся к Немерле скорее положительно, а C++ наоборот
Дык это понятно. Если для C#-программиста Nemerle — это логическое развитие с небольшим количеством изменений, то для С++программиста — это крушения образа мысли. Сам переживал подобное пару раз и знаю насколько это тяжело переносить.
Реакция обычно следующая. Сначала полное не понимание и безразличие. Потом страх и животная неприязнь. Потом разбитое состояние, ощущения расстерянности вызванное тем, что человек начинает понимать, что знакомые идеомы, навыки и т.п. все-все-все — это много лет не лучшим образом проведенной жизни. Далее есть варианты. Сильный человек оценивает достоинства и недостатки и выбирает более мощьный и простой язык, а мнее сильный обычно просто говорит себе — ну и хрен с ним — и поглубже зарывает голову в песок.
ie>Тот же D будет несомненным шагом вперед
+1
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
С>И что из этого. Правильное решение. D как впрочем и CLI не может гарантировать отсутсвие побочных эффектов. Сомневаюсь — что кому нибудь понравится функция которая вычисляет правильное значение только по чертвергам в полнолуние.
Досадный Глюк. естественно не CLI а CLR
для забивания гвоздя надо выбирать правильный микроскоп.
VD>Может лучше ты сам обоснуешь почему нельзя вызвать недетерминированные фукнции внутри мета-кода?
VD>Лично у меня даже нет сомнений, что без этого смысл в мета-коде стремится к нулю. Ну, что простите, за фигня если я не могу вызвать библиотечную функцию внутри мета-программы?
Знал бы почему — обосновал бы . В принципе, я понял твою точку зрения. К тому же выше fmiracle & WolfHound также привели достаточно весомые аргументы. Теперь надо бы подумать над этим
В общем-то суть в том, что у меня никогда не возникало необходимости звать что-то недетерминированное в рантайме. Даже кодогенерация зависит только от своих параметров (заготовка-описание, код на DSL итп), те детерминированна. Когда же мне сказали, что можно звать абсолютно все, я немного испугался. Теперь успокоился и понял, что это просто инструмент — такой же как и другие, обычный. Бъет по лбу (программиста сразу или юзера — через месяц), если что-то напортачил.
Короче, compile-time code execution — это просто возможность писать все на одном языке, не привлекая скрипты и внешние тулзы для кодогенерации. Ничего сверхъестественного. ИМХО, кроме всех очевидных плюсов, здесь есть минус — хитрый метакод запрятан в исходниках и внешне (в файл-менеджере) неотличим от "обычного" кода. Эта проблема решается, видимо, только тщательным документированием ...