В экстазе
|
|
1 | |
Как создают маленькие приложения? (размером до ~50-70Кб)17.08.2012, 15:07. Показов 4485. Ответов 38
Метки нет (Все метки)
Доброго времени суток! Этот вопрос (Subject) меня интересует уже достаточно давно. Мне постоянно попадаются разнообразные оконные приложения, например:
1. FreeMemory 2. Разнообразные модули инсталляторов 3. Модули самораспаковывающихся архивов 4. И множество других приложений Всех их объединяют 2 факта: 1. Они используют оконные интерфейсы (так же, не редко умеют "показывать картинки", распаковывать архивы, и выполнять множество прочих функций) 2. При этом занимают 30-70Кб 3. Не требуют "дополнительных" библиотек, то есть, грубо говоря, запускаются на Windows вплоть до версии Win9x без необходимости "доустановки" чего-то ещё. Конечно, наиболее рациональный вариант, это писать на "голом Win32 API" и так далее. Но, лично мне вериться с трудом в то, что авторы всех этих программ методично и муторно использовали "голый" Win32 API (и, если следовать этой логике. то некоторые, ещё и написали свои собственные "контролы"). Размер готовых приложений, тестировал буквально во всем (везде), что (где) мог найти (всяческие компиляторы + разнообразные примеры, разнообразные IDE и прочие "плюшки"). Собственно, под "проверку" попали: 1. Visual Studio (разные версии) 2. CodeBlocks + MinGW + разнообразные оконные фреймворки 3. QT Creator 4. Borland C++ Builder Ничего из выше перечисленного, почему-то не генерирует .EXE, со статической линковкой (даже после сжатия каким-нибудь UPX'ом), который бы занимал не более 70Кб и при этом обладал хотя бы частью функционала описанного выше. В лучшем случае, удаётся сжать программу килобайт эдак в 200. Собственно, вопрос. На чем (как) пишутся подобные программы? Какая используется при этом IDE, компилятор и пр. "плюшки"? То есть, как можно уместить "де-архиватор" + штуковину, отображающую картинку в качестве заставки (сплэш-скрин) и ещё кучу всякого функционала (работа с реестром, ини-файлы, и пр.) в 50Кб? Ассемблер+WinAPI наше всё?
0
|
17.08.2012, 15:07 | |
Ответы с готовыми решениями:
38
Как преобразовать в строке все маленькие буквы в большие а большие в маленькие? Большое количество библиотек для приложения создают неудобство для распространения программы Как создают компиляторы Как создают такие анимации |
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
|
|
17.08.2012, 15:14 | 2 |
на winapi
Ассемблер-то тут при чем? Добавлено через 25 секунд Это не так муторно, как кажется. Видимо, ты плохо знаком с винапи.
0
|
1 / 1 / 0
Регистрация: 24.10.2009
Сообщений: 29
|
||||||
17.08.2012, 15:26 | 4 | |||||
Purebasic даёт хороший результат, по крайней мере 2500 не комментируемых строк кода у меня на выходе получалось 300 кб...
Скомпилированный код:
LН!This program cannot be run in DOS mode. ™memset MSVCRT.dll чGetModuleHandleA ¤HeapCreate ҐHeapDestroy ExitProcess KERNEL32.dll что говорит о стандартном наборе совместимости файла которое присутствует в любом ехе-шнике... Я не мало написал разных программ и код достигал от 10000 до 30000 строк, но ещё ни разу скомпилированный код не достигал 1 мб... Ещё всё зависит от написания кода, если внутри вручную забивать массивы, то естественно будет раздуваться. Ещё хотелось отметить что скомпилированный код не плохо сжимается архиваторами.
0
|
47 / 47 / 10
Регистрация: 17.08.2012
Сообщений: 225
|
||||||
17.08.2012, 15:26 | 5 | |||||
например(mingw+32 битная винда):
test.c:
Код
gcc -Dmain=__main -nostdlib -Wl,-s,-subsystem,windows -Os test.c -luser32 -o test.exe
0
|
В экстазе
|
|
17.08.2012, 15:32 [ТС] | 6 |
Я действительно плохо с ним знаком. К тому же, за 10 лет не использования оного - забыл его нафиг
Как причём? Я помню, когда учился на С++ программировать, нас ещё и ассемблеру попутно учили. Помню, показывали пример, самого маленького оконного приложения, размером около 3Кб (2.38Кб кажется, "голое" Win9x окно, истинный тру-код ) Не "руками" же все их функции вызывают? Наверняка есть какое-то универсальное средство, которым все пользуются? Вот например, NullSoft Install System (от авторов WinAMP), если мне не изменяет память, делает готовые инсталляшники с размером модуля около 50Кб. Неужели там весь код написан "в блокноте" на чистом WinAPI? Добавлено через 2 минуты МаксимТ, а можно скомпилированный пример такой программы получить? Если можно с окошком и 1-ой кнопочкой, по нажатию которой вылезет "Хеллоу Ворлд!", а то под рукой MinGW нет и скачать (USB-модем) - не лучшая перспектива.
0
|
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
|
|
17.08.2012, 15:35 | 7 |
Тогда почему ты всех пытаешься убедить в существовании средства, о котором сам не знаешь?
Блин, 3 килобайта оно не из-за ассемблера. А из-за того, что весь код в виндовых длл-ках. Вам просто не показали, что borland c++ 3.1 BW (точно версию не помню, было давно, был пьяный в общаге) скомпиляет виндовое приложение с окном в те же 3 килобайта. Вот именно прям 3 кила, не от твоего сообщения такой размер взял, сам компилял. Ассемблер тут ну вот вооооообще не при чем. Я на ассемблере могу прилинковаться к VCL и приложение с пустым окном будет 300 килов. Асм опять виноват? )) А функции из Qt не руками вызывают? )))) Да. Редактор называется.
0
|
47 / 47 / 10
Регистрация: 17.08.2012
Сообщений: 225
|
|
17.08.2012, 15:37 | 8 |
моя программа просто выводит сообщение, чтобы добавить кнопочку нужно код чуть усложнить.
скомпилированная программа во вложении(код писал выше)
0
|
В экстазе
|
|
17.08.2012, 15:46 [ТС] | 9 |
к сожалению, мне сложно оценить насколько "чуть", по этому просить Вас повторно об этом не буду. Но, возможно у Вас где-нибудь завалялся пример, или какой-нибудь док/мануал или ссылка на примеры кода подобной программы?
Добавлено через 37 секунд Я только сейчас понял, насколько я ошибался в этой жизни, я всегда думал, что эта штука называется IDE...
0
|
47 / 47 / 10
Регистрация: 17.08.2012
Сообщений: 225
|
|
17.08.2012, 16:02 | 13 |
http://msdn.microsoft.com/en-u... 84843.aspx
(в самом конце есть подобный пример, хотя и не изучал его) в плане документации - msdn(либо перевод этого ресурса на русский язык) вобще когдато давно писал приложение с несколькими кнопочками, текстовыми полями, приложение имело некоторую функциональность (работа с сетью и другими приложениями) размер кода был довольно большой(чистый вин апи) программа писалась в ide netbeans , и собиралась в 1 клик (хотя способ сборки был очень специфичен, но среда позволяла всё настраивать под минимальный размер экзешника) кроме того экзешник зависел только от стандартных библиотек, которые есть во всех виндах начиная с windows 95 размер экзешника был 8 килобайт.
0
|
В экстазе
|
|
17.08.2012, 16:08 [ТС] | 14 |
Ну тут Вы не совсем правы, начинал (учиться) программировать я ещё во времена Win95 & DOS и такие вещи как консольные (не знаю, как правильно называется, "редактор" или "IDE") "штуковины" для написания кода C++, Basic, Pascal и их подобия под Win3.1(1) - мне весьма хорошо знакомы (по крайней мере, были). Но, к хорошему привыкаешь быстро, и лично мне очень нравиться NetBeans, практически для всего. И для C/C++ кода (хотя я уже давно почти не пишу на нем) и для PHP кода и для почти всех прочих задач написания кода! Очень экономит время и нервы, на мой взгляд. Рекомендую!
Добавлено через 6 минут я имел в виду, что в Notepad++ есть подсетка синтаксиса C++ Писать код без подсветки синтаксиса - на мой взгляд, это только для тру-мазахистов. В этом я убедился ещё лет наверно с десяток назад, когда наслушался, что "настоящие" сайты пишут в блокноте. Попробовал... с тех пор в жизни никогда ничего не писал в блокноте, из кода. Время, нервы, ошибки, всё "одноцветное"... зачем? Даже в Turbo C++ for DOS, насколько я помню подсветка синтаксиса присутствовала
0
|
Почетный модератор
7393 / 2639 / 281
Регистрация: 29.07.2006
Сообщений: 13,696
|
|
17.08.2012, 16:14 | 15 |
В любом программерском редакторе поддерживается подсветка всех популярных языков, о чем речь...
К чему все это? Спасибо, я vim-ом пользуюсь
0
|
18.08.2012, 13:04 | 17 |
Сообщение от wolfalone
С IDE vs редактор/консоль всё ровно то же самое. В IDE работать удобно.Только основная масса тех, кто работает в IDE, вообще не понимают, хотя бы как устроен процесс компиляции, не говоря уж о более сложных вещах. И твои вопросы (особенно в части упоминания ассемблера) довольно наглядно это подтверждают
0
|
В экстазе
|
|
18.08.2012, 23:00 [ТС] | 18 |
Evg, не совсем написанным выше, я согласен. Как утроен процесс компиляции я прекрасно знаю, хотя принципиально не пишу в консоли в виду собственных идеологических убеждений. Так же как и не езжу на работу на велосипеде по тому, что это намного полезнее для здоровья и окружающий среды, нежели удобная комфортная иномарка с круиз-контролем и кучей электроники которая думает за водителя не давая совершать ему опрометчивых решений.
Хотя, в том, что я не разбираюсь в деталях на уровне "дизассемблирования её кода с целью последующего патчинга" - Вы бесспорно правы. И не разбираюсь я в этом не потому, что мне лень или что-то подобное, а по тому, что время НЕ потраченное на ремонт машины - я посвящаю развитию в других областях. К тому же, в отличии от машин того времени (да и вообще российского автопрома, пожалуй) моя машине не ломается в самый не подходящий момент, заставляя тем самым тратить время на её ремонт. К тому же, именно спрос рождает предложение, а не наоборот. Эти самые "сервисы" появились, так как на них появился спрос, который обусловлен повышением уровня жизни населения. Так же: я НЕ: 1. Пеку себе хлеб (покупаю его в магазине) 2. Шью себе носки и прочие элементы одежды (для этого так же, есть магазин) 3. Не занимаюсь сборкой и ремонтом сотовых телефонов (магазин) 4. Пытаюсь заменить самому себе традиционных врачей и хирургов в том числе, самостоятельно вырезая себе аппендицит или вырвать зубы обусловив это тем, что раньше наши предки хорошо знали собственную анатомию и поступали именно так (для этого есть терапевты, стоматологи, хирурги и прочие специалисты своего дела) Думаю, список можно не продолжать, так как моя мысль и точка зрения уже должны прояснится. Так же, хочу заметить что я (видимо тут стоит добавить слово "тоже") выходец из старой школы программистов, где программировали ещё под "Агаты" и "Векторы" и кроме консоли ничего лучше не знали, да и сравнивать её собственно было не с чем. И программирование мыло настолько мутерным, и мало производительным, что передать это словами невозможно. "И создал Бог землю, и была она ни большой ни маленькой, так как сравнить её было не с чем" (с) Какой-то фильм. Хотя, на то были конечно и свои причины. Когда у компьютера оперативная память измеряется килобайтами, а вместо винчестера - 5,25" дискета... Сложно себе представить современные технологии в рамках подобной машины. На счёт замечания про "ассемблер", честно говоря не совсем понял. Случаи, когда программа написанная грамотным программистом на ассемблере сопоставима по размеру с программой написанной грамотным программистом C/C++, крайне редки. Так же, не могу не вспомнить слова одного из преподавателей бизнес школы, курса "Молодой руководитель". Эти слова были для меня буквально пророческими, несколько лет: "Идеальных трудовых ресурсов не бывает, вам придётся работать с тем, что есть". Это я к тому, что, к сожалению, не все мои коллеги, подчиненные и прочие люди с которыми мне приходилось работать были выходцами из старой школы, и могли писать программы в консоли порой вообще без редактора (что уж там говорить про IDE). Я даже больше скажу, многие из них вообще плохо представляли, что такое консоль. Но, это нисколько не мешало им делать качественные программные продукты, удовлетворяющие всем требованиям заказчика. Тут я согласен на все 100%. IDE vs Console это то же самое, что сравнивать российский автопром, который выпускает машины для: мало обеспеченных слоёв населения, а так же водителей-экстрималов, любителей "ремонтировать машины", вместо того, что бы ездить на них и прочих энтузиастов. Как ЭТО вообще можно сравнивать с машиной сделанной "людьми для людей", для того что бы "ездить" (а не заниматься ремонтом) - я не понимаю. Я вообще, с ужасом вспоминаю, российскую машину тех времён когда 99.9% водителей было "шофёрами" и знали свою машину буквально "до болтика". Это незабываемое чувство экстрима, когда на скорости 90км/ч машина постепенно начинает терять управление. Особенно, при вождении подобных автомобилей, меня вдохновлял тот факт, что при аварии со "столбом", на скорости 60км/ч, от водителя, в большинстве случаев остаются только голова и ноги. Это во истину уроки именно "старой школы", которые можно обозначит никак иначе, кроме как: "стань асом или умри". Но, мир не может состоять только лишь из гениев и мёртвых... как бы нам этого не хотелось. Он будет слишком скучный. Мир давно стал цветным и уже не похож на старый бабушкин телевизор. Так же, хочу не согласиться с тем, что "большинство не знает...". Есть то большинство, которое не хочет знать. И IDE к этому, порой имеет достаточно косвенное отношение. Лично я не вижу ничего зазорного в том, что большинство параметров компилятора можно единожды указать в "свойствах проекта", единожды и сохранить их, там, не вбивая их каждый раз в консоли, тем самым сэкономить время и нервы, благодаря, тому факту, что все последующие сборки можно пустить с этими настройками, путём сохранения этих параметров компиляции вместе с проектом в системе контроля версий и автоматическим обновлением этих параметров у коллег. К тому же, я не разделяю Вашего мнения о том, что "99.9% программистов сейчас уже не те "что раньше". Так как же и НЕ считаю, что 99.9% девушек зашедших в бордель и попросивших стакан воды - шлюхи, только по тому, что они зашли в бордель. Хотя, в чем-то Вы правы. При СССР и колбаса была вкуснее и люди добрее и молоко жирнее было... и есть было нечего. И людей расстреливали массово, ликвидируя "среднюю прослойку населения" как таковую. Оставались только крайности: крестьяне и "НЕ крестьяне" (бедные и богатые), ничего "посередине" в принципе, не было. Я хотел ещё много чего добавить к выше сказанному, но решил отвлечься и пойти выпить "палёного" молока (так как не держу свою корову, не смотря на то, что умышленно переехал в загородный дом [в строительстве которого принимал активное участие] и пить, "правильное" парное молоко, у меня к сожалению нет возможности), которое произвёл кто-то из тех самых 99.9% которые мало что в "этом" понимают. К тому же, мне кажется, нам всё-таки стоит сменить либо ракурс разговора, либо саму тему вообще (то есть, продолжить обсуждать наши личные доводы) в другой теме, либо всё-таки вернуться к вопросу, который звучит примерно так: "Использование "голых" WinAPI - это единственный способ написать приложение, которое после сжатия можно уместить в 40-70Кб, при условии того, что оно использует windows-окна и обладает, например функцией распаковки архивов?". Добавлено через 10 минут P.S. Постоянно задаюсь себе вопросом: почему нет консольной версии программы "1с бухгалтерия"? Почему нет "Need for Speed" и прочих популярных игр с управлением из командной строки? И зачем вообще придумали все эти "удобства", типа "графического интерфейса", "подсветки синтаксиса", "авто завершения кода", динамического анализа кода прямо во время разработки, IDE и прочие "ненужности". Ведь гораздо проще всё было свести к единому стандарту: экран - чёрный, шрифт - белый (серый). Представляете, какая была экономия машинных ресурсов, трафика и времени на изучения всего этого "изобилия" кошерных технологий? Бухгалтер, сис. админ, программист и про-геймер мог бы быть одним человеком! ***Если есть желающие рьяно подискутировать на эту тему - я прошу Вас создать отдельную ветку (тему) в форуме и дать ссылку.
0
|
18.08.2012, 23:59 | 19 |
wolfalone, ты почему-то воспринимаешь сказнное мной как претензию. А это не претензия, а объяснение на пальцах того, что IDE'шники в основной своей массе плохо разбираются в устройстве. То, что им не нужно, я и не пытаюсь оспаривать. Не нужно - ну и не надо. Но вот если вдруг стало нужно, то значит настала пора научиться работать без IDE. По другому понять будет сложно. Либо работать под линуксом или с бесплатными библиотеками под виндами, потому что в этом случае е$ля будет обеспечена и придётся постоянно ковыряться в гугле, что обязательно повлечёт за собой новые и полезные знания
В контексте "работать на winapi" программа, написанная на ассемблере или любом другом языке программирования будет иметь примерно одинаковый размер. И пусть они будут отличаться в 2 или в 3 раза. Но это не на 2 и не на 3 порядка, как это получается при попытке работать через любую мало-мальски приличную надстройку над winapi в виде библиотеки классов Да я не о настройках компилятора говорил, а об общем понимании процесса компиляции, устройства компилятора, устройства библиотек, о разнице между программированием на ассемблере и программирования на языке и т.п. Твои непонятки в постановке вопроса данной темы растут именно от непонимания всего этого процесса. Если тебя реально интересует заданный тобой вопрос, то тебе придётся научиться. Если вопрос задан с целью просто поболтать и получить дежурный ответ - в этом тоже нет ничего плохого. Поверхностного понимания во многих случаях более, чем достаточно Подобные попытки острить в очередной раз показывают, что тебе попросту не хватает опыта, чтобы понимать, зачем вообще люди работают в консоли, ибо в IDE кажется, что всё намного проще
1
|
В экстазе
|
|
19.08.2012, 01:29 [ТС] | 20 |
Всё сугубо относительно. В IDE намного проще программировать, особенно когда работаешь с другими людьми, не зависимо от того нравятся они тебе (в смысле, мне) или нет. Например, мне буквально ежедневно приходиться настраивать разнообразные Linux-сервера (в меру своих навыков), для веб-разработок, установки/настройки очередного репозитория кода и прочих внутренних нужд. Хотя, это должен делать системный администратор, на мой взгляд. Но, мой взгляд в данном контексте не учитывается, так как с некоторых пор я прекратил предпринимательскую деятельно и перестал быть "сам себе хозяин", уйдя работать в крупную фирму. И... скажу Вам, "да!", консоль это круто, без сомнений. Всё совершенно под рукой, особенно радуют редакторы заточенные под правку всячески конфигов, коих постоянно приходиться править массы.
В контексте же программирования, мне (*лично!) гораздо удобнее (проще), подстроиться под других, нежели в очередной раз пытаться устроить революцию и научить всех "делать как надо". "Под других", это значит, "писать в IDE", в моём случае. Спустя несколько лет, это перерастает в привычку или даже более того. К тому же, само понятие "консоль", в IDE никто не отменял. Не знаю, как сейчас (думаю, ничего не изменилось), но раньше, например в NetBeans при разработке на PHP Symfony (web) была такая архиудобная штука, как командная строка и т.н. "консоль управления", прямо в самой IDE. Нечто аналогичное было и для большинства других языков/платформ/разработок в рамках NetBeans. Лично для себя, не вижу ни одной объективной причины, писать именно код и именно в консоли, в данный момент времени (то бишь, сейчас). Это просто праздник какой-то! Я уж было подумал, что имею честь общаться с очередным ярым фанатом "linux наше фсё", "фортачки ф топку", "DOS спасёт мир", и "в DOS ничё ни зависало". Собственно, спасибо. В чём-то, Вы правы. Я уже не помню всех досконально тонкостей процесса компиляции, из за давности лет и изменения профиля программирования в целом, а так же, других жизненных изменений. Дипломную (или иную) работу, типа "написать свой компилятор С++" мне тоже делать не приходилось, а делать её, "что бы делать" я не находил целесообразным. Устройство библиотек (в т.ч. стандартных для C/++) мы изучали, но сейчас я тоже вряд ли смогу похвастаться их знаниями. Хотя, с другой стороны, я не пытаюсь выставить себя профессиональным C++ программистом. Минимум 5 лет, отсутствия всякой практики - дают о себе знать. С этим я тоже не могу поспорить. Я даже больше скажу, мне прекрасно известна причина, почему программы наипсанные на ассемблере занимают меньше, нежели программы написанные на C++. Так же, мне хорошо известно как всеми нами любимое ООП порой "раздувает" код (я имею в виду, машинный) до значительных размеров, сокращает быстродействие программы и так далее. Если вернуться к вопросу, об ассемблере, то, давайте я попробую уточнить вопрос. У нас есть программа, написанная на C++ Builder, которая в сжатом виде занимает ~200Кб. У программы есть окно и класс (или функция) для распаковки ZIP-архивов. Если программу написать на ассемблере, с учётом, что то, получиться как раз около 70Кб. Это я конечно утрирую. Так как, в реале 70Кб там совсем не получиться, по той простой причине, что C++ Builder использует VCL, и как раз именно VCL-library из-за множественного наследования раздувает код до подобных размеров. Сам компилятор тут не причём, проверено. Если говорить о Visual Studio, QT(Creator) и прочих "плюшек" - при статической линковке, ситуация примерно аналогичная. Собственно, отсуда и подобный вопрос: как авторам программ (для примера возьмём модули инсталляторов или самораспаковывающихся архивов), удаётся достичь столь мирезных размеров приложения? Они используют чистый WinAPI? *для ещё большей наглядности, я прикладываю файл-пример, в виде самораспаковывающегося архива. Сам модуль-распаковщик занимает ~40Кб, вместе с функционалом распаковки. При этом, модуль сам по себе не сжат. Сжатый модуль, занимал бы ~20Кб. Для достижения подобных результатов можно использовать WinAPI only? Никаких готовых библиотек, а ещё лучше готовых комплектов (IDE+Lib's, аля QTCreator, Visual Studio, etc) нет?
0
|
19.08.2012, 01:29 | |
19.08.2012, 01:29 | |
Помогаю со студенческими работами здесь
20
Как создают языки программирования? Как сейчас создают сайты? Как создают языки программирования Как создают Flash-игры? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |