Вот, сделал!Глобальный телекоммуникационный проект 1CellNet

Comments (30):

    • honeyman
    • 04.07.2004 14:23
    • Нижний Новгород / Нижегородская область
    Исходник хранителя экрана, занимающегося заливкой экрана чёрным цветом и потом вывода в случайных местах разноцветных чёрных точек, занимает 25 килобайт...
    При этом единственным достигнутым от применения ассемблера в данном случае плюсом является размер скринсейвера всего то в 4 с половиной килобайта...

    Ой, блин.

    На дворе 2004-ый год. В компьютере у меня стоит видеокарта с объёмом памяти в 128 мегабайт. Типичный продаваемый в магазинах жёсткий диск способен хранить 120 гигабайт информации. Да у меня в мобильном телефоне, блин, 2 мегабайта оперативной памяти! А кто-то при всём при этом считает, что разница между 4 с половиной килобайтами и сотней килобайт существенна, забывая при этом, что основной проблемой на данный момент впрограммировании является не недостаточно маленький размер программного обеспечения, не недостаточно быстрое программное обеспечение, а недостаточно надёжное программное обеспечение (вызванное большими объёмами решаемых ими задач) - и в целях увеличения его надёжности и расходуются дополнительные такты процессора и мегабайты памяти...

    25 килобайт исходников, 1357 строк кода... Только для того, чтобы залить экран чёрным и выводить на нём случайным образом разноцветные точки... Покопался ради любопытства в своих исходниках, достал какую-то мелкую курсовую работу с третьего курса. Исходник занимает примерно в 2 раза больше - 48 килобайт. Строк кода даже меньше - 1235. При этом программа позволяет искать экстремумы для пяти заданных функций тремя методами, позволяет задавать границы исследуемого отрезка, критерий останова (конечное число шагов или определённая достигнутая точность), а также динамически отображает процесс поиска...
    Итак, посмотрим. Размер исходников в два раза больше. Строк кода примерно столько же. Писалась... полагаю, примерно столько же - пару вечеров. Бинарник программы по размеру больше в 10 раз, но при этом по-прежнему составляет меньше сотой доли процента от оперативной памяти. А при этом функциональности - больше несравненно.

    Вы всё ещё кладёте кирпичи путём транспортировки их атомов электронным микроскопом?
    • к большому сожалению, память необходима отнюдь не для кода, а для данных.

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

      удивительный мир драйверов, высоких скоростей и низкого уровня не для вас ;)

      программы же прикладного уровня, используя Ассемблер, я пишу для души, ну и.. для развития и тренировки.. для меня язык не имеет значения, как и для любого программиста :))
      • > к большому сожалению, память необходима отнюдь не для кода, а для данных.
        К ещё большему сожалению, память для кода таки необходима :)

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

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

        Взгляните на исходник ядра операционной системы Linux. ЯДРА. Включающего в себя основной набор "драйверов", между прочим. И сравните количества кода на C и кода на ассемблере. Результат вас поразит.

        > высоких скоростей
        К сожалению, из написания программ на ассемблере вручную вовсе не вытекает высокая скорость их работы.
        Во-первых, чтобы программа, написанная вручную на ассемблере, работала быстрее, чем скомпилированная из исходника на ЯВУ неким компилятором в тот же самый, между прочим, ассемблер/машкод, требуется, как минимум, чтобы уровень познаний в ассемблере для целевого процессора автора программы, написанной вручную, превосходил бы уровень познаний авторов компилятора. Я задам только один вопрос: вы серьёзно уверены, что разбираетесь в ассемблере i386 применительно к его использованию на современных процессорах (я имею в виду, особенности работы и оптимизации машинного кода на современные процессора уровня P4 и Athlon XP) лучше, чем, скажем, сотрудники компании Intel, являющиеся авторами компилятора ICC и попутно коллегами создателей целевых процессоров?

        Что ещё более интересно - так это то, что избыточное использование ассемблера даже потенциально уменьшает скорость.
        Знаете, почему?
        Да потому, что оптимизация на высоком уровне абстракции как правило лучше, чем на низком уровне.
        Идеально вылизанная сортировка "пузырьком" на ассемблере со свистом проиграет написанной на ЯВУ "быстрой" сортировке, скомпилированной не лучшим компилятором.
        Поиск по таблице с помощью хэша будет быстрее поиска полным перебором. А в случае кэширования результатов скорость поиска ещё возрастёт.

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

        > и низкого уровня не для вас ;)
        Сам по себе написание на "низком уровне" не имеет никаких плюсов, никакого "удивительного мира". Разве что кроме получения писателем удовольствия от того, что он занимается делом, считающимся жутко редким и жутко сложным, жутко экстравагантным и жутко уникальным. Что он является единственным и неповторимым, незаменимым и чрезвычайно умным.
        Когда он это осознаёт, ему часто становится стыдно за столько нерациональную трату своего времени.

        Вы обратили внимание на то, насколько мой исходник на http://e-ivanov.ru/blog/2004/06/27/lj-user_assembler-ishodnik/ меньше вашего? Вы догадываетесь, насколько быстрее он был написан? Вы понимаете, что он был описан фактически "на лету", безо всякой литературы, без копаний во всяких списках прерываний, чтобы посмотреть функции, выполняемые int 21h при разных значениях AL? Вы обратили внимание, что мой исходник по сравнению с вашим имеет один существенный плюс - он кроссплатформенный?
        А главное - вы догадываетесь, что мой исходник существенно более рационален, чем ваш? Потому что мало какому разумному человеку придёт в голову запускать программу из ассемблерного кода. Потому что ассемблер - не для запуска программ. Он - для оптимизации узких мест. Для использования в малых дозах в конкретных проблемных местах. А не для выполнения функции связки различных частей программы воедино, не для работы в качестве "языка-клея".
        • такие слова, что ты написал, я слышал очень и очень часто. ;) причём от многих людей.
          я не буду ничего приводить от противного, потому что ты прав, но лишь с одной узкой стороны.

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

          я иду своим путём, ты своим.
          у нас разные цели.
          ==================== дальше просто размышления =====
          я улыбаюсь, когда слушаю подобные мысли, которые ты привёл выше. :)
          это стандартные вещи, которые забили в головы студентов, которые свято во всё это верят.
          это грустно и смешно одновременно.

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

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

          хватит бессмысленных споров! это схоластика.
          --------------
          вот ещё вспомнил забавный эпизод:
          где-то 8 лет назад мой товарищ написал программу на чём-то там визуальном. ну и вот, она была размером около 1.5 Мб. я спросил - а что она делает? он говорит - окошко с кнопкой выводит. я ему и говорю - такую же программу можно сделать размером около 15 Кб.. так в чём суть-то? а то, что его программа загружалась в память долго! :))
          это как один приятель говорил - Ассемблер это архиватор, превращает большой исходник в мааленький файлик, а другие языки - это наоборот. ;)
          смех смехом, а доля истины есть.

          памяти никогда не бывает много и как я уже говорил - она нужна ТОЛЬКО для данных - звук, изображение и др. потоки данных очень велики.
          вот сейчас у меня работаю около 30 программ одновременно. представь, если каждая будет размером 5 Мб? это только на код нужно 150 Мб!
          а ещё и ОС занимает (которая тоже написана на С++) около 64 Мб, да ещё и буфера нужны на диск и т.д. и т.п. А куда же звук загружать, чтобы обрабатывать? ну или ещё какие данные, неважно какие.. куда? а нет места-то..
          и будет свопировать у тебя винт.. бедненький..
          лично я почему-то выбрал программу размером 100 Кб, нежели другую программу, которая выполняет ТО ЖЕ, но размером 3 Мб!
          а на развёртывание программы на С++ знаешь сколько тратится памяти? :)

          говорить можно бесконечно..
          бывай!
          • > такие слова, что ты написал, я слышал очень и очень часто. ;) причём от многих людей.
            Когда ты столкнёшься с разработкой программы... эээ... С-шных строк на десять тысяч хотя бы, не

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

            прислушивался.

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

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

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

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

            не за двадцать леть.

            > язык программирования - это лишь инструмент.
            Конечно.
            Правда, что интересно, разные языки программирования следуют разным парадигмам. Иногда настолько

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

            шутку, что "настоящий программист на Фортране может писать на Фортране на любом языке"? Иногда это

            не только вредно, но и полезно. Знакомство с Eiffel-евским (и не только) design-by-contract привело

            к тому, что я стал активно пользоваться d-b-c внутри исходников на C++ - и это помогало просто

            чрезвычайно. Активное использование на протяжении пары лет низкоуровневого языка типа С привело к

            тому, что я лучше начал понимать, как реализованы объекты в С++.
            Таким образом, знание одних инструментов приносит пользу и в использовании других инструментов.

            > язык программирования - это лишь инструмент.
            Всегда лучше уметь владеть несколькими инструментами, чем одним, правда? Причём как одним-двумя

            более-менее универсальными инструментами (Leatherman-овским мультитулом, цифровым мультиметром,

            языками типа С++, Java или C#), так и достаточно широким спектром языков, предназначенных для

            решения наиболее популярных задач (С с вкраплениями ассемблера для низкоуровневого кода, SQL для

            доступа к данным, PHP или Perl для сайтов, Perl или Python для quick-and-dirty решения, Lisp для

            затачивания любимого текстового редактора, Standard ML или O'Caml для программ с повышенными

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

            угодно. Просто электронным микроскопом микрорайон не построить. Даже десятью электронными

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

            решать.

            > я улыбаюсь, когда слушаю подобные мысли, которые ты привёл выше.
            Что именно вас смешит? Что на данный момент большинство софта и драйверов пишется на языках более

            высокого уровня, чем ассемблер? Что я засомневался, что ваше личное знание архитектуры современных

            процессоров (не путать с процессорами до Pentium 2 включительно) вряд ли достигает знания авторов

            интеловского компилятора и компилятора gcc? Что человеческая внимательность при написании больших

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

            в него сведущими авторами?

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

            оптимизации). А не дай бог вам перейти на другую аппаратную платформу - хоть G4/G5 те же...
            • всё, что ты сказал сейчас, я согласен c эtиm;)
              что-то я не понимаю, что ты напал тут на меня?
              :))

              ==========
              да, я буду учиться и учиться.
              ты.. будешь писать программы на высокоуровневых языках;
              я.. буду создавать эти языки, компиляторы.
              • Хотите создавать языки и компиляторы?
                Напишите на асме под вынь32 систему лексического и синтаскического разбора выражений. Тогда вы слова honeyman прочувствуете в полном объеме. Я серьезно говорю. Компиляторы писать, хе... Если думаете, что это все так просто и замечательно - попробуйте. Скажу вам по личному опыту - результат вас потрясет и, скорее всего, очень сильно перевернет все ваши представления о том, что есть программирование...
                • :D
                • > Напишите на асме под вынь32 систему лексического и синтаскического разбора выражений.
                  Хорошо сказано :)
                  За время написания другой программист успеет несколько раз изучить с нуля lex c yacc-ом и написать это на них :)
                  • это уже написано.
                    есть человек, который сделал это.
                    • > это уже написано.
                      В смысле, один вариант, решающий какую-то задачу, или как :) ?
                      Такие вещи пишутся на раз-два. Для каждой задачи — своё.
                      При наличии нормального инструментария, конечно.
                      Я в своё время писал оную для одного хитрого синтаксиса, не зная лексов с яками, на перле… Вместе с гуем (позволяющим просматривать и редактировать файлы этого синтаксиса) уложился за пару недель… Надо, надо учиться новому :(
                      • эх, мир, куда спешит?...
                        а ведь главное не в этом..
                        • В удовольствии от написания? Чувстве творца, создавшего законченное произведение? Не спорю — великолепное ощущение.
                          При программировании на ЯВУ оно особенно хорошо чувствуется: когда созданный тобой мир большой, развитый и сложный,… и при этом превосходно работает…
                          • и ты прав и я прав
                            о чём спорим?
                            у меня другие цели..
                            • Ни о чём. Ты просто ещё один, кого я знакомлю с удовольствиями высокоуровневого программирования и вытягиваю из болота низкоуровневости :) Генералом быть интереснее, чем рядовым… историю делают не рядовые, а те самые генералы :)
                              • тогда и я ещё раз скажу.
                                у меня другие цели.
                                неужели сказать на японском?
                                идти по тому же пути, что и все остальные?
                                уважь! это не для меня..
                                • > идти по тому же пути, что и все остальные?
                                  > уважь! это не для меня..
                                  «…и с матерным криком прокладывает новую трассу…»
                                  Ты выбрал путь только потому, чтобы быть не таким как все, даже не обращая внимания на его качественные характеристики? Не собственный путь, а противоречие другому пути? Тогда не забудь, что этот путь несамостоятелен и всё равно зависит того, которому противоречит. Зависимость со знаком минус — это тоже зависимость.


                                  Кстати, «не таким, как все» можно легко быть и под ЯВУ :) — так, про языки программирования, в которых нет переменных и последовательности выполнения программы, и которые тем не менее весьма удобны в использовании, знают немногие ;)


                                  Ну ладно, я спать, а то завтра к 12-ти часам на работу :) Ещё немного Нила Янга в качестве снотворного, и аут… G'nite!
                                  • я не говорю, что я не хочу быть, как все.
                                    я просто пойду по своему пути. но он не будет отрицать многие положительные вещи других миров.
    • ага. и забыл самое главное сказать.
      этот исходник был сделан для одной девушки из Томска для её диплома. ;)
      она его сдала на 5.
      ей нужен был именно Ассемблер :))
      • Меня этот вопрос, на самом деле, тоже заинтересовал - насколько девушка была возбуждена от такого скринсейвера ;)

        Какие у вас романтичные девушки... А у вас нет какой-нибудь, которая бы по ламповым компьютерам специализировалась ;) ?
        • ей не важны были эффекты, а просто нужен был диплом. я выбрал то, что создал давно ещё, в 1998 году :)
          ещё для ДОС писал игру Калах, вот оттуда и взял кусок блока с этими звёздами.

          а девушка эта супер, если хочешь, познакомлю? :)
          • Эхх... Я вот для диплома писал кроссплатформенную клиент-серверную универсальную среду распределённых вычислений. В рамках которой могут решаться фактически все задачи типа Distributed.Net, seti@home, GIMPS...
            Меньше трёхсот килобайт исходников (включая пример использования среды для решения конкретной распределённой задачи). Примерно неделя работы. На ассемблере для подобного понадобилось бы лет десять, за которые умерла бы и изначальная операционная система, и аппаратная платформа ;)

            > а девушка эта супер, если хочешь, познакомлю? :)
            (Настороженно) На ассемблере i386, говоришь?
            Боюсь, она для меня старовата ;)))

            Вот мне бы девушку, пишущую дипломы на C# или хотя бы на Ruby - вот это было по мне ;)
            • заметь, _тебе_ бы понадобилось 10 лет. ты говоришь сейчас о себе. других ты судить не можешь. :))

              она только на 1-ом курсе. ;)
              =============
              по твоим словам и твоему хвастовству всё сразу видно, что ты за человек :))
              успокойся наконец-то.
              какой-то ты сегодня возбуждённый.. :)
                • honeyman
                • 24.07.2004 14:50
                • Нижний Новгород / Нижегородская область
                Извини, что слегка отвлёкся от разговора.

                > заметь, _тебе_ бы понадобилось 10 лет. ты говоришь сейчас о себе. других ты судить не можешь. :))

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

                > по твоим словам и твоему хвастовству всё сразу видно, что ты за человек :))
                Расскажи мне, пожалуйста, что я за человек. Люблю узнавать новое о себе.

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

                > успокойся наконец-то.
                > какой-то ты сегодня возбуждённый.. :)
                То, что вам кажется "возбуждённостью", всего лишь неторопливое ведение беседы на старую и заезженную тему о вреде использования узкоспециализированных языков для решения задач, не подходящих для них...
                • neograff
                • 05.08.2004 01:52
                • Владивосток / Приморский край
                Обалдеть.
                Девушка сдала диплом на первом курсе? Или он первый и последний? %)
                • курсовая
                  название не имеет значения
        • > насчёт скорости и уровня абстракции - полнейшая чепуха.
          Предлагаю вам аргументировать свои слова и оценить не только сложность, но и скорость разработки,

          лёгкость разработки и лёгкость поддержки на ассемблере
          1. шаблона проектирования Builder применительно к задаче конвертирования исходника на языке С с

          расцветкой синтаксиса в документы HTML, LaTeX и, скажем, набор ANSI-последовательностей для вывода

          на экран (дополнительную информацию см. в книге Гаммы-Хелма-Джонсона-Влиссидеса "Design patterns"),
          2. сбалансированного бинарного дерева, выполняющего как операцию перебалансировки, так и операции

          вставки и удаления неблокирующим образом (подсказка: перебалансировка может осуществляться другим

          процессом),
          3. полноценного анализатора синтаксиса языка Basic хотя бы с платформы ZX-Spectrum.

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

          написания и отладки лабораторной работы, исходник которой занимал порядка 100 килобайт - тогда-то

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

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

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

          использую только библиотеки win32, потому что в них всё имеется... ну и т.д.
          А чем код на ассемблере, формирующий вызов функции ShowWindow, лучше кода на С, формирующего вызов

          ShowWindow, с учётом того, что бОльшую часть времени в данном случае занимает именно работа этой

          функции?

          > она была размером около 1.5 Мб. я спросил - а что она делает? он говорит - окошко с кнопкой >

          выводит. я ему и говорю - такую же программу можно сделать размером около 15 Кб.. так в чём >

          суть-то? а то, что его программа загружалась в память долго!
          Рабочее время хорошего программиста стоит 50$ в час. Примерно столько же стоит модуль оперативной

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

          программа закрывается?
          Вот моя программа:
          #!/usr/bin/perl
          use Tk;
          MainWindow->new()->Button(-text => 'Close', -command => sub{exit} )->pack();
          Tk::MainLoop;
          


          > памяти никогда не бывает много
          С учётом того, как дёшево она сейчас стоит, её уже никто не считает ресурсом приоритетной важности.

          Производительность и надёжность существенно важнее. Особенно последняя - её аппаратным апгрейдом не

          увеличишь.
          Народ предпочтёт использовать код, написанный на Джаве или C#, жрущий мегабайт двадцать только на

          виртуальную машину, но защищённый от мемориликов и буффероверфловов.

          > и как я уже говорил - она нужна ТОЛЬКО для данных - звук,
          > изображение и др. потоки данных очень велики.
          Имею удовольствие писать программу, бинарный файл которой занимает порядка 40 мегабайт. Консольная.

          Звуков и изображений не содержит.

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

          > Мб? это только на код нужно 150 Мб!
          Ты другое представь. Что, если бы твои программы были бы написаны на ассемблере, у тебя бы работало

          только пара программ из вышеперечисленных. Только потому, что остальные бы не были написаны ;)

          > а ещё и ОС занимает (которая тоже написана на С++) около 64 Мб
          Кстати, а ты думаешь, в ОС эти 64 мегабайта занимает код ;) ? Сам же говорил про картинки и

          звуки...

          > и будет свопировать у тебя винт.. бедненький..
          Не будет. 150 мегабайт софта у меня комп переварит и не подавится. Вот сейчас у меня загрузка

          памяти на локальном виндовом компе - 300 мегабайт. Пик за сегодня - 700.

          > а на развёртывание программы на С++ знаешь сколько тратится памяти? :
          Да кому это интересно?... Кто будет считать копейкикилобайты памяти в 21-ом веке,

          в котором 256 мегабайт памяти стоят столько же, сколько час работы программиста?

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

          той же винды (с интерфейсом и всем) или типичного линукса (включая базовый набор утилит) НЕ

          НАПИСАТЬ ВООБЩЕ?
          Или, скажем, базу данных уровня даже не Оракла, а MySQL-а?
          • Обрати внимание на последний абзац, пожалуйста...
            http://e-ivanov.ru/blog/2004/07/02/hranitel-ekrana-tochki-na-ekrane/#comment1006

            ещё раз повторяю. возможностей Ассемблера и win32 мне хватает с лихвой для создания своих проектов.
            я занимаюсь непосредственно алгоритмом задачи, не отвлекаясь на окружение.
            могу реализовать любые задачи, используя Ассемблер; сейчас же занимаюсь распознаванием голоса и весьма успешно. жди новостей на мировой арене :)) скоро буду рекламировать. думаю, баксов 200 за один экземпляр пакета нормально..
            • Это весьма свежая мысль: программировать на асме непосредственно алгоритм не отвекаясь на окружение. Кроме шуток.
            • В качестве акции протеста советую отказаться от всех продуктов, написанных на ЯВУ, в т.ч. и от ЖЖ. Вызовет локальный резонанс.