2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему На страницу Пред.  1, 2, 3, 4, 5 ... 10  След.
 
 
Сообщение29.12.2005, 22:15 
Заслуженный участник
Аватара пользователя


12/10/05
478
Казань
незванный гость писал(а):
Sanyok писал(а):
Вот то-то и оно - кажется странным, почему этот язык так мало распространен? И почему так распространен С?

Ваше утверждение почему Ада так мало распространена мне не очень понятно. По некоторым косвенным признакам у меня создалось впечатление, что она очень распространена в своей нише - минобороны США и его контракторы. Это все же нишевой язык, очень тяжеловесный, на данный момент первая версия стандарта устарела во многих отношениях (есть новый стандарт Ada-95, его не видел ).


Вот на мой взгляд, неплохая ссылка по Аде:

http://www.acm.org/sigada

Там как раз есть текст этого стандарта.
А мое утверждение я основываю исключительно на личном опыте. Я к минобороны США имею такое же отношение, как белый медведь к магеллановым облакам! :) Не видел никогда людей, кто на ней (Аде) что-то пишет. Говоря о том, что он не распространен, я имел в виду широкое распространение...

Просто, в одной старой книжке, где сравнивались языки программирования (вроде бы в "Языки программирования АДА, Си, Паскаль. Сравнение и оценка" под ред. А. Фьюера (Alan R. Feuer) и Н. Джехани (Narain Gehani) Москва, Р.и С., 1989 г) этому языку пророчилось весьма блестящее будущее, чуть ли не вытеснение Паскаля и Си (если честно - не помню точно, счас взял ее (книгу) в руки, хочу еще раз просмотреть, может у меня очередное дежа-вю :) )

И еще... Я все-таки думаю, что для контроллера, где объем памяти программы (ПЗУ) ограничен от силы несколькими сотнями КБ, а объем ОЗУ "на борту" - вооще раз, два и обчелся - язык С++ с его классами, new и т.п. как-то не очень подходит, просто C - тоже плох, поскольку вылавливать глюки в такой системе - не баран чихнул, особеннно ежели контроллер в плате сидит "мертво" (не в панельке), а перепрограммировать его, к примеру, не более ста раз можно... Вот тут бы как раз "безопасный" язык и пригодился бы... Хотя бы что-то наподобие Паскаля...

 Профиль  
                  
 
 
Сообщение30.12.2005, 00:50 


27/11/05
183
Северодонецк
Немного воспоминаний по поводу Ады. Если кто помнит еще советскую действительность,
то тогда, как и в Америке, проводились эксперименты по созданию ЭВМ многопроцессорных
или векторных. У нас на "Импульсе" как раз и разрабатывалась многопроцессорная
ПС2000 и векторная ПС3000. Что касается ПС2000, то ни о какой реализации Ады на ней
речь не шла, там даже хотя бы подобие Фортрана тяжело было встроить.

А вот для ПС3000 был организован даже международный проект с какой-то конторой
в Венгрии с целью реализации Ады. Получился, в общем, пшик, тем более в преддверии
развала Союза. Хотя злые языки утверждали, что венгры получили за этот проект
вознаграждение, равное ж/д составу с нефтью.

Аналогичные воспоминия о том, как программировали в далеком прошлом. При осваивании
ЕС-совских машин в студенческие годы у нас была суровая практика, когда отдаешь
колоду перфокарт, и для исправления программы у тебя всего несколько попыток
по набивке исправлений. Умельцы умудрялись изобретать свой собственный
мини-перфоратор или, в крайнем случае, пользовались бритвой для вырезания
отверстий. Тут уж над алгоритмом подумаешь сто раз, прежде чем что-то напишешь.
Думать заставляло и отсутствие интерактивных отладчиков - только распечатка
в контрольных точках позволяла понять поведение программы.

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

Но самое главное - до эпохи мониторов (это когда были машинки типа "Консул" для ввода
данных) обязательно было наличие распечатки исходного текста программы. Как это
ни покажется странным, но программа на бумажном носителе выглядит совсем иначе,
чем на экране монитора. Читая такую бумажную программу, можно заметить много
чего такого, что пролетает мимо взора через монитор. У меня такое подозрение,
что сейчас даже у Билли Гейтса не существует распечаток его Windows.

