Re[7]: Код, которым вы гордитесь
От: eskimo82  
Дата: 12.07.14 06:34
Оценка:
W>нигде не указано, что тип signed.
W>Может быть подразумевался само собой unsigned (который в абстрактной машине С складывается по модулю).
Это не важно — код будет работать как с signed так и с unsigned.
Re[4]: Код, которым вы гордитесь
От: AlexRK  
Дата: 12.07.14 06:42
Оценка:
Здравствуйте, eskimo82, Вы писали:

A>>a = 2147483647, b = 12345. Получаем overflow и пометку профнепригодности у эйчаров.

E>Никакого overflow мы не получаем — Паскаль содержит целочисленую арифметику, аналогичную C/C++ — не влезающие биты просто отбрасываются. Код будет работать коректно (на 32 бит машине).

А кто сказал, что это Паскаль? Может это Ada или Eiffel.
Re[2]: Хвостатый, кончай фигней страдать
От: bazis1 Канада  
Дата: 12.07.14 07:05
Оценка: -1
тебе сороковник скоро, а ты все дрочишь на порядки присвоения переменных... а потом мы удивляемся, почему в среднем по индустрии около 90% написанного кода идет в мусорку... попробуй сменить цель с "написать что-нибудь крутое на тысячу строк" на "написать что-нибудь крутое на тысячу покупателей". Ну т.е. реально разобраться, что народу надо, и реализовать это настолько удобно, чтобы людям было не жалко денег это купить. Как втянешься — приход будет в 1000 раз сильнее, чем от просто закодить. Потом будешь вспоминать молодость и думать "фигасе я наивняк был..."
Re[5]: Код, которым вы гордитесь
От: eskimo82  
Дата: 12.07.14 07:13
Оценка:
ARK>А кто сказал, что это Паскаль? Может это Ada или Eiffel.
И много у нас школьников решает "первую задачу по програмированию" на Ada или Eiffel ?
Надо конечно допускать возможность этих вариантов, но наиболее вероятно — это все же Паскаль.
Re[3]: Хвостатый, кончай фигней страдать
От: мыщъх США http://nezumi-lab.org
Дата: 12.07.14 07:29
Оценка: +4
Здравствуйте, bazis1, Вы писали:

B> тебе сороковник скоро, а ты все дрочишь на порядки присвоения переменных...

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


B> а потом мы удивляемся, почему в среднем по индустрии около 90% написанного кода идет в мусорку...

в мусорку не пишу

B> попробуй сменить цель с "написать что-нибудь крутое на тысячу строк"

B> на "написать что-нибудь крутое на тысячу покупателей". Ну т.е.
написал. и далеко не на тысячу покупателей, среди которых много постоянных. но это не показатель

B> реально разобраться, что народу надо, и реализовать это настолько удобно,

B> чтобы людям было не жалко денег это купить. Как втянешься — приход будет
моим покупателям денег не жалко, но деньги это мусор. ни хрена вы в жизни не разбираетесь. самое главное — фидбек от кастомеров и не только фидбэек, но и контрибуция (код, идеи)

B> в 1000 раз сильнее, чем от просто закодить.

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

B> Потом будешь вспоминать молодость и думать "фигасе я наивняк был..."

мы с вами в разных плоскостях. от R&D я сначала переместился к R, а от R к CS и занимаюсь решением нерешенных проблем, потому как если проблема имеет решение, то это не для меня.
americans fought a war for a freedom. another one to end slavery. so, what do some of them choose to do with their freedom? become slaves.
Re[2]: На всякий случай, добавлю.
От: eskimo82  
Дата: 12.07.14 07:47
Оценка: +1
vsb>
vsb>a := a + b;
vsb>b := a - b;
vsb>a := a - b;
vsb>

vsb>горжусь этим кодом. Это была первая моя задача по программированию (обменять значения двух переменных без третьей), с которой я успешно справился. Думаю с неё началось моё увлечение программированием.
На самом деле, этот код хоть и будет работать правильно (в Паскале или C/C++) — он плохой:

1. Производительность.
Если компилятор догадается сделать a, b регистровыми переменными — будет 2 чтения-записи памяти и 3 арифметических операции над регистрами, если не догадается — все будет еще хуже.

Поэтому следующий код, вероятнее всего, будет работать быстрее (2 чтения-записи памяти, 1 move между регистрами)
register int tmp = a;
a = b;
b = tmp;


