LINUX.ORG.RU
ФорумTalks

разбор foreach, предложенного procoder99-ом

 ,


0

4

вообще изумляюсь, как тут некоторые пытаются добится бана procoder99, вместо того, чтобы подробно разбирать его код (я серьезно, без иронии)

с другой стороны, г-н procoder99, я тебе напомню, что девелопмент — это не талксы, так что воздержись от своих филосовских излияний про ашотов, жизнь царей и прочее; кроме того, чтобы у тебя не было желания постить то, что всем уже *приелось*, вот краткая сводка твоих точек зрения и моих ответов на них:

А. «люди/преподы_в_вузах/... отвечают „делай как все“ вместо того, чтобы разобрать конкретный подход, указанный procoder99-ом» — да, такая проблема есть, но на лор-е имеются люди, которые именно разбирают подход (скажем, это я), так что прекрати свои жалобные стоны на эту тему

В. «procoder99-а не понимают, поскольку он гениален, а гениален он именно потому, что его не понимают» /сарказм/ — ну так прекрати стонать и демонстрируй свой код, мнение людей может измениться

С. если вдруг че-то у тебя потерли, не стесняйся посмотреть свой удаленный коммент, почистить его от рассказов про жизнь царей, ашотов и прочего, и запостить заново самое ценное из него (скажем, обоснование того, почему твой код будет работать быстрее, чем код оппонента)

теперь переходим к разбору твоего foreach

1. это вообще код не на си
2. твой код хуже чем for(... : ...), т.к. твой код МОЛЧА ломается от разумного использования
3. твой код хуже чем for(... : ...), т.к. твой код МОЛЧА ломается от данных, которые легко могут в него попасть, а for(... : ...) выдает диагностику

так что код, получается, у царей не ахти... впрочем, ты можешь предоставить исправленный вариант

твой код ( foreach в c++ (комментарий) ):

#include <stdio.h>
#include <stdint.h>

#define foreach(a, b)\
for(typeof(*(b)) * (a) = (b); (a) != ((b) + (sizeof((b))/sizeof(typeof(*(b))))); ++(a))
int main() {
  uint32_t vec[] = {123, 124, 125};
  foreach(it, vec)
    fprintf(stdout, "%u\n", *it);
  return 0;
}

1. это вообще код не на си, а на гнутых расширениях

$ gcc coder.c
coder.c: In function ‘main’:
coder.c:8: error: ‘for’ loop initial declarations are only allowed in C99 mode
coder.c:8: note: use option -std=c99 or -std=gnu99 to compile your code
$ gcc -std=c99 coder.c
coder.c: In function ‘main’:
coder.c:8: warning: implicit declaration of function ‘typeof’
coder.c:8: error: ‘it’ undeclared (first use in this function)
coder.c:8: error: (Each undeclared identifier is reported only once
coder.c:8: error: for each function it appears in.)


2. твой хуже чем for(... : ...), т.к. твой код МОЛЧА ломается от разумного использования

#include <stdio.h>
#include <stdint.h>

#define foreach(a, b)\
for(typeof(*(b)) * (a) = (b); (a) != ((b) + (sizeof((b))/sizeof(typeof(*(b))))); ++(a))
int main() {
  uint32_t vec[6][3] = {
      {10, 11, 12},
      {20, 21, 22},
      {30, 31, 32},
      {40, 41, 42},
      {50, 51, 52},
      {60, 61, 62},
  };
  int i=0, j=0;
  foreach(it, vec[++i]) {
    fprintf(stdout, "%u\n", *it);
    if( ++j>5 ) return 0; /// а иначе у тебя сегфолт
  }
  return 0;
}

$ gcc -std=gnu99 coder-er2.c 
$ ./a.out 
20
21
22
30
31
32

