Информация об изменениях

Сообщение Re[10]: [C++] CppCon 2015: Kate Gregory “Stop Teaching C" от 22.10.2015 22:42

Изменено 22.10.2015 23:43 Evgeny.Panasyuk

Здравствуйте, ·, Вы писали:

EP>> dot>Гы-гы. Как ты сделаешь inplace quicksort хотя бы массива строк разной длины?

EP>> Полный inplace видимо никак, но будет хотя бы одна индерекция вместо двух.
dot>Понятно. Т.е. quicksort невозможно использовать для сортировки строк. Интересно получается...

Использовать нечто похожее можно, здесь вопрос чисто терминологический.

EP>> dot>dot>А это ты считаешь quicksort-м?

EP>> dot>
EP>> dot>qsort (x:xs) = qsort (filter (<= x) xs) ++ [x] ++ qsort (filter (> x) xs)
EP>> dot>

EP>> Нет. И даже ортодоксальные ФП'исты это отмечают: Erik Meijer (28:25)
dot>Ты видимо не понял, что он сказал:

Я прекрасно понял.

dot>"This is quicksort expressed in haskell... some people argue that it is really not quicksort... because ...inplace array....


Там ключевое "an essense of quicksort". То есть "сущность quicksort".

dot> in another hand if you want to understand the algorithm behind quicksort, then this is fabulous description".

dot>Т.е. для понимания самого алгоритма — это то что надо.

Для понимая другого алгоритма. Оригинальный quicksort помимо inplace ещё и ограничивает глубину рекурсии логарифмом.

dot>А inplace, индирекции, эффективный swap — это всё оптимизации — заставить работать некий алгоритм на конкретном железе как можно быстрее.


А алгоритмы пишутся в том числе для конкретного железа. inplace у quicksort был с самого рождения, и в качестве преимуществ как раз описывается скорость на многоуровневой системе памяти. Что и сейчас актуально, также как и пятьдесят лет назад.

EP>> dot>С++ это уже такая свалка всего, что за деревьями леса не видно.

EP>> Поэтому и нужно выбрать правильное подмножество для начального обучения, об этом собственно и топик.
EP>> dot>Например. В С пишем "a = b" — это просто mov в железе. А в С++ может быть что угодно.
EP>> 1. И что? Некоторые начинают начальное обучение вообще с Python — там ещё дальше от железа.
dot>Потому что питон — проще чем С++, С проще чем С++.

Начальное подмножество C сложнее правильного (сабж) начального подмножества C++.

dot>Для обучения С++ — хуже. Чем меньше уделять приходится уделять внимание деталям языка — тем лучше.


Так на C++ на начальном этапе меньше всяких отвлечений. Взял vector, и заполняй как хочешь. В то время как на C будет куча лишнего кода.

EP>> 2. В C++ для регулярных типов, с которых начинается обучение, "a = b" как раз и имеет вполне предсказуемое поведение, например что для int'ов, что для std::vector. Я бы сказал даже самое предсказуемое среди всего мейнстрима, так как value semantics и там и там.

dot>Зато далеко от железа.

А зачем на начальном этапе близко к железу?
Re[10]: [C++] CppCon 2015: Kate Gregory “Stop Teaching C"
Здравствуйте, ·, Вы писали:

EP>> dot>Гы-гы. Как ты сделаешь inplace quicksort хотя бы массива строк разной длины?

EP>> Полный inplace видимо никак, но будет хотя бы одна индерекция вместо двух.
dot>Понятно. Т.е. quicksort невозможно использовать для сортировки строк. Интересно получается...

Использовать нечто похожее можно, здесь вопрос чисто терминологический.

EP>> dot>dot>А это ты считаешь quicksort-м?

EP>> dot>
EP>> dot>qsort (x:xs) = qsort (filter (<= x) xs) ++ [x] ++ qsort (filter (> x) xs)
EP>> dot>

EP>> Нет. И даже ортодоксальные ФП'исты это отмечают: Erik Meijer (28:25)
dot>Ты видимо не понял, что он сказал:

Я прекрасно понял.

dot>"This is quicksort expressed in haskell... some people argue that it is really not quicksort... because ...inplace array....


Там ключевое "an essense of quicksort". То есть "сущность quicksort".

dot> in another hand if you want to understand the algorithm behind quicksort, then this is fabulous description".

dot>Т.е. для понимания самого алгоритма — это то что надо.

Для понимая другого алгоритма. Оригинальный quicksort помимо inplace ещё и ограничивает глубину стэка логарифмом.

dot>А inplace, индирекции, эффективный swap — это всё оптимизации — заставить работать некий алгоритм на конкретном железе как можно быстрее.


А алгоритмы пишутся в том числе для конкретного железа. inplace у quicksort был с самого рождения, и в качестве преимуществ как раз описывается скорость на многоуровневой системе памяти. Что и сейчас актуально, также как и пятьдесят лет назад.

EP>> dot>С++ это уже такая свалка всего, что за деревьями леса не видно.

EP>> Поэтому и нужно выбрать правильное подмножество для начального обучения, об этом собственно и топик.
EP>> dot>Например. В С пишем "a = b" — это просто mov в железе. А в С++ может быть что угодно.
EP>> 1. И что? Некоторые начинают начальное обучение вообще с Python — там ещё дальше от железа.
dot>Потому что питон — проще чем С++, С проще чем С++.

Начальное подмножество C сложнее правильного (сабж) начального подмножества C++.

dot>Для обучения С++ — хуже. Чем меньше уделять приходится уделять внимание деталям языка — тем лучше.


Так на C++ на начальном этапе меньше всяких отвлечений. Взял vector, и заполняй как хочешь. В то время как на C будет куча лишнего кода.

EP>> 2. В C++ для регулярных типов, с которых начинается обучение, "a = b" как раз и имеет вполне предсказуемое поведение, например что для int'ов, что для std::vector. Я бы сказал даже самое предсказуемое среди всего мейнстрима, так как value semantics и там и там.

dot>Зато далеко от железа.

А зачем на начальном этапе близко к железу?