Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Pascal для AVR
Форум разработчиков электроники ELECTRONIX.ru > Сайт и форум > В помощь начинающему > MCS51, AVR, PIC, STM8, 8bit
Страницы: 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11
sergeus
Цитата(Herz @ Nov 13 2008, 17:05) *
biggrin.gif Человек, похоже, только первый пост и прочитал...


Человек, похоже, кроме этого что-то написал. Делать мне нечего - прочитывать столько постов и смотреть кто что написал, чтобы случайно не написать что-то боянистое. Новизна в моём посте присутствовала.
ARV
ощущение такое, что многие из ведущих тут дискуссию с паскалем знакомы по названию книжки "паскаль для чайников"...
скажу, как человек, использующий паскаль (правда, не для микроконтроллеров) более 15 лет:
1. в соверменном паскале (Delphi или free-pascal) работа с указателями во много раз проще, чем в Си, и при этом нет проблемы с характерными ошибками, свойственными Сишной работе с ними.
2. о цикле for - кто мешает использовать while или until? там можно тоже использовать различные условия завершения, продолжения и шага итерации цикла.
3. переменное число параметров функции (а так же переопределение функций) давно нормальное явление для паскаля
4. паскаль де-факто не дает шансов допустить ряд ошибок, которые Си в лучшем случае сопровождает ворнингами
5. современный паскаль (object-pascal) идет впереди С++ примерно на 2-3 шага (касательно деструкторов, особождения памяти из-под объектов и т.п.)
6. по большому счету, все современные языки высокого уровня обладают одинаковыми возможностями, и потому споры о них можно приравнять к спорам о том, что чернее - уголь или сажа (поясню - и то и другое - углерод).

к сожалению, апоголеты Си явно не настроены узнавать о паскале больше, чем написано в книжках 20-летней давности... потому данная дискуссия - бесперспективна по определению smile.gif
_Pasha
Цитата(ARV @ Nov 13 2008, 22:42) *
5. современный паскаль (object-pascal) идет впереди С++ примерно на 2-3 шага (касательно деструкторов, особождения памяти из-под объектов и т.п.)

Ну, в тему это не помещается smile.gif ООП на АВР... мучать камень и себя.
Цитата
к сожалению, апоголеты Си явно не настроены узнавать о паскале больше, чем написано в книжках 20-летней давности... потому данная дискуссия - бесперспективна по определению smile.gif

Дык дискуссии нет. Есть из паскалей e-lab, microe. Есть для пиков PMP, но, имхо, пока до микроконтроллеров не доберется сообщество Free Pascal, чуда не будет.
Herz
Цитата(sergeus @ Nov 13 2008, 20:13) *
Человек, похоже, кроме этого что-то написал. Делать мне нечего - прочитывать столько постов и смотреть кто что написал, чтобы случайно не написать что-то боянистое. Новизна в моём посте присутствовала.

Чукча - не читатель? Откуда тогда уверенность, что "новизна присутствовала"?

Цитата(ARV @ Nov 13 2008, 20:42) *
к сожалению, апоголеты Си явно не настроены узнавать о паскале больше, чем написано в книжках 20-летней давности... потому данная дискуссия - бесперспективна по определению smile.gif

Как и все религиозные войны, в одну из которых скатывается тема. Но совсем не потому, что апологеты С такие непродвинутые, а вот иные... А потому, что вместо конкретных "за" и "против" для конкретного случая - не только попытки выяснить, какой язык "круче", но и нападки на их "апологетов"...
ARV
предлагаю остановиться на констатации факта, что современные ЯВУ примерно равноценны. но, разумеется, в области микроконтроллеров преобладает Си и ассемблер, хотя вовсе не по каким-то объективным причинам, а просто "так уж вышло" smile.gif
zhevak
Цитата(ARV @ Nov 14 2008, 01:52) *
предлагаю остановиться на констатации факта, что современные ЯВУ примерно равноценны. но, разумеется, в области микроконтроллеров преобладает Си и ассемблер, хотя вовсе не по каким-то объективным причинам, а просто "так уж вышло" smile.gif


"Ящик водки и всех обратно!" (С) народный анекдот.


Вот вопросы для обдумывания. В начале топика кто-то просил объективности. Мне кажется, что следущие воапрсы претендуют на наибольшую объективность.


1. Давайте обратим внимание на операционные системы (ОС) для компов и мощных микроконтроллеров (МК). Думаю, здесь на форуме присутствуют сведущие люди, а это значит, не надо много говорить о том, что уровень ОС находится намного ближе к железу, чем уровень прикладных программ (текстовые процессоры, почтовые клиенты, СУБД, ...). В некоторой степени мы можем говорить об аналогии понятий: традиционные проги (firmware) для МК занимают примерно ту же диспозицию, что и ОС для больших процов. Аналогия несколько отдаленная, может быть даже спорная, но примерно как-то оно так. А теперь, внимание, ВОПРОС:

Перечислите здесь операционные системы, которые написаны на Си/Си++. А так же назовите ОС, которые написаны на Паскале.

От себя могу назвать только одну ОС, которая изначально была написана на Паскале. Это -- всем известная Windows. Да-да, самая первая версия Венды была написана на Паскале. Потом, когда M$, просекла фишку, когда поняли, что за это дело можно не только срубить денег, а и прогнуть под себя мир, они быстренько переписали ее на Си. В память о неблагополучном прошлом весь мир получил в наследство паскалевские вызовы API Window. До сих пор икается!Если у Вас есть, что добавить по ОСям, написанным на Паскале, я буду только рад.


2. Предлагаю провести следущее расследование. Поскольку, здесь на форуме собрались активные программисты, т.е. активные сливки всего общества программистов, то давайте проведем оценку кто на чем пишет. А по полученным данным будем судить, какой язык мы больше применяем. А чтобы отфильтровать шум (мусор), давайте будем называть только Си/Си++ и Паскалевские проги. Остальные (Васик, Питон, Жаба, ...) сейчас будут только мешаться. И давайте будем указывать цель (значимость) своих программ. Я имею ввиду то, для чего прога создавалась. Например, "коммерческая" (продана несколько раз), "для души" (нравится программировать), "проба сил" (полигон для изучения языка), "тестировние" (отработка парадигмы, алгоритма, ...), "написал и забыл" (курсач, диплом, докторская, ...). Это не полный спсиок, важно понять, для каких целей и на каком языке мы пишем.

