LINUX.ORG.RU

Как лучше организовать процесс изучения компьютерных технологий?


1

1

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

Короче, мой уровень знаний надо повышать. Однако, у меня возникли вопросы насчет того, как организовать процесс самообучения. Не секрет, что большинство областей знаний пересекается друг с другом. Так например, если я буду изучать ассемблер, то мне просто необходимо знать как работает процессор. Если я буду в подробностях изучать строение Unix/Linux, то мне может понадобиться знание языка программирования Си. А если я буду изучать программирование, то мне могут понадобится некоторые знания из области математики(а с этим у меня проблемы, кстати). Если я буду изучать работу компьтерного железа(например, чтобы заняться оверклокингом), то мне могут понадобиться знания из области физики(с которой у меня тоже дела обстоят неважно).

Короче, одно с другим связанно с другим. Это мне напоминает зависимости в системе пакетов. Просто голова идет кругом, если хорошенько так обо всем подумать. Даже не знаешь, что делать. Встает вопрос: как разрешить такие «зависимости»?


Ответ на: комментарий от i-rinat

Хватит позориться. Это неопределённое поведение, так что компилятор может сделать что угодно. И его поведение будет соответствовать стандарту. Наличие одной такой конструкции в одном месте программы может аукнуться в любом другом. Ищи по ключевым словам undefined behavior и sequence points.

вот ты и ищи. «всё что угодно» компилятор сделать не может, это не девица. Да, порядок тут не определён, но возможно всего три варианта вычисления выражения, и ни один из этих трёх вариантов не даст 42. «всё что угодно» получилось бы ежели я решил скажем читать память за границей массива. Но это - иной случай. Компилятор тут вправе выполнить любой порядок из трёх возможных, причём оптимальным является очевидно тот из них, когда y тождественно равно нулю. Gcc именно так и поступает, если конечно включена оптимизация. Можешь сам попробовать. Подумай почему UB не возникает в таком выражении:

x = y + z + t;
?

Да попросту потому, что в данном случае, хоть порядок тоже не определён, но результат в любом случае не меняется, как не считай. Мой случай аналогичен для компилятора, вот только у меня результат меняется. Однако не в _любых_ пределах, а только в пределах трёх допустимых. Если компилятор не оптимизирующий, то он _может_ выбрать любой из трёх, иначе он _должен_ выбрать оптимальный, а именно тот, когда выражение вырождается в тождество.

Ты путаешь неопределённость порядка вычислений, и undefined behavior. Это на самом деле разные вещи.

ЗЫЖ на самом деле тут могло-бы получится и UB, если-бы компилятор решил-бы выполнять код _одновременно_ на разных CPU. IRL для такого простого выражения это не выгодно. Впрочем, начиная с iP, в процессоре есть два ALU, что позволяет компилятору распараллелить данные вычисления. Гонки тут ессно не получается, а получается ерунда. Впрочем так действует gcc без оптимизации. Но даже если-бы код был сложный, и даже если-бы он выполнялся-бы на двух CPU, то даже в этом случае мы наблюдали-бы лишь неопределённый _результат_, а не поведение. Это важный нюанс: мы _получаем_ вполне конкретное число, и не делаем ничего иного. Правда число ессно неизвестно, и зависит от случайных причин. Таким образом мы имеем аж три вида разных UB:

1. неопределённость результата в процессе компиляции - мы не знаем, как скомпилируется наш код, однако после компиляции он всегда будет давать предсказуемый результат.

2. неопределённость результата в рантайме: даже после компиляции программа может выдавать _непредсказуемый_ _результат_. Однако поведение программы будет вполне предсказуемым.

3. и наконец неопределённость собственно _поведения_ - мы не можем узнать, КАК будет работать программа.

drBatty ★★
()
Ответ на: комментарий от i-rinat

Матан позволяет умножать числа быстрее чем n^2.

n это у тебя что? И что такое n^2? Может ты про O(n^2)? И что тут удивительного? таблица умножения позволяет умножать числа за O(1), и что?

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

Юзать винду с антивирусом бред. От антивируса только тормоза.

а я не спорю. Юзать венду вообще бред. Особенно с антивирусом. Особенно с платным и тормозным.

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

Что вы подразумеваете под выражением «лезть в безопасность»?

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

drBatty ★★
()

Иди на курсеру и подписывайся на все курсы, под которыми стоят метки computer science и mathematics.
Самый энергоэффективный способ из доступных.

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

как интересно получается! Отказ от правил 1,2,3 приводит к проблемам ТС ))

Дополню на мой взгляд некоторые отличия, точнее эквиваленты по правилам в линуксе:

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

2. Читай маны, сабжевые книги - RTFM. Делай, как написано, но вдумчиво. «Не компиляется гента» - см. п. 2 - не помогло - п. 1 ))

3. Почему в никсах нет защиты от дурака? Потому что такая защита не позволит делать умные вещи. Не нравится - не используй или сделай свое или почини или форкни.

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

Иди на курсеру и подписывайся на все курсы, под которыми стоят метки computer science и mathematics.

я не был на этих курсах, но я видел людей, которые закончили ЭТИ курсы. Они даже не знают, что связывает M$ Office и M$ Word! Я уж молчу про всё остальное... Т.ч. твой пост попадает под 4.2 и спам/рекламу.

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

я не был на этих курсах, но я видел людей, которые закончили ЭТИ курсы. Они даже не знают, что связывает M$ Office и M$ Word!

Что за бред?
Может, стоит всё-таки посмотреть, что это, прежде чем нести подобную околесицу?

В частности, курсы по Automata/Machine Learning/Design and Analysis of Algorithms/Cryptography/Introduction to Logic - вполне достойное начало для программиста.

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

Впрочем, начиная с iP, в процессоре есть два ALU, что позволяет компилятору распараллелить данные вычисления.

Никак не пойму, прикалываешься ты или бредишь. Что? Распараллелить? Ты вообще систему комманд видел?

Насчёт остального. Ты стандарты-то почитай, черновики доступны бесплатно. Хватить лужы газировать. Начни с Appendix C.

Ты путаешь неопределённость порядка вычислений, и undefined behavior. Это на самом деле разные вещи.

А ты путаешь implementation defined и undefined. И вместо толкования стандарта отождествляешь поведение gcc со стандартом.

i-rinat ★★★★★
()
Ответ на: комментарий от malices_gossips

Может, стоит всё-таки посмотреть, что это, прежде чем нести подобную околесицу?

это _реальные_ люди, которые заплатили _реальные_ деньги.

В частности, курсы по Automata/Machine Learning/Design and Analysis of Algorithms/Cryptography/Introduction to Logic - вполне достойное начало для программиста.

угу. вы таки очень любите заумные и непонятные непосвЯщённым слова... Вот только эффект курсов обратно пропорционален количеству этих мантр. У меня такой вопрос: почему нельзя на русский это перевести? Курсы-то для русских, да и перевести не сложно? Очевидно, что если русскоязычный употребляет «конвергенция» вместо «сближение», и того хуже «пролонгировать» вместо «продлить», то он вообще слабо понимает значение этих слов, либо не желает их прояснять. Я тут с удивлением узнал, что значит (уже) русское слово «клининг», теперь вот думаю, может на Ваших курсах готовят работников клинговых компаний?

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

У меня такой вопрос: почему нельзя на русский это перевести? Курсы-то для русских, да и перевести не сложно?

А у меня для тебя плохие новости.

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

это _реальные_ люди, которые заплатили _реальные_ деньги.

Я тебе совет дам: иди погугли.

У меня такой вопрос: почему нельзя на русский это перевести? Курсы-то для русских, да и перевести не сложно? Очевидно, что если русскоязычный употребляет «конвергенция» вместо «сближение», и того хуже «пролонгировать» вместо «продлить», то он вообще слабо понимает значение этих слов, либо не желает их прояснять. Я тут с удивлением узнал, что значит (уже) русское слово «клининг», теперь вот думаю, может на Ваших курсах готовят работников клинговых компаний?

Боже мой, что ты несешь...

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

физика как то не особо нужна, математика вообще не нужна imho.

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

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

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

Какой шикарный клоун. Да, и Гарвард для русских

Гарвард с МИТ-ом отдельный проект тянут (edx.org), не хотят корешиться со Стэнфордом.

malices_gossips ★★★
()

Я лучше создам несколько новых топиков, а то этот уж больно разросся. К тому же, он плохо вписывается в текущую систему разделов на ЛОРе.

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

Добро пожаловать на ЛОР. Тут так везде, куда бы ты не пошёл.

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

Никак не пойму, прикалываешься ты или бредишь. Что? Распараллелить? Ты вообще систему комманд видел?

