LinuxForum.Fans
Тема

C vs Паскаль

Автор: deleted_user 77 сообщений 13011 просмотров
#107041

Изначально я писал на паскале (ну басик тоже проходил естественно :) ), отец был сишником. Сейчас перешел на Си.

xlin написал:

1. Книги которые можно было купить в начале 90х годов были только про pascal. Именно тогда у меня появился первый комп. Если не считать ATARI и SPECTRUM

Хм. Я подобрал только одну. если не ошибаюсь Turbo Pascal 5.5 синяя такая. Отличная книга. По моим впечатлениям ( может глянув ее сейчас я бы думал по другому) - одна из лучших IT книг. Остальные, что мне попадались были откровенным фуфлом.

У отца "библиотека" по сям была больше. Правда часть книг распечатанных утянутых с бибиэсок, часть отксеренных. Причем уровень книг неплох (сравнительно недавно листал).

xlin написал:

3. С\C++ очень не четабельный язык. Это для меня довольно веская причина.

Псоле нескольких лет программинга на паскале, и переходе ни си мне так не показалось. Хотя тут наверное все индивидуально

xlin написал:

4. Я учился в Самаре на ИТ и нам не давали выбор. Только Pascal.
5. Почти все лицеи/институты/университеты учат только на паскале. Исключение факультеты выпускаемые именно программистов.

Та же фигня. Правда кому поогал из текстильного и пед там был вообще бейсик.

xlin написал:

Pascal ни чем не хуже. На нем можно писать замечательные программы ни чем не хуже сишных.

Пожалуй да. Я перешел на Си практически под конкретный проект. Тем не менее в следующий проект получив в распоряжение практически подходящие рабочие исходники на более родном на тот момент паскале я и следующий написал на Си.

Ну и последняя капля из-за чего я перешел на Си. Один и тот же код компилирую под Линем, виндой и маком.

Мой личный взгляд: с переходом на Си я стал более осознанно (не совсем то, но трудно подобрать более точно слово) программировать, код стал более чистым; я стал лучше понимать тонкости (т.е. если будет писать на Паскале, код тоже будет лучше и стройнее).... Я змечал и еще плюсы когда только только переходил, но сейчас даже уже и не помню. В памяти только факт: для меня лучше Си/Си++

#107042
drBatty написал:
в паскале применяется абсолютно другой подход, совсем не такой, как в C. Обрисовать его можно так - паскаль - академический ЯП, т.е. на нём хорошо писать примеры, или скажем какие-то задания для студентов. Никто и не скрывает, что именно для того он и был написан. И написан хорошо, с этим тоже не поспоришь. Беда паскаля в другом: в жизни не бывает примеров.

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

drBatty написал:
В итого, по факту, язык С одержал сокрушительную победу, вытеснив все другие ЯП.

Да ради бога. Никто не мешает студенту, научившемуся основам на примере паскаля или даже бейсика, освоить потом и С. Или еще что-нибудь, непринципиально.

drBatty написал:
дык в том-то и дело, что паскалевские "педали" совсем другие, а руль - так вообще отсутствует.

Бросьте. Если говорить о базе, а не о синтаксических наворотах, то все там примерно одно и то же: циклы есть, ветвления есть, типы данных нужные есть, работа с памятью и указателями есть. А то, что С-ишные руль/педали выглядят по-другому и имеют дополнительные примочки - это уже детали, с которыми можно будет разбираться уже потом, по мере необходимости.

drBatty написал:
BASIC можно выучить за пару-тройку часов, это очень простой ЯП. И с той-же лёгкостью его забыть, изучая С млм какой-нибудь другой ЯП. Паскаль предполагает кропотливый и вдумчивый подход...

Паскаль сам по себе учится за вечер. Кропотливый и вдумчивый подход требуется тогда, когда отсутствует понимание базовых вещей (что есть переменная, что есть функция и т.п.), причем неважно, какой язык при этом изучается. BASIC разве что менее строг в вопросах оформления исходного кода (скажем, переменные можно не объявлять и все такое), но это мелочи.

drBatty написал:
а) изначально, вопрос был про исходные тексты: "зачем студенту исходники?" Ответ прост: если студент в них заглянет, а он заглянет, если сможет, то он увидит код, который написан профессионалами. И сам будет писать как профи. Но если исходники закрыты, то у него будут только 2 примера из MSDN. Допиливая их под свою задачу, такой студент 777 раз наступит на 666 хорошо известных грабель.
б) что такое .NET?

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

#107044
Iskan Der написал:
Если человек научился программировать на паскале, то он без большого труда выучится и на С, и на всем таком прочем.

Я бы расширил фразу до "человек научившийся программировать на любом языке программирования"

#107148

До тех пор, пока речь о языках одного класса, например, процедурных, а языковые средства эквивалентны, разница действительно будет минимальна -- только синтаксис. Взять тот же пузырёк (раз нет элемента table, чтобы расположить рядом, сверну строчки в целях экономии места)

text

procedure print_array(const a: array of integer; n: integer);
var
  j: integer;
begin
  for j:=0 to n-2 do write(a[j], ', '); writeln(a[n-1]);
end;

procedure bubble(var a: array of integer; n: integer); var sorted: boolean; j, tmp: integer; begin repeat sorted:=true; for j:=0 to n-2 do if a[j] > a[j+1] then begin tmp:=a[j]; a[j]:=a[j+1]; a[j+1]:=tmp; sorted:=false; end; print_array(a, n); until sorted; end;

const n=10; a: array [0..n-1] of integer = (13,6,8,56,2,0,-3,5,6,7); begin print_array(a, n); bubble(a, n); end.

[console]$ ./bubble
13, 6, 8, 56, 2, 0, -3, 5, 6, 7
6, 8, 13, 2, 0, -3, 5, 6, 7, 56
6, 8, 2, 0, -3, 5, 6, 7, 13, 56
6, 2, 0, -3, 5, 6, 7, 8, 13, 56
2, 0, -3, 5, 6, 6, 7, 8, 13, 56
0, -3, 2, 5, 6, 6, 7, 8, 13, 56
-3, 0, 2, 5, 6, 6, 7, 8, 13, 56
-3, 0, 2, 5, 6, 6, 7, 8, 13, 56
[/console]

Разница на учебных задачах видна в примерах с файловым доступом (var f: file of some_type), использованием with, использованием строковых операций, ипользованием вложенных процедур...
Но всё это, по большому счёту, мелочи.
while(*p++=*q++); не сложная конструкция, но нужно ли на этапе обучения алгоритмизации отвлекаться на префиксные/постфиксные инкременты/декременты, точки следования, особенности разбора выражений, где часть вычислений выполняется слева направо, а часть наоборот, * в качестве арифметического оператора или операции разыменования указателя, и т.п. моменты?

#107262

Весь этот бред священной войны я не читал, но осуждаю<зачуркнуто>...