в то время как правильный результат это «20\n21\n22\n» ( http://ideone.com/JbO2Ns )

почему этот результат правильный, а твой нет — потому, что внутри своей реализации ты можешь хоть 1, хоть 2, хоть 100500 раз делать копирование, но снаружи твоего макроса это вообще не должно быть видно


3. твой хуже чем for(... : ...), т.к. твой код, т.к. твой код МОЛЧА ломается от данных, которые легко могут в него попасть, а for(... : ...) выдает диагностику (диагностика g++ 4.7 на http://ideone.com/0vQk95 )

#include <stdio.h>
#include <stdint.h>

#define foreach(a, b)\
for(typeof(*(b)) * (a) = (b); (a) != ((b) + (sizeof((b))/sizeof(typeof(*(b))))); ++(a))
int main() {
  uint32_t vec[] = {123, 124, 125};
  uint32_t *ptr = vec;
  foreach(it, ptr)
    fprintf(stdout, "%u\n", *it);
  return 0;
}

$ gcc -std=gnu99 coder-er3.c
$ ./a.out
123

Перемещено Pinkbyte из development

★★★★★

Последнее исправление: www_linux_org_ru (всего исправлений: 2)
Ответ на: комментарий от procoder99

А так да, шансов, что появится бегин в гцц почти нулевая

И да, какие такие глюки будут у «работодателя» удиви меня.

какие глюки и с какой вероятностью должен подсчитывать *ты*, а не я — ты же тут давал гарантию, вот и подсчитывай

скажем, если например «почти нулевой шанс» это вероятность в 0.1%, то ты вносишь $30 000 баксов, а работодатель вносит $30000 * 0.1% = 30 баксов

если за 15 лет __бегин__ не появляется, ты забираешь эти 30 баксов себе и становишься аж на 30 баксов богаче

если же появляется, то ты просрал $30 000

так что давай, размышляй  — это совсем не моя работа

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

Говно твой макрос, работает только с массивами, то есть, с самой убогой и ненужной структурой данных.

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

Т.е. ты тотально слился, ок.

какие глюки и с какой вероятностью должен подсчитывать *ты*, а не я — ты же тут давал гарантию, вот и подсчитывай

А никаких глюков не будет, и ты это понял, и ты понял, что пробалаболил. Где я давал гарантию - удиви.

Какие баксы и какой работодатель, если я буду что-то гарантировать - я буду гарантировать для тех условий, в которых я это писал. А уж на проблемы анскилледа я клал.

В гцц выпилил typedef, в сишке может появится ключевое слово, которое может с таким же шансом быть в любом коде.

И я тебе ещё раз повторю, код без сопровождения не гуляет по конпеляторам 15лет.

И ещё, если бы понимал, что __ __ - это длинная форма записи для совместимости, а если добавят __begin__ добавят и begin, а бегин настолько частое имя переменной, что сломается дохрена кода, поэтому это НИКОГДА не добавят. В ближейшем будущем точно.

А если и добавят, то будут трубить во всю и никаких проблем код не вызовет.

Вобщем очередная глупая придирка.

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

В плюсах тоже.

Там есть кастыли на бегинах/ендах. Запилить на сишке такой же макрос проще паренной репы.

procoder99
()
Ответ на: комментарий от www_linux_org_ru

Ах да, молодец анонимус - контрольный в голову. Когда введут в гцц begin первым, что отвалится будет ВСЁ stl. И твой форич в плюсах тоже отвалится.

procoder99
()
Ответ на: комментарий от aedeph_

Я учусь и играюсь в программиста. Мне интересен уровень профессиональных( от слова профессия) программистов - поэтому я болтаю на лоре.

А решаю - мне похрен что решать.

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

Где я давал гарантию - удиви.

вот тут вот: разбор foreach, предложенного procoder99-ом (комментарий)

Я тебе гарантирую, что в ближайшие 100лет в гцц не появится __begin__.

так что вот, ты только что гарантировал на 100 лет, а через полчаса выяснилось, что:

Какие баксы и какой работодатель, если я буду что-то гарантировать - я буду гарантировать для тех условий, в которых я это писал.

то есть ты просто трепач,

не говоря уже о том, что никому не нужен код, который работает для тех идиотских условий, в которых ты его писал

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

То есть ты сидишь в интернете, читаешь форумы, находишь очередную какаху, переписываешь её в вид, который тебя устраивает и рассказываешь всем, какой ты царь лалок?

А чего-нибудь реальное? Собственный редактор, конфигуратор для твоей генты, какой-нибудь патч к какахе, не?

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

я уже спрашивал, он сливается и не говорит. предлагаю всем лором дружно игнорить поциента, который разжырел уже настолько, что перестал доставлять.

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

Когда введут в гцц begin первым, что отвалится будет ВСЁ stl. И твой форич в плюсах тоже отвалится.

ты продолжай разговаривать сам с собой и со своими голосами в голове, не стесняйся — всем это очень интересно

а если вдруг захочешь вернутся к разговору со мной — тогда я напомню, что речь шла о __begin__, а введение begin это плод твоего больного воображения

www_linux_org_ru ★★★★★
() автор топика
Последнее исправление: www_linux_org_ru (всего исправлений: 1)
Ответ на: комментарий от www_linux_org_ru

Я тебе написал почему, сходи почитай, что такое __ __ в гцц, и почему отвалится всё твоё стл.

не говоря уже о том, что никому не нужен код, который работает для тех идиотских условий, в которых ты его писал

Ах ну да, и линукс не нужен, который работает только в gcc от определённых версий. И ещё 99% кода.

А каком-то мистическом - код должен будет собираться на конпеляторах через 50лет( почему код, который написал 30лет назад на сишке не собирается и даже по стандарту не прокатывает) говорят лишь анскильные писатели гуйни и иже с ним.

Поэтому собирай код с gnu99.

procoder99
()
Ответ на: комментарий от www_linux_org_ru

Т.е. ты не понимаешь, что такое __ __ в гцц? В гцц ВСЕ __name__ - это аналог name для совместимости с не гнутой сишкой - иди почитай ман.

Т.е. просто __begin__ в гцц не добавят, добавят МАКСИМУМ __begin. А вот бегин добавят только тогда, когда добавят begin - так пишут гцц уже сотню лет и будут писать дальше.

Ты можешь пойти и найти это в мануале. Там буквами по экрану написанно: В гцц вводят ключевые слова вида __name, а __name__ не вводят, ибо парсер __name__ воспринимает как name и сделанно это для совместимости.

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

Я тебе написал почему, сходи почитай, что такое __ __ в гцц, и почему отвалится всё твоё стл.

ты предлагаешь пойти на совершенно *ненужный* риск с твоим __бегин__

поэтому мне, как представителю работодателя, абсолютно наплевать на _*все*_ твои аргументы, кроме $30 000 в компенсацию возможных потерь

вот если бы ты сказал «да, маааленький риск есть, но ведь вероятно будет вполне осязаемый профит», то тогда я тебя бы слушал внимательно, и вполне возможно пошел бы на риск

а так — ты не больше, чем трепач-говнокодер с понтами и закосом под __систему__ (бугага) в своем говнокоде

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

не говоря уже о том, что никому не нужен код, который работает для тех идиотских условий, в которых ты его писал

Ах ну да, и линукс не нужен, который работает только в gcc от определённых версий. И ещё 99% кода.

т.е. ты сравниваешь свой забагованный говнокод с ядром линукса?

ну да, это, конечно, вещи сопоставимого калибра, да, тут не поспоришь

и поддержка на на сопоставимом уровне

и, конечно же, если нововведение в жцц приведет к его неспособности собрать ядро, то это нововведение откатят так же быстро, как если бы жцц не был способен собрать твою поделку, ага

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

А каком-то мистическом - код должен будет собираться на конпеляторах через 50лет

ты опять пошел разговаривать с голосами в твоей голове

не смею, конечно, отвлекать царя от этого царского занятия, но в случае чего могу напомнить, что меня интересовал срок в 15 лет

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

меня не интересует абстрактный Си, стандарт которого ущербен.

безусловно ущербен

и стандарт плюсов ущербен

но твои понтовые попытки изобразить элиту, и привязаться не к стандарту си, а к местечковому компилятору жцц не просто ущербны, но вообще даже предметом разговора могут быть с трудом — меня в этой теме *трое* человек уговаривало не позорится, если ты помнишь

вот кстати — какой по-твоему топ10 ущербностей стандарта си?

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

Я тебе гарантирую, что бегина никогда не будет, в том Си, который похож на сегодняшний Си.

чувак, последний раз заявляю — меня твои слова про гарантию не интересуют, меня интересует конкретная ставка (скажем, ты бы согласился поставить своих $30 000 против моих $30 на 15 лет)

почему — я объяснил

дальше я на любые твои разговоры про __бегин__ (кроме ставок) на эту тему не отвечаю

на тему бегин-а без подчеркивания можешь тоже говорить все что хочешь, но меня это не интересует

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

1) анскиллед авторы и пользователи

2) пользователи-лалки и авторы-лалки