ну видел. Причём тут система команд? Для тебя будет новостью, но начиная с первопня, большинство команд могут спариваться, и выполняться одновременно. Погугли про U и V трубы.

Насчёт остального. Ты стандарты-то почитай, черновики доступны бесплатно. Хватить лужы газировать. Начни с Appendix C.

давай цитаты. Только ты хоть конкретно обрисуй позицию, а то как Полиграф Полигрфовичь: «С обоими несогласен!». Хотя с т.з. демагогии это конечно беспроигрышный ход...

А ты путаешь implementation defined и undefined. И вместо толкования стандарта отождествляешь поведение gcc со стандартом.

ну начать с того, что всё выше описанное в стандарте попросту не определено. Т.е. в стандарте явно сказано, что стандарт тут не причём. Т.е. твои апелляции к стандарту не имеют смысла. В стандарте НЕ написано, что может произойти «всё что угодно». Попросту _не написано_. Это что касается UB. Но в данном случае (x-- - --x) случай вполне описанный, и в стандарте прямо написано, что _порядок_ действий неопределённый. Ну и что? Разве из этого следует, что действия не будут выполнены? Или что могут быть выполнены _другие_ действия? Нет. Действия вполне определены, только нельзя сказать, в каком порядке они произойдут. Вполне нормальная и штатная ситуация, которая в C на каждом шагу.

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

Там скорее причина в том что они друг от друга через две остановки метро, а от Стэнфорда через всю Америку. Поэтому у них совместные научные центры, и неудивительно если и стартапы

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

А у меня для тебя плохие новости.

я тут причём? я видел ровно то, что я видел: людей, которые закончили курсы именно для русских. Про них и говорю собственно. А вот людей, которые курсы MIT'а закончили - я не видел.

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

Что ты вообще несешь? Про какие-то курсы для русских, про MS Office, MS Word. Иди погугли про Coursera и edX и не неси ахинею.

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

курсы для русских

скоро лор занесут в реестр за экстремизм

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

Компилятор тут вправе выполнить любой порядок из трёх возможных

Ошибаешься. Здесь он вправе сделать всё что угодно. Погугли разницу между undefined behavior и implemetation-defined behavior. Если между sequence points переменная модифицируется более одного раза, то это именно UB.

из трёх возможных

Оптимизирующий компилятор - намного более сложная штука, чем тебе кажется.

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

Ошибаешься. Здесь он вправе сделать всё что угодно. Погугли разницу между undefined behavior и implemetation-defined behavior. Если между sequence points переменная модифицируется более одного раза, то это именно UB.

дык пруф будет, или опять RTFM?

Оптимизирующий компилятор - намного более сложная штука, чем тебе кажется.

и что-же я не учитываю?

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

твои апелляции к стандарту не имеют смысла. В стандарте НЕ написано, что может произойти «всё что угодно». Попросту _не написано_.

Possible undefined behavior ranges from ignoring the situation completely with unpredictable
results, to behaving during translation or program execution in a documented manner characteristic of the environment (with or without the issuance of a diagnostic message), to terminating a translation or execution (with the issuance of a diagnostic message).

Manhunt ★★★★★
()

Значит, просто учи всё, что попадается на твоём пути в такой степени в которой это тебе надо в этот момент. Дальше поймёшь сам, куда двигаться.

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

Possible undefined behavior ranges from ignoring the situation completely with unpredictable results, to behaving during translation or program execution in a documented manner characteristic of the environment (with or without the issuance of a diagnostic message), to terminating a translation or execution (with the issuance of a diagnostic message).

при чём тут рассматриваемый случай?

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

и что-же я не учитываю?

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

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

при чём тут рассматриваемый случай?

При том, что рассматриваемый случай является UB по стандарту. Мне опять за тебя в стандарте цитатку поискать?

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

Как я уже писал, в C вообще нет такого понятия «массив», в общепринятом смысле этого слова.

Ололо. Даже интересно стало, что ты считаешь «общепринятым смыслом этого слова».

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

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

