LINUX.ORG.RU

Покритикуйте, пожалуйста, код

 ,


3

5

Написал свой первый hello world на nasm'е. Покритикуйте, пожалуйста.

Изначально писалось чтобы быть зашифрованным выхлопом для IOCCC, но по размеру в декодер не влезло, поэтому открываю сорс и ищу критику.

https://github.com/codemeow/freelancer/blob/master/freelancer.asm

★★★★★

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

Ну и что?

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

Т.е. единственное откуда ты можешь зайти - это устаревание и бессмысленность писать руками подобные портянки. И это действительно не имеет смысла и писать руками их тупо. Но писать через анус на си - не лучше.

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

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

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

Ну и что?

то, что кто может - пишет свои модули. только ты ноешь.

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

да, про барьеры. и их иногда очень полезно тыкать.

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

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

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

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

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

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

Это нихрена не так. А линковка мусор. АСМ и прочее - это про управление, а какой смысл в этом, если твоё влияние не распространяется и ограничено этим огрызком. В этом и проблема колхозного си и си в частности. Ты не можешь управлять с уровня си и не может что-то интегрировать в си. Хотя это не проблема си - везде с этим ещё хуже, ведь всё остальное это попросту наследие си, которое наследует его проблемы.

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

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

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

Никакая синхронизация для тяжелых вычислений/криптографии ненужна. Синхронизация - это линейность. Линейность не масштабируется. Линейное не может быть тяжелым. Поэтому твоя задача наоборот должна сводиться к уменьшению шаринга и увеличению уровня параллелизма в вычислениях.

За примерами ходить ненужно. fp - это минимум 10 путей. Т.е. тебе нужно написать не одну один поток вычислений, а 10. Очевидно, что руками ты это написать не сможешь(захочешь). Точно так же тебе нужно распределить регистры.

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

Именно это порождает всякую мифологию о том, что колхозник может на асм"е что-то написать и что какой-то там анролл ненужен и вся эта фигня.

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

Либо это попросту примитивные случаи, где можно что-то написать руками. Но таких мало. Поэтому весь этот колхоз-асм - дристня галимая. Он всё только портит.

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

уже скоро 10 лет (с11, с++11) как завезли барьеры

Да что барьеры... Ну вставляет компилятор хорошо оптимизированный код инлайном для builtin_*. Но это всё хорошо, когда вам именно это и надо. А когда вам надо почти это, но чуть-чуть с изменением, получается, что либо не максимально оптимизированный код, либо таки ассемблерные вставки. И ладно бы для каких-нибудь my_func, но ведь и для libc-шных же всяких memcpy и т. д. Сколько говорите еще лет подождать?

vodz ★★★★★
()

Написал свой первый hello world на nasm'е.

Молодец!
Теперь посчитай сумму натурального ряда от 1 до 100.

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

ну раз уж меня зацепили...

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

anonymous
()
Ответ на: ну раз уж меня зацепили... от anonymous

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

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

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

они должны отрабатывать ровно за n тактов на байт/блок. не зависимо от того, состоят они из всех 0, всех 1, или ещё чего-то. в противном случае утекает информация об открытом тексте.

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

они должны отрабатывать ровно за n тактов на байт/блок. не зависимо от того, состоят они из всех 0, всех 1, или ещё чего-то. в противном случае утекает информация об открытом тексте.

Вы внимательно прочли коммент, на который отвечали? Что там вам не понятно было?

Особенно смешно, если это сделать у майнеров биткойнов, надо же защититься от утекания вашего секретного ключа, правда же? ;)

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

Что там вам не понятно было?

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

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

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

Никаких последних тактов там нет. Все рассуждения о кешпромахах - мифология для идиотов. Это примерно как тайминг-атаки. Как только кто-то начинает кукарекать о кешмисах/тайминг-атаках - можно с 99% вероятностью сказать, что он ничего не знает ни об оптимизациях, ни об атаках.

Поэтому переставай эту херню нести - она недостойна твоих звёзд. Особенно в контексте крипты которая вообще ссала на кеш.

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

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

Плюс на сишке очень сложно чего-то добиться, а кресты достаточно сложны.

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

Поэтому переставай эту херню нести

Вы слишком быстро отвечаете и не умеете в сарказм. И вообще, слово тренд означает, что если клиент хочет и платит — следуй моде.

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

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

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

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

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

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

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

Си и есть метаассемблер.

Т.е. единственное откуда ты можешь зайти - это устаревание и бессмысленность писать руками подобные портянки. И это действительно не имеет смысла и писать руками их тупо. Но писать через анус на си - не лучше.

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

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

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

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

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

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

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

Сто лет в обед всё везде есть. Пыль стряхнуть бы надо?

то, что кто может - пишет свои модули. только ты ноешь.

Да, как бы, наоборот: ною не я.

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

Я очень ценю местное, лоровское разнообразие, и наличие, в том числе, такого до смешного шизофренического анонима!

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

А чё он неправильно написал? Это же фиговый дизайн интерфейса, что ядру приходится копировать, а не просто подсовывать в RO юзерспейсу уже имеющиеся страницы с данными.

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

Существует такое понятие «ассемблерная вставка». Наверное оно появилось потому что асм быстрее, не?

не. просто любой высокоуровневый язык позволяет работать только с некоторым подмножеством инструкций, если они не memory mapped. а писать отдельный asm файл для вызова того же svc - оверхед. так и появились вставки.

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

А чё он неправильно написал? Это же фиговый дизайн интерфейса, что ядру приходится копировать, а не просто подсовывать в RO юзерспейсу уже имеющиеся страницы с данными.

zero-copy и memcpy - две ортогональные вещи.

zero-copy ядро и так делает везде, где можно. А где сразу так нельзя, но хочется, там всё равно есть KSM.

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

ядро на то и ядро

изоляция? не, не слышал

anonymous
()
Ответ на: спасибо, кэп от anonymous

если что — уточню

вот хочу я /dev/random почитать... тоже ksm?

почему давеча прямое чтение из ядра для gettimeofday() отменили ты, надеюсь, тоже в курсе?

толсто набрасываешь, если кратко

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

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

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

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

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

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

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

я хз что это за годболт (там скриптятина и я её включать не стану). но в сишечке в стандарт всякое УГ не тащат.

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

ты несёшь феерическую чушь

стандарт не может быть платформо-зависимым, или уже может?

открой и почитай наконец

чем это отличается от писания на ассемблере?

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

всё те же неэффективные атомики

я уже привёл пруф их эффективности. теперь твоя очередь: напиши код с использованием атомиков и такой же по функциональности на ассемблере

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

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

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

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

а зачем ты «объясняла» мне банальности?

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