1. И действительно, ничего нового под солнцем не наблюдается. Все тоже самое, что и на других сайтах. Какой смысл расходовать свою жизнь на что-то бесполезное :(

2. А вот уже ценная информация. Читайте:

Моя младшая дочь, учится в 10 классе. На информатике они изучают "Паскакаль" для гы-гы-ДОС... в среде гы-гы-гы-Виндовз. Если сказать, что литералы-строки они пишут по русски, но английскими буквами типа vvedite A или znachenie X = ..., то это ничего не сказать. Ибо как можно из кодировки 1251 кропать детям в 866-ю. Итак мозгов нет, а тут еще какие-то непонятные проблемы с русскими буквами! В общем, учатся как могут. Не интересно. Не понятн. Уныло. Зато работа у преподов: как по рельсам (по конспектам) -- что в свое время смогли выучить, то и преподают. Преподают, как умеют. Другому не научены. Да и сами учащиеся не особо горят желанием напрягаться. Нафига оно надо?

Это с одной стороны. А с другой, извините, -- моя семья. Мне про себя как-то легче рассказывать, чем приводить надуманные примеры.

Сейчас мы с дочерью на пару выполняем одну исследовательскую работу: мне это нужно по работе, а ей -- защита на НПК (научно-практической конференции) по физике. Я провожу исследования, она ассистирует, набирается опыта. Работа состоит в том, что нужно снять с объекта кое-какие данные, обсчитать их и проанализировать. Собственно, объект -- это открытое пламя, которое излучает в широкой области видимого спектра, заходя далеко и в ИК (инфракрасный) диапазон, и в УФ (ультрафиолет). На полигоне мы собираем первичные данные ИК- и УФ-датчиками в микроконтроллер, упаковываем их и передаем в комп по USB. "Дома" математически обрабатываем файлы полученных данных.

Программу на микроконтроллере (MEGA8 кому интересно) писали вместе. Не знаю, надо ли упоминать, что писали на С, а не на Паскале. Обучение шло не совсем легко, т.к. на незнание самого языка наслаивалась незнания архитектуры микроконтроллера. Но мне все же как-то удалось ей это объяснить. Причем ей ведь нужно было еще въехать и в саму суть такого понятия как тулчейн (Code::Blocks, avr-gcc, avrdude, Stk200) -- что это? Для чего это? Как работать с этим работать? А можно как-нибудь без чего-нибудь обойтись? И т.д.

Стандартный процесс разработки: написание кода -> компиляция-сборка -> программирование микроконтроллера -> запуск, получение багов -> исправление ошибок ... и так по кругу в течение Субботы-Воскресенья практически не разгибаясь. В результате, дочь познакомилась не только с изолированным (оторванным от реалии) языком, а вообще с процессом производства маленьких гаджетов. (Ранее она, конечно, видела как папка чего-то там делает, но это ее никак не затрагивало.) А тут вона как оно обернулось. Процесс захватил ребенка! Ну так или иначе, мы с ней получили работающий регистратор. Даже если она на тот момент смогла запомнить 5% из того, что я ей рассказал (на самом деле никто этой цифры не знает!), то было бы уже замечательно.

Итак, мы съездили на полигон, провели испытания, записали результаты измерений в файл и вернулись домой. Настала пора обрабатывать математически полученные данные. Вот это была песня! Наши результаты были зашумлены. Ну это понятно, пламя -- это стационарный процесс. Но его случайность никто не отменял. Вот это было интересно. Но на нашу запись шума наложилась 50-герцовка от силового кабеля. И как избавится?

Первый способ предложил я -- прогнать НЧ фильтром по сигналу. ВЧ-колебания будут задавлены, но при этом попадут под "пресс" и ВЧ колебания сигнала (10-20 Гц). Хреново. Дочь предложила сгенерировать 50-герцовую синусойду и вычесть ее из сигнала. Вот этого я никак не ожидал он нее! Молодец! Но мы не стали этого делать, т.к. было бы сложно удержать и фазу и амплитуду на протяжении одного миллиона отсчетов (точек) нашей записи. Мы решили прогнать не через ВЧ-фильтр, а сделать скользящее окно величиной как раз равное периоду 50-герцовки. Усредняя результаты в окне мы давим полностью 50-герцовку, не теряя ВЧ-компоненты нашего сигнала.

После разборки по деталям алгоритма мы с ней написали прогу. Разумеется опять в С (gcc). Когда получили первые, очищенные от 50 Гц результаты, радости не было края! Да, добавлю, что графики выводили в gnuplot. Потом, в аэропорту мы еще что-то пили... но я уже не помню что <зачеркнуто> мы провели еще пару каких-то издевательств над полученными данными, и похоже, дочь въехала в понятия. Когда я попросил отнормировать и совместить УФ- и ИК-спектры, так что бы я видел, где располагаются УФ вспышки на ИК-фоне, она вообще в легкую самостоятельно математически это сделала. Я понял, что теперь ее не надо учить языку. Процесс пошел. Более того, мне сейчас ее приходится сдерживать, ибо на Паскакаль она плюется даже дальше чем я. Как бы ей это в школе боком не вышло.

Так вот, о чем я, когда я ее натаскивал, никакие страшные операторы типа a++, *pos и тем паче t += dt никак не повлияли на процесс обучения. Не надо гнать на С, что он такой страшно-неподъемный!

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

Но у нас в России 50 тысяч школ, а количество учащихся около 13 миллионов! И нам надо как-то их всех хотя бы отдаленно познакомить с процессом программирования. Как?
Поэтому -- какая, собственно, разница, какой Пэдро? Мало ли этих.. Пэдров! <зачеркнуто> -- какая собственно разница, с помощью какого языка программирования знакомить детей с программированием? Ведь, согласитесь, от силы процентов пять из них станут программистами или будут связаны напрямую с программированием. Наверно не имеет смысла втирать дорогостоящие технологии остальным 95% учащихся. А тому, кому нужно, сам найдет способ узнать.

#107282

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



PS: zhevak, можно на исходные тексты полюбоваться? ;)