лично мне непонятно, каким таким образом компилятор может порушить структуры данных? Например gcc работает так, как будто оба x являются совершенно независимыми переменными, и совершенно не учитывает побочные эффекты, хотя и вычисляет их, вот для разнообразия 64х битный код:

  4005c0:       55                      push   rbp
  4005c1:       48 89 e5                mov    rbp,rsp
  4005c4:       89 7d ec                mov    DWORD PTR [rbp-0x14],edi
  4005c7:       48 89 75 e0             mov    QWORD PTR [rbp-0x20],rsi
  4005cb:       8b 45 ec                mov    eax,DWORD PTR [rbp-0x14]
  4005ce:       89 45 fc                mov    DWORD PTR [rbp-0x4],eax
  4005d1:       83 6d fc 01             sub    DWORD PTR [rbp-0x4],0x1
  4005d5:       8b 45 fc                mov    eax,DWORD PTR [rbp-0x4]
  4005d8:       29 c0                   sub    eax,eax
  4005da:       89 45 f8                mov    DWORD PTR [rbp-0x8],eax
  4005dd:       83 6d fc 01             sub    DWORD PTR [rbp-0x4],0x1
  4005e1:       8b 45 f8                mov    eax,DWORD PTR [rbp-0x8]
  4005e4:       5d                      pop    rbp
  4005e5:       c3                      ret    
результат очевиден: y === 0. Обычно с -O0 компилятор делает так, как оно записано, но в данном случае это невозможно - результат вычитания зависит от префиксного декремента, вот потому-то он и вычисляется в первую очередь. Потом вычитание, а потом постфиксный декремент.

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

Все эти рассуждения про то, как делает gcc, гроша не стоят. Потому что рано или поздно обязательно выйдет версия gcc, которая будет делать всё совершенно по-другому. И твоя некорректная программа сломается нафиг. Наблюдал такое на практике, приходилось перелопачивать кучу чужого говнокода.

Приводить в обоснование корректности кода поведение конкретного компилятора — признак ламеризма.

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

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

Что, никогда не видел сегфолтящихся компиляторов?

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

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

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

При том, что рассматриваемый случай является UB по стандарту. Мне опять за тебя в стандарте цитатку поискать?

я вот не нашёл...

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

Ололо. Даже интересно стало, что ты считаешь «общепринятым смыслом этого слова».

ну вот вика пишет:

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

но на самом деле в C конструкция a является синтаксическим сахаром над *(a+i), и в действительности может представлять собой только частный случай массива: одномерный вектор с элементами одного и того-же типа, который индексируется исключительно тем, что может преобразоваться в ptr_diff (это тип разности между указателями одинакового типа, обычно это целое со знаком, размером с указатель). Кроме того, массив в C невозможно увеличить или уменьшить. Потому, массив в C обладает огромным количеством ограничений. Но самое печальное - массив в C невозможно передать внутрь функции. Как только мы это делаем, массив ВНЕЗАПНО становится указателем, и его размер становится равным размеру одного эл-та. Вернуть массив очевидно также невозможно - в C просто нет такого типа.

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

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

т.е. ты убеждён в том, что перед написанием хэловорлда необходимо в совершенстве изучить английский? Интересно - зачем? Кстати, лично знал программистов, которые ни слова не знали на англ. Единственное известное им «слово» было GOTO. И ничего, кодили, да и ещё $$ получали. Так то. В 1С.

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

я вот не нашёл...

N1548
Committee Draft — December 2, 2010
ISO/IEC 9899:201x

6.5 Expressions

If a side effect on a scalar object is unsequenced relative to either a different side effect
on the same scalar object or a value computation using the value of the same scalar
object, the behavior is undefined. If there are multiple allowable orderings of the
subexpressions of an expression, the behavior is undefined if such an unsequenced side
effect occurs in any of the orderings.

This paragraph renders undefined statement expressions such as

i = ++i + 1;
a[i++] = i;
while allowing
i = i + 1;
a = i;

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

ну видел. Причём тут система команд? Для тебя будет новостью, но начиная с первопня, большинство команд могут спариваться, и выполняться одновременно.

При том, что система команд последовательная. Нет возможности явного распараллеливания. Так что твоя фраза " в процессоре есть два ALU, что позволяет компилятору распараллелить данные вычисления" — полный бред.

Погугли про U и V трубы.

Вылезай из криокамеры. У нас в 2012-м Core i7 может исполнять по 6 команд за такт, а слияние микроопераций вкупе с большими reordering buffers, предсказанием переходов, переименовываниями регистров и спекулятивным исполнением заметно увеличивают среднее значение IPC. С появления первого пня почти двадцать лет прошло.

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

Так что твоя фраза " в процессоре есть два ALU, что позволяет компилятору распараллелить данные вычисления" — полный бред.

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

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

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

Ты просто смотришь и не можешь поверить, что кто-то мог такой бред написать. И автоматически исправляешь: «он имел в виду другое».

