KLIMaka
Пользователь
Posts: 72
|
|
Абстрактные языки программирования или ассемблер?
« on: 15 June 2009, 21:03:26 » |
|
Из темы Компиляторы.C это не С++. Посему в данном контексте этот компилятор не интересен
|
|
« Last Edit: 25 June 2009, 09:11:52 by Wasteland Ghost »
|
|
|
|
|
Ray
Глобальный модератор
Posts: 220
|
|
Абстрактные языки программирования или ассемблер?
« Reply #1 on: 15 June 2009, 21:12:00 » |
|
Да и вообще, не в размере исполнимого файла счастье, но в скорости его работы
|
|
|
|
binyan
Пользователь
Posts: 41
|
|
Абстрактные языки программирования или ассемблер?
« Reply #2 on: 16 June 2009, 01:23:02 » |
|
Да и вообще, не в размере исполнимого файла счастье, но в скорости его работы Мда... А вот лет пять назад так бы никто не сказал... Ах, время время. Стареем :-)
|
|
|
|
KLIMaka
Пользователь
Posts: 72
|
|
Абстрактные языки программирования или ассемблер?
« Reply #3 on: 16 June 2009, 01:36:37 » |
|
Угу, а лет 20 назад за утверждение "максимальное число, представляемое байтом = 255" вас бы подняли на смех А если серъезно, то и сейчас вопрос об размере исполняемого файла актуален. Программирование - это далеко не эксклюзив, присутствующий только на ПК, есть еще всяческие встраиваемые системы, моб. телефоны, и прочая более или менее разумная автоматика, в которой ОЗУ в 4кб вполне естественная вещь.
|
|
|
|
Ray
Глобальный модератор
Posts: 220
|
|
Абстрактные языки программирования или ассемблер?
« Reply #4 on: 16 June 2009, 07:21:08 » |
|
Да точно, но посмотрите на теперишние встраиваемые (как подвид "карманные") системы. Помоему вопрос ОЗУ и места сейчас не столь актуален, как всё возрастающие потребности такой техники. Перечислять не буду, тут и так всё понятно, посмотреть хоть на теперешние мобильные телефоны. Автоматика с 4кб ОЗУ и требует совсем другого подхода, да и код там будет написан врядли на С. Я немного догадываюсь о чём говорю, у меня друг тесно связан с низкоуровневым программированием, наслышан от него
|
|
|
|
KLIMaka
Пользователь
Posts: 72
|
|
Абстрактные языки программирования или ассемблер?
« Reply #5 on: 16 June 2009, 11:35:19 » |
|
Ну почему же сразу другого подхода? Все точно так же, и С там используется уже гораздо чаще чем ассемблер. Это я могу сказать с уверенностью, ибо к нам на кафедру программного обеспечения очень часто приносят всякого рода микроконтроллеры, которые у нас программируются в подавляющем большинстве случаев на С.
Чета мы в оффтоп скатились...
|
|
|
|
Pavel
Глобальный модератор
Posts: 100
|
|
Абстрактные языки программирования или ассемблер?
« Reply #6 on: 18 June 2009, 23:55:09 » |
|
К слову об оффтопе...
Когда я учился, давно это было, на кафедре использовался Программируемый Пропорционально Интегрально Диффиринциальный Регулятор или просто ПР8к с целыми 8 кб памяти, он умел почти все то, что позже мог сделать микроконтроллерный комплекс Сименса, не помню маркировку, только Сименс работал на паскале и имел возможность отображать все на компе в САПРе. Помнится, что компилированный код для Сименса на дискету не влазил..., а ПР8к не знал, что вообще компы существуют. Хотя задачи они выполняли фактически одинаковые и погрешности у них были близкие, писать для Сименса было одно удовольствие, а для отечественного чуда техники - мучение.
Собственно сравнение: нужен ли результат работы многочасовых мучений нескольких гениев вместивших свои перлы в 8кб, если тоже самое делает 2х метровый файл с кучей не нужных массивов и не используемых функций, но написанный за 15 минут троечником для задачи лабораторной работы?
|
В жизни нельзя быть уверенным на 100%, ведь ни когда не знаешь когда...
|
|
|
KLIMaka
Пользователь
Posts: 72
|
|
Абстрактные языки программирования или ассемблер?
« Reply #7 on: 19 June 2009, 01:41:29 » |
|
нужен ли результат работы многочасовых мучений нескольких гениев вместивших свои перлы в 8кб, если тоже самое делает 2х метровый файл с кучей не нужных массивов и не используемых функций, но написанный за 15 минут троечником для задачи лабораторной работы?
Да, как не странно, нужен Если сломается этот древний аппарат, его заменят сименсом с троечником. Но если сименса не окажется? Или сименс сломается, а земенить возможно будет только этой древностью? Что тогда прикажете делать? И что самое интересное - сименс не стал проще ПР8к, а какраз наоборот! Просто степень абстракции возросла! А что такое абстракция? Как Эндрю Кениг говорил "Абстракция - это выборочное невежество". Т.е. аппаратура не стает проще, а стают проще представления о ней. Это Джоэл Сполски назвал "The Law of Leaky Abstractions". Он как раз в этой статье рассказывает об иллюзии упрощения всего и вся. Очень интересная статья, советую http://russian.joelonsoftware.com/Articles/LeakyAbstractions.html
|
|
|
|
Jordan
Пользователь
Posts: 416
|
|
Абстрактные языки программирования или ассемблер?
« Reply #8 on: 23 June 2009, 23:24:41 » |
|
Да, как не странно, нужен Улыбка Если сломается этот древний аппарат, его заменят сименсом с троечником. Но если сименса не окажется? Или сименс сломается, а земенить возможно будет только этой древностью? Что тогда прикажете делать?
Новое заменят на старое? Если сломается новое, то починят новое или купят такой же аппарат или лучше. И что самое интересное - сименс не стал проще ПР8к, а какраз наоборот! Просто степень абстракции возросла! А что такое абстракция? Как Эндрю Кениг говорил "Абстракция - это выборочное невежество". Т.е. аппаратура не стает проще, а стают проще представления о ней. Это Джоэл Сполски назвал "The Law of Leaky Abstractions". Он как раз в этой статье рассказывает об иллюзии упрощения всего и вся. Очень интересная статья, советую http://russian.joelonsoftware.com/Articles/LeakyAbstractions.htmlПрочитал статью. Если писать без абстракций тогда ассемблер или (высокоуровневый язык с асм вставками?). Та же стандартная библиотека С\С++ тоже абстракция. Я могу не знать как работает printf, могу знать что она делает и какие параметры принимает. А внутренности этой функции я могу не знать. Абстракция для того и придумана, что бы облегчить и ускорить скорость написания программы. Я немного изучаю ассемблер программы реально работаю быстро и весят килобайты. Но переносимость, читаемость кода, сложность написания. Компы стали мощнее, языки более понятными и в тоже время более громоздкими и не такими быстрыми(зависит от компилятора и мастерства программиста).
|
Воспрянет Россия, из праха отцов Расправятся крылья, миллионов сердец Поднимут все головы и грудью вздохнут И громка скажут, что пришли Мы пришли, со столетней войны
|
|
|
KLIMaka
Пользователь
Posts: 72
|
|
Абстрактные языки программирования или ассемблер?
« Reply #9 on: 24 June 2009, 01:37:05 » |
|
Новое заменят на старое? Если сломается новое, то починят новое или купят такой же аппарат или лучше.
Да, может и такое быть Мир не идеален Никто же не говорит, что абстракции - это плохо. Просто абстракции - это не так хорошо, как большинство о них думает Абстракции всего-лишь помогают поверить в простоту объекта, хотя на самом деле его таковым не делают. Описание ассемблера (именно как языка программирования, без определенной системы команд) займет максимум 100 страниц. А С++ - 1000!!! Хотя многие считают, что на С++ намного проще писать. Даже прочитав эти 1000 страниц человек вряд-ли сразу распознает ошибку в ниженаписанном коде int main() { ifstream f("a.txt"); vector<cahr> vec(istream_iterator<char>(f), istream_iterator<char>()); cout << vec[0]; } Так что ни аппаратура, ни языки, проще не стали )) Они стали гораздо сложнее! И чтобы грамотно и эффективно всем этим пользоватся приходится неммало знать! И вот когда точно знаешь, с чем имеешь дело, начинают помогать абстракции. А без знаний абстракции лишь дают иллюзию простоты. Поэтому абстракции не освобождают от знания тех или инных принципов, они просто выводят из поля зрения все неважные детали.
|
|
|
|
Anchorite
Пользователь
Posts: 23
|
|
Абстрактные языки программирования или ассемблер?
« Reply #10 on: 24 June 2009, 10:16:18 » |
|
Новое заменят на старое? Если сломается новое, то починят новое или купят такой же аппарат или лучше.
Да, может и такое быть Мир не идеален Никто же не говорит, что абстракции - это плохо. Просто абстракции - это не так хорошо, как большинство о них думает Абстракции всего-лишь помогают поверить в простоту объекта, хотя на самом деле его таковым не делают. Описание ассемблера (именно как языка программирования, без определенной системы команд) займет максимум 100 страниц. А С++ - 1000!!! Хотя многие считают, что на С++ намного проще писать. Даже прочитав эти 1000 страниц человек вряд-ли сразу распознает ошибку в ниженаписанном коде int main() { ifstream f("a.txt"); vector<cahr> vec(istream_iterator<char>(f), istream_iterator<char>()); cout << vec[0]; } Так что ни аппаратура, ни языки, проще не стали )) Они стали гораздо сложнее! И чтобы грамотно и эффективно всем этим пользоватся приходится неммало знать! И вот когда точно знаешь, с чем имеешь дело, начинают помогать абстракции. А без знаний абстракции лишь дают иллюзию простоты. Поэтому абстракции не освобождают от знания тех или инных принципов, они просто выводят из поля зрения все неважные детали. Никто и не говорит, что писать на С++ проще. Просто продуктивнее. Не помню где читал, но человек за определенное время способен ввести не более определенного количества строчек кода. Уверен, что ты понимаешь, что 20 строчек кода на С++ это далеко не 20 строчек кода на Ассемблере. И кроме того у Ассемблера есть один очень существенный недостаток. Он привязан к конкретной железяке А языки высокого уровня универсальны А по поводу приведенного кода - vec это функция, а не массив. И для этого достаточно запомнить всего одно правило, что если что-то может быть интерпретирвано как функция именно функцией оно и будет. Именно поэтому опытный программист на С++ всегда выделяет параметры шаблонов пробелами.
|
|
« Last Edit: 24 June 2009, 10:19:40 by Anchorite »
|
|
|
|
|
KLIMaka
Пользователь
Posts: 72
|
|
Абстрактные языки программирования или ассемблер?
« Reply #11 on: 24 June 2009, 12:01:11 » |
|
Да, на С++ писать программы быстрее, да он намного более читаем, да он намного более переносим. Я с этим всем согласен и не собираюсь этому перечить. Что до универсальности... Хотелось бы чтобы ЯВУ были универсальными, но они таовыми не являются, увы. Существуют задачи, которые средствами ЯВУ решить столь же эффективвно как и с помощью ассемблера, очень трудно. Ибо ЯВУ - это не панацея, это всего лишь хорошее лекарство, но всеже которое не в силах заменить абсолютно все другие медикаменты. Насчет примера. Собсно никакие пробелы не помогут из этого кода сделать правильный код, и вообще не вижу здесь никакой связи конкретно с шаблонами Я этот пример собсно привел потому, что на С++ писать вроде и продуктивней, но знать для этого нужно просто уйму вещей. Ведь знание того, что "если что-то может быть интерпретирвано как функция именно функцией оно и будет" еще асолютно ничего не дает! Это знание порождает новый вопрос - "А что же может быть интерпретированно как ф-я?" и т.д. И в продолжение. Можно ли привести подобный код на ассемблере?
|
|
|
|
Anchorite
Пользователь
Posts: 23
|
|
Абстрактные языки программирования или ассемблер?
« Reply #12 on: 24 June 2009, 13:00:22 » |
|
Что до универсальности... Хотелось бы чтобы ЯВУ были универсальными, но они таовыми не являются, увы. Существуют задачи, которые средствами ЯВУ решить столь же эффективвно как и с помощью ассемблера, очень трудно. Ибо ЯВУ - это не панацея, это всего лишь хорошее лекарство, но всеже которое не в силах заменить абсолютно все другие медикаменты. Насчет примера. Собсно никакие пробелы не помогут из этого кода сделать правильный код, и вообще не вижу здесь никакой связи конкретно с шаблонами А полностью универсальных инструментов нет и быть не может. Есть кувалда, а есть маленький сапожный молоточек. Задача определяет инструмент, а не наоборот. По поводу шаблонов - да, недоглядел. Посыпаю голову пеплом Но превратить твой код в ЛЕКСИЧЕСКИ верный всетаки можно vector<char> vec((istream_iterator<char>(f)), istream_iterator<char>());
(с) Скотт Мейерс - Эффективное использование STL. Совет 6. По поводу подобного примера на ассемблере не могу помочь, не силен
|
|
|
|
KLIMaka
Пользователь
Posts: 72
|
|
Абстрактные языки программирования или ассемблер?
« Reply #13 on: 24 June 2009, 15:43:18 » |
|
Да, насчет копирайтов - прямиком оттудава Просто первый вспомнившийся короткий пример нетривиальной ошибки. Ну вот еще один примерчик: class A { public: A( int a ) { cout <<"int constructor" << endl; } A( const A& t ) { cout << "copy constructor" << endl; } A foo() { return A(5); } }; int main() { A obj1(3); A obj2 = obj1.foo(); } что будет выдано на экран? И чтобы ответить на этот вопрос нужно знать еще кучу всего! И так до бесконечности Так что утверджение о том, что языки понятнее стали - это блажь, ИМХО А что до ассемблера, то я тоже не очень часто пересекаюсь, но каких либо зубодробительных конструкций я там не замечал. Вспомлилась одно выражение Страуструпа: "На С вы можете запросто выстрелить себе в ногу. На С++ это сделать сложнее, но если это случится, то ногу оторвет вам по самый пояс" (вольный перевод)
|
|
|
|
Anchorite
Пользователь
Posts: 23
|
|
Абстрактные языки программирования или ассемблер?
« Reply #14 on: 24 June 2009, 16:55:57 » |
|
... А что до ассемблера, то я тоже не очень часто пересекаюсь, но каких либо зубодробительных конструкций я там не замечал. ...
Как насчет ассемблера для компьютеров Эльбрус?
|
|
|
|
|