Нашли или выдавили из себя код, который нельзя назвать нормальным,
на который без улыбки не взглянешь?
Не торопитесь его удалять или рефакторить, — запостите его на
говнокод.ру, посмеёмся вместе!
Program print_numbers_twice;
Procedure give(p: pptrint);
begin
if pptrint(p^) <> nil then begin
give(pptrint(p^));
writeln((p-1)^)
end
end;
Procedure take;
var n: ptrint;
begin
if not SeekEof then begin
read(n);
take
end else begin
n := (pptrint(@n)+1)^;
give(pptrint(n));
give(pptrint(n))
end
end;
Begin
take
End.
На входе программа получает неизвестное заранее количество целых чисел, разделенных пробельными символами, а затем выводит их два раза в том же порядке по одному числу в строке.
Очень простая и короткая программа. Я думаю, вам не составит труда понять, как она работает. Пишите в комментариях!
А как используется тот факт, что ptrint хранит число, в которое может поместиться указатель? Или он используется без семантики, просто как первый подвернувшийся под руку целочисленный?
Ну хоть один комментарий по делу. Но тут происходит присваивние локальной переменной n, так что ничего страшного нет и ничего не ломается. Вся запись происходит только в локальную переменную процедуры, а это допустимо.
Ну или хотя бы как устроена конвенция вызовов функций. Кажется, он там проходит по цепочке сохраненных BP... а так - да, ничего страшного. Всегда так делаю.
Отменили уже твой FPO. Регистров уже никому не жаль (чай не под 486 пишем) а раскручивать стеки без символов иногда нужно, чтобы хотябы понять в каком районе обосралось примерно.
1. BP нужно сохранять, без него хуй адресуешь локальные переменные.
2. Мы научилось адресовать их от SP, BP заюзаем под что-то другое
3. У нас стало больше регистров, давайте опять юзать BP
4. Зачем нам BP? Давайте от него откажаемся
[вы находитесь здесь]
Алсо, если я пишу асм руками, то наверное я хочу frame pointer, иначе отступы будут неочивидны? Или современные асмы все за меня посчитают?
Зато если руками писать без BP, то это заставит тебя сначала все спланировать, потому что спонтанное "ой, а добавлю-ка я переменную еще одну" может превратиться в адскую боль
P.S. В одной конторе был классный момент с питонопарашниками, которые отлаженные, протестированные в CI и документированные (там network diagram аска-артом была в комментах) m4 кружева для генерации некой конфы решили заменить на пухтон. Мой аргумент был: для простого скрипта вы понатащили пять зависимостей, которые требуют ебли с какими-то ``virtualenv'', ``pip'' и прочей хернёй, если она сломается, вы будете ебаться с ней сами.
Она конечно же сломалась, и утащила за собой load-balancer'ы в проде. Помогать чинить это говно я конечно им не стала.
Сисадмин питонист — горе в семье.
ну как нет, когда уебунта уже от него зависит, а когда я говорю коллегам про перл, то у них такие лица бывают, словно я предложил им пописать на Visual Basic под WinME
Как видишь, местное отребье применило свой старый, испытанный прием: пустилось завивать лесенку из оффтопных комментов, чтобы отклонить обсуждение и скрыть за плоскими шуточками ебаный стыд от своей некомпетентности. В мою бытность они тоже так поступали, а потом удивлялись, почему я столь нещадно громлю их оффтопы.
Ещё в турбопаскалевском «Turbo Vision» были коллекции (да, там был модуль Objects с невизуальными объектами), а в «Delphi» ещё добавили динамические массивы. Во «Фрипаскале» всё это есть.
Условиям оригинальной задачи первый коммент не соответствует — в нём числа надо вводить по одному на строку, а не через любые пробельные символы — но да ладно, раз уж начали так, то похуй.
> Оно же берёт строками, не отдельными символами.
Об этом я в примечании выше написал. Лень ебаться с этими вашими сплитами (надо не просто сплит, а сплит по \s: «Питон» соснул).
Это из той же группы требований что и
* Отключить интернет во время установки.
* Установочный путь не должен содержать пробелов.
* Собирать только GCC 3.4.6 с этими флагами и никакими другими.
* Устанавливать можно только на диск C.
* В региональных настройках необходимо поставить десятичным разделителем точку.
* В настройках рабочего стола включите Aeroю
* Программу нужно запускать от администратора.
* Шиндовс должен стоять исключительно в С:\Windows.
¿
При установке сторонней программы, системный антивирус автоматически отключается. Единственные две причины деактивировать его, на наш взгляд, это повышение производительности ПК или предотвращение случайных блокировок нужных файлов, которые антивирусу показались опасными.
Ну вот дебиан вообще по умочланию пустой и с политикой ACCEPT.
Но просто прыщи можно выстаавить в Инет без файра, им ничего не будет, а у винды анонимные петухи уже через пару минут начнут щупать твои пайпы через SMB
Купил сдуру "Агнитум" коробошный, когда он только-только засветился в Интернет. Он тогда стоил около семисот рублей. Установил на "Висту", поигрался - понял, что говно, - снёс.
700 кровных - на ветер. Коробка до сих пор где-то валяется.
Файерволл не нужен.
В одной очень серьезной проге на которой сидит вся отчетность России используется indy, COM и прочие устаревшие технологии. Прога эта стоит охулион рублей.
В доке черным по белому писано: Для работы приложения требуется отключить антивирус, файерволл и брандмауэр.
На делфи, кстати.
* Отключить интернет во время установки.
* Установочный путь не должен содержать пробелов.
* Собирать только GCC 3.4.6 с этими флагами и никакими другими.
* Устанавливать можно только на диск C.
* В региональных настройках необходимо поставить десятичным разделителем точку.
* В настройках рабочего стола включите Aeroю
* Программу нужно запускать от администратора.
* Шиндовс должен стоять исключительно в С:\Windows. * Вызывать только из main.
* Не засирать стек посторонними данными.
Наскока я помню, vfork запилили до страничной адресации еще, потому что без коровы было ОЧЕ дорого каждый раз копировать (как делал обчный fork), потому сделали такую лоу левел парашу
Поскоку теперь у всех (кроме j123123) есть MMU и COW (ха-ха, я родил каламбур) то смысла в вфорке мало
Дополнительную функцию можно опустить. Я просто убрал странную необходимость всегда передавать ноль, и заодно показал, что функция работает корректно в не зависимости откуда её вызвали.
gEKA6PbCKuu_nemyx # 0
gEKA6PbCKuu_nemyx # 0 ⇈
Целое размером с указатель, как ptrdiff_t в сишном <stddef.h>
Threadwalker # 0 ⇈
В общем, это знаковое целое того же размера, что и указатель на текущей системе. Можешь сам прописать.
gEKA6PbCKuu_nemyx # 0 ⇈
Threadwalker # 0 ⇈
[email protected] # 0
Threadwalker # 0 ⇈
guest # 0 ⇈
Threadwalker # 0
guest # 0 ⇈
3.14159265 # 0 ⇈
CHayT # 0 ⇈
CHayT # 0 ⇈
[email protected] # 0 ⇈
gEKA6PbCKuu_nemyx # 0 ⇈
Вот тут пахнет:
Набиваем стек, а потом его затираем введённым с консоли значением.
Threadwalker # 0 ⇈
Steve_Brown # 0 ⇈
bormand # 0 ⇈
Именно поэтому я за FPO, чтобы у царей не было желания шариться по стеку.
guest # 0 ⇈
Теперь все собрано с указателем рамки
[email protected] # 0 ⇈
Какая cancel culture.
bormand # 0 ⇈
Пруф?
guest # 0 ⇈
Ты ведь можешь сам это проверить как-то взяв MSную dllку?
bormand # 0 ⇈
guest # 0 ⇈
А нахуй он там? Там же регистров как у дурака фантиков
bormand # 0 ⇈
А тут писать на стек сраный rbp, который кроме отладчика (без символов) да аллоки никто не юзает. Вот и выбросили.
guest # 0 ⇈
2. Мы научилось адресовать их от SP, BP заюзаем под что-то другое
3. У нас стало больше регистров, давайте опять юзать BP
4. Зачем нам BP? Давайте от него откажаемся
[вы находитесь здесь]
Алсо, если я пишу асм руками, то наверное я хочу frame pointer, иначе отступы будут неочивидны? Или современные асмы все за меня посчитают?
bormand # 0 ⇈
Возможно какой-нибудь fasm и умеет об rsp считать... Но маловероятно т.к. ему придётся понимать инструкции, а не тупо их конпелять.
guest # 0 ⇈
bormand # 0 ⇈
Да хуй с ними, с переменными, они на х64 обычно все в регистрах...
Проблема в том, что любой пуш и у тебя rsp поехал.
> BP
А может я хочу об rdi базироваться? Или об r11.
guest # 0 ⇈
А зачем тогда тебе что-то пушать тогда? Чтобы кольнуть 32х битное говно?
>об rdi
чтобы запутать того, кто будет без символов пытаться стек вызовов понять?
bormand # 0 ⇈
Ну например чтобы callee-saved регистр начать юзать.
> зачем
Для самовыражения и уникальности.
guest # 0 ⇈
а, типа ты папин регистр припрятал, поюзал, и вернул обратно, да?
чото я сразу не сообразил, так же обычно всегда и делали. были даже ПУША и ПОПА для этого.
>Для самовыражения и уникальности.
чувак, ты пишешь на асме в 2021, ты и так уникален
bormand # 0 ⇈
16, лол.
З.Ы. И это не шутка.
guest # 0 ⇈
или у тебя 16bit protected, как в 286/win3.11?
И зачем? Биосы железок дергать?
bormand # 0 ⇈
> бивисы
Угу. Легаси-хуегаси.
guest # 0 ⇈
Useless fact: в двойках нельзя было вернуться из протектд режима в реальный никак кроме колд ресета. Я у Гука читал.
Но в тройке уже починили
ObeseYoung # 0 ⇈
Floating_cockerel # 0 ⇈
bormand # 0 ⇈
Threadwalker # 0
JloJle4Ka # 0 ⇈
1024-- # 0 ⇈
CHayT # 0 ⇈
guest # 0 ⇈
Я люблю руби читать
Floating_cockerel # 0 ⇈
ХУЯ хуюблю хуюби хуитать
Support # 0
Поубивал бы.
Threadwalker # 0 ⇈
ASD__77 # 0 ⇈
JloJle4Ka # 0 ⇈
Support # 0 ⇈
Steve_Brown # 0
- Покажи.
- ...
- Ты больной ублюдок.
j123123 # 0 ⇈
guest # 0 ⇈
CHayT # 0 ⇈
https://blogs.gentoo.org/mgorny/2021/11/07/the-future-of-python-build-systems-and-gentoo/
CHayT # 0 ⇈
Она конечно же сломалась, и утащила за собой load-balancer'ы в проде. Помогать чинить это говно я конечно им не стала.
Сисадмин питонист — горе в семье.
gEKA6PbCKuu_nemyx # 0 ⇈
guest # 0 ⇈
bormand # 0 ⇈
CI на ПХП
guest # 0 ⇈
Разные культуры развиваются с разной скоростью. У кого-то компьютеры, а у бушменов мезолит.
Пыхеры только-только юнит-тесты освоили, лет через двадцать и до CI доберутся
guest # 0 ⇈
Support # 0
Threadwalker # 0 ⇈
guest # 0 ⇈
JloJle4Ka # 0 ⇈
Floating_cockerel # 0 ⇈
ObeseYoung # 0 ⇈
Support # 0 ⇈
Честно говоря, не совсем понятно, почему идет инкремент указателя на единицу; чтобы выполнить условие, когда список уже EOF?
Threadwalker # 0 ⇈
Floating_cockerel # 0
Threadwalker # 0
Floating_cockerel # 0 ⇈
Threadwalker # 0 ⇈
Floating_cockerel # 0 ⇈
Threadwalker # 0 ⇈
Если правильно — сам думай, программа на то и написана. Если нет — ну значит я ошибся где-то.
Threadwalker # 0 ⇈
ISO # 0
То ли дело «Python»:
gEKA6PbCKuu_nemyx # 0 ⇈
Threadwalker # 0 ⇈
1024-- # 0 ⇈
То ли дело «Python»:
Прости, Царь, за дублирование дублирование массива.
ISO # 0 ⇈
Условиям оригинальной задачи первый коммент не соответствует — в нём числа надо вводить по одному на строку, а не через любые пробельные символы — но да ладно, раз уж начали так, то похуй.
ISO # 0 ⇈
bormand # 0 ⇈
ISO # 0 ⇈
[email protected] # 0 ⇈
Надо ещё split сделать.
И зачем в инт переводить?
ISO # 0 ⇈
Об этом я в примечании выше написал. Лень ебаться с этими вашими сплитами (надо не просто сплит, а сплит по \s: «Питон» соснул).
> И зачем в инт переводить?
Для коньсистентности.
[email protected] # 0 ⇈
https://ideone.com/b3WFU4
ISO # 0 ⇈
> None (the default value) means split according to any whitespace,
> and discard empty strings from the result.
guest # 0 ⇈
нет, не похуй
Floating_cockerel # 0
bormand # 0 ⇈
JloJle4Ka # 0 ⇈
Floating_cockerel # 0 ⇈
JloJle4Ka # 0 ⇈
Floating_cockerel # 0 ⇈
JloJle4Ka # 0 ⇈
[email protected] # 0 ⇈
* Отключить интернет во время установки.
* Установочный путь не должен содержать пробелов.
* Собирать только GCC 3.4.6 с этими флагами и никакими другими.
* Устанавливать можно только на диск C.
* В региональных настройках необходимо поставить десятичным разделителем точку.
* В настройках рабочего стола включите Aeroю
* Программу нужно запускать от администратора.
* Шиндовс должен стоять исключительно в С:\Windows.
¿
Floating_cockerel # 0 ⇈
JloJle4Ka # 0 ⇈
Threadwalker # 0 ⇈
Floating_cockerel # 0 ⇈
gEKA6PbCKuu_nemyx # 0 ⇈
Сейчас и вирусов-то почти нет. Кругом только трояны.
bormand # 0 ⇈
Да и по сигнатурам они известных троянов вполне так выпиливают.
gEKA6PbCKuu_nemyx # 0 ⇈
bormand # 0 ⇈
guest # 0 ⇈
bormand # 0 ⇈
Что ещё нужно не забыть?
guest # 0 ⇈
Но просто прыщи можно выстаавить в Инет без файра, им ничего не будет, а у винды анонимные петухи уже через пару минут начнут щупать твои пайпы через SMB
guest # 0 ⇈
Прыши:
винда
Пирдолинг заказываои?
JlAKOMKA # 0 ⇈
700 кровных - на ветер. Коробка до сих пор где-то валяется.
JlAKOMKA # 0 ⇈
В одной очень серьезной проге на которой сидит вся отчетность России используется indy, COM и прочие устаревшие технологии. Прога эта стоит охулион рублей.
В доке черным по белому писано:
Для работы приложения требуется отключить антивирус, файерволл и брандмауэр.
На делфи, кстати.
Support # 0 ⇈
bormand # 0 ⇈
Floating_cockerel # 0 ⇈
Taaaaaake meeeee oooooooon
I'll beeeee goooone
In a d
Segmentation fault
Threadwalker # 0 ⇈
Floating_cockerel # 0 ⇈
Threadwalker # 0 ⇈
Отдельный счётчик не нужен.
Rooster # 0 ⇈
bormand # 0 ⇈
[email protected] # 0 ⇈
* Отключить интернет во время установки.
* Установочный путь не должен содержать пробелов.
* Собирать только GCC 3.4.6 с этими флагами и никакими другими.
* Устанавливать можно только на диск C.
* В региональных настройках необходимо поставить десятичным разделителем точку.
* В настройках рабочего стола включите Aeroю
* Программу нужно запускать от администратора.
* Шиндовс должен стоять исключительно в С:\Windows.
* Вызывать только из main.
* Не засирать стек посторонними данными.
bormand # 0 ⇈
Мутабельных литералов захотелось? Или что там закопали в том районе?
bormand # 0 ⇈
gEKA6PbCKuu_nemyx # 0 ⇈
guest # 0 ⇈
bormand # 0 ⇈
guest # 0 ⇈
bormand # 0 ⇈
guest # 0 ⇈
Вообще хуевый, негативный вызов. Лучше им не пользоваться
bormand # 0 ⇈
Почему? Джве функции подряд не так сложно написать...
guest # 0 ⇈
Поскоку теперь у всех (кроме j123123) есть MMU и COW (ха-ха, я родил каламбур) то смысла в вфорке мало
Threadwalker # 0 ⇈
Floating_cockerel # 0 ⇈
Threadwalker # 0 ⇈
Rooster # 0 ⇈
JloJle4Ka # 0 ⇈
— перепрыщи
Threadwalker # 0 ⇈
bormand # 0 ⇈
Ну такое... Царские Лямбды тоже работали в конкретных условиях на конкретном конпеляторе. Очень тонкий лёд.
guest # 0 ⇈
мы вам перезвоним
bormand # 0 ⇈
Rooster # 0 ⇈
Да, надо было в инт кастить
BAJlEHOK # 0 ⇈
OMuKPOH # 0 ⇈
guest # 0
guest # 0