#107347

да конечно можно! Только там ничего интересного нет. Все предельно тупо. Вот, примерно так:

создать двумерный массив
Открыть файл,

если не конец файла
считать строку,
конвертировать текст в два числа
записать их в массив,
инкрементировать индекс

закрыть файл.

вызвать функцию для мат.обработки массива

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

В консоли перенаправляем вывод в файл, который потом скармливаем его gnuplot-у.


Более конкретно, сейчас не могу. Исходники на другом компе в другом месте.
Короче, ничего интересного для программеров, все стандартно: fopen(), fclose(), while(!feof(..)), fgets(), atoi(), ar[ i].uv = uv, ar[ i].ir = ir, printf("..", ..) и т.д. вплоть до return EXIT_SUCCESS;

#107358

zhevak, я думал вы там БПФ реализовали, коли частоты фильтруете. Мне-бы пригодилось...

#107376
drBatty написал:
zhevak, я думал вы там БПФ реализовали, коли частоты фильтруете. Мне-бы пригодилось...

Да, ну-у! Какое там БПФ...
БПФ -- это потом... может быть... Пока оно мне не надо. А школьника мучить вышкой (вышей математикой) -- ну его нафиг! Что я изверг какой что-ли!... Хотя, да :) :) :)

А вот с подачи Хабра хочу спросить -- "Где? Где, я спрашиваю? Где тут Паскакаль?!"
http://www.peeep.us/f310eddb

Помер Паскаль. Отслужил свое и помер.
И пока сами идейно убежденные люди (носитель Паскаля) не уйдут в след за ним в небытие, в школах-институтах так и будут учить людей мертвому Паскалю.
Паскаль -- это типа Латынь. Уже и так ясно, что нафиг не нужна, но считается, что полезно. Типа традиция такая. Дань программерскому средневековью (в хорошем смысле).

#107388
zhevak написал:
БПФ -- это потом... может быть... Пока оно мне не надо. А школьника мучить вышкой

ИМХО БПФ не слишком сложна для понимания. Да и потом... Что-бы написать какую-нить прожку на вычисления совсем не надо знать про дихотомию, а именно дихотомией CPU разрешают уравнения x == y*z, найти z. (ага, z = x/y). Многие кодеры даже не знают, как выбирать знак остатка от деления :( (кстати, CPU x86 тоже не знает). И ничего...

zhevak написал:
Паскаль -- это типа Латынь. Уже и так ясно, что нафиг не нужна, но считается, что полезно.

BrainFuck полезно, а не паскаль ;)

#107424
zhevak написал:
И пока сами идейно убежденные люди (носитель Паскаля) не уйдут в след за ним в небытие, в школах-институтах так и будут учить людей мертвому Паскалю.

Уйдут - не уйдут, какая разница-то? Есть те, кто учит программировать. Неважно, какой язык они используют при этом (BASIC, Pascal, C, да хоть BrainF**k), они будут готовить нормальных специалистов. Есть те, кто учит языку, т.е. делают упор не на матчасть, а на синтаксические особенности своего любимого BASIC/Pascal/C. Такие "сенсеи" будут плодить только быдлокодеров.

#108143

Аргумент не в пользу Паскаля


В природе существуют такие микроконтроллеры -- AVR. Они очень широко используются и очень популярны. И я думаю, почти все завсегдатаи форума о них что-нибудь да слышали.

Для тех же, кто не знаком с этими бестиями близко, я немного понудю на тему внутреннего строения.

AVR архитектура отличается от архитектуры MSP430, от ARM7, от Cortex, от STM8 тем, что она является Гарвардской. (Остальные названные процы имеют архитектуру Фон-Неймановскую). Что это значит?

Это означает то, что у AVR имеется три адресных пространства со своей системой адресации:

