Обновить

Комментарии 33

но при этом предусматривающий некоторое распараллеливание операций через GOSUB и GOTO

Акститесь, какое блин распараллеливание, нет там никакой параллельности, всё идет строго последовательно, gosub это вызов подпрограммы, возврат из которой происходит через return(resume)

goto - это просто переход в одну сторону из которого нельзя вернуться

Это именно "те самые кошмарные" операторы, из-за которых все хейтят бейсик

отличные команды для до ООП эпохи (они полностью соответствуют духу работы ЦПУ), я их до сих пор использую в C# по необходимости, сильно упрощает написание многих вещей, это про GOTO, а GOSUB это такой же эквивалент как и любой метод сейчас, просто он именованный а не в виде номера строки.

Представьте у вас есть два while, один в другом (а бывает и больше) как вы предлагаете покинуть их без дополнительных условий и проверок?

while (true)
  while (true)
    if (true) goto label1;
label1:
//

в С# вы их до сих пор используете - не так, как в коде который в статье, кстати ваш пример чутьли не единственный который нужен и действует он обычно только внутри контекста одной ф-ции, а "тот самый" goto действует глобально

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

чтобы понять всю печаль, преставьте себе что листинг из статьи не на 900, на на 10000 и goto - gosub там пара сотен штук, и удачи вам оттрасировать вызовы в таком коде, чтобы тыкнуть в рандомное место и сказать уверенно, откуда туда может придти выполнение программы и что будет если вы напишите 100500 gosub 200500 потом пару раз goto 100, 200, etc..а потом resume(return) ...и куда у вас вернется вызов gosub и откуда?..эти операторы не просто так поудаляли везде и заменили на ф-ции с метками

в С# вы их до сих пор используете - не так, как в коде который в статье, кстати ваш пример чутьли не единственный который нужен и действует он обычно только внутри контекста одной ф-ции, а "тот самый" goto действует глобально

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

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

представляю, и могу на C# так сделать, но зачем? В Бейсике сама суть интерпретатора - сделать написание программ сильно проще, чем в ассемблере. Но очевидно что в 70-х никому в голову не пришло бы начать истерить за использование JMP в ассемблере, так почему они должны истерить из-за GOTO в Бейсике? Это просто изменение указателя на команду в памяти, не более. В современных языках в первую очередь думают о программировании в команде, о читаемости кода, об устранении проблем в разработке, то есть опыт последних 50 лет учитывается и используется. Но это же совсем не значит что это в принципе плохо и фуфуфу.

чтобы понять всю печаль, преставьте себе что листинг из статьи не на 900, на на 10000 и goto - gosub там пара сотен штук, и удачи вам оттрасировать вызовы в таком коде

вы пытаетесь реалии 2026 года переложить на 1975 год. это так не работает. коммерческий софт писали на ассемблере и там со всеми этими jmp, bne, bnq и т.п. операторами полный порядок и читали и понимали и разбирались, только причем тут Бейсик? ))))

И в чем конкретно проблема трассировки? для каждой подпрограммы будет строка REM ОБРАБОТКА МАССИВА A(100) - везде где оно вызывается вы будете знать что с этим массивом делается. В чём отличие от современного вызова методов?

тыкнуть в рандомное место и сказать уверенно, откуда туда может придти выполнение программы и что будет если вы напишите 100500 gosub 200500 потом пару раз goto 100, 200, etc..а потом resume(return) ...и куда у вас вернется вызов gosub и откуда?..эти операторы не просто так поудаляли везде и заменили на ф-ции с метками

ну если лично вы не понимаете такой код и в принципе не умеете мыслить последовательно (я вот не умею наоборот мыслить классами и методами), то это нормально для вас, как для современного программиста, но причем тут Бейсик и 1981 год? Как вы и ваши проблемы с пониманием такого кода связаны? Вот я абсолютно не вижу с таком подходе проблемы, для меня GOSUB эквивалентен вызову метода, а goto это просто переход в другую точку, который в большинстве случаев так же является механизмом возврата, так как в бейсике тех лет не было фигурных скобок и возможности прерваться иначе как через GOTO.

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

"глобально" - я имею в виду так (как в ассемблере, на который вы ссылаетесь что там это норма)