i-rinat ★★★★★
()
Ответ на: комментарий от Manhunt

If a side effect on a scalar object is unsequenced relative to either a different side effect on the same scalar object or a value computation using the value of the same scalar object, the behavior is undefined.

Ну ладно, _не определено_. Убедил.

drBatty ★★
()
Ответ на: комментарий от i-rinat

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

ну прочитай. только ссылки научись нормально делать - у нас разные страницы.

Ты просто смотришь и не можешь поверить, что кто-то мог такой бред написать. И автоматически исправляешь: «он имел в виду другое».

компилятор составляет инструкции таким образом, что-бы инструкции спаривались, т.е. выполнялись одновременно. Это по твоему не явный параллелизм? Ну тогда извиняй, я не знаю, как записывать команды в два потока для одного CPU. Ну кроме как по очереди.

При том, что система команд последовательная. Нет возможности явного распараллеливания. Так что твоя фраза " в процессоре есть два ALU, что позволяет компилятору распараллелить данные вычисления" — полный бред.

Какая разница, как _записаны_ команды? Мне важнее как они _выполняются_.

Вылезай из криокамеры. У нас в 2012-м Core i7 может исполнять по 6 команд за такт, а слияние микроопераций вкупе с большими reordering buffers, предсказанием переходов, переименовываниями регистров и спекулятивным исполнением заметно увеличивают среднее значение IPC. С появления первого пня почти двадцать лет прошло.

6 команд за такт это по твоему последовательно или параллельно?

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

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

Демагог, ты вспомни, почему вообще этот вопрос возник. Ты рассуждал о возможности одновременного выполнения двух декрементов на двух АЛУ у первого пентиума. Причём без учёта data hazard. Тебе ссылку на твоё сообщение дать, или сам найдёшь? Ты мало того что не понимаешь основ, ты этим гордишься, и имеешь смелость поучать других.

Кстати, компиляторы во времена P1 это ещё не умели. А сейчас это уже не нужно, процессор справляется лучше.

Это по твоему не явный параллелизм?

Нет, это не явный параллелизм. Гугли VLIW.

Мне важнее как они _выполняются_.

Ага, настолько важно, что ты погуглишь термин data hazard. Пожалуйста, скажи мне, что ты прочитаешь. Не устраивать же тебе тут ликбез.

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

Демагог, ты вспомни, почему вообще этот вопрос возник. Ты рассуждал о возможности одновременного выполнения двух декрементов на двух АЛУ у первого пентиума.

и что?

Причём без учёта data hazard.

почему без учёта?

Тебе ссылку на твоё сообщение дать, или сам найдёшь?

ну дай. Только научись сначала ссылки делать (hint: use #)

Ты мало того что не понимаешь основ, ты этим гордишься, и имеешь смелость поучать других.

поучаешь ты. Общими высерами в пустоту. Что сказать-то хотел?

Кстати, компиляторы во времена P1 это ещё не умели. А сейчас это уже не нужно, процессор справляется лучше.

тем не менее, сейчас они это делают: вместо того, что-бы сначала посчитать одно, затем второе, они считают и то и другое сразу. Так оно _сейчас_ получается быстрее. По мнению компилятора. А оно для меня таки важнее твоего (к тому-же у тебя мнения-то и нету, или ты его тщательно скрываешь).

Ага, настолько важно, что ты погуглишь термин data hazard. Пожалуйста, скажи мне, что ты прочитаешь. Не устраивать же тебе тут ликбез.

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

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

Даже Си-гуру не знают ВСЕГО об нем.

почему нет? C это очень простой язык.

Ага. Си — это очень простой язык. :) Чтобы написать на нём hello world нужно всего 2 строчки:

main(t,O){int _=main,m;return(m=strdup(",!((+hd3+6( eN")),O==_?((int(*)())O)(_,t+1),
17*4:t==_?(*(char*)O?*(char*)O^=((int(*)())t)(O,t):17),O:printf(((int(*)())_)(_,m));}

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

вот простейший пример: регулярное выражение .* совпадает с любым количеством любых символов. ВНЕЗАПНО оно не совпадает с любой строкой. Есть строки, которые не совпадают с этим RE.

Жутко любопытно: какие строки не совпадают с регулярным выражением .* ?

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

Чтобы написать на нём hello world нужно всего 2 строчки:

можно одну

main(){return printf("привет\n");}

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