1. Адресное пространство flash. Здесь располагается коды программ, отсюда они и "выполняются". Единожды запрограммированная информация из этого пространства в дальнейшем только считывается.

2. Адресное пространство RAM. Во время работы МК здесь размещаются переменные, стек возвратов функций, стек данных (параметров функций). Сюда проецируются порты ввода-выода и регистры периферийных устройств. Это пространство -- типичная оперативная память. Но в отличие от оперативы компов, в этой памяти программы выполняться не могут и, соответственно, никогда сюда не помещаются.

3. Адресное пространство EEPROM. Это небольшое адресное пространство предназначено для данных, которые нужно хранить во время выключенного питания. Здесь размещаются различные установки, параметры, коэффициенты. По своему назначению это пространство аналогично конфигурационному файлу. Из этого пространства также не могут выполняться программы.

Итак. Программы хранятся во flash. Оперативные данные размещаются в RAM. Хорошо. Вопрос -- А где тогда хранить константы? Это тоже данные, но данные, которые никогда не меняются?

Логика подсказывает -- их нужно хранить тоже во flash. Прекрасно! Но беда в том, что язык С ничего не знает о таком понятии как адресное пространство. Язык С не предназначен для машин с Гарвардской архитектурой.

И в самом деле. давайте напишем прогу, которая выводит в последовательный интерфейс типовое "Здравствуй, мир!"

text

char g_sHello[] = "Дарова, баклан!"; // Глобальная переменная

... // Где-то далее в программе puts(g_sHello); ...

Это работать будет. Но как?

Давайте попробуем понять. g_sHello -- это адрес. Какой адрес? В какой области памяти? Где размещается цепочка символов?

Выполняя программу по шагам с помощью JTAG, вы можете увидеть, что, действительно, все работает правильно, т.к. цепочка символов g_sHello находится в оперативной памяти. Но как же так!? Мы ведь знаем, что при выключении МК оператива теряет информацию! Откуда ж тогда после включения оператива узнает правильные значения g_sHello?

Все верно! Значения g_sHello (т.е. цепочка символов) копируется из flash в RAM еще до выполнения главной функции программы (main). И надо сказать, нагло остается там занимать место до самого последнего момента выключения МК. И не важно, понадобится нам g_sHello еще раз или нет.

Копированием данных из flash в RAM занимается загрузчик. Вы о нем может ничего и не слышали, но это не важно. После копирования информации, все встает на свои места: информация располагается там, где она обязана быть (т.е. в области данных), а компилятор языка С работает как он и должен работать -- ничего не зная о пространствах памяти. Удобно, ничего в языке ломать не надо.

Но, спешу вас обрадовать. Такое счастье длиться не долго. Как только ваши программы разрастаются в размерах, оперативы начинает не хватать. Ее и так там было не очень, а еще это бессмысленное дублирование данных из flash в RAM в угоду сохранения языка! В общем, дорогой разработчик-программист, либо обламайся и переходи на ARMы, либо срочно что-нибудь придумывай!

"Не-не! Вы ничего не поняли! Воровать ничего не надо. Все уже украдено еще до вас!" -- классика. Люблю классику!

Так вот, чтобы не ломать язык и не расходовать понапрасну память были придуманы макросы, которые позволяют работать с данными, находящимися во flash.

text

char g_sHello[] PROGMEM = "От баклана и слышу!"; // Глобальная переменная

... // Где-то далее в программе char buf[20];

strcpy_P(buf, g_sHello); puts(buf); ...

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

Так вот, макрос PROGMEM объявляет, что массив располагается в программной памяти (т.е. во flash). Функция strcpy_P подобна одноименной функции strcpy из стандартной библиотеки, но копирует инфу не из памяти_данных в память_данных, а из программной_памяти в память_данных. В этом примере, мы создали буфер buf в оперативной памяти. По сути мы сами, своими руками выполнили работу загрузчика. Но мы произвели копирование инфы по умному -- тогда, когда она нам понадобилась., а "не раз и на всегда". Т.е. мы расходуем оперативу очень разумно. Теперь, после того как инфа появилась в памяти данных, можно снова использовать "чистый" код С.

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

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