void ProcOne()
{
  some code;
  goto Label1;
}

void ProcTwo()
{
 some code;
 :Label1
 some code;
}

так использовать эти операторы нельзя в современных языках

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

о очевидно что в 70-х никому в голову не пришло бы начать истерить за использование JMP в ассемблере, так почему они должны истерить из-за GOTO в Бейсике?

потому что именно в 80 и была истерика по поводу бейсика что программисты выучившиеся на бейсике считались "испорченными и неполноценными" (см. вторую цитату https://ru.wikiquote.org/wiki/Эдсгер_Вибе_Дейкстра)

==

ну если лично вы не понимаете такой код и в принципе не умеете мыслить последовательно

Мой первый язык программирования в жизни - это basic компьютера Atari 65XE, я стал программистом буквально когда писал код с goto и gosub, конечно я понимаю этот код, только теперь я тимлид-техлид, и понимаю что код пишется не для меня лично, и кроме меня его еще другие люди будут читать и поддерживать, это отлично понимали и в 70х, от чего очень и очень быстро от такого подхода ушли...а операторы goto/gosub стали проклятыми до сих пор, хотя в этом уже нет смысла т.к. языков которые их поддерживают в таком виде уже нет... (хотя многие кто их хейтит до сих пор не понимают почему, но кстати код в статье отлично показывает почему..но применимо это только к бейсику 70х)

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

так как в бейсике тех лет не было фигурных скобок и возможности прерваться иначе как через GOTO

я не придираюсь к бейсику из статьи, я говорю что писать так код в 2026 году НЕ на бейсике из 70х это...эээ...кошмарно?

2 выхода а в скелетке тогда как? той, которая в общедоступных туториалах, там выход должен быть не 0, и второй который нужен, а того красивого решения в туториавах нету ) и их не рассматривают )

красивое решение по драу колам и подсистеме скелетке - тоесть модели ) тоесть чтоб был 1 драу кол ), например мега буфер, с шейдер сторадж )

так использовать эти операторы нельзя в современных языках

их и в бейсике так никто не использует если в этом нет необходимости, это же чисто от "бедности", когда у вас мало ОЗУ и вы экономите на командах. Я так люблю делать и в C#, но тогда код не заворачиваю в функции, что очевидно.

a = 10;
if (a >= 10) goto Label1;
// а тут очень много кода
:Label1
Console.WriteLine(a);

очевидно что мы экономим строку с вызовом WriteLine. Можно завернуть в скобки, но и так всё читается нормально. А иногда я просто не хочу менять код, особенно если пишу рыбу или прототип, мне сильно проще написать с goto.

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

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

потому что именно в 80 и была истерика по поводу бейсика что программисты выучившиеся на бейсике считались "испорченными и неполноценными" (см. вторую цитату

Простите, но при всех достижениях Дейкстры всем свойственно нести чушь. Разные поколения обучаются разным начальным языкам и это не обязательно формирует их окончательный взгляд на разработку и тем более это вообще никак не связано с умственной деградацией. Тут дедушка бредит. По такой логике 15 лет происходила генерация деградантов, но почему-то в процессиональной среде это никак не отразилось на развитии ПО. Ну и простой пример, мы с братом оба начинали с Бейсика, я абсолютно никак не состоялся как программист, а он работает над ААА проектами за границей - C++/UE5.

Мой первый язык программирования в жизни - это basic компьютера Atari 65XE, я стал программистом буквально когда писал код с goto и gosub

То есть вы подтверждаете что вы умственный деградант! Сильно. Но тогда вопрос - зачем мне слушать вас? (до того как ставить минусы прочитайте что сказал Дейкстра и что на эту цитату мой собеседник и ссылается)

теперь я тимлид-техлид, и понимаю что код пишется не для меня лично, и кроме меня его еще другие люди будут читать и поддерживать

о чем я и написал (если вы читали), но вы забываете что это 1981 год и все кто хейтят не более чем - странные.

это отлично понимали и в 70х, от чего очень и очень быстро от такого подхода ушли...а операторы goto/gosub стали проклятыми до сих пор, хотя в этом уже нет смысла т.к. языков которые их поддерживают в таком виде уже нет... (хотя многие кто их хейтит до сих пор не понимают почему, но кстати код в статье отлично показывает почему..но применимо это только к бейсику 70х)

так быстро ушли что эти операторы отлично прожили и 90-е и существую до сих пор в 2026.

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

отлично читается очень простой код

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

ругая бейсик вы ругаете ассемблер.Бейсик - это буквально транслятор команд на ассемблере, он простой и прямой как лом. в 90-х Бейсик лишь сохранил часть синтаксиса, но ушел по тому же пути как и си с паскалем. Это неизбежная эволюция, хейтить goto это всё равно что хейтить дубину неандертальца.

я не придираюсь к бейсику из статьи, я говорю что писать так код в 2026 году НЕ на бейсике из 70х это...эээ...кошмарно?

и где вы такое пишете? давайте я вас процитирую "Это именно "те самые кошмарные" операторы, из-за которых все хейтят бейсик" - где тут 70 и 2026? Я знаю много людей кто хейтит эти операторы в современных языках, но это всё равно что хейтить прикуриватель в современной машине.

Лично я пишу goto тогда когда это удобно МНЕ. Я не спрашиваю разрешения ни у тимлидов или у Дейкстры, мне не нужно ни перед кем отчитываться, я пишу так, как удобно МНЕ. Это моё право. Ваше право - не пользоваться моим кодом, если он вам не нравится, если вы вдруг нашли мой код где-то. Это абсолютно простое равновесное состояние. меня не касаются ВАШИ проблемы на ВАШЕЙ работе, просто потому что я на вас не работаю )

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

ну тут как говорится, флаг в руки ;) а я программист и программистами командую, и так лучше не делать в настоящих сервисах

Ну и простой пример, мы с братом оба начинали с Бейсика, я абсолютно никак не состоялся как программист, а он работает над ААА проектами за границей - C++/UE5.

да и я с Бейсика начинал именно с такого, конечно эта цитата слишком резкая ;) но доля истины в ней есть

То есть вы подтверждаете что вы умственный деградант! Сильно. Но тогда вопрос - зачем мне слушать вас? (до того как ставить минусы прочитайте что сказал Дейкстра и что на эту цитату мой собеседник и ссылается)

*я вам ни одного минуса не поставил

а не нужно меня слушать, я в комментариях на хабре отдыхаю, хотите слушайте, хотите нет ;)

так быстро ушли что эти операторы отлично прожили и 90-е и существую до сих пор в 2026.

вы упускаете суть

GOTO в 2026 году это не тоже самое что GOTO в 1980, я вам даже пример кода привел

в 2026 году goto действует только в пределах контекста одной ф-ции, в 1980 он действует в пределах всей программы, это просто монументальное различие функционала

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

отлично читается очень простой код

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

он простой пока его мало, а если его десятки тысяч строк, то это превращается в ад

Мне довелось разгребать проекты написанные в таком стиле математиками на питоне...это просто нечто какоето...

Лично я пишу goto тогда когда это удобно МНЕ.

да отлично! пишите конечно.

Я в данном случае говорю от лица отрасли, если вы пишите для себя - никаких проблем, если для других, лучше соблюдать правила, они придуманы не ради прихоти, конкретно с goto были очень объективные причины.

а я программист и программистами командую, и так лучше не делать в настоящих сервисах

ну ок, я тут причем?

в 2026 году goto действует только в пределах контекста одной ф-ции

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

в 2026 году goto действует только в пределах контекста одной ф-ции, в 1980 он действует в пределах всей программы, это просто монументальное различие функционала

нет, это монументальное ваше желание так думать ) да, если программу считать как main(){}, то вы будете правы, но если тот самый main(){} убрать вообще, как например это сделали в C#, то там и переменные глобальные и goto замечательно бегает в рамках всего тела программы.

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

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

он простой пока его мало, а если его десятки тысяч строк, то это превращается в ад

не представляю себе программу на 10000 строк на этом IBM PC в 1981 году, ну и при наличии листинга с ремарками код будет читаться точно так же как и любой другой код. Я не поверю что вы в состоянии запихать себе в голову 10000 строк на C# написанного в парадигме ООП.

Я в данном случае говорю от лица отрасли

А отрасль вас отрядила это делать?

если для других, лучше соблюдать правила, они придуманы не ради прихоти, конкретно с goto были очень объективные причины.

Я исхожу из того принципа что если окружающие не пишут код так как удобно мне, то и я не обязан писать так как удобно им. Паритет.

ну ок, я тут причем?

Это просто замечание, чтобы было понятно почему к этим операторам претензии

вы тут совершенно непричем

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

чтобы быть прям совсем объективными

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

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

нет, это монументальное ваше желание так думать ) 

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

не представляю себе программу на 10000 строк на этом IBM PC в 1981 году,

всмысле не представляете? в 81 году было написано огромное количество корпоративного софта, или вы думаете там одни игрушки и картинки?

и текстовые редакторы уже были и электронные таблицы и базы данных, там сотни тысяч строк кода, для IBM PC в том числе и на бейсике также

А отрасль вас отрядила это делать?

я практически гарантировано могу сказать что мои слова поддержит процентов 90% программистов, по этому вполне правомерно могу говорить от имени отрасли

Я исхожу из того принципа что если окружающие не пишут код так как удобно мне, то и я не обязан писать так как удобно им. Паритет.

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

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

там сотни тысяч строк кода, для IBM PC в том числе

Конкретно для обсуждаемой первой модели в варианте с 64k оперативки?

а что вас смущает?

https://ru.wikipedia.org/wiki/VisiCalc

вот вам пример корпоративной программы в т.ч. для первого IBM PC и именно для 64к оперативки

вы считаете что программе электронных таблиц меньше 10тысяч строк кода?

p.s. очевидно что она написана не на бейсике, но мне кажется вы не совсем понимаете что такое IBM PC и для какого софта создавался

вот вам пример корпоративной программы в т.ч. для первого IBM PC и именно для 64к оперативки

Я в курсе, VisiCalc бегал и на 8битных компьютерах, но сильно сомневаюсь, что в нём сотни тысяч строк на ЯВУ - иначе непонятно, как результат компиляции влезает в 64k.

иначе непонятно, как результат компиляции влезает в 64k.

большое количество строк на ЯВУ совершенно необязательно может приводить с софту который должен невлезать в 64к

==

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

По крайней мере тут пишут, что версия для IBM PC была на ассемблере, бинарник весил 27k.

модель 8086 вообще идеальна для изучения если на то пошло ), не знаю чем она отличаеся от IBM PC, но вы можете реализовать полноценный DSL (это кстати альтернатива лиспу поидее) потомучто лисп в емаксе это тоже дсл) сегодня на 8086 командах, и даже реализовать терминал. Более того эмулируется легко и видео в пределах 64к памяти

я себе по приколдесу сделал емулятор (иже full dsl + терминал) - работает улётно, там просто полигон для изучения/обучения/плюшек/доводок/фишек, вы бесконечно можете на этой базе надстраивать чо вам нужно прям на ассемблере, который как я выше написал уже кор-посути язык в языке

это как тетрис или майнкрафт, бесконечно интересная тема кароче

там же внутри можно реализовать не бейсик, а Forth, это будет ваще улёт поидее )

всмысле не представляете? в 81 году было написано огромное количество корпоративного софта, или вы думаете там одни игрушки и картинки?

приведите пример хотя бы одной корпоративной программы на Бейсике в 10000 строк кода.

и текстовые редакторы уже были и электронные таблицы и базы данных, там сотни тысяч строк кода, для IBM PC в том числе и на бейсике также

Похоже вы не понимаете что такое Бейсик, какие у него возможности, ограничения. Как вы себе представляете сотни тысяч строк кода которые магическим образом потом влезут в 64К ОЗУ? Вы просто фантазёр, который запутался и теперь придумывает всякую ерунду в попытке оправдаться.

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

вы невнимательно читаете? я в принципе пишу так как удобно мне, даже если я этот код потом выкладываю для всех.

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

вы можете склоняться к чему угодно.

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

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

вы пытаетесь реалии 2026 года переложить на 1975 год. это так не работает. коммерческий софт писали на ассемблере и там со всеми этими jmp, bne, bnq и т.п. операторами полный порядок и читали и понимали и разбирались, только причем тут Бейсик? ))))

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

вы путаете ПЭВМ и Бейсик на них с другим оборудованием, это как предъявлять претензии к Arduino nano что там не работает Firefox.

вот вам простая программа на Бейсике, как вы это сможете написать без GOTO?

10 REM GIGA PROGRAM
20 LET A = 100
30 FOR B = 1 TO 100
40 LET C = A / B
50 IF C < 0.2 THEN GOTO 100
60 IF C < 0.4 THEN GOTO 200
70 IF C < 0.6 THEN GOTO 300
80 IF C < 0.8 THEN GOTO 400
90 GOTO 500
99 NEXT B
100 REM C < 0.2
110 REM ТУТ МНОГО КОДА ДЕЛАЮЩЕГО ЧТО-ТО
120 GOTO 99
200 REM C < 0.4
210 REM ТУТ МНОГО КОДА ДЕЛАЮЩЕГО ЧТО-ТО
220 GOTO 99
300 REM C < 0.6
310 REM ТУТ МНОГО КОДА ДЕЛАЮЩЕГО ЧТО-ТО
320 GOTO 99
400 REM C < 0.8
410 REM ТУТ МНОГО КОДА ДЕЛАЮЩЕГО ЧТО-ТО
420 GOTO 99
500 REM DEFAULT
510 REM ТУТ МНОГО КОДА ДЕЛАЮЩЕГО ЧТО-ТО
520 GOTO 99

На современном языке можно использовать switch/case или просто передавать значение С в функцию. Но в Бейсике 70-80-х вы такое не сделаете. Но никто не мешает мне написать так в C# в 2026 году, причем я не вижу в каком месте такого кода страдает его читаемость - тут всё понятно.

Еще раз, я не говорю что на бейсике можно както по другому написать чем так

Но никто не мешает мне написать так в C# в 2026 году

кроме общепринятых подходов, ТАК НЕ ДЕЛАТЬ

причем я не вижу в каком месте такого кода страдает его читаемость - тут всё понятно.

для вас - да, для других нет

вы привели код довольно рафинированный и ровный, а он имеет свойство разрастаться и получать новые ф-ции (ведь не случайно нумерация идет через 10 в бейсике)

потом еще получаются всякие фокусы типа

10 FOR i=30 TO 100 STEP 20
20 GOSUB i
25 NEXT i
26 GOTO 100
30 PRINT "ONE"
40 RESUME
50 PRINT "TWO"
65 GOTO 30 # фича чтобы тут писать после TWO еще раз ONE
70 RESUME
80 PRINT "THREE"
90 RESUME
100 END

а потом оно еще разрастется, и вот вы уже читая одну ф-цию вдумчиво построчно из себя интерпретатор изображаете

для вас - да, для других нет

почему я должен менять себя из-за проблем у других?

а потом оно еще разрастется, и вот вы уже читая одну ф-цию вдумчиво построчно из себя интерпретатор изображаете

это было ОЧЕНЬ давно и длилось очень недолго и коммерческий софт на Бейсике если и был, то он был на уровне Hello World. Так есть ли смысл об этом вообще говорить тем более в 2026 году?

Ну а на C# я буду писать как захочу и вы на это повлиять не можете.

почему я должен менять себя из-за проблем у других?

Если вы не программист и пишете для себя - никаких проблем. Но профессиональные программисты работают в командах и от кода кроме работоспособности требуется, чтобы его могли легко могли читать и развивать другие люди. Как любил говорить один мой начальник - "а что если тебя завтра трамвай переедет?"

Но профессиональные программисты работают в командах и от кода кроме работоспособности требуется

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

Так обсуждать, как стоит писать код на любительском уровне, особого смысла нет - можно с goto, можно без, можно вообще не писать, дело личное.

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

Выход из вложенных циклов - пожалуй, единственное использование goto, которое и адепты структурного программирования в принципе признают. Проблема классического Basic в том, что нет ничего кроме него и тот же цикл while надо делать через if () goto. Помню, для меня в своё время был заметным шагом вперёд Turbo Basic, где появились структурные конструкции и редактирование текста программы в целом (не перенабирая отдельные строчки). Потом уже перешёл на C...