Да и зрение у программистов до эпохи мониторов было получше...

 Профиль  
                  
 
 
Сообщение30.12.2005, 03:17 
Заслуженный участник
Аватара пользователя


17/10/05
3709
:evil:
Sanyok писал(а):
Просто, в одной старой книжке, где сравнивались языки программирования (вроде бы в "Языки программирования АДА, Си, Паскаль. Сравнение и оценка" под ред. А. Фьюера (Alan R. Feuer) и Н. Джехани (Narain Gehani) Москва, Р.и С., 1989 г) этому языку пророчилось весьма блестящее будущее, чуть ли не вытеснение Паскаля и Си (если честно - не помню точно, счас взял ее (книгу) в руки, хочу еще раз просмотреть, может у меня очередное дежа-вю :) )

Цитату - цитатой побъем:
Цитата:
Из книги: ''Персональные ЭВМ в инженерной практике'', М. Радио и связь, 1989.

.. Одним из примеров громоздкой и, по мнению авторов, бесполезной надстройки является интегрированная система WINDOWS фирмы Microsoft. Эта система занимает почти 1 Мбайт дисковой памяти и рассчитана на преимущественное использование совместно с устройством типа "мышь"...

.. Таким образом, читатель уже понял, что среди надстроек над ДОС бывают довольно бесполезные системы, которые только выглядят красиво, а на самом деле отнимают время пользователя, память на дисках и оперативную память ЭВМ. Обманчивая красота таких систем, однако, сильно воздействует на неискушенных пользователей, которые не имели практики работы на машине. Инерция мышления бывает столь сильна, что авторам приходилось наблюдать, как люди, начавшие работать с подобной надстройкой, впоследствии с трудом заставляют себя изучать команды ДОС.

Хочется предостеречь от этой ошибки читателей...


Sanyok писал(а):
И еще... Я все-таки думаю, что для контроллера, где объем памяти программы (ПЗУ) ограничен от силы несколькими сотнями КБ, а объем ОЗУ "на борту" - вооще раз, два и обчелся - язык С++ с его классами, new и т.п. как-то не очень подходит, просто C - тоже плох, поскольку вылавливать глюки в такой системе - не баран чихнул, особеннно ежели контроллер в плате сидит "мертво" (не в панельке), а перепрограммировать его, к примеру, не более ста раз можно... Вот тут бы как раз "безопасный" язык и пригодился бы... Хотя бы что-то наподобие Паскаля...

Скажу по своему (сугубо индивидуальному, и потому больше отражающему ошибки наблюдения, чем объективную реальность) опыту: если есть контроллер, то первый вопрос - какой компилятор с ним идет, какой лучше - уже потом. :D

Если Вас интересует встроенные применения С++ - посмотрите, ведется интенсивная работа по вырезке удобного подмножества языка. "Верным путем идете, товарищи!" - реально, многие черты C++ просто не используются. Во встроенных системах malloc() часто работает по другому. Поэтому цена new()/delete() тоже иная. И многое другое в том же духе. Огромное достоинство С - достаточно модульная библиотека (не пользуюсь - не включаю). И крохотное ядро времени выполнения. Поэтому С используется весьма успешно в подобных системах. И постепенно вытесняется С++ (без Visual Studio). Например, одна из моих успешных разработок - интелектуальный коммуникатор (имевший графический интерфейс, коммуникировавший с сетью контроллеров, написанный целиком на С, и занимавший 32 KB ПЗУ и 32 KB ОЗУ - из последних 24 KB было занято под описание интерфейса, загружаемое с самого контроллера, то есть на программу оставалось 8 КВ). И ничего, работало с однократно прожигаемым ПЗУ. (Правда, как самый хитрый, я кусался до тех пор, пока на моем разработочном приборе не заменили ПЗУ на ОЗУ - то есть я вообще не жег ничего в процессе отладки).

 Профиль  
                  
 
 
Сообщение30.12.2005, 03:27 
Заблокирован


21/12/05

38
bekas писал(а):
И тут не помогут никакие методы a-la автоматического доказательства
правильности программ. Мы можем только надеяться, что наша программа будет
работать только в ОПРЕДЕЛЕННЫХ УСЛОВИЯХ.


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

 Профиль  
                  
 
 