Сложно? -- С непривычки -- да. Сложновато.
Суть понятна? Осязаема? Привыкнуть можно? -- Три раза "да". Значит, метод будет жить и применяться на практике.


А теперь, внимание! Фокус! -- Повторите те же манипуляции с памятью, но на Паскале!
(Забегая вперед скажу, что это сделать можно. Но будет-ли это решено так же изящно, как на Си? Скорее всего нет. Скорее всего это будет очень тяжелое извращение типа объявить разные области памяти на Паскале, а обработку производить с помощью ассемблерных костылей. Ежиков не пробовали рожать?
В свое время я видел и не такие извращения! Венец творения -- драйвер-руссификатор dot-mattrix принтера для DOS, был написан на Фортране и занимал 300-400 КБ из имеющихся 640. Поразительно, но он работал! Под всеобщее ржание коллектива :) Произведение искусства? -- да. Технология? -- нет.)

Вы все еще спрашиваете, почему Паскаль вымер как класс! -- Инструмент, не отвечающий современным технологиям.

#108157
zhevak написал:
Аргумент не в пользу Паскаля

Чую, вы тему не очень внимательно читали. Или тему, от которой отрезали эту тему.
Речь шла об обучении программированию. При чем здесь микроконтроллеры? При чем здесь макросы?
З.Ы. Скажем, в прикладной разработке для ПК макросы, как правило, нужны чуть более, чем вообще ни разу, так что их отсутствие вряд ли стало/станет для какого-то ЯП причиной вымирания.

#108192

А давайте, удалим мое сообщение?
И Вам спокойнее жить, и мне не оправдываться...

Считаю до 22:00 по Москве и стираю сам.

#108197

zhevak,
Ваши аргументы не о языке Паскаль, а о реализации размещения тех или иных данных в той или иной области памяти.
Позволю себе говорить на том же языке о том же предмете -- в качестве примера привести одну из самых известных реализаций Паскаля -- Turbo/Borland Pascal.

text

const
  come_const = some_value; { обычная константа, не имеет области хранения, вставляется в месте использования }

var some_data: some_type; { some_data попадёт в сегмент данных, RAM }

const some_idata: some_type = (init_values); { some_idata попадёт в сегмент инициализированных данных, EEPROM }

function some_code( by_value: some_type; { передача параметра по значению, в стэк попадает копия объекта } var by_ref: some_type; { передача параметра по ссылке, в стэк попадает адрес объекта } const byref_const: some_type { передача параметра по ссылке, в стэк попадает адрес объекта, запрет изменения контролируется компилятором } ): some_type; var some_loc_data: some_type; { some_loc_data размещается на стэке } begin { код размещается в сегменте кода } if some_data > some_const then ; { копия some_const размещается в сегменте кода } end;

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

text

{$segment RAM}
...
{$end}
{$segment EEPROM}
...
{$end}

Ровно также в BP для Windows было добавлено управление атрибутами сегментов, например управление атрибутами сегмента кода, специфичными для этой ОС (но не относящимися к собственно языку): {$C список атрибутов}, например {$C FIXED MOVEABLE DISCARDABLE}. То есть внеязыковый вопрос был эффективно решён внеязыковыми средствами конкретной реализации.

Наличие strcpy_P() имеет отношение к runtime -- средствам времени выполнения, но не к языку, и даже не к его реализации.
В помянутом компиляторе никто не запрещал подключить стороннюю реализацию из объектного файла:

text

function strcpy_P(src: pchar, dst: pchar): pchar; external; { объявление для компилятора, чтоб знал как проводить синтаксический контроль и как вызывать }
{$L platform.obj}  { инструкция линкеру включить файл реализации }

Теперь позвольте вернуться к теме обсуждения. Полагаю, что всё изложенное по предмету "Аргумент не в пользу Паскаля" следует признать не относящимся к собственно языку, а имеющим отношение к к особенностям той или иной реализации и не более того.

#108202

Возвращаясь к C/C++ vs Паскаль в свете приведённого примера нужно отметить, что C, задуманный как "переносимый ассемблер", и C++ как синтаксически совместимый с ним, имеют языковые средства управления размещением и временем жизни объекта (auto, register, volatile, static, ...), но нужно помнить, что многие из них являются всего лишь пожеланием компилятору, но не обязательными к выполнению, а их наличие в качестве именно языковых, а не внеязыковых средств -- результат следования изначальной "задумке" быть ближе к железу.

