LINUX.ORG.RU
ФорумTalks

А чем плох синтаксис современного BASIC?

 ,


0

1

Прежде всего речь о FreeBASIC.

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

Пример неудачного синтакиса (но ИМХО далеко не худшего) :

' Предварительное объявление функции 
' Перегружен по количеству символов
declare function getSomething () as integer
' Но зато можно отличить функцию от процедуры, и это хорошо:
declare sub doSomething ()
' А ещё аргументы читаются по-человечески:
declare function getSomebody (ByVal id as long, ByRef person as PersonalCard) as string

Примеры удачного синтаксиса:

for i=100 to 0 step -1
 for j=20 to 40 step 5
  ...
 next j
next i 
' can be written as "next"

do until A>B
...
loop

do
...
loop until A>B

do while A>B
...
loop

if A>B then
...
else if C>D
...
end if

For i As Integer = 1 To N
    Select Case i
    Case 1, 3, 5, 7, 9
        dummy += 1
    Case 2, 4, 6, 8, 10
        dummy += 1
    Case 11 To 20
        dummy += 1
    Case 21 To 30
        dummy += 1
    Case 31
        dummy += 1
    Case 32
        dummy += 1
    Case 33
        dummy += 1
    Case Is >= 34
        dummy += 1
    Case Else
        Print "can't happen"
    End Select
Next

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

Так почему же ныне так популярен обфусцированный вырвиглазный синтаксис?

Неужели физически набивание кода программы у кого-то отнимает столько времени, что объём кода действительно становится проблемой, и ради сокращения объёма в жертву приносится выразительность синтакиса, его человекочитабельность?

★★★★★

Последнее исправление: DRVTiny (всего исправлений: 2)
for i=100 to 0 step -1
 for j=20 to 40 step 5
  ...
 next j
next i

Имхо ни чем не лучше, чем C.

for(auto i = 100; i >= 0; ++i) {
    for(auto j = 20; j <= 40; j += 5) {
        ...
    }
}

Зато такая конструкция позволяет запихивать в for любые операции, а не только предусмотренные создателями языка. Обход итераторов stl тому пример. Или подобная хрень:

vector<int> v{};
...
for(auto i = 0; i < 100; i = v[i]) {
    ...
}

Вот по тому «так популярен обфусцированный вырвиглазный синтаксис», что не требует введения доп. конструкций в язык на каждый случай.

Ivan_qrt ★★★★★
()

ничем, для обучения школоты сойдёт

Harald ★★★★★
()

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

Вот например:

schtasks /Create /RU "NT AUTHORITY\SYSTEM" /SC ONSTART /RL HIGHEST /TN ShitName /TR %systemroot%\system32\shitname.cmd
steemandlinux ★★★★★
()
Ответ на: комментарий от torvn77

Но читать его таки труднее.

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

Ivan_qrt ★★★★★
()

Так почему же ныне так популярен обфусцированный вырвиглазный синтаксис?

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

Бейсик был у всех свой. Он и сейчас везде свой.

i-rinat ★★★★★
()
Ответ на: комментарий от Ivan_qrt

А зачем собственно сложный for, если он полностью заменяется циклом while? Зато для целей, которые возникают чаще всего такой синтаксис менее удобен.

Хотя я вообще заменил бы for на foreach (хотя его можно обозвать словом for):

for i in {1..100}
do
    ...
done

Xenius ★★★★★
()
for (ByRef i as Person, ByVal can as MuchAsICan)
   End ' cycle in different Case
do please honey progamm print "sintax is bad" until SecondComing
system-root ★★★★★
()

Потому что басик - как был говном так им и остался

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

Python посмотри

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

А зачем собственно сложный for, если он полностью заменяется циклом while?

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

Хотя я вообще заменил бы for на foreach (хотя его можно обозвать словом for)

Непонятно, почему нужно именно заменять. В тех же крестах, два разных варианта for'а (обычный for и проход по коллекции) прекрасно сосуществуют вместе.

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

По мне - должны.

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

А получается у большинства языков - какое-то уродство, которое ни к машинному языку, ни к человечякскому не имеет отношения. Абстракции на абстракциях с забубёным синтаксисом.

DRVTiny ★★★★★
() автор топика

современный basic - это lua

futurama ★★★★★
()

Строчки не нумерованы. Шутка. Имхо, все пофиг на синтаксис, деньги платят и ладно.

ilovewindows ★★★★★
()

Так почему же ныне так популярен обфусцированный вырвиглазный синтаксис?

Не все пишут на Perl, не надо обобщать.

Virtuos86 ★★★★★
()

Проблема в том, что васиков разных больше, чем программистов на них. И этим они проигрывают, например, Паскалю. Фортрану они (впрочем, как и все остальные) сливают по накопленной математической базе. C/C++ они сливают по библиотекам. Ну и так далее. Ну а всяким перлопитонам оно проигрывает по сахару. Сколько строк займёт на васике «[+] $*IN.lines;»?

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

Ты просто не любишь аскииарт

#!/usr/bin/perl -w
use strict;
                                           $_='ev
                                       al("seek\040D
           ATA,0,                  0;");foreach(1..2)
       {;}my               @camel1hump;my$camel;
  my$Camel  ;while(             ){$_=sprintf("%-6
9s",$_);my@dromedary           1=split(//);if(defined($
_=)){@camel1hum        p=split(//);}while(@dromeda
 ry1){my$camel1hump=0      ;my$CAMEL=3;if(defined($_=shif
        t(@dromedary1    ))&&/\S/){$camel1hump+=1<<$CAMEL;}
       $CAMEL--;if(d   efined($_=shift(@dromedary1))&&/\S/){
      $camel1hump+=1  <<$CAMEL;}$CAMEL--;if(defined($_=shift(
     @camel1hump))&&/\S/){$camel1hump+=1<<$CAMEL;}$CAMEL--;if(
     defined($_=shift(@camel1hump))&&/\S/){$camel1hump+=1<<$CAME
     L;;}$camel.=(split(//,"\040..m`{/J\047\134}L^7FX"))[$camel1h
      ump];}$camel.="\n";}@camel1hump=split(/\n/,$camel);foreach(@
      camel1hump){chomp;$Camel=$_;tr/LJF7\173\175`\047/\061\062\063
      45678/;tr/12345678/JL7F\175\173\047`/;$_=reverse;print"$_\040
       $Camel\n";}foreach(@camel1hump){chomp;$Camel=$_;y/LJF7\173\17
        5`\047/12345678/;tr/12345678/JL7F\175\173\047`/;$_=reverse;p
         rint"\040$_$Camel\n";}#japh-Erudil';;s;\s*;;g;;eval;   eval
           ("seek\040DATA,0,0;");undef$/;$_=;s$\s*$$g;(   );;s
             ;^.*_;;;map{eval"print\"$_\"";}/.{4}/g; __DATA__   \124
               \1   50\145\040\165\163\145\040\157\1 46\040\1  41\0
                    40\143\141  \155\145\1 54\040\1   51\155\  141
                    \147\145\0  40\151\156 \040\141    \163\16 3\
                     157\143\   151\141\16  4\151\1     57\156
                     \040\167  \151\164\1   50\040\      120\1
                     45\162\   154\040\15    1\163\      040\14
                     1\040\1   64\162\1      41\144       \145\
                     155\14    1\162\       153\04        0\157
                      \146\     040\11     7\047\         122\1
                      45\15      1\154\1  54\171          \040
                      \046\         012\101\16            3\16
                      3\15           7\143\15             1\14
                      1\16            4\145\163           \054
                     \040            \111\156\14         3\056
                    \040\         125\163\145\14         4\040\
                    167\1        51\164\1  50\0         40\160\
                  145\162                              \155\151
                \163\163                                \151\1
              57\156\056
# camel code, copywrite 2000 by Stephen B. Jenkins
# The use of a camel image with the topic of Perl
# is a trademark of O'Reilly & Associates, Inc.
# Used with permission.

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

Синтаксис Python ужасен ИМХО.

Мнда и этот человек говорит что бейсик человечен и понятен =) Впрочем чудиков много на земном шаре, для кого-то ржавая шестерка лучше новой иномарки :D

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

наоборот, меньше букв на типичные конструкции

next_time ★★★★★
()

Фраза «современный бейсик» является оксюмороном.

hateyoufeel ★★★★★
()

Современный basic — это .NET'овый вариант.

Классический basic едва ли нужен: человекочитаемость не означает простоту разработки на нём. А, да: ещё в нём убогие типы.

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

Мнда и этот человек говорит что бейсик человечен и понятен

Интересная тема. А что говоришь ты.

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

FreeBASIC классический или нет? Если да, то интересно, какие типы Fb Вам известны и сколько их по-Вашему?

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

Что именно непонятно в моей позиции? Да, я считаю, что синтаксис Python гораздо менее понятен для человека «со стороны», нежели синтаксис BASIC, поскольку BASIC - это язык, специально разработанный для новичков в программировании, которые ещё способны общаться по-человечески, а Python - продукт жизнедеятельности исходно IT-шного мозга, создавшего язык для быстрого быдлокодинга/прототипирования. Задачи в первом случае - сугубо лингвистические и педагогические на 80%, задачи во втором случае - сугубо коммерческие, практические.

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

Ну а всяким перлопитонам оно проигрывает по сахару. Сколько строк займёт на васике «[+] $*IN.lines;»?

И давно такое дерьмо стало именоваться сахаром?

Или если дерьмо правильно назвать - оно действительно будет слаще?

Не знаю, не пробовал, но интересно мнение истинного знатока.

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

У Perl'а очень простой и понятный синтаксис. Из того, что Perl позволяет делать всё, включая написание чего-то нечитабельного - не означает, что язык плох. Просто он даёт Вам свободу, а чтобы пользоваться свободой, нужно как минимум соотв. менталитетом обладать.

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

Задачи в первом случае - сугубо лингвистические и педагогические на 80%

После учебы на бейсике писать можно только на бейсике, даже если это С.

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

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

Ну вот, из Вас опять какое-то инопланетное Г попёрло.

Попробуйте мыслить как человек. Желательно на русском языке. Я же не призываю писать программы на русском, я только предлагаю подумать на нём.

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

Синтаксис языка - вполне себе первая важная его характеристика (как языка).

Под определённые свойственные языку задачи адаптируется его синтаксис. И, кстати, в прошлом-то на BASIC'е написано немало всего, он даже в PIC'ах использовался. Значит, синтаксис весьма неплох, под широкий круг задач адаптирован.

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

Синтаксис языка - вполне себе первая важная его характеристика

Хорошо, тогда вы правы, а все остальные - нет, можно было это вынести в шапку топика.

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

Смотря из какой коробки. Есть коробка и с reduce. А что, это такая модная цацочка, что теперь без неё ни дня, ни строчки кода?

Have you reduced today?

Некоторые ИТ-специалисты напоминают мне тупых блондинок, читающих запоем модные журналы (теперь и в онлайн-версии!).

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

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

DRVTiny ★★★★★
() автор топика

Case Is >= 34

Прикольно.

Tark ★★
()

Какая разница, какой у него синтаксис, если семантика древняя, как говно мамонта?

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

А что именно древнее-то? Вполне обычно всё, но нет тех безумных сокращений для индусских макак, которые позволяют набрать 1К нечитабельного кода и сказать «я шделаль». Но с учётом существования IDE не очень понятно, почему столь принципиально, чтобы код был написан в понятном только «посвящённым» телеграфном стиле с элементами шифрограммы? Разве что специально для того, чтобы искусственно повысить порог вхождения в профессию, чтобы можно было щёки раздувать: я вот этот безумный набор значочков понимаю, а ты нет?

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

все условия продолжения цикла были в заголовке.

если v не меняется внутри цикла, иначе становится непонятно до каких пор он продолжается, пока не дойдёшь до нужной строчки.

И в v индекс i может выйти за пределы допустимых значений, а никакой проверки этого здесь всё равно нет (но скорее всего можно запихнуть, в том числе в виде тернарного оператора).

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

И в v индекс i может выйти за пределы допустимых значений

Или подобная хрень

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

если v не меняется внутри цикла

Разумеется. Но в большинстве случаев всё хорошо локализовано, и по заголовку цикла примерно понятно, что он делает. Речь не о данном примере.

Ivan_qrt ★★★★★
()
Ответ на: комментарий от Ivan_qrt
for(auto i = 100; i >= 0; ++i) {

Сравните это и BASIC: - совершенно ненужная операторная скобка «{» - ни к селу, ни к городу скобки - какое-то странное, далеко не самоочевидное выражение внутри скобок, содержащее ";", т.е. знак, использование которого в нормальном письменном человеческом языке вообще является диким моветоном

И всё это вместо:

for i=100 to 1 step -1

Универсальность for? Да это же просто синтаксическая надстройка над циклами типа while и until! Кстати, назовите мне навскидку хотя бы 5 популярных языков, в которых так же, как и в BASIC - есть циклы не только с предусловием, но и с постусловием, причём это не какая-то составная сбоку припёка как в perl «do {} until», а нормальная полноценная фундаментальная конструкция языка?

Где есть не только

do while COND : CODE : loop
, но и
do : CODE : loop while COND
?

DRVTiny ★★★★★
() автор топика
Последнее исправление: DRVTiny (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.