Сообщение30.12.2005, 03:37 
Заблокирован


21/12/05

38
незванный гость писал(а):
.
Debiloid писал(а):
Не абстракция. Есть методы, однако.

Доказательство правильности программы, коли память ветренная мне не изменяет с другими, суть проблема алгоритмически неразрешимая (аки следствие немца Гёделя теоремы).


Фигня. Доказательство того факта, что для данного кода выполняются все перечисленные в спецификации требования (а это и есть "отсутствие ошибок") - задача конечная и вообще тривиальная. Гёдель тут рядом не валялся.

Цитата:
К сожалению, во многих современных курсах программирования большое внимание уделяется объектно-ориентированному анализу и объектно-ориентированному проектированию. Многие как-бы не замечают, что объектно-ориентированного программирования нет, есть лишь структурное.


Не надо. OOD/OOP эквипенисуально структурному программированию. Это абстракция иного порядка. Его можно и на чистой лябмде рисовать, никто не мешает, и на ни разу не структурном Форте.

Цитата:
Процесс сей не может быть полностью автоматизирован, как и доказательство математической теоремы, и я верю Debiloid - он может быть автоматизирован частично.


Доказательство любой теоремы может быть найдено автоматически. С экспоненциальной сложностью, естественно... Просто brute force. Только дорого это, однако.

Цитата:
Главным же его недостатком является стоимость (zum Beispiel, я потратил вечер - около 6 часов - для доказательства правильности 15 строк программы. Мне было очень нужно :D ). Он очень утомителен и очень дорог.


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

Цитата:
Но то, что дорого - определенно. А качество суть категория экономическая.


Если всякие там глубоко ущербные C++ или Java использовать - то да, очень, очень дорого.

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

 Профиль  
                  
 
 
Сообщение30.12.2005, 03:41 
Заблокирован


21/12/05

38
незванный гость писал(а):
VLarin писал(а):
Предопределение - это опять-таки дело привычки. Временные переменные к основному алгоритму имеют малое отношение, а только вспомогательное значение.

Я бы все-таки добавил - и языка. С++ стимулирует определение переменных по мере надобности. Некоторые решают эту дилему просто - практически нет объявлений - например, в Python.


Есть более разумное решение - типизация по Хиндли-Милнеру. Определять переменные не надо - но они при этом строго типизированы, их типы выводятся автоматически. Реализовано это в языках ML, Haskell и их многочисленных родственниках.

 Профиль  
                  
 
 
Сообщение30.12.2005, 03:47 
Заблокирован


21/12/05

38
bekas писал(а):
Как это
ни покажется странным, но программа на бумажном носителе выглядит совсем иначе,
чем на экране монитора. Читая такую бумажную программу, можно заметить много
чего такого, что пролетает мимо взора через монитор. У меня такое подозрение,
что сейчас даже у Билли Гейтса не существует распечаток его Windows.


По этому поводу следует упомянуть ещё одну технологию, призванную увеличить качество кода - литературное программирование (literate programming), придуманное Д. Кнутом. Сам язык Web был заточен под Паскаль, но в принципе идея легко переносится на практически любой язык (см. NoWeb, или многочисленные клоны - cweb, fweb, literate haskell, и т.п.).

 Профиль  
                  
 
 
Сообщение30.12.2005, 05:05 
Заслуженный участник
Аватара пользователя


17/10/05
3709
:evil:

To Debiloid: не буду я Вам отвечать. Слишком уж Вы грубы и просто ничего не слышите, кроме себя. Мне не интересно вести дискурсию в таком тоне.

Debiloid писал(а):
литературное программирование (literate programming)

literate \ne \rm literary. Так что программирование не литературное.

 Профиль  
                  
 
 
Сообщение30.12.2005, 08:15 
Заслуженный участник
Аватара пользователя


17/10/05
3709
:evil:
bekas писал(а):
Как это ни покажется странным, но программа на бумажном носителе выглядит совсем иначе, чем на экране монитора. Читая такую бумажную программу, можно заметить много чего такого, что пролетает мимо взора через монитор.

