LINUX.ORG.RU

Программируете ли вы на Паскале?

 


0

5

Под «Паскаль» понимается любая реализация языка программирования Паскаль. Это опрос, чтобы узнать настоящее, текущее отношение людей к данному языку программирования.

>>> Результаты



Проверено: hobbit ()
Последнее исправление: hobbit (всего исправлений: 4)

Ответ на: комментарий от alysnix

переменные, обьявленные в блоке невидны снаружи блока

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

mister_VA ★★
()
Ответ на: комментарий от mister_VA

Наличие if гарантирует, что даже в этом случае возможной ошибки не будет.

какой ошибки-хоть? переменняая в любом скопе может иметь любое имя, главное чтобы в скопе не было переменной с тем же именем.

выше по списку скопов могут быть такие же имена, это не имеет отношения к текущему.

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

alysnix ★★★
()
Ответ на: комментарий от liksys

Если ты наговнокодил функцию на 10 тыщ строк

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

alysnix ★★★
()
Ответ на: комментарий от alysnix

С этим утверждением никто не спорит. Я лишь ставлю под сомнение теоретическое фантазирование пациента о невероятно насущной проблеме пересечения имён.

liksys ★★★★
()
Ответ на: комментарий от liksys

Я лишь ставлю под сомнение теоретическое фантазирование пациента о невероятно насущной проблеме пересечения имён.

В трактовке господина @mister_VA проблема, конечно, яйца выеденного не стоит. Но в целом: naming - это искусство. Сохранить баланс между краткостью и уникальностью зачастую непросто. Самый насущный вопрос который обычно возникает «а где вот это ещё используется, и что потенциально может поломаться если мы «потянем ниточку вот здесь»».

bugfixer ★★★★★
()

Не программирую, но изредка приходится читать код на Делфи (как я понимаю это следующее развития Паскаля)

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

bonta ★★★★★
()
Ответ на: комментарий от mister_VA

Мой пример и показывает, что так НЕЛЬЗЯ делать

Пословицу про дурака и стеклянный **й знаешь?

wandrien ★★
()
Ответ на: комментарий от no-such-file

Потом нельзя апдейтить. У тебя сгенереный код не хранится в памяти, а сразу пишется на ленту/перфокарты.

Но перфокарты с текстом (или образы перфокарт объектного модуля на ленте) не обязаны выдаваться в объектную колоду в порядке увеличения адресов фрагмента программной секции.

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

Так же однопроходный перфокарточный компилятор может перфорировать пропущенные переходы к концу циклов и условных конструкций.

vM ★★
()
Ответ на: комментарий от mister_VA

С обучением программированию во всём мире очень плачевно

Да, и ты тому - яркое доказательство.

liksys ★★★★
()
Ответ на: комментарий от mister_VA

10 тысяч строк – это многовато не то, что для функции, но даже для одного файла исходного кода.

Переменные могут быть 1) глобальными, этих в нормальном проекте вообще минимум миниморум; 2) локальными; 3) полями класса. Обсуждаемая особенность паскаля относится исключительно к п.2, т.е. к локальным переменным, т.е. про «все типы вами введённых во всех местах программы переменных» и про «используется периодически далее в следующих 10 тыс строках» тут вообще не в кассу.

hobbit ★★★★★
()
Ответ на: комментарий от hobbit

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

liksys ★★★★
()
Ответ на: комментарий от no-such-file

Си появился чуть раньше чем 89 год.

А на Фортранах 1950-х переменные можно было вообще нигде явно не объявлять. Правда, в ранних вариантах на самом Фортране нельзя было написать функцию, даже нерекурсивную.

vM ★★
()
Ответ на: комментарий от vM

До сих пор пишут IMPLICIT NONE везде где можно, чтобы Фортран автоматически не создавал целочисленные переменные, если их имена начинаются на буквы I, J, K, L, M, или N, и вещественные, если на другие буквы. Ошибаешься при присваивании на одну букву, получаешь новую переменную и старую переменную с неверным значением, и неделю ищешь ошибку в математике =)

Archer73
()
Ответ на: комментарий от vM

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

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

На ленте тоже можно такое делать, если использовать специальный формат с нумерацией адресов, но насколько мне известно такое не использовалось. Тем более что непонятно как это потом собирать, кроме как в памяти.

no-such-file ★★★★★
()
Ответ на: комментарий от vM

А на Фортранах 1950-х переменные можно было вообще нигде явно не объявлять. Правда, в ранних вариантах на самом Фортране нельзя было написать функцию, даже нерекурсивную.

Глобальные переменные не вызывают проблем, т.к. под них не надо делать фрейм/пролог внутри кода. Они после всего кода выдаются отдельной секцией.

no-such-file ★★★★★
()
Последнее исправление: no-such-file (всего исправлений: 1)
Ответ на: комментарий от vM

Правда, в ранних вариантах на самом Фортране нельзя было написать функцию, даже нерекурсивную.

Как минимум в Fortran IV, а может, и раньше, это уже работало. В Фортране больше напрягало требование фиксированных отступов в каждой строке. Думаю, от этого многие плевались (что не помешало автору Питона вторично наступить в лужу).

hobbit ★★★★★
()
Ответ на: комментарий от hobbit

в Fortran IV, а может, и раньше, это уже работало

Fortran IV - это уже эпоха Алгол-60

vM ★★
()
Ответ на: комментарий от no-such-file

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

Несколько колонок – тип карты, относительный или абсолютный адрес, количество слов на карте и сами слова.

https://www.ibm.com/docs/en/SSENW6_1.6.0/pdf/asmp1024_pdf.pdf#_OPENTOPIC_TOC_PROCESSING_d135e72701

Appendix C. Object deck output. TXT record format.

Тем более что непонятно как это потом собирать, кроме как в памяти.

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

vM ★★
()
Ответ на: комментарий от alysnix

какой ошибки-хоть?

printf может вывести значение переменной из «закрытой» «голыми скобками» области видимости.

имя переменной в функции может совпадать с именем глобальной переменной.

Это можно, можно даже имя идентификатора локально в операторе.

Но вот такое делать нельзя:

#include <stdio.h>
int main (void)
{
 int a=200;
 printf ("A = %d \n",a);
  {
    float a=-3.7, b=10.0,e;
    printf ("A = %f\n",a);
    e=a+b;
    printf ("E = %f\n",e);	
    }
printf ("A = %d \n",a); /// выведет 200
printf ("A = %f \n",a); /// выведет 6.3
return 0;
}

или так:

#include <stdio.h>
int main (void)
{
 int a=200;
 printf ("A = %d \n",a);
  {
    float a=-3.7, b=10.0,e;
    printf ("A = %f\n",a);
    }
printf ("A = %d \n",a); /// выведет 200
printf ("A = %f \n",a); /// выведет -3.7
return 0;
}

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

printf ("Скорость = %f \n", v); /// выведет скорость v
printf ("Ускорение = %f \n", v); /// опять выведет v, а не a
mister_VA ★★
()
Ответ на: комментарий от hobbit

В Фортране больше напрягало требование фиксированных отступов в каждой строке.

Это отступы для меток, осталось со времён перфокарт. Совершенно не так, как в Питоне, где отступы играют роль операторных скобок.

mister_VA ★★
()
Ответ на: комментарий от mister_VA

Так тоже UB

#include <stdio.h>
int main (void){
int a=200;
float c=-3.7, b=10.0,e;
printf ("A = %f\n",c);

printf ("A = %d \n",a); /// выведет 200
printf ("A = %f \n",a); /// так нельзя!!! выведет -3.7
return 0;
}

Другая реализация может вывести какой-нибудь мусор, а третья – по понедельникам 0.0, а по вторникам аварийно завершит работу.

vM ★★
()
Ответ на: комментарий от mister_VA

вот вам пример:

я просто переименовал вашу a в aa, и выкинул мусор.

#include <stdio.h>
int main (void) {
    int aa = 400;
    printf ("A0 = %d \n",aa);
    {
        float a = -3.7;
        printf ("A1 = %f\n",a);
    }
    printf ("A2 = %d \n", aa); /// выведет 200
    printf ("A3 = %f \n", aa); /// выведет -3.7
return 0;
}

принтует -

A0 = 400 
A1 = -3.700000
A2 = 400 
A3 = -3.700000 

пересечений по именам нет. есть неверный вызов последнего print. и он принтует мусор, поскольку ему предложили печатать float от инта. адрес aa(int) - [bp-4], адрес a(float) - [bp-8].

итак, блоки тут вообще не причем.

alysnix ★★★
()
Последнее исправление: alysnix (всего исправлений: 1)
Ответ на: комментарий от vM

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

например для эмуляции операций с плав. точкой там, где она аппартно не поддерживается.

alysnix ★★★
()
Ответ на: комментарий от sabacs

А какой более актуальный?

Что то из первой десятки в рейтинге языков. Возможно, из второй десятки. Но не со дна

Aster
()
Ответ на: комментарий от vM

Несколько колонок – тип карты

Ты цитируешь фрагмент про ленту и рассуждаешь про карту. Даже не знаю, ты тупой или невнимательный? Я тебе прямо сказал, да с картами такой фокус прокатит. Нет, ска, ты всё равно лезешь в бутылку. Ну ещё раз повторю, да, с картами так можно. Откомпилять и потом отсортировать. Это гемор, но работает.

no-such-file ★★★★★
()
Ответ на: комментарий от sabacs

А по каким критериям составляются эти рейтинги?

Критерии разные, в основном по поисковым запросам. Но если они более менее бьются с количеством вакансий, то в чём проблема?

Aster
()
Ответ на: комментарий от no-such-file

В Фортране это вообще не «геморрой». Вот нумерация каждой строки в Бейсиках была отстоем, поскольку шага в 10 могло не хватить для вставки операторов между.

mister_VA ★★
()
Ответ на: комментарий от no-such-file

цитируешь фрагмент про ленту и рассуждаешь

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

struct { uintptr_t where; size_t count; uint8_t data[60]; } 
text[10]={
	{0, 4, 
	u8"\211L$\b"},
	{8, 40, 
	u8"\307D$$\1\2\3\4\213D$@\211D$ \213T$ \213L$ \350\0\0\0\0H\203\3048\303"},
	{4, 4, 
	u8"8\203\3548"},
};

и выполняет memcpy() в цикле.

vM ★★
()
Ответ на: комментарий от mister_VA

Т.е., если готовим профессиональных программистов, то это Си и далее. Если математиков-теоретиков, то это Лисп, Фортран. Если прикладных математиков, то это Фортран, Лисп, Си. Если физиков, то Фортран, Си. Социологам – R.

Т.е. Вы опять несёте ахинею - я уже этому не удивляюсь, такое ощущение что Вы вообще ни в чем не разбираетесь. Позорите свой матмех, фу быть таким…

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

А С это ЯП для системных вещей.

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

AntonI ★★★★
()
Последнее исправление: AntonI (всего исправлений: 1)
Ответ на: комментарий от mister_VA

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

AntonI ★★★★
()
Ответ на: комментарий от AntonI

Ну Фортран ладно… А вместо Лиспа-то что? На Эрланг с Хаскелем сразу?

P.S. Не знаю про шумерский, а латынь в некоторых средних школах учат.

hobbit ★★★★★
()
Последнее исправление: hobbit (всего исправлений: 1)
Ответ на: комментарий от hobbit

вместо Лиспа-то что?

Пайтн вместо всего…

vM ★★
()
Ответ на: комментарий от hobbit

И латынь учат, и древнегреческий учат - но не в качестве ОСНОВНЫХ языков, если нужно работать переводчиком для живых людей.

Вместо лиспа питон вестимо:-)

AntonI ★★★★
()
Ответ на: комментарий от sabacs

Я говорю про числодробилки. Я пишу числодробилки уже 25 лет, за это время я сам дважды сталкивался с фортрановскими кодами (оба уже все, умерли) и слышал на ЛОРе про один живой код для предсказания климата. На конференциях типа RuSCD фортрановских кодов я не помню.

Если на ЯП пишут исчезающе мало можно считать что ЯП мёртв (или при смерти- как хотите).

AntonI ★★★★
()
Ответ на: комментарий от AntonI

если нужно работать

1. Иной программист на древнем коболе востребованнее знающих «основной» язык.
2. Уже не нужно работать некоторым, просто нравится программировать на удобном языке, автоматизируя свои задачки или решая какую-нибудь математику.

novus
() автор топика
Последнее исправление: novus (всего исправлений: 1)
Ответ на: комментарий от novus

А кто то по средневековым технологиям штаны шьёт и замки строит.

Мы говорим про то чему нужно учить студентов которые потом будут РАБОТАТЬ В ИНДУСТРИИ.

А хобби всякие нужны, хобби всякие важны - с этим я не спорю.

AntonI ★★★★
()
Ответ на: комментарий от AntonI

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

А за всех или за «основное» не скажу. За себя скажу. Мне в жизни паскаль (delphi) пригодился на этапе первоначального накопления капитала. ) Сейчас всё может быть иначе, я не знаю.
Но тогда это была работа с базами данных, утилитки под свои задачи, генерация разных документов и т.п. Между делом хобби, числодробилки. У других людей, конечно, другой опыт.

novus
() автор топика
Последнее исправление: novus (всего исправлений: 1)
Ответ на: комментарий от vM

в котором написано, что, куда и сколько положить

Можно да, но собирать это придётся в памяти. Это не карты которые можно физически тасовать. Возникает вопрос, если у тебя есть под это память, то зачем пытаться вырвать гланды через жопу, вместо того чтобы сразу генерировать в два прохода?

no-such-file ★★★★★
()
Ответ на: комментарий от mister_VA

Вот нумерация каждой строки в Бейсиках была отстоем, поскольку шага в 10 могло не хватить для вставки операторов между

Бейсик изначально создавался как интерактивный REPL, нумерация там нужна была в том числе для строчного редактирования. А что касается вставки большой порции кода, то для этого есть goto/gosub.

no-such-file ★★★★★
()
Ответ на: комментарий от novus

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

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

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

Мб когда то что то из новых ЯП вроде раста/D смогут сдвинуть плюсы, я ХЗ. Но пока что дела обстоят именно так…

AntonI ★★★★
()
Последнее исправление: AntonI (всего исправлений: 2)
Ответ на: комментарий от AntonI

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

sabacs
()
Ответ на: комментарий от no-such-file

А что касается вставки большой порции кода, то для этого есть goto/gosub.

Настоящий погромист имеет толстую жопу, красные глаза и не боится условных переходов!(с)

AntonI ★★★★
()
Ответ на: комментарий от sabacs

Для него выпускаются эффективные компиляторы

Intel перешел на LLVM. Лучший оптимизирующий компилятор GCC.

MOPKOBKA ★★★★
()
Последнее исправление: MOPKOBKA (всего исправлений: 2)
Закрыто добавление комментариев для недавно зарегистрированных пользователей (со score < 50)