LINUX.ORG.RU
ФорумTalks

Современный BASIC


0

1
Sub Halve (ByRef i As Integer)
    i /= 2
End Sub

Sub Triple (ByRef i As Integer)
    i *= 3
End Sub

Type operation As Sub (ByRef As Integer)

' an array of procedure pointers, NULL indicates the
' end of the array
Dim operations(20) As operation = _
{ @Halve, @Triple, 0 }

Dim i As Integer = 280

' apply all of the operations to a variable by iterating through the array
' with a pointer to procedure pointer
Dim op As operation Ptr = @operations(0)
While (0 <> *op)
    ' call the procedure that is pointed to, note the extra parenthesis
    (*op)(i)
    op += 1
Wend

Print "Value of 'i' after all operations performed: " & i

Кто первым догадается, что этот код делает? (взято из документации к FreeBASIC). Сторонникам C такая галиматья должна быть как бальзам на грудь, хотя работа с указателями на языке Intel Assembler'а, например, выглядит куда логичнее и понятнее, поскольку обходится минимумом мозолящих глаза сущностей.
Я это к тому веду, что современный BASIC всё также многословен, но по степени замороченности наступает на пятки языку C. На мой взгляд, всё же основным недостатком BASIC, из-за которого им мало кто пользуется в Linux и вообще в nix'ах - это отсутствие стандартизации. Но если считать, что, например, Java, PHP и Perl - это разновидности языка C (а так оно вообще говоря и есть, если посмотреть на их синтаксис), то BASIC с его немногочисленными живыми разновидностями (а по сути только с тремя: FreeBASIC, Gambas и Mono BASIC aka VB.Net) уже не будет казаться таким уж многоголовым чудищем. Кстати, весьма интересно, что Microsoft BASIC PDS 7.1, вышедший что-то в 89-м году или 90-м, был вообще одним из первых универсальных ЯП, отлично заточенных под работу с базами данных....

P.S А вообще программистам следовало бы думать о качестве кода, а не о том, какие инструменты правильные, а какие нет. А то получается как в басне Крылова: «а вы, друзья, как ни садитесь, всё в музыканты не годитесь».

★★★★★

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

Ну вот мне что-то не очень хочется, чтобы автор треда что-то там «помогал» в моем проекте.

Достаточно будет char **something;
:)

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

> Ну, я имею в виду всякие там *, **, & и сколько их ещё там. Зачем это нужно - неясно. Достаточно было просто добавить операцию ptr(obj) - получить адрес объекта в памяти.

> Ведь, например, **a что значит? Это указатель на указатель. А выглядит как просто два умножения перед а. Почему нельзя было сделать какую-то более многословную, но зато удобоваримую см т.з. восприятия человеком конструкцию?

ГСМ ещё не видело/не доросло до матана/функана/тфкп/етц? Там, внезапно, подобных обозначений пруд пруди.

Rzhepish
()

Какие же уродливые эти ваши бэйсики с сями:

(defn halve [i] (/ i 2))
(defn triple [i] (* i 3))

(defn operation [start operations]
  (reduce #(%2 %1) start operations))

Проверяем:

user> (operation 280 [halve triple])
420
Ritmik
()
Ответ на: комментарий от Rzhepish

Там, внезапно, подобных обозначений пруд пруди.

Вы так говорите, будто это что-то хорошее. Я математик, но традиционная нотация убивает мне мозг.

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

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

Ritmik
()

P.S А вообще программистам следовало бы думать о качестве кода, а не о том, какие инструменты правильные, а какие нет.

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

Dragon59 ★★
()

А Гермиона выросла за лето. Скучаю по такому:

10 READ A
20 PRINT A
30 DATA 5, 15, 44, 2

AlexCones ★★★
()

Я мельком пролистал тред и, кроме баттхертящего по поводу Си ТСа, ничего не увидел. О чем всё это, и при чем тут Васик?

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

По-моему те же яйца, только сбоку. Сила привычки, видимо.

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

ГСМ ещё не видело/не доросло до матана/функана/тфкп/етц?

Так Си - не специализированный язык математических вычислений! Мало того, синтаксис R, который как раз является языком математических вычислений, в разы проще и понятнее: я сам написал несколько небольших программок на нём, мне понравилось.

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

Прямо питон какой-то

Правильно, они ж родственники.

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

Си — язык системного программирования. С какой стати он должен быть спроектирован из «потребностей» ГСМ, которые в этом вопросе ни ухом, ни рылом?

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

Так Си - не специализированный язык математических вычислений!

Это изначально низкоуровневый язык программирования. Он создавался емнип для того, чтобы под разные компьютеры один и тот же код не переписывать заново - переписывался только компилятор, а программы оставались теми же. Также авторы стремились как можно больше сократить синтаксис. Переход по указателю - операция, очень часто используемая, поэтому авторы и сделали её длиной в один символ. Разобрать выражение на самом деле очень просто - нужно просто понять, чем в данном случае является выражение: например, **a - какое умножение? Кто на что умножается? Никто не умножается -> два раза переходим по указателю, если, конечно, это не описание переменной, но с ним не спутаешь - конструкция другая.

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

Не знаю, что такое ГСМ, но я, например, в системном программировании и ухом, и рылом. И претензии мои не поводу того, что ЭТО невозможно понять, а по поводу того, что у Си совершенно хаотичный инопланетный синтаксис, из-за которого самые дерьмовые программы на нём выглядят как заумное «каля-маля». Совершенно необязательно быть крутым системным программистом, чтобы пользоваться указателями, но при этом всё желательно, чтобы код был не винегретом, а программой. Тот же Кнут неспроста к языку Си относился... скептически.

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

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

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

Также авторы стремились как можно больше сократить синтаксис

Ну так вот и ключевой вопрос: ДЛЯ ЧЕГО? Чтобы побольше и побыстрее дерьмового системного ПО писалось?
По-моему любой нормальный человек руководствуется принципом: семь раз отмерь - один отрежь, в т.ч. и при написании программ. Посмотрите на FORTRAN, на котором написано важнейшие для функционирования оборонного комплекса США ПО - это же больше всего на что похоже? - на предложения, написанные нормальным грамотным английским языком, эти программы можно просто читать, а если там содержится программисткий косяк, логическая ошибка, это очень легко отследить. Копание же в чужом коде на Си похоже на разрывание зловонной помойки, где чёрт ногу сломит...

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

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

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

Ну так вот и ключевой вопрос: ДЛЯ ЧЕГО?

Всё для экономии памяти и упрощения синтаксического анализатора. Классический пример - флаг O_CREAT в системном вызове open, экономили на каждой букве.

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

Тем не менее Си - это, так скажем, «лже-предмет», как лже-наука.

Это не предмет, это язык программирования. У которого есть строго определённый синтаксис.

который изначально пишется «по-человечески», а потом уже переводится в понятную компьютеру форму компилятором/интепретатором.

Нет, нет и нет. Он пишется человеком в той форме, в которой он понятен компилятору/интерпретатору, а не в которой просто удобно человеку.

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

Си - это, так скажем, «лже-предмет», как лже-наука

Надо быть тоньше

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

Если код не писать сознательно (ок, «неосоознанно писать» код, как некоторые делают), как винигрет, ничего подобного не получится, и твои с Кнутом претензии пойдут лесом.

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

А вообще по-моему не совсем определён результат. Может i+3, может i+4 быть.

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

http://lurkmore.to/ i_ _ i

Вообще-то, без контекста, вопрос смысла не имеет, являясь сфероконем в вакууме :) На собеседованиях любят подколоть, но правильный ответ всегда зависит от реализации - потому «неопределенное поведение».

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

Причем тут указатели? Я про «недоумение» почему получилось то, что получилось :)

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

Он пишется человеком в той форме, в которой он понятен компилятору/интерпретатору

Из-за этого ЯП как правило имеет строго заданный синтаксис. Компиляторы/интерпретаторы тоже пишутся людьми и пишутся под тот язык, который им, людям, удобен. Кто-то же написал компилятор FreeBASIC'а.

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

Кстати, компилятор FreeBASIC'а писался как раз Си-программерами до мозга костей, если бы не это, синтаксис новых конструкций был бы куда более простым.

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

Чтобы побольше и побыстрее дерьмового системного ПО писалось?

А если без полемического задора, откуда установка на именно «дерьмовое» системное ПО? Вы исторический контекст изучите сначала, (про «640 Кб, которых хватит всем» хотя бы слышали? А про память, имевшуюся в распоряжении изначальных программистов Си?)

Посмотрите на FORTRAN, на котором написано важнейшие для функционирования оборонного комплекса США ПО

Найдите «важнейшее ПО» для управлеения системами жесткого реального времени на фортране, посмеемся. Абсурдные вопросы можно задавать легко и в большом количестве, но отвечать на них не обязательно.

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

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

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

tiandrey ★★★★★
()

по степени замороченности наступает на пятки языку C

Ты, видимо, путаешь C с плюсами. Плюсы действительно заморочены, а сишка довольно-таки прозрачна.

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

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

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

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

Почему же? Если с пробелами - вполне определен (независимо от того, справа-налево или слева-направо будут выполняться операторы): i увеличится на 2, а операция вернет 2*i+3.

Eddy_Em ☆☆☆☆☆
()
Ответ на: комментарий от Eddy_Em

Плевать gcc хотел на ваши пробелы:

 предупреждение: операция над «i» может дать неопределенный результат [-Wsequence-point]

tiandrey ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.