Подумалось: а ведь почти ничто не объединяет ВСЕ диалекты Бейсика.
С трудом нахожу только несколько пунктов:
1) условный оператор называется if (then есть не во всех диалектах, else тем более).
2) оператор цикла for var=n1 to n2 (step есть не во всех диалектах) и заканчивается next (бывает без параметров).
3) присваивание через = (let есть не во всех диалектах).
4) скалярные переменные отдельно не объявляются (массивы объявляются, кроме строковых переменных в ряде диалектов).
Цитата: Alone Coder от июля 18, 2012, 09:10
Подумалось: а ведь почти ничто не объединяет ВСЕ диалекты Бейсика.
:+1:
IMHO тут важна историческая преемственность, а не реальная похожесть.
Цитата: Alone Coder от июля 18, 2012, 09:10
4) скалярные переменные отдельно не объявляются (массивы объявляются, кроме строковых переменных в ряде диалектов).
Не выполняется в «несовместимом» режиме FreeBASIC'а:
Цитата: http://www.freebasic.net/wiki/wikka.php?wakka=KeyPgDim
Variables must be declared before they can be used in the -lang fb dialect or when using Option Explicit in the other dialects. Only in the -lang qb and -lang fblite dialects variables may be used without first declaring them, in such a case they are called implicit variables.
[...]
Explicit Variables with Explicit Data Types
In the default dialect -lang fb, each variable must be explicitly declared with a desired data type. Type suffixes are not allowed.
Для меня, труЪ бейсик нужно обезательно писать через goto. (http://sos-dan.ru/forum/images/smilies/happy.gif)
Честно говоря, для меня загадка, какую нишу занимают бейсики в современном мире и кто ими теперь пользуется.
Цитата: Alone Coder от июля 18, 2012, 09:10
Подумалось: а ведь почти ничто не объединяет ВСЕ диалекты Бейсика.
С трудом нахожу только несколько пунктов:
1) условный оператор называется if (then есть не во всех диалектах, else тем более).
2) оператор цикла for var=n1 to n2 (step есть не во всех диалектах) и заканчивается next (бывает без параметров).
3) присваивание через = (let есть не во всех диалектах).
4) скалярные переменные отдельно не объявляются (массивы объявляются, кроме строковых переменных в ряде диалектов).
Еще можно добавить (за небольшим исключением) goto и числовые метки (обязательные в каждой строке или опциональные).
Если отбросить вижуал-бейсик с клонами, добавится еще print и input, а если не брать во внимание еще и старые бейсики с единственным типом данных, добавится статическая типизация переменных с использованием суффиксов для определения типа.
Вообще, там можно выделить несколько подсемейств, образующих между собой континуум по частичной совместимости.
Может быть, бейсики объединяет не столько то, что там есть, а то, чего там нет?
Цитата: Hellerick от июля 18, 2012, 10:41
Может быть, бейсики объединяет не столько то, что там есть, а то, чего там нет?
Указательная арифметика есть (FreeBASIC), объектная ориентация есть...
IMHO характерна для бейсиков перегруженность = в присваиваниях.
Цитата: Python от июля 18, 2012, 10:22
числовые метки (обязательные в каждой строке или опциональные).
Насколько помню, в висуал бейсике только символьные метки.
Мне казалось, в вижуале они допускаются для сохранения совместимости.
P.S. Проверил. Действительно не поддерживаются. Видимо, с чем-то другим перепутал.
Еще пара общих признаков:
• Конец строки — конец оператора; в первоначальном бейсике 1 оператор в строке, позже появились диалекты с переносами на несколько строк и несколькими операторами в строке.
• Оператор REM - комментарий
(если подумать, батники тоже представляют собой что-то бейсик-подобное)
• Оператор END — непоятно, зачем он нужен, но, кажется, есть везде.
Цитата: Python от июля 18, 2012, 16:46
• Оператор END — непоятно, зачем он нужен, но, кажется, есть везде.
В спектрумовском, кажись, не было.
Цитата: fujhi от июля 18, 2012, 09:43
Честно говоря, для меня загадка, какую нишу занимают бейсики в современном мире и кто ими теперь пользуется.
:???
Microsoft Office kagbe.
Цитата: RawonaM от июля 18, 2012, 20:07
:???
Microsoft Office kagbe.
А, ну да. Т.к. я Офисом почти не пользуюсь, про VBA даже не подумал.
Оператор PRINT везде есть. )))
В VBA нет. Впрочем, вижуал отличается от обычного старого бейсика не меньше, чем бейсик от фортрана.
Цитировать1) условный оператор называется if (then есть не во всех диалектах, else тем более).
Не является отличительным признаком: слово if используется в подавляющем большинстве языков программирования. Кроме того, следует различать if УСЛОВИЕ [then] ОПЕРАТОР (вариантом которого является if УСЛОВИЕ then МЕТКА) и добавленный позже в бейсик и фортран структурный оператор ветвления
if УСЛОВИЕ then
...
end if
В ранних бейсиках присутствует лишь первый, хотя в поздних диалектах вполне можно обойтись лишь вторым, в безгоутушных диалектах if с меткой теряет смысл.
Цитировать3) присваивание через = (let есть не во всех диалектах).
4) скалярные переменные отдельно не объявляются (массивы объявляются, кроме строковых переменных в ряде диалектов).
Также характерно для фортрана, где = используется для присваивания, а скалярные переменные объявлять необязательно, кроме того, в бейсиках поколения квикбейсика скалярные переменные можно объявлять явно (dim ПЕРЕМЕННАЯ as ТИП). Особенность бейсика в том, что = используется и для присваивания, и для сравнения.
Из всего сказанного получается, что цикл for...next — чуть ли не единственный признак, по которому можно узнать бейсик.
Visual Basic настолько же диалект Basic, насколько С# диалект C.
Цитата: kemerover от июля 5, 2013, 08:48
Visual Basic настолько же диалект Basic, насколько С# диалект C.
Я бы сказал, даже в меньшей степени.
Цитата: Hellerick от июля 18, 2012, 16:54
Цитата: Python от июля 18, 2012, 16:46
• Оператор END — непоятно, зачем он нужен, но, кажется, есть везде.
В спектрумовском, кажись, не было.
Верно, не было. Правда, там был STOP.
(Вот еще исторический Бейсиковский загиб: чем END отличается от STOP? )))
И еще, кстати -- использование $ как суффикса строковых переменных.
Почти универсальная фича (хотя и не ручаюсь за ВСЕ бейсики).
STOP — это пауза.
Я помню, когда с Atari развлекался, там END для чего-то в некоторых особых случаях был нужен, но уже не помню для чего
Цитата: Alone Coder от июля 18, 2012, 09:10
Подумалось: а ведь почти ничто не объединяет ВСЕ диалекты Бейсика.
С трудом нахожу только несколько пунктов:
1) условный оператор называется if (then есть не во всех диалектах, else тем более).
2) оператор цикла for var=n1 to n2 (step есть не во всех диалектах) и заканчивается next (бывает без параметров).
3) присваивание через = (let есть не во всех диалектах).
4) скалярные переменные отдельно не объявляются (массивы объявляются, кроме строковых переменных в ряде диалектов).
А какой смысл пытаться объединить ВСЕ диалекты, включая иторические?
Точнее, это уже даже не диалекты, а разные языки.
Цитата: Python от июля 18, 2012, 10:22
Если отбросить вижуал-бейсик с клонами,
А почему нужно отбрасывать единственный современный бейсик? Все остальное - это история.
Цитата: Anixx от июля 6, 2013, 15:49Все остальное - это история.
А как же FreeBASIC?
Цитата: Anixx от июля 6, 2013, 15:49
Цитата: Python от июля 18, 2012, 10:22
Если отбросить вижуал-бейсик с клонами,
А почему нужно отбрасывать единственный современный бейсик? Все остальное - это история.
Если простейшая программа на старом бейсике становится неработоспособной на новом, считать их диалектами проблематично.
Вообще, бейсик в классическом смысле интересен не столько как практический инструмент, сколько как концепция: простейшая интерактивная среда, совмещающая возможность непосредственных вычислений и редактирования программы без текстового редактора; статическая типизация без объявления переменных; минимализм средств построения алгоритма (до середины 80-х бейсики представляли собой языки без стека переменных). Вижуалбейсики в этом отношении довольно скучны: банальное IDE (пусть даже и с окошком для непосредственных вычислений), банальная динамическая типизация, банальная структурированность кода, банальные процедуры и ООП (и ввод-вывод тоже через ООП). Чем VBA лучше гораздо более универсального Python'а, непонятно.
Цитата: trilirium от июля 6, 2013, 13:56
(Вот еще исторический Бейсиковский загиб: чем END отличается от STOP? )))
После STOP можно продолжить выполнение программы командой CONT. Работа продолжится со следующего оператора после STOP.
Цитата: Python от июля 6, 2013, 18:28
Вообще, бейсик в классическом смысле интересен не столько как практический инструмент, сколько как концепция
Фактически, классический бейсик мне представляется чем-то типа "ассемблера высокого уровня" - т.е. программируя на нём, можно чувствовать себя, с точки зрения построения алгоритма, как будто пишешь на ассемблере. Но при этом вместо машинных команд, машинно-зависимых и выполняющих лишь примитивные действия низкого уровня - некие встроенные и (по крайней мере по идее) машинно-независимые процедуры достаточно высокого уровня, что делает это программирование гораздо более доступным непрофессионалу (и при этом не требует от этого непрофессионала какой-то дисциплины по форме записи, как это обычно принято в процедурных языках, особенно вроде Паскаля - т.е. использование GOTO не то что не осуждается, а даже прямо-таки поощряется всеми силами). Вместо машинных адресов - имена переменных. Хотя, конечно, без ряда возможностей там ещё сложнее/беднее с точки зрения алгоритмов и построения структур данных - хотя бы тот же стек, которым можно пользоваться в ассемблере, указатели/ссылки и т.п. удобные штучки.
Цитата: Anixx от июля 6, 2013, 15:49
единственный современный бейсик
Какой из?
STOP использовал при отладке кусков программы.
END для психологического равновесия, как последний мазок.
END обычно не использовал: зачем END, если EOF дает идентичный эффект? Разве что если нужно отдедить главную программу от идущих после нее GOSUB-подпрограмм...
Мне кажется, что на 90 процентов классический Бейсик - это линия PDP/Microsoft, которые весьма неплохо совместимы между собой (программы переносятся снизу вверх, с более ранних диалектов на поздние довольно легко; например, разница в использовании PRINT USING между PDP и Микрософтом сводилась к использованию разных символов табуляции; двоеточие разделяло операторы в строке вместо бакслэша; немного разный набор функций и т.д). Кроме того, базовый набор графических функций во всех Бейсиках был примерно одинаков. Что касается того, что не попадает в эти 90 процентов - либо реализации, которые делались в условиях крайне жестких ограничений по памяти, железу и времени разработки (Atari Basic, Apple Integer Basic, можно еще вспомнить жутковатый Бейсик на первой модели TRS-80, в котором нет мат.функций или возведения в степень), этакие костыли, на которых серьезные программы не писали, или специализированные диалекты для управления сложным железом (Locomotive, Wang, MSX2). Перенести развитые программы с этих диалектов на другие как правило нереально, то есть в каждом случае это фактически уже отдельная ветка, вещь в себе. И есть еще бейсикоподобные языки, Фокал, например - недоБейсик, но с большим влиянием Фортрана.