LINUX.ORG.RU

Ответ на: комментарий от comp00

Ошибаешься.
Фраза «Читал на хабре» говорит не о том, что я её читаю, а о том, что все знают как ей верить.
И вообще мой пост шуткой был.

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

плохо/хорошо/null ортогонально к почему go/D предпочтительней Сей для лисапедов.

в Сях водятся чудовища ибо язык за 40 лет энтропировал чутка

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

Ошибаешься.

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

И вообще мой пост шуткой был.

Ну да, конечно.

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

Лол. Вы совсем не врубаетесь?
Я помню читал где-то, может на хабре, что за программисту платили за количество написанных строк. Вот и предложил шуточную версию, зачем писать фигурную скобку на отдельной строке.

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

Комментировать тотальный бред с «покопированием» я не буду.

-pedantic

Зачем?

-std=c89

Зачем?

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

Ты откуда вылез? Каким образом они расползутся по коду?

Проблема с ГП лишь одна - перекрывание. В данном случае у ТС"а контекст переменной один файл - перекрывания быть не может, а когда ТС добавит 2-й файл - он допишет статик в мейн и перекрытия тоже не будет.

А вообще никаких проблем не будет, если пацан пилит хеадер с декларацией всех глобалов. И просто его иклюдит где надо, а не страдает хернёй c определением в рандомных файлах.

Т.е. это делается так:

//global_namespace.c
int a, b, c, d;
//global_namespace.h
extern int a, b, c, d;

//main.c
#include "global_namespace.h"

Это решает одну единственную проблему «перекрытие», а т.к. эта проблема связана только с кривыми руками обезьян - она даже к глобалам не имеет никакого отношения.

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

Чем она не явная? Чем глобальное окружение не явно и чем вообще оно относится к глобалам?

Это не проблема глабалов, а проблема реализации. Тебе, конечно, этого понимать не надо, а надо болтать.

Хм, я видел, что если они все-таки нужны, им просто префикс g_ дают.

И какбэ мне насрать на то, что ты там видел. Аргументы за g_ будут?

По крайней мере парочка первых попавшихся кодстайлов в гугле с этим согласна и вот:

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

Аргумент - это когда ты описываешь почему g_ лучше __, понимаешь?

Кстати, из принятого ответа оттуда :) :

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

Это же показал и ты, когда обосрался и не осилил даже сформулировать проблему ГП, а начал нести какую-то херню. Кукарекать, что зло - каждый герой готов, а когда дело доходит по «почему» - тут уже гейрой в говне бежит к маме и прячется за кого-то/что-то.

Тоже самое с гото, да и со всем остальным. В этом мире ничего бы не работало, если бы все слушали громкие возгласы всякой нулёвой швали.

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

NULL, тащемта, макрос на тот самый «числовой 0», объявленный в стандартных либах (да да,в пустом майне он не сработает)

0 и (void *)0 - осилишь понять в чем разница?

Ну давай, если не осилишь - я за тебя отвечу: NULL имеет тип void *, а 0 - инт.

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

если уж археоложить программерство

то плата за каждую строку родом из 60ых и встречалась в переводах,

на примере кобола сырцов инициализации массивов.

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

Да да, знаю. Прямо сейчас сижу и держу в руках K&R Язык программирования.

IIIypuk ★★★★
()

Я всегда, когда сомневаюсь, лезу на http://lxr.free-electrons.com/. Достаточно открыть какой-нибудь исходник и посмотреть как люди делают

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

Я не буду тебе ничего отвечать, пока ты общаешься подобным образом. Наезды, «обеъзьяна», «нулёвая шваль» и т.п. - это все очень печально, особенно когда это в каждой второй теме каждым вторым комментарием.

ozkriff
()

Пытаюсь писать «хороший» код.

Хорошего в этом коде ничего нет. Глянул - проблювался.

Всё что я понял и прочитал

Либо ничего не понял, ибо не то читал.

