LINUX.ORG.RU
ФорумTalks

[ЖЖ] циклы for

 


0

0

Сегодня первый раз за полгода сталкнулся с for. Грепнул исходники за полгода, нигде нет :) Это нормально ?

★☆

Ну, у меня foreach либо array_map используются обычно. for - редко :)

KRoN73 ★★★★★
()

for ненужен, ибо когда режу колбасу, то пользуюсь только циклом while (true)

vilfred ☆☆
()
Ответ на: комментарий от k0l0b0k

>А for быстрее при тупом переборе 8)

foreach пости всегда просто синтаксический сахар для for.

Разве что в Java он иногда медленнее из-за введения лишней скрытой переменной :)

А в Си++, кстати, for(;;) - тот же синтаксический сахар для while.

KRoN73 ★★★★★
()
Ответ на: комментарий от phasma

>его просто нет, я в MySQL перенес основные функции.

А... А я, наоборот, всё больше и больше использую sql как тупое хранилище данных для простых select'ов :)

KRoN73 ★★★★★
()

Смотря для какого языка.

Для Python — нет. Для Haskell — да.

<troll>C++, PHP и прочие недоязыки, пригодные только для написания калькуляторов и дорвеев не рассматриваем</troll>

anonymous
()
Ответ на: комментарий от k0l0b0k

>В Java foreach не требует объекта-итератора?

for(String s : Array) { ... }

Всегда создаётся переменная, куда кладётся значение (или ссылка, если объект complex).

А вот for(int i=0; i< Array.length; i++) { ... } иногда позволяет переменную не заводить, работая напрямую с элементами массива/списка/etc., что иногда даёт выигрышь.

KRoN73 ★★★★★
()
Ответ на: комментарий от KRoN73

> А... А я, наоборот, всё больше и больше использую sql как тупое хранилище данных для простых select'ов :)

а выигрыш в производительности есть ?

phasma ★☆
() автор топика
Ответ на: комментарий от phasma

>а выигрыш в производительности есть ?

Со всякими процедурами - не сравнивал, в сравнении с join'ами перенос логики на уровень ORM сильно разгрузил машину. Раньше на форуме (когда размер таблиц постингов подобрался к миллиону, а объём перевалил за 3Гб) были sеlect'ы с join'ами, сразу подключающими всю нужную инфу об авторах постингов, аттачами и т.п... Так выборка от нескольких секунд шла до 15-20 секунд. После того, как на ORM перевёл - всё формирование страницы стало проходить за 0,1 - 0,3 сек. Тоже многовато, но потом используется статичское кеширование.

Хранимые процедуры интересно бы было пощупать концептуально, но пока не придумал, куда их гармонично засунуть :)

KRoN73 ★★★★★
()
Ответ на: комментарий от KRoN73

> Со всякими процедурами - не сравнивал, в сравнении с join'ами перенос логики на уровень ORM сильно разгрузил машину.

Ну как бы сейчас избавились от этой проблемы и ресурсы возросли в 4 раза :) хотя и раньше довольно шустро работало.

> Раньше на форуме (когда размер таблиц постингов подобрался к миллиону, а объём перевалил за 3Гб) были sеlect'ы с join'ами, сразу подключающими всю нужную инфу об авторах постингов, аттачами и т.п...

а индексы использовались ? просто в таблицах указаны индексы, но т.к. спроектировано все под другой проект, иногда попадаются запросы, которым принудительно нужно указать этим самые индексы. Запросы занимавшие порядка 10 секунд стали выполняться за 0,5 секунды. Плюс OPTIMIZE TABLE

phasma ★☆
() автор топика
Ответ на: комментарий от phasma

>а индексы использовались ?

Да уж естественно :) И индексы, и регулярные explain'ы на тему борьбы с filesort, и optimize table каждую ночь, и постоянная тонкая подстройка параметров mysql... :)

KRoN73 ★★★★★
()
Ответ на: комментарий от k0l0b0k

>Но все равно foreach потребует от Array какого-нить интерфейса, и будет вызывать методы итерации - правильно?

На уровне компилятора - вероятно. На уровне кода - тот же самый for, вид сбоку выходит :)

KRoN73 ★★★★★
()
Ответ на: комментарий от KRoN73

> foreach пости всегда просто синтаксический сахар для for. а for - почти всегда синтаксический сахар для линейной рекурсии =)

anonymous
()
Ответ на: комментарий от KRoN73

Не знаю как у вас в Java, а у нас в C# foreach требует от массива GetEnumerator(), который дает методы Current и MoveNext. Т.е. каждая итерация - вызов двух методов - бьет по процессору.

k0l0b0k ★★
()
Ответ на: комментарий от k0l0b0k

>Не знаю как у вас в Java, а у нас в

В Java аналогично, есть итеративные классы.

Но при итерации по примитивам - генерируется прямой примитивный код. Сам смотрел, в какой байткод компилируется :)

KRoN73 ★★★★★
()
Ответ на: комментарий от KRoN73

Ща аналитики расскажут, что и куда надо гармонично засовывать.

INFOMAN ★★★★★
()

в срочном порядке все переходим на goto

lazyklimm ★★★★★
()

ну как таковой фор бывает нужен, но дейсвтительно, в модных языках можно и его реализовать через форич или даже вообще без форича:)

Syncro ★★★★★
()
Ответ на: комментарий от k0l0b0k

>Не знаю как у вас в Java, а у нас в C# foreach требует от массива GetEnumerator()

Срочно, нет, СРОЧНО бросай эту mono и C# и догоняй уходящий поезд. А то не успеешь вскочить, миграция на жабу уже начилась! Смотри
http://www.sql.ru/forum/actualthread.aspx?bid=38&tid=588534&hl=#6104438
http://www.sql.ru/forum/actualthread.aspx?bid=38&tid=585740&hl=#6063349
http://www.sql.ru/forum/actualthread.aspx?bid=38&tid=588534&hl=
http://www.sql.ru/forum/actualthread.aspx?bid=38&tid=589724&hl=#6114886

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.