2. Защита от ошибок.
Использование арифметических операций тут — зло. Вася пупкин может может вместо интегрального целого подставить вместо a и b плавающую точку или вообще неинтегральный тип с переопределенными operator +/-. Поэтому лучше писать через xor — это может защитить в случае плавающей точки и — переопределяют operator ^ более редко чем +/-.
В остальном — в добавок тоже просадка по производительности.

3. Идеальный вариант по производительности — это вообще использовать платформеные инструкции (если есть), например для x86 — какую нибудь xchg (экономит 1 лишнюю mov, и 1 регистр, коих на x86 тупо мало). Но этот вариант слишком непортируем.
Re: Кодт, которым вы гордитесь
От: karambus Россия  
Дата: 12.07.14 08:01
Оценка:
Здравствуйте, ManFeel, Вы писали:
MF>
MF> i++ = i+++++t;
MF>
Re: Код, которым вы гордитесь
От: eskimo82  
Дата: 12.07.14 08:07
Оценка:
В целом, этот вопрос сам по себе идиотский. Но не все хрюши/тимлиды/нанимающие это осознают.

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

/usr/bin/perl

    ''=~(        '(?{'        .('`'        |'%')        .('['        ^'-')
    .('`'        |'!')        .('`'        |',')        .'"'.        '\\$'
    .'=='        .('['        ^'+')        .('`'        |'/')        .('['
    ^'+')        .'||'        .(';'        &'=')        .(';'        &'=')
    .';-'        .'-'.        '\\$'        .'=;'        .('['        ^'(')
    .('['        ^'.')        .('`'        |'"')        .('!'        ^'+')
   .'_\\{'      .'(\\$'      .';=('.      '\\$=|'      ."\|".(      '`'^'.'
  ).(('`')|    '/').').'    .'\\"'.+(    '{'^'[').    ('`'|'"')    .('`'|'/'
 ).('['^'/')  .('['^'/').  ('`'|',').(  '`'|('%')).  '\\".\\"'.(  '['^('(')).
 '\\"'.('['^  '#').'!!--'  .'\\$=.\\"'  .('{'^'[').  ('`'|'/').(  '`'|"\&").(
 '{'^"\[").(  '`'|"\"").(  '`'|"\%").(  '`'|"\%").(  '['^(')')).  '\\").\\"'.
 ('{'^'[').(  '`'|"\/").(  '`'|"\.").(  '{'^"\[").(  '['^"\/").(  '`'|"\(").(
 '`'|"\%").(  '{'^"\[").(  '['^"\,").(  '`'|"\!").(  '`'|"\,").(  '`'|(',')).
 '\\"\\}'.+(  '['^"\+").(  '['^"\)").(  '`'|"\)").(  '`'|"\.").(  '['^('/')).
 '+_,\\",'.(  '{'^('[')).  ('\\$;!').(  '!'^"\+").(  '{'^"\/").(  '`'|"\!").(
 '`'|"\+").(  '`'|"\%").(  '{'^"\[").(  '`'|"\/").(  '`'|"\.").(  '`'|"\%").(
 '{'^"\[").(  '`'|"\$").(  '`'|"\/").(  '['^"\,").(  '`'|('.')).  ','.(('{')^
 '[').("\["^  '+').("\`"|  '!').("\["^  '(').("\["^  '(').("\{"^  '[').("\`"|
 ')').("\["^  '/').("\{"^  '[').("\`"|  '!').("\["^  ')').("\`"|  '/').("\["^
 '.').("\`"|  '.').("\`"|  '$')."\,".(  '!'^('+')).  '\\",_,\\"'  .'!'.("\!"^
 '+').("\!"^  '+').'\\"'.  ('['^',').(  '`'|"\(").(  '`'|"\)").(  '`'|"\,").(
 '`'|('%')).  '++\\$="})'  );$:=('.')^  '~';$~='@'|  '(';$^=')'^  '[';$/='`';
Re[3]: На всякий случай, добавлю.
От: watchyourinfo Аргентина  
Дата: 12.07.14 08:12
Оценка:
E>Если компилятор догадается сделать a, b регистровыми переменными — будет 2 чтения-записи памяти и 3 арифметических операции над регистрами, если не догадается — все будет еще хуже.