Ты не осилил даже функции. Эта индусня уровня нуля:

        if(optarg) {
          if(atoi(optarg)) {
            size_m = atoi(optarg);
          } else {
            fprintf(stderr, "%s: ключ %s ожинает число\n", name, long_options[option_index].name);
          }
        }
        break;
      case 'c':
        if(optarg) {
          if(atoi(optarg)) {
            max_gen = atoi(optarg);
          } else {
            fprintf(stderr, "%s: ключ %s ожинает число\n", name, long_options[option_index].name);
          }
        }

Если у тебя будет 20опций? Ты так же будешь 20раз копипастить этот иф на тыщу строк?

  for(i = 1; i <= max_gen; i++) {
    if(i == 1) {
      map = init_map();

Это просто фейспалм. Это какое-то даже не неосиляторство, а не нездоровое мышление.

      printf("\e[34m шаг %d\n", i);

Написать color_printf() ты не осилил - тоже неосиляторство функций. Это же так красиво и так понятно.

printf("\e[34m шаг %d\n", i);
      print_step(map);

Это тоже какое-то нездоровое мышление и неспособность к логике. Почему ты не засунул печать номера шага в печать шага? Это же print_step, а не print_map.

Сама функция пример тотального отсутвия мышления и способности учиться и видеть. Ты же видел как сделан getopt_long(), почему ты не сделал так же? Ведь там нет даунистического цикла? Зачем у тебя цикл?

while(next_step()); 

У тебя же функция называет next_step(), а не просто step() - т.е. она меняет состояние на следующий шаг. Ещё одна проблема с логикой.

Далее - сам мап - это тотальное неосиляторство указателей, да и вообще самых примтивных основ.

void next_step(int ** *map)

Логика работы это функции крайне тумана. Ладно с копированием мапы в другую мапу - понятно. Ты не осилил сделать это без 2-х мап.

Но зачем копировать обратно? - ты же передаёшь 3 зведочки.

exit(0);// у тебя же ошибка, зачем возвращать 0? Твоя же программа не отработала.

Мильён бесполезных и не нужных маллоков. Неосиляторство.

Много лишних скобочек - не осиляторство.

Абсолютно бесполезные глобалы. size_m - тотальное не осиляторство структур. Сходи почитай книжку про ООП, если не само не доходит.

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

У тебя есть функции - у функций есть контекст. Что тебе мешало записать количество шагов, мапу и прочее в структуру и кадать везде.

Либо вообще сделать функицю get_ctx(), которая будет возвращать твой контекст, который ты будешь устанавливать set_ctx(). Оба они будут юзать какую-нибудь функцию:

typedef enum {SET, GET} flag_t;
ctx_t static_life_ctx(flag_t flag, ctx_t new_ctx) {
  static ctx_t ctx;
  if(flag == SET)
    return (ctx = new_ctx);
  return ctx;
}

Ничего вменяемого я в этой портянке не нашел - всё говно. Даже лень перечислять.

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

Естественно ты не будешь отвечать, ибо не можешь, вернее ты можешь только одно - обделаться.

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

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

И что ты мне хотел показать? Подтвердить мои слова.

Давай я тебе помогу распарсить макрос: В си - это раскроется в define NULL ((void*)0).

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

Nooooo!!! Лучше бы я не знал...

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

он хоть и самовлюблен, но похоже все правильно тебе расписал.

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

в каждой второй теме каждым вторым комментарием.

здесь ты не прав. в два раза по два раза ошибся

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

Наверное потому, что я не видел тебя?

Ты пишешь свое ядро ОС?

Ну можно так сказать. В чем конкретно твой вопрос заключается?

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

Что еще можно применить вместо fork()? (комментарий)
вроде должно было оповещение появиться, ну ладно

Ну можно так сказать. В чем конкретно твой вопрос заключается?

Тоесть это «да»? Как на счет планировщика процессов? У тебя свой?

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

ну вот, опять слился

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

anonymous
()

Нет, не в том. Тебе надо в ВУЗ/школу идти.

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

Зачем нужно это говно? Это нужно для обезьяны, которая ничего не может.

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

Зачем мне её ваять? Если мне понадобится что-то написать - я напишу это сам, ибо не безрукая обезьяна, причем минимум так же.

Говнолибы для обезьян я никогда писать не буду.

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

А как ты относишься к проприетарщине? Как стек реализуешь?

э-э-э! тут уже другой анон

я тот анон, который про шедулер, других не слушай

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

Я даже посмотрел твою полезность - ничего полезного и связи с твоим вопросом я не нашел.

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

вроде должно было оповещение появиться, ну ладно

Значит я задетектил в тебе бездарного ублюдка, который не стоит моего внимания.

Тоесть это «да»?

Тоесть для тебя нет.

Как на счет планировщика процессов?

У меня нет пранировщика процессов - за этим не ко мне. Я не делаю ненужное и тормазное говно. Для это есть линукс.

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

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

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

Это ты мне?

Собственно мой мразьдетектор не ошибся.

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

Что ты мне можешь рассказать, кроме пересказа примитивщины, которую ты узнал вчера за партой?

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

А как ты относишься к проприетарщине?

Проприетарщина - это отрыжка заедушной обезьяны, а вернее жалкая попытка её(обезьяны) хозяина.

Я не отношусь к бесполезному говну.

Как стек реализуешь?

Чего стек? Ты конкретные вопросы будешь задавать, либо будешь перебирать все знакомые тобою и не связные термины?

Я не реализую бесполезное говно.

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

2 основные идеи, как раз связанные с твоими процессами:

1) Илитный Шедулинг на уровне, аля «сопрограммы». Т.е. прозрачное управление «контекстами».

Первая задача - это другой вид перфоманса - обработка и состояния. Быстрый откат/переключение состояний. Без тонн лапши и тормазов.

2) Илитный Широкий код - т.е. код пишется сразу для всех вёдер в один поток. В идеале полностью синхронный.

