|
|
|
Программирование
|
|||
|---|---|---|---|
|
#18+
Есть еще один аргумент. Создавая объект как поле класса Вы гарантируемо прибиваете его жизненный цикл к жизненному циклу объекта объемлющего класса. То есть он не может быть собран пока существует экземпляр объемлющего класса. В случае анонимного объекта возможны варианты, что добавляет дополнительной гибкости и пространства для маневра сборщику мусора. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.06.2008, 15:59 |
|
||
|
Программирование
|
|||
|---|---|---|---|
|
#18+
ГыТо есть именованный объект анонимного класса - нормально, анонимный объект именованного класса тоже, а вот вместе ни-ни? Похоже на религию. Звучит сродни "то есть пить водку - нормально, пить пиво - нормально, а вот вместе ни-ни? Похоже на религию". ГыПросто у меня подход Я понимаю и не думаю, что стоит пытаться переубедить друг друга. Просто нас это затрагивает вот по какой причине: блоки инициализации - это заплата на комбинацию двух неудачных с моей точки зрения аспектов ява-концепции: "полностью анонимных объектов" и неименованных конструкторов. Соответственно, их потребности с моей точки зрения не являются концептуально важными; напротив, если их потребности приводят к дополнительным проблемам и ограничениям - тем больше причин доработать концепцию и выкинуть эту гадость. ГыЕсли же я вижу, что получившаяся конструкция нечитаема Вопрос "читаемости" является вопросом вкусов. С моей точки зрения, эта конструкция иногда "терпима", иногда "очень плоха", но никогда не "оптимальна". Гы(а на самом деле человеку, который мало работает с явой она просто непривычна), Ой, да бросьте. Ну что здесь "непривычного", если вспомнить про существующие уже полвека лямбда-функции? ГыРешать я это буду в каждом случае индивидуально. Примерно так же Вы можете потребовать права решать в каждом случае индивидуально, использовать ли соглашение об именовании, и какое именно, итп. У всего есть своя ценность и своя цена. В том числе у унификации кода, и особенно - у унификации кода при работе в команде. Я не согласен с теми, кто полагает ценность унификации очень большой, и говорит "пусть плохо, зато по одному образцу". Я точно так же не согласен с предложением считать ее нулевой (всегда и везде решать индивидуально). Я полагаю так: там, где различия не создают значимой ценности, предпочтительна унификация; там, где унифицированный подход в некоторых случаях конкретно плох, следует решать индивидуально. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.06.2008, 16:18 |
|
||
|
Программирование
|
|||
|---|---|---|---|
|
#18+
Радикализм это признак ограниченности. В гипертрофированном случае он выливается в нередкие здесь холиворы о синтаксисе (C vs Pascal) и прочее. Есть задача и есть инструмент. Любая проблема имеет решение или workaround. (Те же неименованные конструкторы через статические порождающие методы) Если Вы используете инструмент извольте изучить его и применять правильно. Не нравится - берите другой. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.06.2008, 17:08 |
|
||
|
Программирование
|
|||
|---|---|---|---|
|
#18+
И больше всего раздражают люди приходящие со своим уставом в чужой монастырь. То есть зная один язык пытаются писать в том же стиле на другом, не соизволив в должной мере его изучить. А потом приходят в форумы и говорят: "Что-то там у них все через задницу". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 18.06.2008, 17:14 |
|
||
|
Программирование
|
|||
|---|---|---|---|
|
#18+
2 softwarer: softwarer Когда-то существовало понятие вложенных, или локальных, подпрограмм. Локальные процедуры/функции и сейчас есть -- в Delphi. И это удобно. softwarer После чего прошло еще несколько лет, и концепцию возродили в виде вложенных объектов, или - в C++ - локальных структур. В C++ это в ограниченном виде. Методы локальной структуры не могут по-простому использовать локальные переменные охватывающей функции, то есть тяжело дотянуться до контекста. Также, локальная структура не может быть параметром шаблона -- это важно для STL. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.06.2008, 00:56 |
|
||
|
Программирование
|
|||
|---|---|---|---|
|
#18+
Пётр СедовЛокальные процедуры/функции и сейчас есть -- в Delphi. И это удобно. А замыкания есть в Delphi ? Или на любой Чих будет AV ? Удобно ? вряд ли. Не так сложно реализовать вложенные функции в C++ как бороться с последствиями такой реализации ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.06.2008, 07:41 |
|
||
|
Программирование
|
|||
|---|---|---|---|
|
#18+
softwarer edges7Т.е. в данном случае параллельно изучаются и сам язык и применение ООП и в какой степени конструирование программ в стиле ООП. Т.е. наблюдается несколько другой подход. Угу, именно так. Наблюдается подход "каша". Итогом его становится прорва кодеров, кое-как заучивших, но мало что понимающих. ... Думается, что это несколько спорное утверждение. Многое зависит от способа восприятия информации. Можно читать и слепо верить в прочитанное, а можно читать, размышляя над уже прочитанным. Скажем, если некий товарищ, решая задачу, обратился к источнику, в котором его проблема описана, взял и тупо скопировал оттуда код в свое приложение - то это одно. А если прочитав, подумал, доработал решение ( т.е. ухватил идею и развил ее ), ну или хотя бы задумался над прочитанным - то это уже совсем другое. Вообщем, это я все к тому, что думать еще никто не отменял. softwarer Вообще, у меня есть впечатление, что немногочисленные хорошие специалисты сейчас получаются не благодаря первым книгам, которые читали, а скорее вопреки им. Ну да, по началу трудно соориентироваться в море литературы и на первый взгляд отделить хорошее от плохого, если разве только какой-нибудь гуру не подскажет в каком направлении двигаться. Но со временем это перестает быть проблемой. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.06.2008, 09:16 |
|
||
|
Программирование
|
|||
|---|---|---|---|
|
#18+
2 Gluk (Kazan): Gluk (Kazan) Пётр СедовЛокальные процедуры/функции и сейчас есть -- в Delphi. И это удобно. А замыкания есть в Delphi ? Нет, ведь Delphi -- язык не функциональный (а императивный), к тому же с ручным управлением памятью (а удобные замыкания можно сделать только в языке с автоматическим управлением памятью). Gluk (Kazan) Или на любой Чих будет AV ? Delphi запрещает брать адрес локальных процедур/функций. Поэтому их нельзя вызвать динамически (по указателю), можно только статически (по имени). Если локальная процедура/функция избегает указателей, то я не вижу как можно получить access violation. А если процедура/функция работает с указателями, то тут уж не важно, локальная она или нет, риск access violation присутствует, это неизбежная плата за указатели. То есть в Delphi локальные процедуры/функции не повышают риск access violation. Gluk (Kazan) Удобно ? вряд ли. Локальные процедуры/функции -- это действительно удобно, и в VCL они широко используются, чтобы структурировать код. Gluk (Kazan) Не так сложно реализовать вложенные функции в C++ как бороться с последствиями такой реализации Из-за отсутствия в C++ нормальных локальных функций (которым легко доступен контекст, например локальная переменная охватывающей функции), их приходится эмулировать, передавая указатель на контекст в обычную (нелокальную) функцию. А там, где появился указатель, действительно и до access violation недалеко (хотя в данном случае маловероятно). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.06.2008, 13:32 |
|
||
|
Программирование
|
|||
|---|---|---|---|
|
#18+
Пётр Седов2 Gluk (Kazan): Gluk (Kazan) Пётр СедовЛокальные процедуры/функции и сейчас есть -- в Delphi. И это удобно. А замыкания есть в Delphi ? Нет, ведь Delphi -- язык не функциональный (а императивный), к тому же с ручным управлением памятью (а удобные замыкания можно сделать только в языке с автоматическим управлением памятью). О как o O. А Perl давно функциональным стал ??? Пётр Седов Delphi запрещает брать адрес локальных процедур/функций. Поэтому их нельзя вызвать динамически (по указателю), можно только статически (по имени). Ну и толку тогда от них ? Синдром шоколадного чайника ??? Пётр Седов Локальные процедуры/функции -- это действительно удобно, и в VCL они широко используются, чтобы структурировать код. Локальные функторы - это ТОЖЕ удобно :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.06.2008, 13:48 |
|
||
|
Программирование
|
|||
|---|---|---|---|
|
#18+
Гы Слушай, вот объясни пожалуйста, что ты хочешь кроме "выплеснуть раздражение". Я сказал: объектная модель Явы максимально обрезанная, а реализация плоха. Это правда. Ты мог бы оспорить, мог бы расписать список фич и начинать ставить галочки - здесь есть, здесь нет - но не стал этого делать. Вместо этого ты зацепился за одно замечание, причем скорее всего с мыслью "а вот сейчас вытащим на конкретику и раскатаем". Оказалось - действительно факт. Далее у тебя пошли такие странные посты... такое впечатление, что в тебе борятся глухое бессмысленное раздражение и желание таки быть объективным. Так или иначе, на всю конкретику я ответил. Когда сказал "можно лучше" - рассказал как. Итп. Напротив, ты, начиная речи, регулярно попадаешь пальцем в небо - сначала про обоснования, потом про "непривычность". Я пользовался этим инструментом, я знаю его достаточно, чтобы не садиться в лужу, и я считаю его плохим. Вот теперь объясни: чего ты от меня хочешь? Чтобы я им не пользовался? Я именно так и делаю: пощупал на одном проекте и не собираюсь возвращаться. Чтобы я славил его замечательность? Извини, врать очень не люблю. Чтобы я молчал в тряпочку? За этим иди на форум явы. Клянусь, я туда не захожу, и похода "приду и расскажу вам всем, как вам плохо" не планирую. А здесь у нас форум "программирование", со всеми вытекающими. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.06.2008, 14:48 |
|
||
|
Программирование
|
|||
|---|---|---|---|
|
#18+
2 Gluk (Kazan): Gluk (Kazan) Пётр Седов Gluk (Kazan) Пётр СедовЛокальные процедуры/функции и сейчас есть -- в Delphi. И это удобно. А замыкания есть в Delphi ? Нет, ведь Delphi -- язык не функциональный (а императивный), к тому же с ручным управлением памятью (а удобные замыкания можно сделать только в языке с автоматическим управлением памятью). О как o O. А Perl давно функциональным стал ??? Из моих слов не следует, что Perl -- функциональный язык. Но функциональный стиль ему не чужд. В Wikipedia в статье про Perl написано: Wikipedia Perl ... Overview ... Its major features include support for multiple programming paradigms (procedural, object-oriented, and functional styles), ... В отличие от Delphi, в Perl-е автоматическое управление памятью, поэтому язык может предоставить удобные замыкания. Gluk (Kazan) Пётр Седов Delphi запрещает брать адрес локальных процедур/функций. Поэтому их нельзя вызвать динамически (по указателю), можно только статически (по имени). Ну и толку тогда от них ? Синдром шоколадного чайника ??? Толк от локальных процедур/функций такой же, как от раскладывания файлов или писем по папкам -- структуризация. Она важна, когда этих процедур/функций/файлов/писем становится много. И ещё локальные процедуры/функции избавляют от возни с указателями на контекст. Gluk (Kazan) Пётр Седов Локальные процедуры/функции -- это действительно удобно, и в VCL они широко используются, чтобы структурировать код. Локальные функторы - это ТОЖЕ удобно :) C++-ные локальные функторы -- менее удобная вещь, чем Delphi-йские локальные процедуры/функции, из которых легко использовать контекст (например, локальную переменную охватывающей процедуры/функции). К тому же, C++-ный локальный функтор нельзя скормить STL-алгоритму (и вообще, любому шаблону). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.06.2008, 14:53 |
|
||
|
Программирование
|
|||
|---|---|---|---|
|
#18+
edges7Думается, что это несколько спорное утверждение. Многое зависит от способа восприятия информации. Само собой. Я здесь говорю в "статистическом" смысле. Понятно, что действительно талантливый человек достигнет многого при самом дерьмовом обучении. Вопрос в том, что получится из "толпы прочитавших". Я придерживаюсь той точки зрения, что "урок математики", "урок русского языка" и "урок физкультуры" дадут среднему ученику больше, нежели "три урока каши из первого, второго и третьего". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.06.2008, 15:05 |
|
||
|
Программирование
|
|||
|---|---|---|---|
|
#18+
Пётр СедовНет, ведь Delphi -- язык не функциональный (а императивный) ... Из моих слов не следует, что Perl -- функциональный язык. Странно :) Ну не следует так не следует :) Пётр Седов Но функциональный стиль ему не чужд. С++ тоже ... не чужд (в отличии от Delphi) Пётр Седов К тому же, C++-ный локальный функтор нельзя скормить STL-алгоритму (и вообще, любому шаблону). А в Delphi можно ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.06.2008, 15:55 |
|
||
|
Программирование
|
|||
|---|---|---|---|
|
#18+
softwarer Гы Слушай, вот объясни пожалуйста, что ты хочешь кроме "выплеснуть раздражение". Я сказал: объектная модель Явы максимально обрезанная, а реализация плоха. Это правда. Ты мог бы оспорить, мог бы расписать список фич и начинать ставить галочки - здесь есть, здесь нет - но не стал этого делать. Вместо этого ты зацепился за одно замечание, причем скорее всего с мыслью "а вот сейчас вытащим на конкретику и раскатаем". Оказалось - действительно факт. Далее у тебя пошли такие странные посты... такое впечатление, что в тебе борятся глухое бессмысленное раздражение и желание таки быть объективным. Так или иначе, на всю конкретику я ответил. Когда сказал "можно лучше" - рассказал как. Итп. Напротив, ты, начиная речи, регулярно попадаешь пальцем в небо - сначала про обоснования, потом про "непривычность". Я пользовался этим инструментом, я знаю его достаточно, чтобы не садиться в лужу, и я считаю его плохим. Вот теперь объясни: чего ты от меня хочешь? Чтобы я им не пользовался? Я именно так и делаю: пощупал на одном проекте и не собираюсь возвращаться. Чтобы я славил его замечательность? Извини, врать очень не люблю. Чтобы я молчал в тряпочку? За этим иди на форум явы. Клянусь, я туда не захожу, и похода "приду и расскажу вам всем, как вам плохо" не планирую. А здесь у нас форум "программирование", со всеми вытекающими. Мое раздражение ни в коей мере не относилось к тебе. Это к тем личностям, которые подобным образом поступают. Если отнес на свой счет, зря. Ты как раз последователен и аргументацией не брезгуешь. А давай на самом деле в конкретику. Список фич это здорово (например Dephi OOP vs Java OOP, как я понял Delphi тебе ближе), только что возьмем за референс? Кстати про блок инициализации, я приводил цитату, что он всего лишь тупо вкопируется в начало каждого конструктора. Осознание этого простого факта ставит все на свои места. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.06.2008, 16:39 |
|
||
|
Программирование
|
|||
|---|---|---|---|
|
#18+
2 Gluk (Kazan): Gluk (Kazan) Пётр СедовНет, ведь Delphi -- язык не функциональный (а императивный) ... Из моих слов не следует, что Perl -- функциональный язык. Странно :) Ну не следует так не следует :) А что странного? Я утверждаю: Delphi -- не функциональный язык. Delphi -- императивный язык. Разве из этих утверждений следует, что Perl -- функциональный язык? Создатели Delphi не стремились обеспечить поддержку функционального стиля, поэтому в Delphi и нет замыканий. Да и не сделать удобные замыкания в языке с ручным управлением памятью. Gluk (Kazan) Пётр Седов Но функциональный стиль ему не чужд. С++ тоже ... не чужд (в отличии от Delphi) На C++ писать в функциональном стиле очень неудобно. Требуются 10-этажные шаблоны вроде Boost.Lambda. И компилируется это 2 часа. В C++ так же ручное управление памятью, поэтому удобных замыканий тоже не сделать. Gluk (Kazan) Пётр Седов К тому же, C++-ный локальный функтор нельзя скормить STL-алгоритму (и вообще, любому шаблону). А в Delphi можно ? Это не к «C++-ный локальный функтор vs. Delphi-йская локальная процедура/функция», а просто к неудобству C++-ного локального функтора, безотносительно к другим языкам. Слишком ограниченный он. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.06.2008, 16:40 |
|
||
|
Программирование
|
|||
|---|---|---|---|
|
#18+
Гы А давай на самом деле в конкретику. Список фич это здорово (например Dephi OOP vs Java OOP, как я понял Delphi тебе ближе), только что возьмем за референс? softwarer Мне кажется, что этот спор будет бесполезным, так как есть подозрения, что каждый из вас при любом его исходе все равно останется при своем мнении. P.S. "Программируйте с использованием языка, а не на языке" (с) Стив Макконнелл. Совершенный код. Глава 34.4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.06.2008, 17:14 |
|
||
|
Программирование
|
|||
|---|---|---|---|
|
#18+
edges7 Гы А давай на самом деле в конкретику. Список фич это здорово (например Dephi OOP vs Java OOP, как я понял Delphi тебе ближе), только что возьмем за референс? softwarer Мне кажется, что этот спор будет бесполезным, так как есть подозрения, что каждый из вас при любом его исходе все равно останется при своем мнении. P.S. "Программируйте с использованием языка, а не на языке" (с) Стив Макконнелл. Совершенный код. Глава 34.4 Возможно. Но в споре рождается истина. Главное оперировать фактами и не скатываться на личности. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.06.2008, 17:20 |
|
||
|
Программирование
|
|||
|---|---|---|---|
|
#18+
Пётр СедовСоздатели Delphi не стремились обеспечить поддержку функционального стиля, поэтому в Delphi и нет замыканий. Да и не сделать удобные замыкания в языке с ручным управлением памятью. Давайте заканчивать этот цырк замыкания имеют весьма опосредованное отношение к "функциональному" стилю К управлению памятью разумеется имеют самое прямое Пётр Седов Это не к «C++-ный локальный функтор vs. Delphi-йская локальная процедура/функция», а просто к неудобству C++-ного локального функтора, безотносительно к другим языкам. Слишком ограниченный он человек не должен критиковать другого человека на той почве, на которой он сам не стоит перпендикулярно В Delphi и таких то нет :) в каой STL ты будешь передавать свои локальные функции ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.06.2008, 17:23 |
|
||
|
Программирование
|
|||
|---|---|---|---|
|
#18+
Пётр СедовНа C++ писать в функциональном стиле очень неудобно. Требуются 10-этажные шаблоны вроде Boost.Lambda. И компилируется это 2 часа. да вы шо ? o O Пётр Седов В C++ так же ручное управление памятью, поэтому удобных замыканий тоже не сделать. Правда ? А вот в D собираются (хотя там аналогичная проблема) дело очевидно не в "ручном" управлении памятью ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 19.06.2008, 17:27 |
|
||
|
Программирование
|
|||
|---|---|---|---|
|
#18+
2 Gluk (Kazan): Gluk (Kazan) Пётр СедовСоздатели Delphi не стремились обеспечить поддержку функционального стиля, поэтому в Delphi и нет замыканий. Да и не сделать удобные замыкания в языке с ручным управлением памятью. Давайте заканчивать этот цырк Я и не начинал никакого цирка. Вы спросили: Gluk (Kazan) А замыкания есть в Delphi ? Я ответил, что нет, и попытался обосновать, почему нет. Gluk (Kazan) замыкания имеют весьма опосредованное отношение к "функциональному" стилю Замыкания появились именно в функциональных языках, для которых функциональный стиль -- основной (или единственно возможный). Так что замыкания -- это черта функционального стиля. Gluk (Kazan) Пётр Седов Это не к «C++-ный локальный функтор vs. Delphi-йская локальная процедура/функция», а просто к неудобству C++-ного локального функтора, безотносительно к другим языкам. Слишком ограниченный он человек не должен критиковать другого человека на той почве, на которой он сам не стоит перпендикулярно Если я считаю, что C++-ные локальные функторы -- неудобные и ограниченные, то, думаю, я имею право это высказать. И Delphi здесь совершенно ни при чём. Gluk (Kazan) В Delphi и таких то нет :) Действительно, в Delphi нет локальных функторов, аналогичных C++-ным. Никто и не утверждал, что есть. Gluk (Kazan) в каой STL ты будешь передавать свои локальные функции ? Delphi-йские локальные процедуры/функции не предназначены для того, чтобы их куда-то передавать (это запрещено). Они предназначены для непосредственного вызова. Gluk (Kazan) Пётр СедовНа C++ писать в функциональном стиле очень неудобно. Требуются 10-этажные шаблоны вроде Boost.Lambda. И компилируется это 2 часа. да вы шо ? o O Там есть замыкания или лямбда-функции? По-моему, использовать C++-шаблоны для мета-программирования в функциональном стиле -- это неудобно и нечитабельно (для большинства C++-программистов). К тому же, непонятно, как такую мета-программу отладить -- компилятор C++ не сообщает, что там у него внутри происходит. Gluk (Kazan) Пётр Седов В C++ так же ручное управление памятью, поэтому удобных замыканий тоже не сделать. Правда ? Я слышал про планы добавить в C++0x (будущий стандарт C++) необязательную сборку мусора. Тогда удобные замыкания можно будет сделать, но это очень туманная перспектива. Gluk (Kazan) А вот в D собираются (хотя там аналогичная проблема) В D нет аналогичной проблемы -- там автоматическое управление памятью (точнее, смешанное), в отличие от C++. Gluk (Kazan) дело очевидно не в "ручном" управлении памятью Нет, чтобы реализовать удобные замыкания, требуется именно автоматическое управление памятью. Вы же сами написали: Gluk (Kazan) замыкания имеют весьма опосредованное отношение к "функциональному" стилю К управлению памятью разумеется имеют самое прямое ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.06.2008, 10:30 |
|
||
|
Программирование
|
|||
|---|---|---|---|
|
#18+
2 Пётр Седов Вы знаете, я бы в общем то не возражал, НО из Вас как из Рога Изобилия по любому поводу просто сыпятся мыстли, с которыми я мягко говоря не согласен (это была преамбула) 1. Вы похвалились наличием в Delphi "удобных" локальных функций (которых нет в C++) 2. Поскольку (с моей точки зрения) пользы от локальных функций не реализующих замыкания немного, я переспросил (разумеется зная ответ) как там у вас с замыканиями 3. На что было отвечено, что замыканий нет, поскольку Delphi не ФЯ (термин "ручное" управление несколько коробит (автоматических сторожей в C++ никто не отменял), но бох с ним 4. Я несколько по другому понимаю слово "неотъемлемая". Для меня оно означает не то что фича появилась в каком то месте, а скорее то, что место это без фичи просто не может существовать. Посему был приведен в пример Perl, ни разу не функциональный (об этом ниже), но реализующий вполне себе полноценные замыкания. Не удержусь от цитирования ображчика ущербной логики: авторЗамыкания появились именно в функциональных языках, для которых функциональный стиль -- основной (или единственно возможный). Так что замыкания -- это черта функционального стиля. 5. К слову сказать, даже в SICP макимальное внимание к замыканиям уделяется в разделах, посвещенных императивному программированию 6. Далее Вами было заявлено, что и Perl имеет отношение к ФП :) Конечно имеет, но C++ в таком случае, к ФП имеет еще большее отношение, поскольку из трех категорий языков а) Языки поощеряющие ФП, но пригодные для ИП (Lisp) б) Языки императивные на которых можно использовать ФП (Perl) в) Языки на которых кроме как ФП больше никак писать нельзя (шаблоны C++, XSLT) к ФЯ я все-таки отнесу последние 7. Вами было заявлено, что ФП на C++ неудобно, громоздко и без boost-а чуть ли не невозможно (во всяком случае так я Вас понял), на что Вам было предоставлено аргументированное ни разу не бустовое, не тривиальное и вполне быстро компилирующееся применение метапрограммирования на C++, совершенно однозначно имеющее отношение к ФП (в отличии от замыканий являющихся хоть и удобным но всего-лишь бантиком). Сложное ? на мой взгляд нет. Просто несколько непривычное и требующее определенных навыков. Громоздкое ? сравним: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. очевидно, что нет :) 8. Мной были упомянуты функторы как альтернатива локальным функциям и замыканиям (захват всего необходимого можно выполнять ручками в конструкторе). Разумеется, локальные функторы нельзя передавать в шаблоны :) но вложенные еще как можно ;) А если считать функтор аналогом функции, то аналогом локальной функции можно считать функтор вложенный в другой функтор чем это неудобнее вплане структурирования кода я не постигаю ибо сам для этого постоянно ими пользуюсь. Разьве что тем, что функторы предоставляют куда большую функциональность (особенно если делать их шаблонами) ? Кстати, возможно я не до конца оценил глубину Вашей мысли: авторИз-за отсутствия в C++ нормальных локальных функций (которым легко доступен контекст, например локальная переменная охватывающей функции), их приходится эмулировать, передавая указатель на контекст в обычную (нелокальную) функцию. образчик кода на Delphi Вас не затруднит? В общем, пока что Вы не убедили меня что: авторC++-ные локальные функторы -- менее удобная вещь, чем Delphi-йские локальные процедуры/функции, из которых легко использовать контекст (например, локальную переменную охватывающей процедуры/функции). на мой взгляд, они куда более удобны и функциональны 9. Вот это мне нравится: авторСоздатели Delphi не стремились обеспечить поддержку функционального стиля, поэтому в Delphi и нет замыканий. С точки зрения логики, все вроде впорядке :) Зато можно подумать, что замыкания неотъемлимая часть ФП И что не может быть ФП без замыканий (напоминает анекдот про бегимота, прилипшего к хвостику белочки) авторНа C++ писать в функциональном стиле очень неудобно. Требуются 10-этажные шаблоны вроде Boost.Lambda. И компилируется это 2 часа. IMHO надо добавлять. Ваше незнание или неумение не повод рожать (или поддерживать) нездоровые сенсации. В том коде что я привел есть boost ? 10-этажные шаблоны ??? Или он компилировался у Вас 2 часа ? Либо у Вас очччченннь медддленная машинка, либо Вы клеветник, батенька авторЭто не к «C++-ный локальный функтор vs. Delphi-йская локальная процедура/функция», а просто к неудобству C++-ного локального функтора, безотносительно к другим языкам. Слишком ограниченный он. Примеры ограниченности, пожалуйста (желательно с C++ кодом) Только не локальных а вложенных авторDelphi-йские локальные процедуры/функции не предназначены для того, чтобы их куда-то передавать (это запрещено). Они предназначены для непосредственного вызова. А функторы можно И кто из них после этого ограниченный ??? авторТам есть замыкания или лямбда-функции? Вам нужны лямбды ? Их есть у нас: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. авторПо-моему, использовать C++-шаблоны для мета-программирования в функциональном стиле -- это неудобно и нечитабельно (для большинства C++-программистов). К тому же, непонятно, как такую мета-программу отладить -- компилятор C++ не сообщает, что там у него внутри происходит. Неудобно, но единственно возможно. Кстати, Вы действительно думаете, что я написал все это без отладки ? Вы мне определенно льстите :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 20.06.2008, 12:31 |
|
||
|
Программирование
|
|||
|---|---|---|---|
|
#18+
2 Gluk (Kazan): Gluk (Kazan) 1. Вы похвалились наличием в Delphi "удобных" локальных функций (которых нет в C++) Я не похвалился, а заметил, что это удобно. Gluk (Kazan) 2. Поскольку (с моей точки зрения) пользы от локальных функций не реализующих замыкания немного, Польза от Delphi-йских локальных процедур/функций -- лёгкий доступ к контексту и лучшая структуризация кода. Если бы локальные функции были в C++, то пришлось бы меньше перекомпилировать: изменение внутренностей функции, написанной в .cpp-файле, не затрагивает заголовочный файл. Gluk (Kazan) я переспросил (разумеется зная ответ) как там у вас с замыканиями Обычно, когда твёрдо знают ответ, вопрос не задают (Вы не преподаватель на экзамене и не часовой, спрашивающий пароль). К тому же, вопросов было два: Gluk (Kazan) А замыкания есть в Delphi ? Или на любой Чих будет AV ? Второй вопрос заставляет усомниться, что Вы твёрдо знали ответ на первый. Кстати, «у вас» -- это у кого? Gluk (Kazan) термин "ручное" управление несколько коробит (автоматических сторожей в C++ никто не отменял), По моим понятиям, в C++ ручное управление памятью. Хотя его можно «полуавтоматизировать» с помощью разных ухищрений (например, умные указатели). Gluk (Kazan) 4. Я несколько по другому понимаю слово "неотъемлемая". Я в этом обсуждении не использовал слово «неотъемлемый» или его формы. Gluk (Kazan) Для меня оно означает не то что фича появилась в каком то месте, а скорее то, что место это без фичи просто не может существовать. Посему был приведен в пример Perl, ни разу не функциональный (об этом ниже), но реализующий вполне себе полноценные замыкания. Не удержусь от цитирования ображчика ущербной логики: авторЗамыкания появились именно в функциональных языках, для которых функциональный стиль -- основной (или единственно возможный). Так что замыкания -- это черта функционального стиля. 5. К слову сказать, даже в SICP макимальное внимание к замыканиям уделяется в разделах, посвещенных императивному программированию Что является функциональным языком/программированием/стилем, а что не является -- это вопрос глубоко философский, мне его не интересно обсуждать. Мне интересно обсуждать, что на грешной земле делается -- C++-ные локальные функторы и Delphi-йские локальные процедуры/функции. Gluk (Kazan) 6. Далее Вами было заявлено, что и Perl имеет отношение к ФП :) Конечно имеет, но C++ в таком случае, к ФП имеет еще большее отношение, поскольку из трех категорий языков а) Языки поощеряющие ФП, но пригодные для ИП (Lisp) б) Языки императивные на которых можно использовать ФП (Perl) в) Языки на которых кроме как ФП больше никак писать нельзя (шаблоны C++, XSLT) к ФЯ я все-таки отнесу последние C++-шаблоны можно использовать как функциональный язык для мета-программирования, но у этого около-языка куча минусов: * Большинство C++-программистов им не владеет. * Невозможно пройтись по коду в отладчике. * Не поддерживаются floating point числа. * Очень неудобно указывать строковые литералы (и вообще работать со строками). Gluk (Kazan) 7. Вами было заявлено, что ФП на C++ неудобно, громоздко и без boost-а чуть ли не невозможно (во всяком случае так я Вас понял), Да, Вы правильно меня поняли. Для написания мета-программы в функциональном стиле, выполняющейся в compile-time, Boost не обязателен, C++-шаблонов достаточно. Boost нужен ради Boost.Lambda для написания программы в функциональном стиле, выполняющейся в run-time. Gluk (Kazan) на что Вам было предоставлено аргументированное ни разу не бустовое, не тривиальное и вполне быстро компилирующееся применение метапрограммирования на C++, совершенно однозначно имеющее отношение к ФП (в отличии от замыканий являющихся хоть и удобным но всего-лишь бантиком). Сложное ? на мой взгляд нет. Да, сложное. В том смысле, что для большинства C++-программистов это тайнопись. Но главное: я имел в виду функциональный стиль в программах, выполняющихся в run-time, а не в compile-time. Gluk (Kazan) Просто несколько непривычное и требующее определенных навыков. Громоздкое ? сравним: код на C++-шаблонах код на Lisp-е очевидно, что нет :) Напишите на C++ в функциональном стиле преобразование недетерминированного конечного автомата в детерминированный, выполняющееся в run-time. Вот тут и проявится различие между C++ и функциональными языками. В отличие от мета-кода на C++-шаблонах, код на Lisp-е можно выполнить в run-time. Gluk (Kazan) 8. Мной были упомянуты функторы как альтернатива локальным функциям и замыканиям (захват всего необходимого можно выполнять ручками в конструкторе). Вот именно это и неудобно. С Delphi-йскими локальными процедурами/функциями не надо ничего захватывать вручную, всё просто и удобно. Gluk (Kazan) Разумеется, локальные функторы нельзя передавать в шаблоны :) Именно о локальных функторах и идёт речь. И ещё о Delphi-йских локальных процедурах/функциях. То есть речь идёт о том, что определено локально (в рамках функции). Gluk (Kazan) но вложенные еще как можно ;) О них речь не идёт. Gluk (Kazan) А если считать функтор аналогом функции, то аналогом локальной функции можно считать функтор вложенный в другой функтор чем это неудобнее вплане структурирования кода я не постигаю ибо сам для этого постоянно ими пользуюсь. Теряется локальность, нелокальный функтор надо писать вне функции. Скорее всего, нелокальный функтор надо упомянуть в заголовочном файле, это может привести к избыточной перекомпиляции в случае изменений. И ещё та же проблема, что и с локальными функторами: тяжело дотянуться до контекста. Gluk (Kazan) Кстати, возможно я не до конца оценил глубину Вашей мысли: авторИз-за отсутствия в C++ нормальных локальных функций (которым легко доступен контекст, например локальная переменная охватывающей функции), их приходится эмулировать, передавая указатель на контекст в обычную (нелокальную) функцию. образчик кода на Delphi Вас не затруднит? Код на C++ и Delphi -- см. ниже. Gluk (Kazan) В общем, пока что Вы не убедили меня что: авторC++-ные локальные функторы -- менее удобная вещь, чем Delphi-йские локальные процедуры/функции, из которых легко использовать контекст (например, локальную переменную охватывающей процедуры/функции). на мой взгляд, они куда более удобны и функциональны В C++-ном локальном функторе тяжело дотянуться до контекста, это неудобно. В Delphi-йской локальной процедуре/функции легко дотянуться до контекста, это удобно. Gluk (Kazan) 9. Вот это мне нравится: авторСоздатели Delphi не стремились обеспечить поддержку функционального стиля, поэтому в Delphi и нет замыканий. С точки зрения логики, все вроде впорядке :) Зато можно подумать, что замыкания неотъемлимая часть ФП И что не может быть ФП без замыканий (напоминает анекдот про бегимота, прилипшего к хвостику белочки) Опять же, меня не интересует, в чём заключается глубинная истинная сущность функционального языка/программирования/стиля. Gluk (Kazan) авторНа C++ писать в функциональном стиле очень неудобно. Требуются 10-этажные шаблоны вроде Boost.Lambda. И компилируется это 2 часа. IMHO надо добавлять. Как ни странно, то, что я пишу, -- это моё личное мнение ( m y o pinion), за исключением цитат, выделенных особо. Gluk (Kazan) Ваше незнание или неумение не повод рожать (или поддерживать) нездоровые сенсации. Нет никакой сенсации в том, что C++ плохо подходит для написания программ в функциональном стиле, выполняющихся в compile-time или run-time. Для этого другие языки есть. Gluk (Kazan) В том коде что я привел есть boost ? В Вашем коде (преобразование недетерминированного конечного автомата в детерминированный, выполняющееся в compile-time) не используется Boost. Gluk (Kazan) 10-этажные шаблоны ??? Нагромождение шаблонов есть. Gluk (Kazan) Или он компилировался у Вас 2 часа ? Я не компилировал Ваш код. Игрушечные примеры мета-программирования на C++-шаблонах (например, вычисление факториала) компилируются быстро. Но если делать что-то серьёзное, то компилируется долго. Попробуйте сделать parser C++ с помощью Boost.Spirit. Уверен, компилироваться будет долго. Слышал, что люди отказываются от Boost.Python именно из-за времени компиляции. Gluk (Kazan) авторЭто не к «C++-ный локальный функтор vs. Delphi-йская локальная процедура/функция», а просто к неудобству C++-ного локального функтора, безотносительно к другим языкам. Слишком ограниченный он. Примеры ограниченности, пожалуйста (желательно с C++ кодом) 1. Локальный функтор не может по-простому использовать контекст, например, локальную переменную охватывающей функции: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 29. 30. 31. 32. 33. 34. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. 26. 27. 28. 2. Тип локального функтора не может быть параметром шаблона (по крайней мере, в нынешнем C++), поэтому локальный функтор нельзя использовать, например, в качестве предиката для STL-алгоритма: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. Gluk (Kazan) Только не локальных а вложенных Не подменяйте тему, речь идёт именно о локальных функторах (то есть определённых в рамках функции): Gluk (Kazan) Пётр Седов Локальные процедуры/функции -- это действительно удобно, и в VCL они широко используются, чтобы структурировать код. Локальные функторы - это ТОЖЕ удобно :) Хочется именно локальности, чтобы писать код «не отходя от кассы». И чтобы при изменениях перекомпилировать поменьше. Gluk (Kazan) авторDelphi-йские локальные процедуры/функции не предназначены для того, чтобы их куда-то передавать (это запрещено). Они предназначены для непосредственного вызова. А функторы можно Локальные функторы не передать в STL-алгоритм. Нелокальные -- можно, но речь не о них. Gluk (Kazan) И кто из них после этого ограниченный ??? C++-ные локальные функторы ограничены -- тяжело дотянуться до контекста (надо через указатели) и в STL-алгоритм не передать, это сильно портит жизнь. Delphi-йские локальные процедуры/функции ограничены -- нельзя взять их адрес и передать куда-нибудь, но это мало портит жизнь. Gluk (Kazan) авторТам есть замыкания или лямбда-функции? Вам нужны лямбды ? Их есть у нас: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. 25. Это нагромождение шаблонов, а лямбда-функция -- это анонимная локальная функция, обычно короткая (часто умещается в одной строке). Кстати, имена из одной буквы не добавляют понятности этому коду. Gluk (Kazan) автор По-моему, использовать C++-шаблоны для мета-программирования в функциональном стиле -- это неудобно и нечитабельно (для большинства C++-программистов). К тому же, непонятно, как такую мета-программу отладить -- компилятор C++ не сообщает, что там у него внутри происходит. Неудобно, но единственно возможно. C++-шаблоны -- не единственный способ мета-программирования, есть способ лучше: генерация кода (мета-программа пишет программу). Этот способ доступен для всех языков, в том числе для Delphi. Один из плюсов: мета-программу можно отладить. Gluk (Kazan) Кстати, Вы действительно думаете, что я написал все это без отладки ? Каким образом отлаживать мета-программу на C++-шаблонах? По мета-коду на C++-шаблонах не пройтись в отладчике. Если внести неверное изменение, то сообщение компилятора об ошибке будет невнятным. Gluk (Kazan) Вы мне определенно льстите :) Я не столько льщу Вам, сколько указываю на неудобство и непрактичность мета-программирования на C++-шаблонах. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.06.2008, 12:39 |
|
||
|
Программирование
|
|||
|---|---|---|---|
|
#18+
Пётр Седов Польза от Delphi-йских локальных процедур/функций -- лёгкий доступ к контексту и лучшая структуризация кода. Относительно этого чуть ниже. Кроме того, "лучшая структуризация" кода понятие сильно субъективное. Пётр Седов Если бы локальные функции были в C++, то пришлось бы меньше перекомпилировать: изменение внутренностей функции, написанной в .cpp-файле, не затрагивает заголовочный файл. Имеете в виду, что если я объявляю вложенный класс, мне придется писать его реализацию в h-файле ??? Ничуть небывало :) Кто мешает мне вынести его реализацию в cpp ? Кстати, для разрыва зависимостей есть куда более мощное оружие - интерфейсы Пётр Седов Обычно, когда твёрдо знают ответ, вопрос не задают ... Второй вопрос заставляет усомниться, что Вы твёрдо знали ответ на первый Ой, таки я Вас умоляю То была мааааленькая провокация :) Не судите о людях по вопросам, можете сильно ошибиться. Кстати, хоть к делу это и не относится, я зарабатывал на жизнь знанием Delphi с 1-ой по 7-ю версию. Один из образчиков моего творчества можете посмотреть в kuliba1000, искать NtxRO (фамилию правда как обычно переврали, ну да бог с ней) Пётр Седов Я в этом обсуждении не использовал слово «неотъемлемый» или его формы Действительно не использовал, прошу прощения. Значимость отдельных фич, появившихся в ФП часто возводят в ранг неотемлимых частей, вот и почудилось Пётр Седов Что является функциональным языком/программированием/стилем, а что не является -- это вопрос глубоко философский, мне его не интересно обсуждать Тем не менее, Вам очевидно интересно делать громкие заявления о том, что Perl имеет большее отношение к ФП чем C++ ? Уверяю Вас, для Perl ФП ничуть не более естественно чем для последнего Пётр Седов C++-ные локальные функторы и Delphi-йские локальные процедуры/функции ... Не подменяйте тему Локальные классы в C++ имеют действительно весьма сильные ограничения, но как я Вам уже говорил, для меня более адекватной аналогией локальной функции является функтор внутри функтора (то есть вложенный класс). Так что я ни в коем случае не меняю тему, а лишь расширяю ее :) Пётр Седов C++-шаблоны можно использовать как функциональный язык для мета-программирования, но у этого около-языка куча минусов: Для меня акценты стоят несколько по другому :) ФП - это единственный способ заниматься метапрограммированием с использованием C++ шаблонов Пётр Седов * Большинство C++-программистов им не владеет. Большинство программистов владеют Lisp-ом ? Или Haskell-ем ??? Давайте не будем говорить за народ, аппелировать к большинству и т.п. Будем говорить за себя ? Пётр Седов * Невозможно пройтись по коду в отладчике. Об этом ниже. Отладка не обязана быть интерактивной Пётр Седов * Не поддерживаются floating point числа. * Очень неудобно указывать строковые литералы (и вообще работать со строками). Несомненно досадные ограничения :( Но кто без греха ??? Пётр Седов Да, Вы правильно меня поняли. Для написания мета-программы в функциональном стиле, выполняющейся в compile-time, Boost не обязателен, C++-шаблонов достаточно. Boost нужен ради Boost.Lambda для написания программы в функциональном стиле, выполняющейся в run-time. не согласен . Все врямя слышу, boost, boost ... Он Ваш дедушка - Boost ??? Пётр Седов Да, сложное. В том смысле, что для большинства C++-программистов это тайнопись. Но главное: я имел в виду функциональный стиль в программах, выполняющихся в run-time, а не в compile-time. Напишите на C++ в функциональном стиле преобразование недетерминированного конечного автомата в детерминированный, выполняющееся в run-time. Вот тут и проявится различие между C++ и функциональными языками. В отличие от мета-кода на C++-шаблонах, код на Lisp-е можно выполнить в run-time. Про большинство я уже говорил. А про RunTime - Задача преобразования НКА в ДКА совершенно элементарно решается на C++ императивно (в RunTime). Зачем усложнять решение, если плюсы от этого сомнительны, а минусы очевидны ??? С другой стороны, если нам нужно решить эту задачу в CompileTime, то ничего кроме ФП на помощь не придет. Если Вас волнует практическая польза - это вполне может быть какой-нибудь CompileTime лексер. Пётр Седов Нет никакой сенсации в том, что C++ плохо подходит для написания программ в функциональном стиле, выполняющихся в compile-time или run-time. Для этого другие языки есть. Нет никакой сенсации в том, что любые языки программирования неудобны для написания программ. Совершенство вообще стоит искать не в этом мире :( Что касается CompileTime, говорил и повторю еще - ФП единственный способ писать для него программы Пётр Седов Нагромождение шаблонов есть. Покажите хоть один лишний ;) Пётр Седов Игрушечные примеры мета-программирования на C++-шаблонах (например, вычисление факториала) компилируются быстро. Но если делать что-то серьёзное, то компилируется долго. NFA -> DFA для Вас недостаточно серьезно ? o O Скомпилируйте да убидитесь - компилируется не долго В противном случае, Ваша позиция сильно напоминает "Пастернака не читал, но осуждаю ..." Пётр Седов Попробуйте сделать parser C++ с помощью Boost.Spirit. Уверен, компилироваться будет долго. Слышал, что люди отказываются от Boost.Python именно из-за времени компиляции. Простите, ЗАЧЕМ мне это делать, если я прекрасно обхожусь БЕЗ Boost-а ??? Пётр Седов 1. Локальный функтор не может по-простому использовать контекст, например, локальную переменную охватывающей функции Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. Никак не пойму. Чем это хуже локальной функции ??? Пётр Седов Выход -- сделать функторы нелокальными: Но теряется локальность, и функторы надо упомянуть в заголовочном файле. Если захочется перейти от std::sort к собственному алгоритму сортировки (это разумно, если ключ -- целое число из небольшого диапазона), то придётся изменить содержимое заголовочного файла. Это вызовет избыточную перекомпиляцию. Oh! Really ??? o O Т.е. по Вашему раз я в предыдущем примере объявил A в cpp, а не в h-файле, он так таки сразу и стал локальным? И его нельзя будет передать в этот шаблон: Код: plaintext 1. 2. 3. 4. 5. 6. 7. Мессир, я в УЖАСЕ !!! (с) Относительно мифических "перекомпиляций", я уже говорил - откройте для себя интерфейсы Пётр Седов Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. 21. 22. 23. 24. Кстати, имена из одной буквы не добавляют понятности этому коду. А по мне так это аналог следующего кода: Код: plaintext 1. 2. 3. 4. 5. 6. 7. А также иллюстрация того, что шаблоны C++ можно рассматривать как ФВП :) Вот уж поистине: "Один видит в луже только лужу, а другой, глядя в лужу, видит звезды" (с) Для меня lambda не более чем способ вернуть из функции функцию. В разных языках, она может выглядеть ОЧЕНЬ по разному. Кстати отсутствие лаконичности в Lisp не идет на пользу "понятности" Ведь можно было написать просто: \m.mxy Пётр СедовC++-шаблоны -- не единственный способ мета-программирования, есть способ лучше: генерация кода (мета-программа пишет программу). Этот способ доступен для всех языков, в том числе для Delphi. Один из плюсов: мета-программу можно отладить. Потусторонними препроцессорами ? Несомненно ОЧЕНЬ удобно :) И отлаживать тоже Пётр СедовКаким образом отлаживать мета-программу на C++-шаблонах? По мета-коду на C++-шаблонах не пройтись в отладчике. Если внести неверное изменение, то сообщение компилятора об ошибке будет невнятным. ФП поощеряет использовать небольшие функции с обозримой логикой. Отсутствие изменения состояний и побочных эффектов облегчает unit-тестирование. Большая программа складывается из мелких кирпичиков. Сначала проверяем корректность самых мелких, потом переходим на более высокие уровни. Или для Вас отладка ассоциируется только с тупым жамканьем кнопочки 'Step' в какой нибудь красявой IDE ??? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.06.2008, 09:03 |
|
||
|
Программирование
|
|||
|---|---|---|---|
|
#18+
Весь топик не читал, но встряну, ибо обед обязывает. Ынтырпрайз Им вбили в 80-х паскаль, вот они теперь и думают, что п - самый лучший яп в мире. Во всем мире латынью читается Си и Ява. В MIT'е раньше преподавали scheme'у. Счас заменили на питон ТЫНЦ ( см также ). Интересно у нас такое когда нить будт? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 24.06.2008, 10:28 |
|
||
|
Программирование
|
|||
|---|---|---|---|
|
#18+
На питоне в самый раз обучать, на нём писать код легко и удобно, заодно сработает как прививка против ненависти к значимым отступам, и помешает лепить код как попало. А про полчища шаблонов скажу, что я бы убивал за такой невнятный код. Я изучал шаблоны, делал упражнения, в общих чертах понимаю, но не вижу смысла лепить их такими кучами, что в каждой строчке комментарий нужен... Может это прочтение Александреску приводит к такому ужасу? Я его ещё не читал, пока другого чтива хватает. Помню когда на ассемблере писал, то комментариев много ставил, т.к. уже через месяц в своём коде сложно разобраться, не дело это, ещё и в языках высокого уровня всё усложнять настолько, что становится похоже на тайнопись. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.07.2008, 08:15 |
|
||
|
|

start [/forum/topic.php?fid=16&msg=35382649&tid=1345183]: |
0ms |
get settings: |
6ms |
get forum list: |
15ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
167ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
61ms |
get tp. blocked users: |
1ms |
| others: | 201ms |
| total: | 467ms |

| 0 / 0 |