Начну с себя. У меня все просто. Я на адепт Паскаля, и си-шник. Пишу на на Си, Си++. Я в основном пишу коммерческие проги, я за них получаю деньги, это источник моего дохода. Иногда я использую Си/Си++ для отработки идей. Иногда пишу на них для души. На Паскале я тоже писал проги за деньги. Но это были проги чисто для студентов, которые отлично знали UNIX/Linux, писали под него и в Шелле, и в gcc, но поскольку препод требовал Паскаль, а времени у них как у всех, да и Паскаль им был ненавистен. Вобщем, мы удачно договорились! Заметьте, это пример не в пользу Паскаля!


3. Откуда растут проблемы отсутствия интереса в изучении у студентов. Мое видение состоит в следующем. Обучение и производство на столько отдалены друг от друга, на столько между ними большая разница, что молодые люди, учась в вузах, слабо представляют (если вообще представляют!) как жить дальше после окончания института. Как будут цениться и как использоваться получаемые ими знания. Это как земля и вода. Вот, я сейчас студент, я изучаю теоретическое плавание кролем и на спине, но все еще хожу по земле. Через пару лет, я защитю проект. Получу диплом. Напьюсь. Протрезвею. И ... выйду в открытое море и поплыву, как меня учили.

Нет, ребята. Фигня это полная. 95% выпусники вузов -- это такая недоделка, что прямо ой! Это люди полностью абстрагированные от реальной жизни. Они накачены теориями, они обучены пользоваться шпорами и копипаситить рефераты, а вот реального понимания, что и как работает, -- у них нет. Но самое страшное не в студентах, в тех преподах, которые сами далеки от реальных коммерческих дел. Вот они-то и учат студентов тому теоретическому Паскалю, который сегодня не дает нормально зарабатывать. И, более того, не видно, что в перспективе Паскаль перехватит инициативу у Си/Си++.


4. Вы знаете кто такой Anders Hejlsberg? В кратце вот это кто. Этот человек очень плотно работал с Фрэнком Брландом (Frank Borland, автор Turbo-Pascal). Andreas -- автор Delphy. Собственно, появление Delphy привело к моральной смерти Турбо-Паскаля (седьмая версия -- была последней). Незадолго до выхода третьей версии Delphy, его переманили в M$. После этого развитие Делфи, как-то зптормозилось. Возможно Андрэас понял бесперспективняк Паскаля/Делфи. Чем тогда объяснить, что он повернулся в сторону Си/Си++? Его портфолио не ограничивается Делфями. В M$ Андреас разработал С#. Это преамбула. Понятно, что перед нами достаточно легендарная личность.

А теперь амбула. Вот тут http://blog.jaoo.dk/2008/10/07/the-future-...ming-languages/ на протяжении часа Хейлсберг вещает про языки программирования. Я очень рекомендую посмотреть этот относительно свежий ролик (Октябрь 2008 г.). Даже если у вас аудированием плохо, то хотя бы на картинки посмотрите.

Мы тут, как черви в сортире, пытаемся получить объективность мирового устройства, а тем временем, люди, которые "крутят мир", уже знают что делать. Ну, как минимум, их волнуют совершенно другие проблемы.
DMD
Блин, всего день не было - уже флейма на 4 листа... =)
Я хотел написать вчера ещё, но уже спать лег, а сегодня, смотрю, уже написали. Да: Паскаль и С - идентичны (поэтому их часто и сравнивают, не заметили? не бейсик-си, а си-паскаль!)...
Так что...
Спасибо за помощь!
Кстати, а как насчет "платы за использование ЯВУ? Слишком много платить приходится? Никто не проверял?
tyro
Восторженные вопли от восхищения самым лучшим языком программирования - СИ громко и внятно издаём тут: http://electronix.ru/forum/index.php?s=&am...st&p=500358

Восторженные вопли от восхищения самым лучшим языком программирования - Паскаль громко и внятно издаём тут: http://electronix.ru/forum/index.php?s=&am...st&p=500360
_Pasha
Цитата(DMD @ Nov 14 2008, 00:33) *
Кстати, а как насчет "платы за использование ЯВУ? Слишком много платить приходится? Никто не проверял?

дык там же все написано... я имею ввиду - по ссылкам

Цитата(zhevak @ Nov 14 2008, 00:32) *
А теперь амбула.

Пазоришша! литерал в двойные кавычки поставил smile.gif
DMD
ага, спасибо за ссылки и информацию! 0)
zhevak, вы не правы по ряду причин. Честно сказать - уже тянет в сон, поэтому уклонюсь от спора. Но ОС пишутся на Си НЕ ПОТОМУ, что Си - это профессионально или круто. Си - это шлицевая отвертка, а Паскаль - крестовая. Так и относитесь к языкам программирования - жить будет легче. =)
ОС - тривиальная задача, причем давно решенная. Написать ОС - это просто дело времени, сил, терпения - И ПОВТОРЕНИЯ ВСЕГО ТОГО, ЧТО УЖЕ ДАВНО СДЕЛАНО РАЗРАБОТЧИКАМИ (включая разработчиками железа). Для этой задачи подошел бы и паскаль, но ... вы продадите систему на паскале? Вы вообще продадите собственную операционную систему? Для развития нужны деньги. Линукс и пр. ОС приносят деньги - они известны, под них есть драйвера и пр. Это раз.
Во-вторых - современные системы зарождались десятилетия назад (все началось с Юникса на асме в 1963), когда паскаля не было. Потом просто код воровался (майкрософт сперла идеи и у юникса (почти все, могу примеры привести), у фирмы Ксерокс и так далее). А так как паскаль только зарождался и был очень ограничен в возможностях (не было многих аспектов языка: юнитов, ...), то изобрели Си чтобы не писать на асме. А потом, так как хотели портировать код - просто стало принято писать ОС на си: есть готовый код (причем много), Ат&T (где работал разработчик Си - Керниган) стало продвигать Юникс как основную ОС для бизнеса (а эту ОС написана на Си + все программы к ней; других ОС в это время (1975-1980) ну не было... кроме может СР/М, которую тоже сперли в майкрософт и назвали ДОС)... поэтому люди, рабоающие с юникс были обязаны знать Си... и учить что-то ещё им было лень (ну или не надо было).
В-третьих: в 1984 году (вроде) Борланд заключила с Майкрософт соглащение о том, что майкрософт не лезет на рынок с Паскалем (до этого они выпустили Quick Pascal - гадость редкая), а Борланд не увеличивает линейку своих продуктов, связанных с языком Си/++. Не заметили, что сейчас у Инпрайз/Борланд всего 2 продукта с С++: просто компилятор и стандартные библиотеки (без СТЛ) - FreeBorlandC++ и C++ Builder? Ну а майкрософт, скупив код Юникса, выпустила сначала Ксеникс (глючный и платный клон Юникса System 5) а потом, поняв что стормозили (а в это время начала появляться система - предшественница FreeBSD (не помню названия) - бесплатная Юникс и свободная от лицензий (выкупленная у Новелл)), решили выпустить полуось а затем (снова промахнулись) сдновременно выпустить винду (причем сначала 3.51НТ, а потом 3.11 - что было весело)))... Естественно, что Майкрософт весь свой API для новых ОС распространял с языком Си внутри... Борланд здесь проиграла и отыгралась только в секторе быстрой разработки приложений (ВизуалБейсик реально проигрывает Делфи здесь, а ВизуалС++ явно сакс как среда RAD!). Так что...

