Форум TeamX
   Home   Members  
Pages: [1] 2 |   Go Down
 
Author Topic: Абстрактные языки программирования или ассемблер?  (Read 3544 times)
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

336150559
Абстрактные языки программирования или ассемблер?
« Reply #1 on: 15 June 2009, 21:12:00 »

Да и вообще, не в размере исполнимого файла счастье, но в скорости его работы Подмигивающий
binyan
Пользователь
Posts: 41


Абстрактные языки программирования или ассемблер?
« Reply #2 on: 16 June 2009, 01:23:02 »

Quote from: Ray on 15 June 2009, 21:12:00
Да и вообще, не в размере исполнимого файла счастье, но в скорости его работы Подмигивающий
Мда... А вот лет пять назад так бы никто не сказал... Ах, время время. Стареем :-)
KLIMaka
Пользователь
Posts: 72


Абстрактные языки программирования или ассемблер?
« Reply #3 on: 16 June 2009, 01:36:37 »

Угу, а лет 20 назад за утверждение "максимальное число, представляемое байтом = 255" вас бы подняли на смех Улыбка

А если серъезно, то и сейчас вопрос об размере исполняемого файла актуален. Программирование - это далеко не эксклюзив, присутствующий только на ПК, есть еще всяческие встраиваемые системы, моб. телефоны,  и прочая более или менее разумная автоматика, в которой ОЗУ в 4кб вполне естественная вещь.
Ray
Глобальный модератор
Posts: 220

336150559
Абстрактные языки программирования или ассемблер?
« 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 »

Quote from: Pavel on 18 June 2009, 23:55:09
нужен ли результат работы многочасовых мучений нескольких гениев вместивших свои перлы в 8кб, если тоже самое делает 2х метровый файл с кучей не нужных массивов и не используемых функций, но написанный за 15 минут троечником для задачи лабораторной работы?

Да, как не странно, нужен Улыбка Если сломается этот древний аппарат, его заменят сименсом с троечником. Но если сименса не окажется? Или сименс сломается, а земенить возможно будет только этой древностью? Что тогда прикажете делать?

И что самое интересное - сименс не стал проще ПР8к, а какраз наоборот! Просто степень абстракции возросла! А что такое абстракция? Как Эндрю Кениг говорил "Абстракция - это выборочное невежество". Т.е. аппаратура не стает проще, а стают проще представления о ней. Это Джоэл Сполски назвал "The Law of Leaky Abstractions". Он как раз в этой статье рассказывает об иллюзии упрощения всего и вся. Очень интересная статья, советую http://russian.joelonsoftware.com/Articles/LeakyAbstractions.html
Jordan
Пользователь
Posts: 416

476228895
Абстрактные языки программирования или ассемблер?
« Reply #8 on: 23 June 2009, 23:24:41 »

Quote
Да, как не странно, нужен Улыбка Если сломается этот древний аппарат, его заменят сименсом с троечником. Но если сименса не окажется? Или сименс сломается, а земенить возможно будет только этой древностью? Что тогда прикажете делать?

Новое заменят на старое? Если сломается новое, то починят новое или купят такой же аппарат или лучше.

Quote
И что самое интересное - сименс не стал проще ПР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 »

Quote from: Jordan on 23 June 2009, 23:24:41
Новое заменят на старое? Если сломается новое, то починят новое или купят такой же аппарат или лучше.

Да, может и такое быть Улыбка Мир не идеален

Никто же не говорит, что абстракции -  это плохо. Просто абстракции - это не так хорошо, как большинство о них думает Улыбка Абстракции всего-лишь помогают поверить в простоту объекта, хотя на самом деле его таковым не делают.

Описание ассемблера (именно как языка программирования, без определенной системы команд) займет максимум 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 »

Quote from: KLIMaka on 24 June 2009, 01:37:05
Quote from: Jordan on 23 June 2009, 23:24:41
Новое заменят на старое? Если сломается новое, то починят новое или купят такой же аппарат или лучше.

Да, может и такое быть Улыбка Мир не идеален

Никто же не говорит, что абстракции -  это плохо. Просто абстракции - это не так хорошо, как большинство о них думает Улыбка Абстракции всего-лишь помогают поверить в простоту объекта, хотя на самом деле его таковым не делают.

Описание ассемблера (именно как языка программирования, без определенной системы команд) займет максимум 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 »

Quote from: KLIMaka on 24 June 2009, 12:01:11
Что до универсальности... Хотелось бы чтобы ЯВУ были универсальными, но они таовыми не являются, увы. Существуют задачи, которые средствами ЯВУ решить столь же эффективвно как и с помощью ассемблера, очень трудно. Ибо ЯВУ - это не панацея, это всего лишь хорошее лекарство, но всеже которое не в силах заменить абсолютно все другие медикаменты.

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

А полностью универсальных инструментов нет и быть не может.
Есть кувалда, а есть маленький сапожный молоточек.
Задача определяет инструмент, а не наоборот.

По поводу шаблонов - да, недоглядел. Посыпаю голову пеплом Улыбка
Но превратить твой код в ЛЕКСИЧЕСКИ верный всетаки можно Улыбка

Code:
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 »

Quote from: KLIMaka on 24 June 2009, 15:43:18
...
А что до ассемблера, то я тоже не очень часто пересекаюсь, но каких либо зубодробительных конструкций я там не замечал.
...

Как насчет ассемблера для компьютеров Эльбрус?
Pages: [1] 2 |   Go Up