Я думаю, это связанно в первую очередь с размерами видимого участка текста. На бумаге - два листа по 72 строки, на терминале - дай бог 50. Соответственно, и информации больше для сравнения. А если еще распечатку интерфейса отдельно отложить (дабы перед глазами постоянно держать), то это сколько ж мониторов понадобиться.

Я далек от ностальгии по распечаткам, однако. При всех нынешних недостатках, мы стали работать гораздо быстрее. Распечатка жила неделю. Теперь она бы прожила несколько часов. А поиск в 300-400 тысяч строк по распечатке просто не представить себе. Extreme Programming основано на непрерывном перетряхивании кода.

 Профиль  
                  
 
 
Сообщение30.12.2005, 09:03 
Заслуженный участник
Аватара пользователя


12/10/05
478
Казань
незванный гость писал(а):
Скажу по своему (сугубо индивидуальному, и потому больше отражающему ошибки наблюдения, чем объективную реальность) опыту: если есть контроллер, то первый вопрос - какой компилятор с ним идет, какой лучше - уже потом.


Ну, существуют сторонние разработчики компиляторов. Например, Keil Software и незабвенный IAR Systems. Опять же, компилятор GNU C/C++ вроде как поддерживает разные платформы.. Кстати, если кто-нить пользовался этими его особенностиями - будте любезны, поделитесь - очень интересно узнать результаты (он что, действительно код для TMS320 генерит? :) )...

И все-таки... я, когда писал программу для контроллера M30624FG (ныне их выпускает Renesas) на сях (у меня был фирменный компилятор C), однажды попробовал использовать malloc. Я был поражен объемом получившегося кода... Я не знаю, почему так происходит, но похоже, менеджер памяти - довольно сложная программа. И на мой взгляд, использовать динамическое распределение памяти (new/delete, malloc/free), ежели самой памяти мало... непозволительная роскошь. Можно запросто не уследить, хватает ее или нет... В-общем, я сторонник эмпирического подхода! :) Надо пробовать! Я бы и C++ на этом контроллере попробовал бы, и Аду, будь у меня компилер.. :) С++ похоже, уже для него есть, а вот с Адой - не знаю, как дела обстоят...

 Профиль  
                  
 
 
Сообщение30.12.2005, 22:25 
Заслуженный участник
Аватара пользователя


12/10/05
478
Казань
незванный гость писал(а):
Огромное достоинство С - достаточно модульная библиотека (не пользуюсь - не включаю). И крохотное ядро времени выполнения. Поэтому С используется весьма успешно в подобных системах.

Под "ядром времени выполнения" Вы имеете в виду startup program или что-то еще?

 Профиль  
                  
 
 
Сообщение31.12.2005, 00:36 
Заслуженный участник
Аватара пользователя


17/10/05
3709
Sanyok писал(а):
Ну, существуют сторонние разработчики компиляторов. Например, Keil Software и незабвенный IAR Systems. Опять же, компилятор GNU C/C++ вроде как поддерживает разные платформы.. Кстати, если кто-нить пользовался этими его особенностиями - будте любезны, поделитесь - очень интересно узнать результаты (он что, действительно код для TMS320 генерит? :) )...

По моему опыту, выход GCC для IMS805 был неудовлетворителен. И мне пришлось кромсать имевшийся компилятор. Ключевое слово здесь однако - был. Скорее всего, стал лучше.

Сие заявление не есть попытка лягнуть GCC - просто кодогенератор на каждой платформе свой, и его (его качество) надо тестировать отдельно. А разработчики встроенного софта нервно относятся к качеству оптимизации. И если нет кодогенератора для Вашей платформы - кусаете локти (соседу).

Sanyok писал(а):
И все-таки... я, когда писал программу для контроллера M30624FGP (ныне их выпускает Renesas) на сях (у меня был фирменный компилятор C), однажды попробовал использовать malloc. Я был поражен объемом получившегося кода... Я не знаю, почему так происходит, но похоже, менеджер памяти - довольно сложная программа. И на мой взгляд, использовать динамическое распределение памяти (new/delete, malloc/free), ежели самой памяти мало... непозволительная роскошь. Можно запросто не уследить, хватает ее или нет... В-общем, я сторонник эмпирического подхода! :)