3) пользователи-ниаселяторы и афтары-ниоселятары

...

cdshines ★★★★★
()
Последнее исправление: cdshines (всего исправлений: 1)
Ответ на: комментарий от www_linux_org_ru

гцц - топ0 конпелятор, который работает везде. Естественно я предерживаюсь к тому, кто диктует( причем правильно диктовал). gcc - это основа Си уже последние лет 15+.

А стандарт - это щит.

Да мне даже лениво этот куссок калла читать. Это как кусок ущербанского кода, который написали лет 20назад и 90% которого не актуально уже лет 15, но его анскиллед тащат, ибо лень переписать.

Си уже давно требует редизайна - для старого кода оставить бывшие стандарты, а на совместимость покласть. Один фиг сичасть gcc не развивается уже лет 10.

Про топ10 там скорее каждый 2-й пункт ущербанский кастыль, либо неактуальный калл. Поэтому конкретно выбирать мне лень.

procoder99
()

скорее всего, буду неоригинальным

Изначальный код ПроКодера99 - говно, т.к. его «foreach» - не foreach, ибо очень частный случай.

аргументация ВВВ_пинус_орг_ру, аналогично, говно, т.к. foreach != for.

расово верный foreach или такой

UPD: вмжу, что дебаты про Си, но и там какбе foreach в наличии