компилятор это в значительной степени распознаватель паттернов.
Распознать паттерн "перестановка переменных" раз плюнуть, далее компилятор свободен компилировать это концептуальное действие сколь угодно оптимально.
От поддержки соответствия между переменными и действиями в абстрактной машине и реальной компилятор как правило освобожден.
Re[3]: На всякий случай, добавлю.
От: watchyourinfo Аргентина  
Дата: 12.07.14 08:14
Оценка:
короче, я давно заметил, что ты типичный румяный русский программист, от которого толку меньше, чем от индуса, а гонору на порядок больше.
Re[4]: На всякий случай, добавлю.
От: BulatZiganshin  
Дата: 12.07.14 10:01
Оценка: 5 (1)
Здравствуйте, watchyourinfo, Вы писали:

E>>Если компилятор догадается сделать a, b регистровыми переменными — будет 2 чтения-записи памяти и 3 арифметических операции над регистрами, если не догадается — все будет еще хуже.


W>компилятор это в значительной степени распознаватель паттернов.

W>Распознать паттерн "перестановка переменных" раз плюнуть

какой идиот станет реализовывать распознавание этого паттерна в череде арифм. операций? вот код с tmp однозначно превратится в банальное переименование идентифмикаторов и таким образом сам по себюе не породит ассемблерного кода вообще
Люди, я люблю вас! Будьте бдительны!!!
Re[3]: Код, которым вы гордитесь
От: LuciferSaratov Россия  
Дата: 12.07.14 10:35
Оценка:
Здравствуйте, abibok, Вы писали:

A>На последнюю просьбу пациента "дайте заменить арифметику на xor" предложить a = b = 1 и назначить младшим помощником золоторя при ассенизационном обозе.


не понял юмора. предполагается, что при a = b = 1 этот код не будет работать?
a = a ^ b;
b = a ^ b;
a = a ^ b;
Re[4]: Хвостатый, кончай фигней страдать
От: kochetkov.vladimir Россия https://kochetkov.github.io
Дата: 12.07.14 11:48
Оценка:
Здравствуйте, мыщъх, Вы писали:

М>CS и занимаюсь решением нерешенных проблем


Та же фигня, только не "нерешенных", а "нерешаемых"
... << RSDN@Home 1.2.0 alpha 5 rev. 76>>

[Интервью] .NET Security — это просто
Автор: kochetkov.vladimir
Дата: 07.11.17
Re[3]: Хвостатый, кончай фигней страдать
От: kochetkov.vladimir Россия https://kochetkov.github.io
Дата: 12.07.14 11:52
Оценка: +2 :))) :)
Здравствуйте, bazis1, Вы писали:

Что дрочить на порядки присвоения переменных, что на количество покупателей... один хрен — онанизм
... << RSDN@Home 1.2.0 alpha 5 rev. 76>>

[Интервью] .NET Security — это просто
Автор: kochetkov.vladimir
Дата: 07.11.17
Re[4]: Код, которым вы гордитесь
От: __kot2  
Дата: 12.07.14 14:10
Оценка:
Здравствуйте, LuciferSaratov, Вы писали:
LS>не понял юмора. предполагается, что при a = b = 1 этот код не будет работать?
LS>
LS>a = a ^ b;
LS>b = a ^ b;
LS>a = a ^ b;
LS>

он не будет работать, когда a и b — ссылки на один и тот же обьект.
вообще, я людям, пишушим подобный код, тоже бы сначала предложил поработать младшим помощником ассенизатора
Re[5]: Код, которым вы гордитесь
От: LuciferSaratov Россия  
Дата: 12.07.14 15:13
Оценка:
Здравствуйте, __kot2, Вы писали:

__>он не будет работать, когда a и b — ссылки на один и тот же обьект.


а, ну это понятно.
я по умолчанию пишу на С (как раз за такие неожиданности С++ и не любят).

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


тут я скорее поддерживаю.
Re: Код, которым вы гордитесь
От: xp1icit  
Дата: 12.07.14 15:16
Оценка: +2
MF>У вас есть код, которым вы гордитесь, чтобы показывать, когда работадатели просят его показать?

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

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

гордость шароварщиков, опенсорсников, один-на-всю-контору-программистов и просто пет-прожект-мейкеров за свои "родные" программулины я тоже вполне понимаю
но не за их код
Re[3]: На всякий случай, добавлю.
От: vsb Казахстан  
Дата: 12.07.14 15:51
Оценка:
Здравствуйте, eskimo82, Вы писали:

vsb>>
vsb>>a := a + b;
vsb>>b := a - b;
vsb>>a := a - b;
vsb>>

