eao197 wrote: > > Нет, работа замечательная, долго к такой стремился. > Меня призраки прошлого гнетут. Когда я решил повторить достижение > Константина Книжника <http://www.garret.ru/~knizhnik/index.html> и > защитить дисертацию по собственноручно написанной объектной СУБД (Косте > удалось это сделать по своей СУБД GOODS > <http://www.garret.ru/~knizhnik/goods.html>). Никого не интересовали > технические подробности ее реализации, ее возможности, оснащенность > утилитами, полезность и реальные внедрения в реальные проекты. Все > вопросы начинались с количества моих публикаций. Максимум, до чего > доходило -- это до: "В чем состоит научная новизна?" и "Что было сделано > лично вами?". Обычно разговор на вопросе "научной новизны" терял свою > актуальность. А апофиозом моего обучения в аспирантуре был вопрос от
Ну вообще, по-моему, это правильно. Диссертация все же должна быть про
науку, а не про то, какую замечательную программу можем мы написать. И
оцениваться диссертация, по-моему, должна в первую очередь с точки
зрения научного вклада.
reductor wrote: > > Вообще же, несмотря на то, что в реальной жизни можно даже найти > параллели между С++ и Haskell, реальная их семантика различается > настолько, что на полном серьезе ее сравнивать, это очень смело
Я бы предложил относиться к C++ как к двум разным языкам, с разной
парадигмой, причудливо соединенным в одном языке.
Один язык — это C с классами. Другой — это темплейты.
C с классами на Хаскель, конечно, не похож. Но вот темплейты напоминают
пародию на Хаскель — сильно урезанную и с ужасным синтаксисом.
AVC wrote: > > Pzz>Вы недооцениваете влияние ML, например, на Вашу повседневную жизнь (если > Pzz>Вы, конечно, программер) > > Разве что на будущую? > > Pzz>Ну вот, например, темплейты в C++ — пародия на ML (или, скорее, на > Pzz>Haskell, т.к. они ленивые). > > ИМХО, этой пародией детей пугать можно...
Здравствуйте, Pzz, Вы писали:
>> ИМХО, этой пародией детей пугать можно...
Pzz>Но влияние-то оказывает
Меня как раз тут в свое время "уличали" (eao197 и CrystaX), что я пишу на Си с классами, а не на "современном" Си++ (с шаблонами и большим boost-ом).
Так что на меня шаблоны оказывают весьма умеренное влияние (в основном — в виде ночных кошмаров).
А ML — вообще никакого. (Допускаю, что обо этом как раз следует пожалеть).
Чтобы не выглядеть совсем уж троглодитом, немного поясню свою позицию.
Вот здесь Cyberax писал (в посте к reductor), что знание математики, алгоритмов и т.д. должно быть где-то в "background".
Как видно, в foreground он любовно разместил ("современный") Си++ и подобные ему языки. Весь этот, с позволения сказать, инструментарий съедает 90% (а то и более) времени программиста. И выходит так, что хвост виляет собакой.
Я же полагаю, что как раз язык следует разместить в background. А то и вообще в "подкорке", чтобы не отвлекал от самой задачи.
Вот я и нашел для себя Оберон. Такому дураку, как я, — в самый раз.
Личная производительность (моя, о других не говорю) с Обероном выше.
А если кому-то кажется, что это непрогрессивно или ненаучно, что ж... Краснею до корней волос, но делаю по своему.
Но существует одно качество, которое нельзя купить, — это надежность. Цена надежности — погоня за крайней простотой. Это цена, которую очень богатому труднее всего заплатить.
Здравствуйте, eao197, Вы писали:
E>Меня призраки прошлого гнетут. Когда я решил повторить достижение Константина Книжника и защитить дисертацию по собственноручно написанной объектной СУБД (Косте удалось это сделать по своей СУБД GOODS). Никого не интересовали технические подробности ее реализации, ее возможности, оснащенность утилитами, полезность и реальные внедрения в реальные проекты. Все вопросы начинались с количества моих публикаций. Максимум, до чего доходило -- это до: "В чем состоит научная новизна?" и "Что было сделано лично вами?". Обычно разговор на вопросе "научной новизны" терял свою актуальность. А апофиозом моего обучения в аспирантуре был вопрос от зав.кафедрой: "Это хорошо, что ты занимаешься объектно-ориентированными базами данных, но на что конкретно они у тебя ориентированны?". Хотя дяденька был очень заслуженный и шамповал кандидатов по своему направлению как горячие пирожки. А еще я видел, как эти ученые дяденьки штампуют одну статью за другой, переставляя абзацы из своих старых работ и заставляя аспирантов или дипломников расчитывать для них очередную формулу или переоформляя какой-нибудь график. Поэтому количество публикаций или рейтинг цитирования для меня совершенно пустое место.
любую систему или метод можно извратить и сделать бесполезными
а то, что наука в нашей стране окончательно прогнила и практически ни на что не годится — это и так известный факт
Здравствуйте, Cyberax, Вы писали:
C>У goto есть минус — очень сложно отслеживать переходы "назад". И C>вложенные goto тоже страшновато выглядят.
Дело не в страшноватости вида. А в том, что очень трудно определить зависимости. Совершенно неважно, прыгает goto вперед или назад. Проблема в том, что в любую метку ты можешь попасть из неопределенного количества мест, и совершенно непонятно, какие ветки кода к этому моменту были выполнены, и сколько раз. Конечно, goto — не единственный способ запутать программу. Но если ограничиться "безопасным" использованием goto, то оно как раз и сведется к while, if, return.
1.1.4 stable rev. 510
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Здравствуйте, z00n, Вы писали:
E>>Никогда не поверю, что C++ можно выучить очень быстро и начать на нем грамотно программировать. Особенно с сегодняшним уклоном в шаблоны, метапрограммирование и expression templates...
Z>На самом деле меня очень удивило замечание про "особенно шаблоны, метапрограммирование и expression templates" . С точки зрения человека, который учился функциональному программированию, шаблоны, метапрограммирование и expression templates — это как раз то, в чем он давно разобрался.
Внимательно прочитай то, что я написал. Попытка использовать метапрограммирование на C++ в духе Scheme или Lisp-а будет приводить, как ты правильно заметил, к
все закричат, что это извращение и среднему труженнику С++ этого ни в жисть не понять
Вот чтобы такого не было, желательно метапрограммировать на C++ так, чтобы это оставался нормальный C++, а не испорченный C++ным синтаксисом Scheme.
... << RSDN@Home 1.1.4 stable rev. 510>>
SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Здравствуйте, Pzz, Вы писали:
Pzz>Ну вообще, по-моему, это правильно. Диссертация все же должна быть про Pzz>науку, а не про то, какую замечательную программу можем мы написать. И Pzz>оцениваться диссертация, по-моему, должна в первую очередь с точки Pzz>зрения научного вклада.
А вот мне интересно, за какие открытия присуждают звания "кандидата технических наук"?
... << RSDN@Home 1.1.4 stable rev. 510>>
SObjectizer: <микро>Агентно-ориентированное программирование на C++.
: функциональные языки какие крутые (круче них, понятное дело, только яйца)! Вот почему они мейнстримом не стали понять до сих пор не могу?
Z>Ну, например, вот немного линейной алгебры из домашнего задания первокурсника, который к тому времени уже целых два месяца учится программировать. Если это переписать на boost::mpl и запостить с форум по С++ — все закричат, что это извращение и среднему труженнику С++ этого ни в жисть не понять Z>
Z>(define (dot-product v w)
Z> (accumulate + 0 (map * v w)))
Z>(define (matrix-*-vector m v)
Z> (map (lambda (x) (dot-product x v)) m))
Z>(define (transpose m)
Z> (accumulate-n cons null m))
Z>(define (matrix-*-matrix m n)
Z> (let ((cols (transpose n)))
Z> (map (lambda (x) (matrix-*-vector cols x)) m)))
Z>
А чего здесь вообще должно делаться? Матрица на матрицу перемножаться?
Ну и сколько Scheme-программисту нужно будет изучать C++ и boost::mpl для того, чтобы сделать то же самое через C++ные expression templates?
... << RSDN@Home 1.1.4 stable rev. 510>>
SObjectizer: <микро>Агентно-ориентированное программирование на C++.
// Finally, destroy the key and the region
free_ukey(key);
В морг.
Да и подобное делается с помощью пулов в обычном С++.
R>Но хочется понять долго ли мемори менеджмент в С++ доходил до state-of-the-art, чтобы достигнуть достигать такого — язык, к которому даже GC нормальный не прицепишь. А то мне кажется, идея такого мемори менеджмента мягко говоря не нова.
Почему же, консервативные GC подцепляются без проблем (лично Boehm GC использовал). А С++/CLI вообще рассчитан на точную сборку.
А вот покажите мне, пожалуйста, язык с понятием умных указателей, автоматических объектов, placement new, и при этом не клон С++ (Hint: наиболее близко к этому подходит язык D).
C>>2) Взаимодействие с кодом на С. Где у нас еще есть extern "C"? R>Хм. R>С/Objective-C/D/Cyclone ?
C не считаем. Objective-C страдает с управлением памятью, да и недоделаный он вообще какой-то. D — да, но это последователь С++.
Cyclone — слишком мало возможностей. Нет OOP, темплейтов и т.п.
R>А вообще конечно это одна из самых важных и уникальных идей и языка С++, да.. R>Скажите, а foreign export ccall в Хаскеле написать уже нет? R>или там external в O'Caml
Простите, но если вы не понимаете, что интероперабельность делается не только одним extern-вызовом функций, то вы просто дилетант.
И нет. Ни Хаскел, ни OCaml не имеют даже близких возможностей интероперабельности.
C>>Я писал на OCaml'е и немного на Haskell'е, например. Неплохо, но далеко C>>не самая лучшая вещь с начала времен. R>А расскажите какая лучшая?
Никакая. Но функциональные языки уж точно на нее не тянут.
R>Кстати еще интересно чем вам так мемори менеджмент в окамле и хаскеле не угодил. Правда.
Не всегда GC (и связаный с ним оверхед) нужен. И кое-где он не нужен совсем.
Pzz wrote:
>> Надо сказать, что ядро к окружению отношение не очень большое имеет (а >> Unix — это прежде всего окружение). То есть на Linux'е можно запустить и >> встроеное устройство вообще без файловой системы. Кроме того, критикам >> Линуса стоит напомнить, что есть куча *BSD-систем, которые так и не >> набрали популярность (в отличие от Линукса). > Вообще без файловой системы, это вряд ли.
Сам такое устройство видел. Делается без проблем — все нужное пишется в
виде ядерных модулей и статически линкуется.
> Без файловой системы на "твердом носителе", это возможно.
Можно и на диске — ядро в память загружает lilo, которому FS не нужна.
Sinclair wrote:
> C>У goto есть минус — очень сложно отслеживать переходы "назад". И > C>вложенные goto тоже страшновато выглядят. > Дело не в страшноватости вида. А в том, что очень трудно определить > зависимости. Совершенно неважно, прыгает goto вперед или назад. > Проблема в том, что в любую метку ты можешь попасть из неопределенного > количества мест, и совершенно непонятно, какие ветки кода к этому > моменту были выполнены, и сколько раз.
Если у кода есть зависимости от того, какие ветки были выполнены — то не
надо использовать goto (или сделать его использование безопасным). Тут
действительно хорошо подходит С-шный паттерн "goto cleanup".
> Конечно, goto — не единственный способ запутать программу. Но если > ограничиться "безопасным" использованием goto, то оно как раз и > сведется к while, if, return.
Я бы еще добавил break/continue и имитацию исключений.
шапокляк wrote:
> C> А сейчас до сих пор в своих языках занимается (в основном) > идеологией без нововведений. За это Вирта и не любят тут Как я успела > заметить Вирта тут не любят за другое — он и его слова вносят ненужный > диссонанс (во какое словечко вспомнила) во всеобщее благоденствие на > рынке С-шных языков.
Нет, скорее поднимает из могилы давно надоевшие флеймы.
Диссонансом занимается Python/OCaml и другие новые языки.
reductor wrote:
> ПК>Пожалуй, правильнее говорить об управлении временем жизни объектов, > с чем C++, действительно, справляется лучше ряда других языков > благодаря детерминированному разрушению объектов. GC этой задачи не > решает. > Я все же не понимаю кое-чего. Для каких задач нужно такое управление?
Например, если нельзя допускать пауз GC и большого оверхеда
конкурентного GC. Или если существуют гораздо более эффективные методы
управления памятью для данной задачи (preallocated пулы, например). Или
если требуется детерминированое уничтожение объекта.
> Но даже если так, почему С++ здесь справляется лучше тех языков, у > которых нет проблем с алиасингом?
А в С++ нет проблем с алиасингом. Более того, он тоже успешно
используется для некоторых трюков. Вот вам прямо с About Haskell
(http://www.haskell.org/aboutHaskell.html):
It isn't all roses, of course. The C quicksort uses an extremely
ingenious technique, invented by Hoare, whereby it sorts the array /in
place/; that is, without using any extra storage. As a result, it runs
quickly, and in a small amount of memory. In contrast, the Haskell
program allocates quite a lot of extra memory behind the scenes, and
runs rather slower than the C program.
In effect, the C quicksort does some very ingenious storage management,
trading this algorithmic complexity for a reduction in run-time storage
management costs.
In applications where performance is required at any cost, or when the
goal is detailed tuning of a low-level algorithm, an imperative language
like C would probably be a better choice than Haskell, exactly because
it provides more intimate control over the exact way in which the
computation is carried out.
> Окамла, у которого очень прогрессивный копирующий GC при котором куча > всегда утрамбована и который еще и полностью управляемый? > Или чем С++ здесь лучше Cyclone c его регионами и прочим?
А говорите "выучить язык за пару дней"...
В С++ продумано взаимодействие аллокаторов, стандартных контейнеров,
алгоритмов и т.п. Например, как мне поместить в контейнер OCaml'а
объект, созданый в блоке shared memory? Причем указатели в этом объекте
представлены в виде смещений относительно начала блока, а null pointer
представлен в виде указателя со смещением -1.
Здравствуйте, Andir, Вы писали:
Д>>а то, что наука в нашей стране окончательно прогнила и практически ни на что не годится — это и так известный факт
A> Какая чушь! Прогнила не наука, а максимум — система обучения. А Наука не приемлет государственных границ.
Andir, не знаю, за что именно ты мне поставил минус, но против науки, как таковой, я ничего не говорил. Я просто сказал, что не приемлю тех оценок "производительности" или "показанных результатов", которые применялись некоторое время назад -- количество публикаций. Этот критерий еще может как-то показывать достижения математика или физика, но если речь идет о программировании, то почему в расчет не принимаются реализованные в ПО идеи, я не могу понять.
Это как религия и церковь: понятие и институт вокруг него. Так же, есть Наука и есть Ученые с большой буквы. А есть "наука", как институт вокруг Науки. В котором свои правила и порядки, иерархия и система ценностей. И я согласен с Дарнеем, что во многих прикладных областях (о фундаментальных исследованиях не скажу) этот институт прогнил. В часности, в области ИТ.
... << RSDN@Home 1.1.4 stable rev. 510>>
SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Здравствуйте, eao197, Вы писали: E>А вот мне интересно, за какие открытия присуждают звания "кандидата технических наук"?
Любое внедрение чего угодно. Даже если ты "изобрел" сортировку пузырьком, для дисера вполне хватит "применение сортировки пузырьком в свинодобывающей промышленности". К списку публикаций добавляешь отзыв, подписанный зам.директора свинодобывающего завода о том, что "метод ... успешно применяется на нашем предприятии вот уже три дня, и все щасливы".
Единственный риск — что неподалеку уже защитили дисер ровно с таким же названием. В остальном ты неуязвим
1.1.4 stable rev. 510
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Здравствуйте, Sinclair, Вы писали:
S>Любое внедрение чего угодно. Даже если ты "изобрел" сортировку пузырьком, для дисера вполне хватит "применение сортировки пузырьком в свинодобывающей промышленности"...
Это что-то из области "булки на деревьях растут, а Россия-родина слонов"?
Здравствуйте, Игoрь, Вы писали:
И>И что ты мне пытаешься доказать? Я разве где-то говорил о том, что я против структурного программирования? Я говорил только о том, что возможны ситуации, когда применение явного goto оправдано. Вообще тема настолько заезжена, что у меня нет особого желания спорить. Если ты считаешь, что метки — это абсолютное зло, то я не смогу тебя переубедить. У Кнута есть статья на эту тему Structured Programming with go to Statements.
Я просто хочу увидеть код где использование goto оправдано.
Я не утверждаю , что это зло абсолютное — но то что зло — однозначно.
Повторюсь еще раз , единственная ситуация где с C/C++ я бы мог стерпеть goto это выход из наспех сделанного вложенного цикла.