d_Artagnan ★★
()
Последнее исправление: d_Artagnan (всего исправлений: 1)
Ответ на: комментарий от www_linux_org_ru

Всё ты понял. А балаболить можешь до скончания веков, а лет через 10 не забудь прийти ко мне, чтобы я поржал над тобой. Найти ты меня найдёшь - прийдёшь ко мне в мою лапуту.

procoder99
()
Ответ на: скорее всего, буду неоригинальным от d_Artagnan

Дак суть в том, что я не писал замену форечу - я написал автору, который удивлялся «дочего техника дошла».

Хотя мой код был больше ответ тому, кто написал сианалог на форе.

Выше по треду есть в хламину рабочий вариант, который «не течёт» даже для анскилледа.

А то, что они до меня докапались - их жалкая балжь, чтобы о5 слиться.

А на рассово верный форич я клал - он мне упал в сишке.

procoder99
()

Да там итак всё было понятно. Не надо просто макросами пытаться решить такие задачи.
Условная компиляция - вот удел макросов.

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

Найти ты меня найдёшь - прийдёшь ко мне в мою лапуту.

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

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

Зря. Расово верный хорош тем, что его можно или переиспользовать или копипастить из проекта в проект без изменений. Безо всякого велосипедостроения. Но дело конечто же твое.

Заранее оговорюсь, что аргумент про перформанс нельзя принимать ни под каким соусом при обсуждении - т.к. этот аргумент поразительно быстро возбуждает сильнейший приступ двоемыслия («аргумент про перформанс хорош тогда, когда он в мою пользу»).

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

ибо tl;dr Но если я как-то несправедливо задел тебя - извини.

а...

тогда скажу, что я тут вообще своего варианта foreach не предлагал, а только нашел ошибки у прокодера

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