так в статье 1981 год, QBASIC 90-х уже сильно круче и больше напоминает современные языки. как вы правильно указали - while просто не существовал, для меня в TurboC было просто открытием многое увидеть иначе, например

while(1);

или

while(b+c--);
  • Подставить уже готовый к загрузке.BAS файл (блокнот→ dosbox‑x → PCBox) нельзя: либо портятся или неверно интерпретируются строки в файле или обрабатывается только часть строк. Потому вводить только самостоятельно в эмуляторе (с другой стороны плюс — вникаешь в ход работы строк по ходу перепечатывания).

я правильно понимаю что это проблема эмулятора? например в Altirra Для ATARI я просто жму Ctrl+V и у меня из буфера код летит в эмуль и происходит набор текста программы силами самого эмулируемого ПК.

  • Нельзя произвольно редактировать строку: если в строке есть ошибка, то заменять нужно всю строку от её места (хинт — для замены одного символа на другой достаточно дойти до оного и сразу нажать на одну из нужных клавиш клавиатуры — старый символ заменится на новый).

в ATARI транслятор смотрит на нажатие клавиши Enter (Return), если вы нажали в строке которая нумерована, то он ищет её конец и пытается применить её как код Бейсика, если получается, то строка применяется, если нет - то выводится ошибка. Есть кнопки управления курсором, можно с помощью определенных клавиш толкнуть всю строку вперед на 1 символ или один символ удалить придвинув строку. Это позволяет строку с ошибкой подправить. Так же в Бейсике есть сокращения, например PRINT это ? или GRAPHICS это GR., LIST это L. (обращаем внимание на точки в конце). Эта особенность позволяет немного обойти ограничение на обработку длины одной строки. Она ограничивалась тремя строками (120 байт), соответственно если набрать 10 GRAPHIC 8:SETCOLOR 1,0,0:PRINT "HELLO WORLD!" или 10 GR.8:SETC.1,0,0:?"HELLO WORLD!", то второй вариант сильно короче. К несчастью при выводе ошибки все сокращенные команды выведутся в полном варианте.

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

  • Нельзя залупить музыку (команды SOUND, PLAY).

или использовать слово "зациклить" или указывать ударение, я вот прочитал как "залупИть".

----

В целом жЭсть конечно в 1981 году иметь такой кастрированный Бейсик.

----

Также, по моим впечатлениям, BASIC похож на Python (построчный синтаксис исполняющийся последовательно, но при этом предусматривающий некоторое распараллеливание операций через GOSUB и GOTO), только проще и по функционалу, и по возможностям.

забавное мнение, как по мне - не похож абсолютно. GOSUB и GOTO не приводят к распараллеливанию, это просто изменение вектора выполнения кода, прямое воплощение ассемблерных команд JMP и CALL.

В целом жЭсть конечно в 1981 году иметь такой кастрированный Бейсик.

Для меня первом языком высокого уровня был Focal где то в 1988ом, примерно того же уровня.

Но реально-то фокал -- это ДЕКовский язык начала 1970-х, у нас его просто "позаимствовали". Их (дековский) бейсик той же поры крайне убог (но позже был и другой бейсик, уже компилятор, с совершенно другим диалектом).

Ну да, он на позаимствовнной DECовской архитектуре и бегал. Но вроде на исторической родине до домашних компьютеров на базе PDP-11 не додумались )

Уже самый первый IBM PC официально поддерживал объём памяти до 256 Кбайт. Предел в 64 Кбайта, о котором пишет автор, -- это объём на системной (материнской) плате, но IBM сразу предусматривала установку до трёх плат расширения памяти по 64 Кбайта каждая, что в сумме и давало 256 Кбайт (поскольку у ПК было пять гнёзд под платы, при установке трёх плат расширения ОЗУ под остальное оставалось всего два гнезда -- в одно в таком случае вставлялся контроллер гибких дисков, во второе -- либо CGA, либо MDA + порт принтера). Следующий вариант IBM PC перешёл с микросхем ёмкостью 16 Кбит на 64-Кбитные, что обеспечило до 256 Кбайт уже на системной плате; платами расширения можно было увеличить до 640 Кбайт.

Кстати, 640 Кбайт на оригинальном PC/AT тоже требовали платы расширения: на системной плате было лишь 512 Кбайт.

Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации