Лингвофорум

Общий раздел => Наука и техника => Компьютеры => Тема начата: Alone Coder от июля 18, 2012, 09:10

Название: Бейсики
Отправлено: Alone Coder от июля 18, 2012, 09:10
Подумалось: а ведь почти ничто не объединяет ВСЕ диалекты Бейсика.
С трудом нахожу только несколько пунктов:
1) условный оператор называется if (then есть не во всех диалектах, else тем более).
2) оператор цикла for var=n1 to n2 (step есть не во всех диалектах) и заканчивается next (бывает без параметров).
3) присваивание через = (let есть не во всех диалектах).
4) скалярные переменные отдельно не объявляются (массивы объявляются, кроме строковых переменных в ряде диалектов).
Название: Бейсики
Отправлено: fujhi от июля 18, 2012, 09:24
Цитата: 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.
Название: Бейсики
Отправлено: Hellerick от июля 18, 2012, 09:26
Для меня, труЪ бейсик нужно обезательно писать через goto. (http://sos-dan.ru/forum/images/smilies/happy.gif)
Название: Бейсики
Отправлено: fujhi от июля 18, 2012, 09:43
Честно говоря, для меня загадка, какую нишу занимают бейсики в современном мире и кто ими теперь пользуется.
Название: Бейсики
Отправлено: Python от июля 18, 2012, 10:22
Цитата: 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
Может быть, бейсики объединяет не столько то, что там есть, а то, чего там нет?
Название: Бейсики
Отправлено: fujhi от июля 18, 2012, 10:59
Цитата: Hellerick от июля 18, 2012, 10:41
Может быть, бейсики объединяет не столько то, что там есть, а то, чего там нет?
Указательная арифметика есть (FreeBASIC), объектная ориентация есть...

IMHO характерна для бейсиков перегруженность = в присваиваниях.
Название: Бейсики
Отправлено: Alone Coder от июля 18, 2012, 15:04
Цитата: Python от июля 18, 2012, 10:22
числовые метки (обязательные в каждой строке или опциональные).
Насколько помню, в висуал бейсике только символьные метки.
Название: Бейсики
Отправлено: Python от июля 18, 2012, 16:29
Мне казалось, в вижуале они допускаются для сохранения совместимости.

P.S. Проверил. Действительно не поддерживаются. Видимо, с чем-то другим перепутал.
Название: Бейсики
Отправлено: Python от июля 18, 2012, 16:46
Еще пара общих признаков:
• Конец строки — конец оператора; в первоначальном бейсике 1 оператор в строке, позже появились диалекты с переносами на несколько строк и несколькими операторами в строке.
• Оператор REM - комментарий
(если подумать, батники тоже представляют собой что-то бейсик-подобное)

• Оператор END — непоятно, зачем он нужен, но, кажется, есть везде.
Название: Бейсики
Отправлено: Hellerick от июля 18, 2012, 16:54
Цитата: Python от июля 18, 2012, 16:46
• Оператор END — непоятно, зачем он нужен, но, кажется, есть везде.

В спектрумовском, кажись, не было.
Название: Бейсики
Отправлено: RawonaM от июля 18, 2012, 20:07
Цитата: fujhi от июля 18, 2012, 09:43
Честно говоря, для меня загадка, какую нишу занимают бейсики в современном мире и кто ими теперь пользуется.
:???
Microsoft Office kagbe.
Название: Бейсики
Отправлено: fujhi от июля 18, 2012, 20:46
Цитата: RawonaM от июля 18, 2012, 20:07
:???
Microsoft Office kagbe.
А, ну да. Т.к. я Офисом почти не пользуюсь, про VBA даже не подумал.
Название: Бейсики
Отправлено: trilirium от июля 5, 2013, 06:17
Оператор PRINT везде есть. )))
Название: Бейсики
Отправлено: Python от июля 5, 2013, 07:15
В VBA нет. Впрочем, вижуал отличается от обычного старого бейсика не меньше, чем бейсик от фортрана.
Название: Бейсики
Отправлено: Python от июля 5, 2013, 07:37
Цитировать1) условный оператор называется if (then есть не во всех диалектах, else тем более).
Не является отличительным признаком: слово if используется в подавляющем большинстве языков программирования. Кроме того, следует различать if УСЛОВИЕ [then] ОПЕРАТОР (вариантом которого является if УСЛОВИЕ then МЕТКА) и добавленный позже в бейсик и фортран структурный оператор ветвления
if УСЛОВИЕ then
...
end if

В ранних бейсиках присутствует лишь первый, хотя в поздних диалектах вполне можно обойтись лишь вторым, в безгоутушных диалектах if с меткой теряет смысл.
Название: Бейсики
Отправлено: Python от июля 5, 2013, 07:46
Цитировать3) присваивание через = (let есть не во всех диалектах).
4) скалярные переменные отдельно не объявляются (массивы объявляются, кроме строковых переменных в ряде диалектов).
Также характерно для фортрана, где = используется для присваивания, а скалярные переменные объявлять необязательно, кроме того, в бейсиках поколения квикбейсика скалярные переменные можно объявлять явно (dim ПЕРЕМЕННАЯ as ТИП). Особенность бейсика в том, что = используется и для присваивания, и для сравнения.

Из всего сказанного получается, что цикл for...next — чуть ли не единственный признак, по которому можно узнать бейсик.
Название: Бейсики
Отправлено: kemerover от июля 5, 2013, 08:48
Visual Basic настолько же диалект Basic, насколько С# диалект C.
Название: Бейсики
Отправлено: Python от июля 5, 2013, 08:56
Цитата: kemerover от июля  5, 2013, 08:48
Visual Basic настолько же диалект Basic, насколько С# диалект C.
Я бы сказал, даже в меньшей степени.
Название: Бейсики
Отправлено: trilirium от июля 6, 2013, 13:56
Цитата: Hellerick от июля 18, 2012, 16:54
Цитата: Python от июля 18, 2012, 16:46
• Оператор END — непоятно, зачем он нужен, но, кажется, есть везде.

В спектрумовском, кажись, не было.

Верно, не было. Правда, там был STOP.

(Вот еще исторический Бейсиковский загиб: чем END отличается от STOP? )))
Название: Бейсики
Отправлено: trilirium от июля 6, 2013, 13:57
И еще, кстати -- использование $ как суффикса строковых переменных.

Почти универсальная фича (хотя и не ручаюсь за ВСЕ бейсики).
Название: Бейсики
Отправлено: СНовосиба от июля 6, 2013, 14:40
STOP — это пауза.
Название: Бейсики
Отправлено: antic от июля 6, 2013, 15:37
Я помню, когда с Atari развлекался, там END для чего-то в некоторых особых случаях был нужен, но уже не помню для чего
Название: Бейсики
Отправлено: Anixx от июля 6, 2013, 15:47
Цитата: Alone Coder от июля 18, 2012, 09:10
Подумалось: а ведь почти ничто не объединяет ВСЕ диалекты Бейсика.
С трудом нахожу только несколько пунктов:
1) условный оператор называется if (then есть не во всех диалектах, else тем более).
2) оператор цикла for var=n1 to n2 (step есть не во всех диалектах) и заканчивается next (бывает без параметров).
3) присваивание через = (let есть не во всех диалектах).
4) скалярные переменные отдельно не объявляются (массивы объявляются, кроме строковых переменных в ряде диалектов).

А какой смысл пытаться объединить ВСЕ диалекты, включая иторические?
Точнее, это уже даже не диалекты, а разные языки.
Название: Бейсики
Отправлено: Anixx от июля 6, 2013, 15:49
Цитата: Python от июля 18, 2012, 10:22

Если отбросить вижуал-бейсик с клонами,

А почему нужно отбрасывать единственный современный бейсик? Все остальное - это история.
Название: Бейсики
Отправлено: Клоняра от июля 6, 2013, 16:58
Цитата: Anixx от июля  6, 2013, 15:49Все остальное - это история.
А как же FreeBASIC?
Название: Бейсики
Отправлено: Python от июля 6, 2013, 17:54
Цитата: Anixx от июля  6, 2013, 15:49
Цитата: Python от июля 18, 2012, 10:22

Если отбросить вижуал-бейсик с клонами,

А почему нужно отбрасывать единственный современный бейсик? Все остальное - это история.
Если простейшая программа на старом бейсике становится неработоспособной на новом, считать их диалектами проблематично.
Название: Бейсики
Отправлено: Python от июля 6, 2013, 18:28
Вообще, бейсик в классическом смысле интересен не столько как практический инструмент, сколько как концепция: простейшая интерактивная среда, совмещающая возможность непосредственных вычислений и редактирования программы без текстового редактора; статическая типизация без объявления переменных; минимализм средств построения алгоритма (до середины 80-х бейсики представляли собой языки без стека переменных). Вижуалбейсики в этом отношении довольно скучны: банальное IDE (пусть даже и с окошком для непосредственных вычислений), банальная динамическая типизация, банальная структурированность кода, банальные процедуры и ООП (и ввод-вывод тоже через ООП). Чем VBA лучше гораздо более универсального Python'а, непонятно.
Название: Бейсики
Отправлено: Python от июля 6, 2013, 18:31
Цитата: trilirium от июля  6, 2013, 13:56
(Вот еще исторический Бейсиковский загиб: чем END отличается от STOP? )))
После STOP можно продолжить выполнение программы командой CONT. Работа продолжится со следующего оператора после STOP.
Название: Бейсики
Отправлено: Toman от июля 6, 2013, 18:46
Цитата: Python от июля  6, 2013, 18:28
Вообще, бейсик в классическом смысле интересен не столько как практический инструмент, сколько как концепция
Фактически, классический бейсик мне представляется чем-то типа "ассемблера высокого уровня" - т.е. программируя на нём, можно чувствовать себя, с точки зрения построения алгоритма, как будто пишешь на ассемблере. Но при этом вместо машинных команд, машинно-зависимых и выполняющих лишь примитивные действия низкого уровня - некие встроенные и (по крайней мере по идее) машинно-независимые процедуры достаточно высокого уровня, что делает это программирование гораздо более доступным непрофессионалу (и при этом не требует от этого непрофессионала какой-то дисциплины по форме записи, как это обычно принято в процедурных языках, особенно вроде Паскаля - т.е. использование GOTO не то что не осуждается, а даже прямо-таки поощряется всеми силами). Вместо машинных адресов - имена переменных. Хотя, конечно, без ряда возможностей там ещё сложнее/беднее с точки зрения алгоритмов и построения структур данных - хотя бы тот же стек, которым можно пользоваться в ассемблере, указатели/ссылки и т.п. удобные штучки.
Название: Бейсики
Отправлено: Alone Coder от сентября 29, 2013, 18:34
Цитата: Anixx от июля  6, 2013, 15:49
единственный современный бейсик
Какой из?
Название: Бейсики
Отправлено: oveka от сентября 29, 2013, 20:02
STOP использовал при отладке кусков программы.
END для психологического равновесия, как последний мазок.
Название: Бейсики
Отправлено: Python от сентября 30, 2013, 19:28
END обычно не использовал: зачем END, если EOF дает идентичный эффект? Разве что если нужно отдедить главную программу от идущих после нее GOSUB-подпрограмм...
Название: Бейсики
Отправлено: bangor_flying от октября 1, 2013, 11:03
Мне кажется, что на 90 процентов классический Бейсик - это линия PDP/Microsoft, которые весьма неплохо совместимы между собой (программы переносятся снизу вверх, с более ранних диалектов на поздние довольно легко; например, разница в использовании PRINT USING между PDP и Микрософтом сводилась к использованию разных символов табуляции; двоеточие разделяло операторы в строке вместо бакслэша; немного разный набор функций и т.д). Кроме того, базовый набор графических функций во всех Бейсиках был примерно одинаков. Что касается того, что не попадает в эти 90 процентов - либо реализации, которые делались в условиях крайне жестких ограничений по памяти, железу и времени разработки (Atari Basic, Apple Integer Basic, можно еще вспомнить жутковатый Бейсик на первой модели TRS-80, в котором нет мат.функций или возведения в степень), этакие костыли, на которых серьезные программы не писали, или специализированные диалекты для управления сложным железом (Locomotive, Wang, MSX2). Перенести развитые программы с этих диалектов на другие как правило нереально, то есть в каждом случае это фактически уже отдельная ветка, вещь в себе. И есть еще бейсикоподобные языки, Фокал, например - недоБейсик, но с большим влиянием Фортрана.