Зря. Расово верный хорош тем, что его можно или переиспользовать или копипастить из проекта в проект без изменений. Безо всякого велосипедостроения. Но дело конечто же твое.

Реально? Ты его можешь юзать только там, где есть кастыль для твоего форича.

В плюсах - это бегин/енд.

Заранее оговорюсь, что аргумент про перформанс нельзя принимать ни под каким соусом при обсуждении - т.к. этот аргумент поразительно быстро возбуждает сильнейший приступ двоемыслия («аргумент про перформанс хорош тогда, когда он в мою пользу»).

Если ты хочешь, чтобы я не смеялся над тобой, когда ты скажешь «форич в плюсах щит», а так форич в плюсах щит и не лучше моего.

Про другие ЯП мне не интересно, когда они будут способны на что-то кроме тормазящей прикладухи - тогда приходи.

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

Назвался гвоздем - полезай в пузо

Имхо каждое слово что-то значит. И слово foreach имеет за собой некий background (в нашем случае - foreach это паттерн). И если уж ты решил назвать свой код foreach - значит твой код должен иметь этот самый background. Если же его нет (что и наблюдаю: «я назвал его форич, ибо это по-пацански.»), значит ты на деле - не Лев Толстой, а очень даже хер простой. Ибо еще не программист, а кодер. Просто потому что твой домен еще ничтожен. Что, собсно и доказывает твоя реплика насчет «когда они будут способны на что-то кроме тормазящей прикладухи» - состоявшиеся спецы так не говорят (не потому что есть риск обосраться), ну, может, кроме пары одиозных личностей из мира CS.

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

Реально?

Да.

Ты его можешь юзать только там, где есть кастыль для твоего форича.

Ты еще не понимаешь, что это - не костыль.

d_Artagnan ★★
()
Ответ на: Назвался гвоздем - полезай в пузо от d_Artagnan

Бла-бла-бла. Я клал. Я что должен знать каждую ООПблажЪ? Как захотел - так и назвал.

Я так говорю, ибо это объективно так и есть. Я клал на этих спецов. Есть объективный факт - нет ни одного ЯП, который бы имел форич по паттерну и имел перфоманс даже близкий к стл, ибо это физически невозможно. А уж про голый сиасм я не говорю.

Ты что-то ещё хотел сказать?

procoder99
()
Ответ на: комментарий от d_Artagnan

Да.

Нет. Так ты можешь делать только в динамических ЯП. А я уже сказал, что это такое.

Ты еще не понимаешь, что это - не костыль.

А ну реально. Я вижу ненужную ненужность, имеющую 5% перфоманса( и то из-за написанных ан сишке стандартных функций). А так да, да - я внимательно тебя слушаю и мне очень интересно.

procoder99
()

в ответ Pinkbyte на Замечание

поскольку ты почему-то закрыл свое «Замечание» от ответа, я отвечу (и спрошу) здесь

действительно, КПД в этой теме получился весьма низким, но польза определенная есть, особенно от присутствия AIv

ну и я получил полезный опыт общения на технические темы с пейсателем, близким к полной невменяемости, в условиях форума

тему пока что имеет смысл оставить (хотя технические вопросы тут конечно поднимаются детские, но если бы я поднял то, что хотел в начале — о самопальной объектной системе прокодера — то КПД был бы еще ниже)

вот что касается объектной системы — тут вопрос

мнение самого прокодер-а об объектных системах имеет ценность еще меньшую, чем мнение дальтоника о цветах, т.к. прокодер вообще не понимает тему надежности (и повторной используемости) кода, ради которой все это ооп и затевалось

прокодер запостил код Сломал мозг (комментарий) и спросил «Как такое запилить на классах?»; я поправил его код в с++-стиле, *сохранив бинарную совместимость*, и в результате получилось, похоже, лучше, и я вот думаю, стоит ли мой код тут запостить для обсуждения и в какой форме, чтобы исключить участие самого прокодера в обсуждении — вот это вопрос, собственно

www_linux_org_ru ★★★★★
() автор топика
Последнее исправление: www_linux_org_ru (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.