#108208

По поводу C++ в качестве языка для обучения, простейший пример: все ли с ходу смогут прочитать и объяснить что означают:

text

int       *       
int const *       
int       * const 
int const * const 
int const & 
int       & const 
const volatile int & 
int &       Get(int i)
int const & Get(int i) const 

ведь на изучаемом языке нужно уметь не только писать, но и читать написанное.

#108260
zhevak написал:
"Паскакаль" для гы-гы-ДОС... в среде гы-гы-гы-Виндовз. Если сказать, что литералы-строки они пишут по русски, но английскими буквами типа vvedite A или znachenie X = ..., то это ничего не сказать. Ибо как можно из кодировки 1251 кропать детям в 866-ю. Итак мозгов нет, а тут еще какие-то непонятные проблемы с русскими буквами!

Что-то тут не вяжется.
Win95, Win98, WinME: запускаем command (ага, командный процессор так назывался, command.com), chcp говорит 866 страница.
Win2k, WinXP, Win2k3, Vista, Win7: запускаем cmd, chcp говорит 866 страница.
Ок, с выводом набранного в cp866 (если для набора используют среду или edit) в cp866 вроде проблем нет.
Проблема с вводом?
Win95, Win98, WinME: keyb ru,,c:\windows\command\keybrd3.sys в autoexec.bat или install=c:\windows\command\keyb.com ru,,c:\windows\command\keybrd3.sys в config.sys.
Win2k, WinXP, Win2k3,vista32: kb16 ru в c:\windows\system32\autoexec.nt
и поправить HKLM\SYSTEM\CurrentControlSet\Control\Keyboard Layout\DosKeybCodes 409 с us на ru
Либо воспользоваться другим русификатором (rkm, keyrus, unicyr, ...).
Либо набирать текст в редакторах, поддерживающих cp866.

Чтоб окошки программ с dpmi не схлопывались (читай, чтоб работала IDE): раскомментировать NTCMDPROMPT в c:\windows\system32\config.nt

И что, это кто-то проделал на школьных машинах? Вот тут беда -- правой рукой левое ухо будем чесать и жаловаться на неудобства, но не пошевелимся, чтоб что-то изменить.
Разруха в головах (q).

#108353

м-м.. да. :(

И действительно, к чему все это? Все эти бесполезные споры.
Лучше б взяли водочки, сняли бы девочек, да махнули бы куда-нибудь на Волгу... (с)

#108365
bormant написал:
По поводу C++ в качестве языка для обучения, простейший пример: все ли с ходу смогут прочитать и объяснить что означают:
text

int       *       
int const *       
int       * const 
int const * const 
int const & 
int       & const 
const volatile int & 
int &       Get(int i)
int const & Get(int i) const 

ведь на изучаемом языке нужно уметь не только писать, но и читать написанное.

а это очень нужно -- человеку, начавшему только-только изучать математику, сразу вламывать элементы из высшей математики?

По поводу начального обучения детей арифметике, а потом и вышке, простейший пример: все ли с ходу смогут прочитать и объяснить что означают:

rot P,
div H,
grad E

(жаль, не могу нарисовать значки векторов над буквами)
ведь на изучаемом предмете нужно уметь не только складывать и вычитать, но и уметь решать дифуры и уметь вычислять БПФ .

По моему, фигня какая-то :(

А вот что касается примера на Паскале.

{$segment RAM}
...
{$end}
{$segment EEPROM}
...
{$end}

то пример-то хороший. И даже спасибо за него. Но я почему-то не знаю НИ ОДНОГО программиста, кто бы писал системные вещи (для МК, в частности) на Паскале. Я где-то давно читал, что первая версия Венды была написана на Паскале. Но потом M$ почему-то резко прекратила разработку как самого Паскаля, так и быстро переписала код на MS С.
Чем же тогда объяснить непопулярность Паскаля, если не его неуклюжестью?

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

Войдите или зарегистрируйтесь, чтобы ответить.