Встроенные системы обычно емеют повторяющийся цикл выполнения. Это значит, что количество памяти можно теоретически оценить сверху - a la Debiloid. Но хотите ли Вы это делать - Ваш вопрос.

Неиспользование динамической памяти - проектное решение. Как и всякое проектное решение, оно зависит от условий, от размеров системы в частности. К примеру, мне нужны буфера для пакетов Ethernet. Я знаю, что имею право терять пакеты, если их накопилось больше десяти. Я могу отвести массив из десяти буферов статически, или я могу захватывать их динамически. В первом случае я должен выписать ручками систему управления буферами. Но это - рудиментарная система управления памятью. Хорошо, пойдем чтуь дальше. А если у меня таких пулов буферов - несколько? И при определенной сложности системы я уже устаю от всех этих микро-менеджеров памяти. И говорю - хрен с ним, ставим общий.

Другим (важным) недостатком является перерасход памяти. Хочешь - не хочешь, а при статическом распределении памяти на каждую нужду выделяется по ее, нужде, максимуму. Т.е., если поддерживается 20 типов шрубамбасов, каждый из них захватывает память по максимальному числу своих каналов. А то, что физически общее число каналов ограничено - каждому шрубомбасу до фени. Итого, статический раход памяти растет.

Здесь нужно оговориться - все это относиться, в основном, к захвату памяти в момент старта / конфигурирования контроллера. (Часто в этом случае работает жадный аллокатор, который никогда не возвращает память. Его стоимомсть - константная и близка к нулю.) А не к стратегии размещения объектов. Может, я плохо пишу, но в маленьком контроллере у меня объектов кот наплакал. Я вообще не склонен (в отличии от Жабы и Рубина) считать все что не попадя объектом. Отношусь к этому как-то спокойнее. Если удобно - пишу функционально, если удобно - объектно, если нравиться - процедурно. И если работает хорошо, то чего же еще желать...

 Профиль  
                  
 
 
Сообщение06.01.2006, 16:24 
Заблокирован


21/12/05

38
...

Я ... прекрасно знаю, что перевод неправильный. Но это устоявшийся термин. Что такое "литературное программирование" знают все ..., а вот как более адекватно и понятно перевести на русский "literate programming" - не знает никто.

Кстати ... перевод ведь реально адекватный - идея заключается не только в подробности и избыточности комментария, но и в его ЛИТЕРАТУРНОСТИ, в том, чтобы его можно было не просто легко читать, а читать с интересом.

Всем ... крайне советую почитать литературные программы самого Д. Кнута, начиная с TeX и Metafont.

А вообще - всем сюда: http://www.literateprogramming.com/

... даже не знают, что такое static memory management, так что не фиг на них ... внимание обращать. ...

---
Сообщение отредактировано. (dm)

 Профиль  
                  
 
 
Сообщение06.01.2006, 19:54 
Экс-админ
Аватара пользователя


23/05/05
2106
Kyiv, Ukraine
Debiloid :plusomet:
Замечание за переход на личности, оскорбления и хамство.
Поскольку это далеко не первые ваши нарушения (сообщения, перенесенные отсюда в "Свободный полет" и затем вами там затертые, и это сообщение), то на этот раз вы получаете бан. :ban:
Если кто-то из постоянных участников форума вступится за вас, то администрация может решить, чтобы бан был временным.


---
Добавлено 13-01-2006:
Тему открываю. (dm)

 Профиль  
                  
 
 
Сообщение18.01.2006, 19:05 
Заслуженный участник
Аватара пользователя


12/10/05
478
Казань
незванный гость писал(а):
По моему опыту, выход GCC для IMS805 был неудовлетворителен. И мне пришлось кромсать имевшийся компилятор. Ключевое слово здесь однако - был. Скорее всего, стал лучше.

Не откроете ли секрет - как Вы его нашли? К примеру, в доке на gcc перечислены куча разных платформ (приведены опции компилятора для них), но на самом сайте www.gnu.org есть весьма мало ссылок, по которым можно их (эти компиляторы) скачивать... Далеко не все, что перечислено в документации...

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 149 ]  На страницу Пред.  1, 2, 3, 4, 5 ... 10  След.

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group