Что я хочу сказать: вы все свидетели работы маркетинговых отделом компаний. Эти отделы, в частности компании Майкрософт, внушают вам, что С++ - это кул, это "on the edge of technologies"... А собственно почему это так - не задумывались? Я, к примеру, пользуюсь максимум 60% возможностей языка С++ (стандарта С99). И приэтом пишу сложный довольно софт: эмуляторы оборудования, SCADA под линукс и пр... Я вот что не могу понять и меня это пугает: выходит стандарт С2009, там вообще полное палево... Как можно пользоваться инструментом не понимая как он работает? Нет, дело не в моем низком интеллекте, просто я сомневаюсь в том, что вот такое бесконтрольное усложнение ЯВУ приведет к катарсису в программах, скорее наоборот... Сложность современных систем возрастает очень сильно, а желание людей их изучать - падает также сильно... Я не вижу смысла сейчас в изучении С++ (но не Си), это мое мнение... Ибо нафиг это надо (здравому человеку, пусть и разработчику). Я могу то же самое написать с меньшей кровью... так зачем париться?

А язык Си... он вымер, уж простите. Нет компиляторов с языка Си, есть С++ - компиляторы в режиме совместимости. А все из-за этой гонки за огромными объемами кода и пр. - все забыли о том, что надежность прямо пропорциональна простоте...
Да, вернусь к Си... он вымер, это так. Ибо область применения его специфична - работа с устройствами (там где лень или сложно работать на асме, а хочется видеть код красивыми англ. буковками). Мы же когда программируем МК - пишем ОС, по сути... Вот только для этого Си и остается, в остальном - его нет. И спорить не о чем.
Разрешите откланяться, ибо хочу спать... =)
defunct
Цитата(Жека @ Nov 12 2008, 10:04) *
Господа программеры, можно список того, что делается на Си, но не делается на Паскале?

Могу привести обратное.
"C" не предоставляет стандартных средств для работы со строками (присваивать, сравнивать, складывать). Паскаль - предоставляет.

Но проблема не в том какой язык лучше, какой хуже. Проблема в том что хороших компиляторов с Паскаля для AVR нет. Все что я видел (а видел я аж 2 таких компилятора - ELAB и микро-чего-то-там) неполноценны. Стоит ли расчитывать, что работая с неполноценным компилятором получится что-то полноценное?
zhevak
[quote name='DMD' date='Nov 14 2008, 03:52' post='500395']
Си - это шлицевая отвертка, а Паскаль - крестовая.
[/qoute]
Простите за тупость, я не понял аллегории. Почему так, а, допустим, не на оборот: плоская -- Паскаль, крест -- Си? Если ж Вы имели ввиду, что между Паскалем и Си нет особой разницы, как между отверткам, то -- да, я согласен с Вашей мнением. И то, и другое -- чисто инструменты. Назначение у них одинаковое, отличия между ними не значительны. Отличий у них больше, если их сравнивать с ... пассатижами или пилой (к примеру, с Жабой и Фортраном). Впрочем, я так и отношусь к этим языкам программирования, как к отверткам. Только почему-то я постоянно пользую Си, а не Паскаль, а в компе у меня почему-то все винтики под крест? Может быть винтики тоже , как Вы изволили выразится, -- "крутые"? Лично мне (за других не отвечаю) кажется, то что Си и винты-крест -- это удобнее, более технологично. Поэтому и юзаю, а не потому что "круто".


[quote]
ОС - тривиальная задача, причем давно решенная. Написать ОС - это просто дело времени, сил, терпения - И ПОВТОРЕНИЯ ВСЕГО ТОГО, ЧТО УЖЕ ДАВНО СДЕЛАНО РАЗРАБОТЧИКАМИ (включая разработчиками железа). Для этой задачи подошел бы и паскаль
[/quote]
Доказывайте! Назовите несколько операционок, которые написаны на Паскале.
Попутно ответьте на простой вопрос -- поскольку уже не является секретом, как писать ОСь, и поскольку писать Паскале лучше, чем на Си -- почему никто не берется написать ОСь (from the scratch) на Паскале, а все разработчики упорно ломятся в стороноу Си? Заметьте, написав код с нуля --вы автоматически избавляетесь от всех детских болезней, которые тянутся от версии к версии. "Написать с нуля" -- это очень ценится! И люди пишут с нуля. Но не на Паскале! -- Почему?

[quote], но ... вы продадите систему на паскале?
[/quote]
Извините, опять туплю, -- в каком смысле? А вы продадите? А систему на Си?

[quote]Вы вообще продадите собственную операционную систему?
[/quote]
Вы знаете, вынужден Вас огорчить. Увы, я несколько раз я уже продал систему, которая отдаленно напоминает ОСь. Я написал свое ядро (для АВР), которое изменяя под разные устройства уже несколько раз продал (с разными устройствами). Я не могу "это" назвать операционкой, т.к. оно не дотягивает по нескольким параметрам. Но могу Вас уверить, что у меня там реализован диспетчер сообщений и многопоточность. Есть модули, отвечающие за работу с железом (типа драйверов) и есть модули "юзеровского толка" (т.н. бизнес-уровень). Плюс рил-тайм. Но какое это имеет отношение к тем разговора?


[quote]Линукс и пр. ОС приносят деньги - они известны, под них есть драйвера и пр.
[/quote]
И что? О чем это говорит?

[quote] Во-вторых - ... Так что...
[/quote]
Спасибо за дополнения.

[quote]
Как можно пользоваться инструментом не понимая как он работает? Нет, дело не в моем низком интеллекте, просто я сомневаюсь в том, что вот такое бесконтрольное усложнение ЯВУ приведет к катарсису в программах, скорее наоборот... Сложность современных систем возрастает очень сильно, а желание людей их изучать - падает также сильно...
[/quote]
Дак, это... так почти все и работают "не приходя в сознание". (Почитайте bash.org , почитайте ithappens.ru )
Катарсис, говорите? Вы не одиноки в своем мнении...