Давай я тебе пример напишу:

Это нужно для вменяемых реализаций, допустим той же игры «жизнь», того же ТС"а.

Нам надо расспаралелить байду. В илитной рядовой байде будет кеш на 3лайна, чтобы мы могли апдейтить верхний ряд и делать по одному load/store в память на точку.

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

Т.е. надо паралелить обработку одного лайна и это дожно быть синхронизировано, ибо у них общий кеш.

Но это слишком дорого, ибо время обработки лайна маленькое.

Поэтому на помощь тут приходит синхронизированный широкий код, который атачится на все вёдра и отрабатывает одновременно.

Это основные задачи над которыми я щас думаю. Делаю я что-то на уровне кастылей/надстроек над линуксом и ваять бесполезное говна ради «я пилю/запилил кусок говна - свою ОС» мне не интересно. Я буду ваять только тогда, когда я выведу и опишу конкретную вменяемую реализацию.

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

Можно так же дефолтно делить сетку на n частей по вертикали и потом заделывать дыры.

Но это некрасиво, да и в конечном итоге будет медленнее.

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

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

Код гинерится «примерно как» для примитивного влива - я это тоже сказал.

Только они не последовательны abcdabcdabcdabcd, а aaaabbbbccccdddd.

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

он уже 10-ый? а что случилось с 9 и восьмым за последнюю неделю?

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

И что, интел так умеет? Синхронизировать исполнение разными ядрами на уровне инструкций?

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

Делаю я что-то на уровне кастылей/надстроек над линуксом и ваять бесполезное говна ради

зачем над линаксом? пили сразу над железом (тестируй над Xen-ом или ещё какой виртуалкой). юниядро например, вроде этого — оно правда, на Окамле, но вся фигня типа сопрограмм и одного могучего процесса там есть.

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

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

подумай сразу над примерами и бенчмарками, которые бы киллерфичи наглядно показывали. а то Baremetal OS kernel и на асме есть, с киллерфичами как-то не очень понятно.

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