vsb>>горжусь этим кодом. Это была первая моя задача по программированию (обменять значения двух переменных без третьей), с которой я успешно справился. Думаю с неё началось моё увлечение программированием.
E>На самом деле, этот код хоть и будет работать правильно (в Паскале или C/C++) — он плохой:

E>1. Производительность.

E>Если компилятор догадается сделать a, b регистровыми переменными — будет 2 чтения-записи памяти и 3 арифметических операции над регистрами, если не догадается — все будет еще хуже.

E>Поэтому следующий код, вероятнее всего, будет работать быстрее (2 чтения-записи памяти, 1 move между регистрами)

E>
E>register int tmp = a;
E>a = b;
E>b = tmp;
E>


E>2. Защита от ошибок.

E>Использование арифметических операций тут — зло. Вася пупкин может может вместо интегрального целого подставить вместо a и b плавающую точку или вообще неинтегральный тип с переопределенными operator +/-. Поэтому лучше писать через xor — это может защитить в случае плавающей точки и — переопределяют operator ^ более редко чем +/-.
E>В остальном — в добавок тоже просадка по производительности.

E>3. Идеальный вариант по производительности — это вообще использовать платформеные инструкции (если есть), например для x86 — какую нибудь xchg (экономит 1 лишнюю mov, и 1 регистр, коих на x86 тупо мало). Но этот вариант слишком непортируем.


Задача звучала в виде "обменять значения a и b без дополнительных переменных". Паскаль я начал учить за полчаса до этого и не то, что про XOR, про переполнение понятия не имел. С пунктами согласен, но прелесть этого кода (для меня) не в этом.
Re[4]: На всякий случай, добавлю.
От: dimgel Россия https://github.com/dimgel
Дата: 12.07.14 16:05
Оценка:
Здравствуйте, vsb, Вы писали:

vsb>Паскаль я начал учить за полчаса до этого и не то, что про XOR, про переполнение понятия не имел.


Видимо поэтому и нападки: зачем работодателю, спрашивающему на интервью про код, которым ты гордишься, человек, который начал заниматься программированием за полчаса до собеседования?
Re[4]: Хвостатый, кончай фигней страдать
От: bazis1 Канада  
Дата: 12.07.14 16:33
Оценка:
Здравствуйте, мыщъх, Вы писали:

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


B>> тебе сороковник скоро, а ты все дрочишь на порядки присвоения переменных...

М>это вы дрочите, а я разгребаю говна, продираясь сквозь обфускацию, где код выполняется совсем не так, как это ожидается.
хм. возможно тогда не все так плохо. я в R&D встречал ситуации, где люди могут часами напролет дискутировать а-ля что кошерней: mingw или cygwin, в конце проекта получить "кошерное" решение 1 задачи из 100 изначально планируемых, и перескочить на новый проект. пусть типа в продакшне разбираются. продакшн, естественно, этот код даже не открывает.

B>> попробуй сменить цель с "написать что-нибудь крутое на тысячу строк"

B>> на "написать что-нибудь крутое на тысячу покупателей". Ну т.е.
М>написал. и далеко не на тысячу покупателей, среди которых много постоянных. но это не показатель
хм. вот это уже интересно. можешь описать в паре предложений, как там бизнес-модель работает? исключительно патентный анализ?

B>> реально разобраться, что народу надо, и реализовать это настолько удобно,

B>> чтобы людям было не жалко денег это купить. Как втянешься — приход будет
М>моим покупателям денег не жалко, но деньги это мусор. ни хрена вы в жизни не разбираетесь. самое главное — фидбек от кастомеров и не только фидбэек, но и контрибуция (код, идеи)
деньги — это один из немногих объективных показателей. фидбек можно дать из вежливости, или из желания проманипулировать. покупка лицензии говорит о полезности софта обычно больше.

B>> в 1000 раз сильнее, чем от просто закодить.

М>в задрачивании над кодом я замечан не был. пишу довольно просто и без выкрутасов.
Хм. Возможно я неправильно проинтерпретировать комментарий выше.

B>> Потом будешь вспоминать молодость и думать "фигасе я наивняк был..."

М>мы с вами в разных плоскостях. от R&D я сначала переместился к R, а от R к CS и занимаюсь решением нерешенных проблем, потому как если проблема имеет решение, то это не для меня.
я в свое время прошел немного по этой тропинке. из моего опыта получилось, что если проблема не имеет решения, то в 99% случаев она нафиг никому не нужна. в итоге можно сделать сколь угодно крутое решение, но пользоваться им никто не будет, ибо никому не надо.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.