[quote]Я не вижу смысла сейчас в изучении С++ (но не Си), это мое мнение... Ибо нафиг это надо (здравому человеку, пусть и разработчику). Я могу то же самое написать с меньшей кровью... так зачем париться?
[/quote] На платформе Windows Шарп вытяснил одноременно и C++ и VB (а-ля шестой версии). Поэтому смысла изучать Си++, действительно, -- нет. Учите сразу Шарп, и будет вам счастье! А вот в области МК, тут не все так однозначно.

[quote]А язык Си... он вымер, уж простите.
[/quote]
Паскаль издох вместе с оверлеями. Уж простите! Но наверно надо говорить не о смерти, а о метаморфозах в языке, о медленной миграции языков.


[quote]Да, вернусь к Си... он вымер, это так. Ибо область применения его специфична - работа с устройствами (там где лень или сложно работать на асме, а хочется видеть код красивыми англ. буковками).[quote]
Уважаемый! Противоречие.
Си не вымер, отнюдь! Си занял свою нишу. Это все-таки разные вещи -- помереть и устроиться на работу. Вот PL/M -- этот точно покойник!


[quote]Мы же когда программируем МК - пишем ОС, по сути... Вот только для этого Си и остается, в остальном - его нет. И спорить не о чем.
[/quote]
Ну да, согласен. Только скажите еще про Паскаль. Он-то где используется?
Да мы и не спорим. Так, типа эмоциональную энергию сбрасываем.

[quote]
Разрешите откланяться, ибо хочу спать... =)
[/quote]
В гробу выспимся! Хотя... пожалуй и я пойду.
zltigo
Цитата(defunct @ Nov 14 2008, 02:12) *
"C" не предоставляет стандартных средств для работы со строками (присваивать, сравнивать, складывать). Паскаль - предоставляет.

А слабо было взглянуть на стандарт языка и выяснить, что clib является НЕОТЕМЛИМОЙ частью оного.
После чего о Паскалевские "средства" и поминать стыдно.
zhevak
Цитата(defunct @ Nov 14 2008, 05:12) *
Могу привести обратное.
"C" не предоставляет стандартных средств для работы со строками (присваивать, сравнивать, складывать). Паскаль - предоставляет.

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

Вот, что лично меня убило в Паскале, так это то, что внутри процедуры можно было определять вложенные процедуры таким образом, что опреторная скобочка END для обеих процедур являлась возвратом. С точки зрения Си -- это дикость и нонсэнс! По прошествии двух десятков лет детали я уже не помню, но код выгдлядел как-то так.

[code]
PROCEDURE OUTER
VAR
...
BEGIN

PROCEDURE INNER
VAR
BEGIN
...
END
[code]
Языковая среда -- Турбо-Паскаль для ДОС.


Цитата
Но проблема не в том какой язык лучше, какой хуже. Проблема в том что хороших компиляторов с Паскаля для AVR нет. Все что я видел (а видел я аж 2 таких компилятора - ELAB и микро-чего-то-там) неполноценны. Стоит ли расчитывать, что работая с неполноценным компилятором получится что-то полноценное?

Вот что за фигня такая -- здесь, вот, некоторые люди упорно доказывают, что Паскаль лучше Си. Но почему ни одна уважающая себя фирма-писатель-компиляторов не хочет написать Паскаль-компилятор. Почему? Если верить товарищам, защищающим позицию Паскаля, то успех будет беспечен, и мало-ли что там маркетологи вещают! Я выбираю инструмент не по тому укритерию, что как про него говорят, а по тому, на сколько мне удобно с ним работать, на сколько он хорошо создает продукт.
zltigo
Цитата(DMD @ Nov 14 2008, 00:52) *
(все началось с Юникса на асме в 1963), когда паскаля не было.

Самое смешное, что Паскаля и сейчаc нет. Есть небольшая кучка несовместимых мутантов с единственным сильно потрепаным флагманом ака Борланд декларативно спекулирующих на буквосочетании Паскаль. При этом нормальные языки реальные наследники Паскаля, поминаются еще много много реже.
Цитата
современные системы зарождались десятилетия назад (все началось с Юникса на асме в 1963)

Вообще-то даже юниксовый дедушка Multics писан на PL/1... А его предшественник на алголообразном.
Цитата
Ат&T (где работал разработчик Си - Керниган)

Керниган совсем ни какого отношения к разработке языка не имел.
Цитата
В-третьих: в 1984 году (вроде) Борланд заключила с Майкрософт...

Не смешите...
Цитата
а Борланд не увеличивает линейку...

Борланд просто мертв, и давно. Куда уж тут "увеличивать".
Цитата
Разрешите откланяться, ибо хочу спать... =)

Иногда лучше спать, чем говорить....
defunct
Цитата(zhevak @ Nov 14 2008, 01:40) *
Вот, что лично меня убило в Паскале, так это то, что внутри процедуры можно было определять вложенные процедуры таким образом, что опреторная скобочка END для обеих процедур являлась возвратом. С точки зрения Си -- это дикость и нонсэнс!
.

В Паскале нет той дикости о которой вы говорите.
если надлежащим образом оформить выглядит абсолютно прозрачно:
Код
procedure outer;
var ...
    procedure inner;
    begin
    end;

begin
    inner
end;


Цитата
Вот что за фигня такая -- здесь, вот, некоторые люди упорно доказывают, что Паскаль лучше Си. Но почему ни одна уважающая себя фирма-писатель-компиляторов не хочет написать Паскаль-компилятор. Почему?

В некоторых аспектах - определенно лучше, в некоторых - нет. Если мне нужно быстро сварганить программу для обработки лог файла я предпочту сделать это на Pascal'е. Если что-то overIP - то я определенно предпочту C. Другой вопрос - это ширина круга задач на котором Pascal выигрывает как инструмент, в контексте embedded даимерт этого круга равен нулю (потому и нет серзъезных компиляторов с Паскаля для embedded МК).

А вообще - всякий овощ полезен....
zhevak
Цитата(defunct @ Nov 14 2008, 05:12) *
"C" не предоставляет стандартных средств для работы со строками (присваивать, сравнивать, складывать). Паскаль - предоставляет.

Сейчас буду кого-то убивать...

Во-первых, это не форум программистов для компов, это форум программистов для МК. (Поправьте, если не так!) Значит, здесь должны рассматриваться вопросы Си и Паскаля применительно к МК.


Допустим, имеется некая бизнес-задача с более-менеее интенсивными строковыми операциями.

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

В случае Паскаля, у меня выбора вообще нет! Ему (Паскалю) все едино, для всех случаев жизни там один подход, который мне неподконтролен. Я юзаю чисто стриговые переменные, которые сами как-то там работают, сами как-то перераспределяют память. Если же я буду работать не со стрингами, а с буферами, то это будет не Паскалевский подход, а как раз си-шный. Тогда преимущество Паскалевских строк становится сомнительным и вопрос выбора языка отпадает.


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

В случае, если никто, из здесь присутствующих программистов, не может написать такой код, прошу считать Паскаль мертвым, а Си -- наоборот -- здравствующим.
zhevak
Цитата(defunct @ Nov 14 2008, 06:08) *
В Паскале нет той дикости о которой вы говорите.

Да. Признаю. Это я спутал с Васиком, где строки нужно было нумеровать... Там вообще никаких правл не бвло! Спутал оформление Паскалеских процедур с оформлением самой программы. Вопрос снимаю.
Наезд на Паскаль был не обоснован.


Цитата
В некоторых аспектах - определенно лучше, в некоторых - нет. Если мне нужно быстро сварганить программу для обработки лог файла я предпочту сделать это на Pascal'е. Если что-то overIP - то я определенно предпочту C. Другой вопрос - это ширина круга задач на котором Pascal выигрывает как инструмент, в контексте embedded даимерт этого круга равен нулю (потому и нет серзъезных компиляторов с Паскаля для embedded МК).

А вообще - всякий овощ полезен....

В том-то и дело! В сфере МК Паскаль -- аутсайдер. Но и в сфере ПК (обсуждать которую здесь на нашем форуме не совсем легитимно) Паскаль тоже далеко не блещет. Почему для обработки логов Вы выбрали бы именно Паскаль? Ведь на шестом Вижуал-Васике, или на Шарпе, или даже на том же Perl Ваша задача решилась бы еще легче. На сколько я понял, Ваша задача -- одноразовая. Для себя любимого, а не для коробочных продаж. Вам совсем не нужен компилятр. Я предвосхищаю ответ -- "Мне так удобнее, т.к. я знаю Паскаль лучше, чем BASIC/C#/Perl." Ключевое слово -- "я знаю", а не "Паскаль лучше подходит, чем Шарп". Т.е. опять же получается, что аргумент не в пользу Паскаля.

Кстати, мне недавно пришлось делать выбор, похожий на Ваш. Мне нужно было из текстового документа выдернуть данные измерений, и посчитать кое-какую статистику (мин, макс, среднее, отклонение, ...), упорядочить их, вывести результаты. В общем мура всякая. Одноразовая. Сначала я начал писать на Шарпе, т.к. там легче все это сделать. Но потом, я понял, что я пишу шарповскими операторами, но стилем Си++. Т.е. мыслю-то я все равно на Си++. (Это очень сложно знать два языка и одновременно мыслить на них.) Я задвинул проект на Шарпе и лекго решил свою задачу на старом добром VC++ 6.0 в консоли. А с выводом результатов в файл я вообще не стал заморачиваться -- просто вывел их на косоль через printf, а с консоли забрал их в файл ДОСовскими пайпами средствами, типа так: myProg.exe >> result.txt.

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

Почему я вернулся на Си, а не сделал ее красиво на Шарпе? -- Да потому что мне так было легче. Если б я знал так же хорошо Шарп, если б я "мыслил Шарпом", я бы сделал все на Шарпе. Но я мыслю на русском и на Си. Поэтому мне легче на этих языках выражать свои мысли. Но это совсем не значит, что я не знаю английский и, скажем, тот же Паскаль. Просто для меня они второстепенны. (Думаю, что в этом я не уникален. Большинство программистов думают точно так же, ну или примерно так же.)

Почему я считаю, что Паскаль мертв? -- Потому, что низкоуровневое (железное) программирование -- это удел Си/Си++, а высокоуровневое -- удел Шарпа. Паскалю, в этом отношении, нет места. Не имеет он особого преимущества ни там, ни там.

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


Блин, поспал называется! Пойду давану, хоть пару часов что-ли...
Kopa
Цитата(zhevak @ Nov 14 2008, 04:53) *
...
А отсюда мое негативное отношение к Паскалю -- нефиг засирать мозги молодым людям. Основы программирования можно изучить и на базе Си. Это ни чуть не труднее.


Цитату для комментирования взял наугад т.к. считаю все языковые споры C vs Pascal
cплошным "детским садо" у кого п-п-ска большеsmile.gif

И утверждение, что все языки программирования одинаковы - абсолютный бред.
Prolog, Лисп, Forth, и много еще появляющихся разных языков в современном мире.

P.S. Тему пара переименовать Pascal vs C для ....
Нравится любимая "жвачка" для обсуждения?
DSIoffe
А ещё эта тема наглядно продемонстрировала, что программирование на Си делает людей агрессивными и нетерпимыми. Человек пришёл и спросил, где взять компилятор Паскаля. А на него налетела куча народу и стала жёстко поучать: не нужен тебе Паскаль, если ты не дурак, то пользуйся Си.
Берегитесь Си, он может испортить вам личную жизнь. :D
_Pasha
Цитата(DSIoffe @ Nov 14 2008, 10:07) *
А ещё эта тема наглядно продемонстрировала, что программирование на Си делает людей агрессивными и нетерпимыми.

+1 lol.gif
Отожгли!!!
Кстати, может кто-то есть, кто реально купил и юзал это микро-чего-то. В смысле - лучше там код в коммерческой версии или гумус?
Rst7
Цитата
А ещё эта тема наглядно продемонстрировала, что программирование на Си делает людей агрессивными и нетерпимыми.


Ооо, скажите, а вот я принципиально стараюсь писать циклы как do{...}while(--var); и постоянно пользую goto. Вы не поскажете, у меня может тоже психические отклонения какие? smile.gif
msalov
Извините за оффтоп, не удержался, в тему холливара Pascal vs C/C++:
Из доклада "Система образования как фактор национального суверенитета в сфере информационных технологий" (стр 12)
Цитата
Обучение программированию с помощью Си эквивалентно развращению малолетних
zltigo
Цитата(DSIoffe @ Nov 14 2008, 09:07) *
А ещё эта тема наглядно продемонстрировала, что программирование на Си делает людей агрессивными и нетерпимыми.

Или делает их НЕ пофигистами и НЕ ограниченными людьми, которыми НЕ все равно как, на чем и что писать smile.gif.
Цитата
Из доклада "Система образования ....

Давно подозревал, что в системе образования в России большие проблемы, но думал, что все так дурно и в головах "ученых".
DSIoffe
Цитата("zltigo")
Или делает их НЕ пофигистами и НЕ ограниченными людьми, которыми НЕ все равно как, на чем и что писать

Приплыли. Кто не агитирует за Си, тот пофигист и ограниченный? Пора цитировать соседние ветки: Ыыыыыыыыыыыы smile.gif
А ссылочка от gotty очень хороша. Рекомендую всем любителям убедительных фраз.
forever failure
Господа пасквилянты, чем в попу тарахтеть, какой прекрасный ваш паскаль, лучше приведите пример рабочего кода, хоть бы под тот же АВР, а потом и сравним его с сишным. И скомпиленную прошивку тоже сравнить неплохо было-бы.

А то просто флуд и балабольство получается.
Kopa
Цитата(zltigo @ Nov 14 2008, 10:33) *
Давно подозревал, что в системе образования в России большие проблемы, но думал, что все так дурно и в головах "ученых".


А как с этим в системе образования Latvia

P.S. Не поймите превратно.
Образование, бывает, формируется в привязке к технологиям крупных продавцов рынкаsmile.gif
с С, С++, Pascal - это всё продаваемые системы программирования MS, Borland и др.
_Pasha
Цитата(Kopa @ Nov 14 2008, 12:52) *
С, С++, Pascal - это всё продаваемые системы программирования MS, Borland и др.

Таак. Пора звать R.Stallman&Co. Пусть юноше набьют. biggrin.gif
Kopa
Цитата(forever failure @ Nov 14 2008, 11:23) *
Господа пасквилянты, чем в попу тарахтеть, какой прекрасный ваш паскаль,


Эка Вас как перекосилоsmile.gif.

P.S. Что Pascal, что С - для меня они из одной обоймы.
А профессионально можно использовать хоть тот, хоть другой beer.gif
А эволюцию выигрывают Java, C#, + скриптовые языки и специализированные языки.


Цитата(_Pasha @ Nov 14 2008, 11:58) *
Таак. Пора звать R.Stallman&Co. Пусть юноше набьют. biggrin.gif


Ага, при том, что мне "священные войны" Pascal vs C нетрогают.
У меня есть своя любимая песочница Forth.
GCC почти не использую.

P.S. Хотите высказаться по существу?
Странно что еще не вспомнили Виртовсую Мodula и европейские традиции в программировании.
defunct
Цитата
Мне так удобнее, т.к. я знаю Паскаль лучше, чем BASIC/C#/Perl

гм. А что такое Perl? не скриптовый клон паскаля часом, а? smile.gif

Цитата
Другой пример. Допустим, юзаем АРМ. Допустим, имеется код одной какой-нибудь функции, которая располагается (и, соответственно, выполняется) в оперативной памяти, а другая располагается и работает во флешь.

ну и в чем проблема? ;>
поступаем как Keil решил эту задачу в CA:

procedure ramfunc(..);__ram;
begin
end;
накрайняк процедурный тип в паскале есть, выделяем память в RAM - копируем туда код из флеш и выполняем.
Цитата
В случае Паскаля, у меня выбора вообще нет! Ему (Паскалю) все едино, для всех случаев жизни там один подход, который мне неподконтролен. Я юзаю чисто стриговые переменные, которые сами как-то там работают, сами как-то перераспределяют память. Если же я буду работать не со стрингами, а с буферами, то это будет не Паскалевский подход, а как раз си-шный. Тогда преимущество Паскалевских строк становится сомнительным и вопрос выбора языка отпадает.

не совсем так. Объявление типов коротких стрингов никто не отменял.

Код
type
   smallstr = string[32]; // занимает 33 байта памяти str[0] - длина, str[1..32] - чары
   shortstr = string[8];   // занимает 9 байт памяти str[0] - длина, str[1..8] - чары

var
   s1 : string;
   s2 : smallstr;
   s3 : shortstr;

begin
    s1 := s2 + s3; // <- легальная конструкция.

    if (s2 = s3) then // <-- легальная конструкция
        ...



Цитата(zhevak @ Nov 14 2008, 02:37) *
здесь должны рассматриваться вопросы Си и Паскаля применительно к МК.

Применительно к МК я свою точку зрения уже высказал, в общем-то она совпадает с вашей.
Kopa
Возможно, кому то, сылка пригодитсяsmile.gif

Embedded Pascal AVR Area

http://users.iafrica.com/r/ra/rainier/pAVR.htm
_Pasha
Цитата(Kopa @ Nov 14 2008, 15:13) *
Возможно, кому то, сылка пригодитсяsmile.gif

Это точно, что smile.gif smile.gif
Там, похоже, все на нулевом цикле осталось.
Усадку фундаменту дают, понимаш. biggrin.gif


Цитата(Kopa @ Nov 14 2008, 13:03) *
P.S. Хотите высказаться по существу?

Если это - мне, то я просто типошучу. А так, меня тоже Паскаль vs C не трогают.
zhevak
Цитата(gotty @ Nov 14 2008, 13:15) *
Извините за оффтоп, не удержался, в тему холливара Pascal vs C/C++:
Из доклада "Система образования как фактор национального суверенитета в сфере информационных технологий" (стр 12)

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

Я вижу здесь три грубейшие ошибки. Все остальное -- производное от них. Поэтому комментировать тут нечего. Ошибки:
1. Данный документ родили товарищи-адепты Паскаля, а не адепты Си/Си++.
2. В качестве консультанта был приглашен Н.Вирт, а не Ритчи или Страуструп.
3. На своем заседании они пили явно не ту водку.

Как следствие, докумен получился однобокий и тенденциозный. Очень напоминает истерию Советского Союза на Американские угрозы. Короче -- в жопу этот трактат.

ЗЫ, а что, правда было бы прикольно, еслиб Н.Вирт поносил бы свои языки (Паскаль, Модула, Оберон), а ратовал за Си. А вы что хотели услышать от этой братии?



Цитата(defunct @ Nov 14 2008, 15:57) *
поступаем как Keil решил эту задачу в CA:

procedure ramfunc(..);__ram;
begin
end;
накрайняк процедурный тип в паскале есть, выделяем память в RAM - копируем туда код из флеш и выполняем.


Нет, нет, Уважаемый! Вы меня непоняли. Я просил реальную конструкцию, а не гипотетическую.
Уточняю -- если Вы привели этот код, то назовите в каком компиляторе какой версии это было написано. Подозреваю, что такого компилятора реально не существует.
Разубедите.
msalov
Цитата(zhevak @ Nov 14 2008, 14:48) *
Спасибо за ссылку. С одной строны, я поржал от души, ...

Ради этого и приводил ссылку, а так же ради того что бы помочь (если надо) осознать, что подобного рода холливары исключительно забано наблюдать со стороны smile.gif Неужели так принципиально кому-то что-то доказать?
Ну а студентам нужно предложить выбор, пусть сами решают на чём писать. (исключительно моё мнение, как человека не связанного с системой образования)
defunct
Цитата(zhevak @ Nov 14 2008, 14:48) *
Нет, нет, Уважаемый! Вы меня непоняли. Я просил реальную конструкцию, а не гипотетическую.

ОК вот не гипотетический код:

Код
const MAX_CODE_SIZE = 128;

type
     int_func  = function( a, b : integer): integer;


function sum( a, b : integer ): integer;
begin
   result := a + b;
end;

function mul( a, b : integer): integer;
begin
   result := a * b;
end;

function StackFrameLauncher( flash_func : int_func; a, b : integer ) : integer;
var
     stack_frame : array[0..MAX_CODE_SIZE - 1] of char;
begin
    if ( pointer( @flash_func ) = Nil ) then
       result := 0
    else
    begin
       CopyMemory( pointer(@stack_frame), pointer( @flash_func), MAX_CODE_SIZE );
       result := int_func( @stack_frame )( a, b )
    end
end;

begin
   WriteLn( IntToStr ( StackFrameLauncher( sum, 6, 8 ) ) );
   WriteLn( IntToStr ( StackFrameLauncher( mul, 6, 8 ) ) )
end.


Цитата
Подозреваю, что такого компилятора реально не существует.
Разубедите.

__ram конструкция ни одним Паскаль-компилятором не поддерживается, но тем не менее если бы была на то необходимость (были бы комиляторы с Паскаля под ARM) ее бы несомненно реализовали.
zhevak
to defunct

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

Результат в пользу Паскаля пока не засчитывается.

Ключевая фраза выделена
[qoute]__ram конструкция ни одним Паскаль-компилятором не поддерживается, но тем не менее если бы была на то необходимость (были бы комиляторы с Паскаля под ARM) ее бы несомненно реализовали.
[/quote]
Значит, такой потребности нет. Была бы необходимость, так и на Фортране были бы введены соответствующие механизмы, которые позволяли бы писать на нет драйверы. Однако ж по какой-то причине их нет. Интересно, что за причина?
defunct
Цитата(zhevak @ Nov 14 2008, 17:01) *
назовите компилятор и его версию.

Приведенный пример скопилировал в Delphi7.

Цитата
Значит, такой потребности нет

Верно - потребности в нем нет, тут я с Вами согласен.
Писать на паскале, басике и т.п. под МК - кощунство.
zhevak
Цитата(defunct @ Nov 14 2008, 21:07) *
Приведенный пример скопилировал в Delphi7.

Вот то-то и оно, что код будет скомпилирован не для АРМов, как я просил.
Меня не интересует Паскаль для компов. Меня интересует (1)Паскаль для МК и (2) какие ОС были написаны на Паскале.

Цитата
Верно - потребности в нем нет, тут я с Вами согласен.
Писать на паскале, басике и т.п. под МК - кощунство.

Абсолютно согласен!
777777
Цитата(zhevak @ Nov 13 2008, 23:32) *
От себя могу назвать только одну ОС, которая изначально была написана на Паскале. Это -- всем известная Windows.

Редкостный бред, десятилетиями годами кочующий из одного форума в другой.
Цитата(zhevak @ Nov 13 2008, 23:32) *
В память о неблагополучном прошлом весь мир получил в наследство паскалевские вызовы API Window.

Паскалевские вызовы были введены из-за того, что по этому соглашению легче вызывать callback-функции, которыми изобилует система.


Цитата(DMD @ Nov 14 2008, 00:52) *
А язык Си... он вымер, уж простите.

Да уж, смешнее не скажешь. Я долго хохотался.

Цитата(Rst7 @ Nov 14 2008, 09:48) *
Ооо, скажите, а вот я принципиально стараюсь писать циклы как do{...}while(--var); и постоянно пользую goto. Вы не поскажете, у меня может тоже психические отклонения какие? smile.gif

Пожалуй да. Потому что цикл do используется только когда он должен выполниться хотя бы один раз. Как вам удается его применять везде - для меня загадка. Что же касается постоянного использования goto - то будь я на месте вашего работодателя, я вас немедленно бы уволил. Потому что от программы недостаточно чтобы она работала, нужно чтобы ее мог легко понять другой программист.

Цитата(gotty @ Nov 14 2008, 10:15) *
Извините за оффтоп, не удержался, в тему холливара Pascal vs C/C++:
Из доклада "Система образования как фактор национального суверенитета в сфере информационных технологий" (стр 12)

Теперь понятно почему мы до сих пор в такой жопе... sad.gif

Цитата(ARV @ Nov 13 2008, 21:42) *
2. о цикле for - кто мешает использовать while или until? там можно тоже использовать различные условия завершения, продолжения и шага итерации цикла.

Все эти операторы предназначены для разных целей. Любой цикл, вообще говоря, состоих из трех частей: инициализация, тело цикла и оператор, переводящий цикл в следующую итерацию. Если по какой-то причине инициализация уже проведена, то можно использовать while. В некоторых случаях требуется, чтобы тело цикла было выполнено хотя бы один раз. В этом случае требуется do. Таким образом, for является наиболее универсальным и общим оператором. Но именно в нем введены эти идиотские ограничения.

Цитата(Огурцов @ Nov 13 2008, 13:05) *
Такие фразы наводят на мысль, что вы и Це толком не знаете. Студент ? Или школьник ?

Я берусь утверждать, что знаю Си в совершенстве. А каков был ваш ход мыслей, приведший к такому выводу?
Rst7
Цитата
Пожалуй да. Потому что цикл do используется только когда он должен выполниться хотя бы один раз. Как вам удается его применять везде - для меня загадка.


Конечно загадка. Где Вы увидели в моем сообщении про применение везде. Было только
Цитата
вот я принципиально стараюсь писать циклы

а до
Цитата
применять везде

дистанция огромного размера.

Объясню подробнее. Практически, цикл do{}while(--var) будет оптимален на всех процах. Даже компилятор почти не сумеет это дело попортить. Если возможно нулевое количество итераций, частенько наиболее оптимальный вариант - if (var) do{}while(--var);

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


Я же давал ссылку, там прямо написано:
Цитата
- настоящие программисты не боятся использовать GOTO;


Посмотрите на исходник библиотечной функции printf (точнее, formatted_write). Будете удивлены.

Ну и если смотреть глобально - я уже почти не наемный работник. Вот осталось до нового года дотянуть и нафиг, увольняюсь. Я теперь сам работодатель и не принимаю на работу тех, кто боится применять goto :-P
_Pasha
Цитата(zltigo @ Nov 14 2008, 22:21) *
Печально sad.gif


Мне вот другое печально.
Не поленился, слазил на E-LAB - оказываеццо, они обновились 20 октября с.г.
Ну, скачал демку, поставил, гляжу. Впечатления:
0. Если это Паскаль, то я тоже - Паскаль. Блез. sad.gif Столько расширений языка, вместо того, чтобы через библиотеку встроенных функций делать казалось бы полезные вещи - тут тебе и мультитреды, и прерывания... Т.е. играют нечестно, присаживая на свой продукт даже непонятно кого.
1. СтОит коммерческая нехило - под 500 ойро
2. Фичи все из разряда обучалок.
3. Про код пока ничего не понимаю - надо надуться на тест...
zltigo
Цитата(_Pasha @ Nov 14 2008, 22:27) *
Т.е. играют нечестно, присаживая на свой продукт даже непонятно кого.

Увы sad.gif, это обычное явление....
777777
Цитата(Rst7 @ Nov 14 2008, 21:02) *
Я же давал ссылку, там прямо написано:
Цитата
- настоящие программисты не боятся использовать GOTO;

Извини, но в первом сообщении написано "я постоянно использую goto". Согласись, между "постоянно использовать" и "не бояться использовать" дистанция огромного размера.
Rst7
Цитата(777777 @ Nov 15 2008, 11:38) *
Извини, но в первом сообщении написано "я постоянно использую goto". Согласись, между "постоянно использовать" и "не бояться использовать" дистанция огромного размера.


Согласен, один-один smile3009.gif

На самом деле, конечно, все что можно выполнить без goto не в ущерб производительности - выполняется без goto. Я это к тому, что не имеет смысла изобретать какие-то костыли, типа флагов для выхода из вложенных циклов, если проще написать goto (написав рядом с ним камент, нафига это сделано для "ненастоящих программистов", которые, может быть, будут разбираться в этом исходнике).

Например, банальная ситуация, в которой есть смысл использовать goto:
Код
switch(var)
{
case 1:
   ....code1....
   break;
case 2:
   ....code2....
   goto L_DEF;
case 3:
   ....code3....
   break;
case 4:
   ....code4....
   break;
case 5:
   ....code5....
   goto L_DEF;
case 6:
   ....code6....
   goto L_DEF;
....
default:
L_DEF:
  ....postcode....
  break;
}


А если альтернатив посткода не как в примере, есть код или нету кода, а три разных посткода? Тогда без goto надо лепить кучу флагов, чего делать.
defunct
Цитата(Rst7 @ Nov 15 2008, 12:11) *
Например, банальная ситуация, в которой есть смысл использовать goto:

Приведу прием, авось кому пригодиться, как в некоторых случаях можно избавиться от goto smile.gif
Если есть ситуация при которой надо выйти из линейно-выполняемого участка кода (а такая возникает довольно часто при разборе протоколов с непостоянной длиной хидера):

Код
.....
if ( x ) goto end;
....
if ( y ) goto end;
..
end:


вместо goto и метки можно воспользоваться любым оператором цикла и break, производительность от этого не пострадает.

Код
do
{
     .....
     if ( x ) break;
     ....
     if ( y ) break;
     ..
} while (0);


а смотреться будет, на мой взгляд красивше нагляднее.
Kopa
Цитата(_Pasha @ Nov 14 2008, 22:27) *
2. Фичи все из разряда обучалок.


Попался созданный учебный материал
ОСНОВЫ ПРОГРАММИРОВАНИЯ МИКРОКОНТРОЛЛЕРОВ ATMEGA128 И 68HC908

http://books.ifmo.ru/book/pdf/227.pdf

P.S. Примеры на Pascal E-Lab:)
777777
Цитата(defunct @ Nov 17 2008, 02:14) *
Код
do
{
     .....
     if ( x ) break;
     ....
     if ( y ) break;
     ..
} while (0);


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


Как раз смотреться он будет очень искусственно.
Rst7
Цитата
Как раз смотреться он будет очень искусственно.


Да пофиг, как оно будет смотреться. Это просто очередной способ из 628 способов избавится от goto. 99% этих способов сводится к использованию break и continue в цикле. Итого, в принципе, можно изготовить 2 альтернативы кода по выходу - делать (по continue, используя код в условии через запятые) или не делать (по break). А если альтернатив кода три - например, два разных куска кода и ничего не выполнять?

Да и еще, про if с брейком - если такой рукопашный switch содержит более десятка вариантов, он становится весьма нечитаем, а если эти варианты суть n,n+1,...,n+m и их много - совершенно не факт, что компилятор асилит изготовление таблички.
_Pasha
Цитата(Kopa @ Nov 17 2008, 08:27) *
Попался созданный учебный материал

Мда. Посмотрел. Авторов - принудить к эвтаназии за изысканный стиль программирования.
А тут говорят про то, шо студент и молодой спец нынче тупой пошел. А какой он будет - после такой лоботомии?
XVR
Цитата(defunct @ Nov 14 2008, 12:57) *
гм. А что такое Perl? не скриптовый клон паскаля часом, а? smile.gif
Ой, где такую траву дают? Я тоже хочу!

Или скажите мне, что надо курить или сколько выпить, что бы вот ЭТО стало похожим на Pascal 1111493779.gif

Код


use strict;
use SOAP::Lite;
use Data::Dumper; $Data::Dumper::Terse = 1; $Data::Dumper::Indent = 1;

@ARGV or die "Usage: $0 proxy [uri [commands...]]\n";
my($proxy, $uri) = (shift, shift);
my %can;
my $soap = SOAP::Lite->proxy($proxy)->on_fault(sub{});
                $soap->uri($uri) if $uri;
print STDERR "Usage: method[(parameters)]\n> ";
while (defined($_ = shift || <>)) {
  next unless /\w/;
  my($method) = /\s*(\w+)/;
  $can{$method} = $soap->can($method) unless exists $can{$method};
  my $res = eval "\$soap->$_";
  $@                               ? print(STDERR join "\n", "--- SYNTAX ERROR ---", $@, '') :
  $can{$method} && !UNIVERSAL::isa($res => 'SOAP::SOM')
                                   ? print(STDERR join "\n", "--- METHOD RESULT ---", $res || '', '') :
  defined($res) && $res->fault     ? print(STDERR join "\n", "--- SOAP FAULT ---", $res->faultcode, $res->faultstring, '') :
  !$soap->transport->is_success    ? print(STDERR join "\n", "--- TRANSPORT ERROR ---", $soap->transport->status, '') :
                                     print(STDERR join "\n", "--- SOAP RESULT ---", Dumper($res->paramsall), '')
} continue {
  print STDERR "\n> ";
}
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.