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)
Ответ на: комментарий от Miguel

Неужели современные «T<language<S>>.map%reduce» делают ТАКОЕ с людьми :(

Ведь в заголовке же темы даже есть слово синтаксис, неужели даже заголовок на русском языке уже кажется нечитабельным бредом и его тоже требюуется как-нибудь сократить с использование <T>, def'ов и желательно ещё reduce'ов?

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

совершенно ненужная операторная скобка «{»

Фигурные скобки значительно лучше, чем begin/end, then/end, next и прочие вариации.

далеко не самоочевидное выражение внутри скобок, содержащее ";"

На бэйсике можно написать что-либо полезное вообще не знакомясь с языком и его синтаксисом? Если нет, то абсолютно не важно, самоочевидно тебе выражение внутри или нет. После прочтения описания синтаксиса языка оно становится понятным и никаких сложностей не вызывает. Вообще.

А понимая синтаксис, читать и писать его в такой форме куда удобнее.

Универсальность for? Да это же просто синтаксическая надстройка над циклами типа while и until!

Я тебе более того скажу. until это просто синтаксическая надстройка над while, а while просто синтаксическая надстройка над if и goto. Удобными от этого они не перестают быть. И универсальная надстройка лучше узкоспециализированной.

причём это не какая-то составная сбоку припёка как в perl «do {} until», а нормальная полноценная фундаментальная конструкция языка?

Каковы критерии фундаментальности и почему в бэйсике - фундаментально, а в пёрле нет?

Кстати, назовите мне навскидку хотя бы 5 популярных языков, в которых так же, как и в BASIC - есть циклы не только с предусловием, но и с постусловием

Да пожалуйста: c/c++, java, javascript, php, ruby. А ты это к чему, собственно?

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

Ну, тебе уже ответили в комменте, который скоро удалят.

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

На бэйсике можно написать что-либо полезное вообще не знакомясь с языком и его синтаксисом?

На BASIC'е можно прочитать что-то полезное. Помните присказку про «чукча не читатель»? Так вот, научиться читать код - куда важнее, нежели научиться его писать, потому что в совреенном мире нет места гениальным одиночкам, все проекты пишутся множеством людей и первая задача программиста в 99% случаев - понять, как работает чужой код.

После прочтения описания синтаксиса языка оно становится понятным и никаких сложностей не вызывает.

Сугубо моё личное мнение, что язык программирования для того и нужен, чтобы быть понятным человеку и оперировать агрегатами человеческого языка. Если даже для приблизительного понимания языка нужно продираться через документацию по его синтаксису - это плохой язык. Это язык для «посвящённых», что-то вроде идиш для сионских мудрецов. Не нужно такое, потому что если мы не будем делать мир человечным, комфортным для людей - он сам избавится от homosapiens как от неэффективного пережитка прошлого.

Кстати, когда мне когда-то давно показали пример на perl'е, который использовал map в несколько обфусцированном как раз виде - я понял, что он делает, хотя perl тогда знал очень и очень слабо и про map вообще не знал. Значит, семантика и синтакис Perl'а, которые здесь все так костерят - очень даже гуманны, и если писать на Perl что-то вразумительное - ни у кого не будет проблем с пониманием.

Зато когда я взял написанную на Microsoft TypeScript программу своего коллеги по работе и попытался её немного поправить - у меня просто вскипел мозг: я ни черта не понимал, как это работает, это была просто каша каких-то потоковых преобразований не весть знает чего.

DRVTiny ★★★★★
() автор топика
Ответ на: комментарий от Ivan_qrt
Каковы критерии фундаментальности и почему в бэйсике - фундаментально, а в пёрле нет?

На BASIC конструкция монолитная (по сути один оператор, параметром которого - блок кода), а на perl это составная конструкция: do {} until - это не оператор, это два оператора: «do(блок_кода)» и until в инфиксной форме (или как это называется, когда пишется «do_something if condition»).

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

На BASIC'е можно прочитать что-то полезное.

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

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

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

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

Какого именно, русского, английского, китайского, или ещё какого?

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

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

Вывод - единственный нормальный ЯП - 1С!

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

Язык программирования нужен, чтобы создавать программы. Эти программы должны правильно работать. Иногда они должны работать быстро. И в этом случае ЯП должен оперировать компьютерными примитивами, чтобы человек мог объяснить компьютеру, как сделать операцию быстро. Если он этого не позволяет, то абсолютно не важно, какой у него синтаксис.

А когда скорость программы не важна, на первый план выходит скорость разработки. И здесь бэйсик, при всей своей «понятности», сильно отстаёт от многих конкурентов.

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

На BASIC конструкция монолитная (по сути один оператор, параметром которого - блок кода)

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

do until A>B
...
loop

условие в первой строке, а в перле:

do {
...
} while(A>B)

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

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

А после этого, дописать что-то полезное можно?

Конечно можно! Сейчас большая часть языков учится по quick cheat shit... ой, sheet'у. Собственно, речь как раз о том, что прочитав по коду программы на языке BASIC, написать свой код намного проще, нежели в случае с другими языками - и в первую очередь потому что программы на BASIC пост-QuickBASIC эпохи исходно понятны даже ребёнку.

Иногда они должны работать быстро.

Например, PowerBASIC, который в общем-то близкодроственен FreeBASIC, в своё время был одним из самых быстрых компиляторов: код на нём даже на древних 486-ых просто летал.

Собственно, во Free есть вызовы Си, есть ассемблерные вставки. Работает не скажу, что архибыстро, но пошустрее интепретируемых языков точно.

А когда скорость программы не важна, на первый план выходит скорость разработки.

Как я вижу реальную ситуацию - скорость разработки далеко не главный критерий. А вот как раз кроссплатформенность часто важна, поскольку у заказчиков ситуации с бардаком, разбродом и шатанием, когда разные части системы работают на разных типах ОС, а nix'овый код складирует данные в горячо любимое всеми MS SQL - это вообще сплошь и рядом. Почему заказчики так любят устраивать у себя зоопарки - мне зело неведомо. Иногда это связано с «интеграцией в уютную 1С-ку» (которая уже давно работает и на никсах, но всем как-то пофигу), иногда - с какими-то унаследованными из жирных нулевых программами для управления бизнес-процессами, которые «работают-не трожь», а чаще всего просто связано с тем, что те или иные ключевые специалисты не желают осваивать nix'ы из принципа.

И поскольку таких заказчиков - пруд пруди, да плюс многие ещё хотят всякую хрень типа «мобильного приложения, чтобы звонить, если чо, и графики смотреть в рилтайме» - в реальной жизни всё равно всё сводится либо к Java во все поля, либо, если совсем некогда (а сделать вчера - стандарт индустрии), то к Java + какой-либо интерпретируемый язык для Х-Х-продакшн. Т.е. к Python'у или Ruby + Java.

DRVTiny ★★★★★
() автор топика
Последнее исправление: DRVTiny (всего исправлений: 1)
Ответ на: комментарий от Ivan_qrt

FreeBASIC:

do
    CODE
loop until A>B

Perl5:

do {
   CODE
} until $A>$B

Вопрос в том, что Perl'овый do - это просто оператор в короткой постфиксной форме оператора until:

OPERATOR until COND

Из-за этого в BASIC обе формы циклов выглядят единообразно:

do until A>B
    CODE
loop

' compare to

do
    CODE
loop until A>B

А в Perl - нет:

until (COND) {
    CODE
}

# compare to

do {
    CODE
} until COND;

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

Конечно можно! Сейчас большая часть языков учится по quick cheat shit... ой, sheet'у.

В котором, внезапно, описывается и синтаксис. И от С-подобного синтаксиса этот quick sheet длиннее не станет.

Собственно, речь как раз о том, что прочитав по коду программы на языке BASIC, написать свой код намного проще

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

Например, PowerBASIC, который в общем-то близкодроственен FreeBASIC, в своё время был одним из самых быстрых компиляторов

Не за счет месива из goto, я надеюсь?

Собственно, во Free есть вызовы Си, есть ассемблерные вставки. Работает не скажу, что архибыстро, но пошустрее интепретируемых языков точно.

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

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

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

Java залезла в свой сегмент именно благодаря высокой скорости разработки. Быть просто кроссплатформенным недостаточно.

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

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

Понял, спасибо. Единообразие, разумеется, хорошо.

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

А в Perl - нет:

Потому что в перл5 префиксная и постфиксная форма _эквивалентны_. Тут либо послать лесом всю идею постфиксной записи, или добавить модификатор. TMTOWTDI победил.

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

В котором, внезапно, описывается и синтаксис. И от С-подобного синтаксиса этот quick sheet длиннее не станет.

Не станет. Но что Вам приятнее слушать - Рахманинова или, положим, шум шоссейной автодороги за окном? Вот так же и с языками: сначала ля некоторых языков у живых людей возникает некоторое нежелание их изучать, и получается, что кодеров на Python больше чем на Rust совсем не потому, что Rust сложнее функционально. Потом - на чтение программы на языке B уходит куда больше времени и концентрации внимания, нежели на чтение программы на языке A...

Лично у меня была масса возможностей писать на Си, и даже синтаксис я понимаю, мало того - когда понадобилось, приписал неслабый кусок к серверу мониторинга Zabbix. Но почему-то не хочется постоянно ваять на нём. Даже если очень хорошо заплатят. Я знаю немало низкоуровневых вещей, неплохо понимаю как в принципе работают операционные системы, сам небольшую ОС писал когда-то. Но программировать на Си - разве что от состояния крайнего истощения. Сами Керниган и Ритчи, насколько я помню, говорят о том, что их язык был создан по принципу «что дерево синтаксического анализа выводилось быстреее», это был самый настоящий «быстрый старт по необходимости». Почему это взелетело и не взлетели такие мощные академические языки как Pascal, Oberon или даже Prolog - да просто потому что вся ИТ-отрасль с начала 80-х годов стремительно стала скатываться в безудержное Х-Х-П. Думать над синтаксисом уже было некогда, надо было темпы написания кода наращивать.

Не за счет месива из goto, я надеюсь?

PowerBASIC - обычный процедурный язык. Странные у вас представления о BASIC'е - под ZX Spectrum писали не иначе как?

Только вот это всё снижает читабельность. В этом случае, помимо бэйсика тебе придётся ещё и си знать.

Ну так зато скорость разработки на BASIC выше, чем на Си. Вы же упоминали важность сокращения сроков разработки: на BASIC легко пишется каркас программы, а в него можно понаставить кусков на Си, которые пишутся медленнее, но могут обеспечить прирост производительности на критичных участках. Никто не пишет программы сразу на смеси языков, но иногда после прогонки профайлером - нет-нет, да и приходится переписывать куски на чём-то более реактивном.

Java залезла в свой сегмент именно благодаря высокой скорости разработки. Быть просто кроссплатформенным недостаточно.

Разве что индусы с их колоссальными показателями скоростей набора на клавиатуре и полной интеграцией буфера обмена прямо в мозг - могут быстро разрабатывать на таком не по делу многословном языке, как Java. Это, кстати, один из немногих языков, где, на мой взгляд, оператор типа with (есть в BASIC для объектов и пользовательских типов данных) - нужен просто как воздух.

DRVTiny ★★★★★
() автор топика
Последнее исправление: DRVTiny (всего исправлений: 2)
Ответ на: комментарий от Ivan_qrt
Что тебя так удивляет в том, что под разные приложения используются разные ос, мне непонятно.

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

В большинстве проектов всё объяснялось либо гетерогенностью купленного софта, и это ещё куда ни шло, либо вообще тем, что «у нас вот эти разработчики пишут только под дотнет, поэтому для них у нас Windows Server».

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

Python - продукт жизнедеятельности исходно IT-шного мозга, создавшего язык для быстрого быдлокодинга/прототипирования.

Странно. Я лично читал, что он создан для другого был.

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

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

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

python популярнее раста, в первую очередь, потому что он значительно старше. Во вторую, потому что на нём писать значительно проще. Не из-за синтаксиса, а из-за того, что питон прощает все косяки программиста, а раст не прощает ничего.

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

Над синтаксисом раста думали очень много, и продолжают думать. И результат этих размышлений си-подобный. И над синтаксисом С тоже думали. От замены фигурных скобок на then/end «дерево синтаксического анализа» выводится заметно медленнее не станет. Даже на тех древних ПК. От ByVal/ByRef тоже.

Странные у вас представления о BASIC'е

В школе какой-то бэйсик видел пару раз краем глаза. Ну и по VB немного читал, лет 15 назад. Потому и спрашиваю.

Ну так зато скорость разработки на BASIC выше, чем на Си.

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

на BASIC легко пишется каркас программы, а в него можно понаставить кусков на Си

Только вот это всё снижает читабельность.

Куски на Cи будут снижать читабельность. По-крайней мере если судить по озвученным тобой представлениям о читабельности. А месиво из двух разных языков это ещё сильнее усугубит. Большинство людей/команд предпочитает писать всё на одном языке. И здесь выбор не в пользу бэйсика.

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

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

не по делу многословном языке

Как показывает мой скромный опыт понаписания на go, бойлерплейт не снижает скорость разработки вообще. Он просто вымораживает, но не более того. Ты всё равно будешь думать над тем, что написать, больше, чем непосредственно писать. Ну и, возможно, поэтому, джависты не мыслят себя без ide.

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

Даже если бы я был фанатом синтаксиса бэйсика, я бы его не использовал, т.к. во всём остальном он хуже.

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

Ну и по VB немного читал, лет 15 назад.

В VB уже выпилен goto в принципе, либо если и есть то этот какой-то внутренний хак, который никто не использует.

И так было со времён Visual Basic for MS DOS, т.е. с 1989-го года.

Большинство людей/команд предпочитает писать всё на одном языке. И здесь выбор не в пользу бэйсика.

Во-первых, далеко не всегда не в пользу - полно проектов на VB.NET вполне себе развиваются и горя не знают. Во-вторых я что-то не понимаю: возможность вызывать сишный код и делать ассемблерные вставки как-то делает язык хуже?

Да и взять тот же FreeBASIC: концептуально он создан фанатами Си, и сейчас код на нём обладает теми же возможностями, что и Си, но при этом поддерживает простенькую объектную модель (мне, например, больше и не нужно, поскольку я в принципе не сторонник ООП ни в каком его виде).

Ну и да, попробуйте в 5 строк написать вывод какого-нибудь графика функции на Сях, не используя сторонние библиотеки - я буду несколько удивлён, если вам это удастся. А вот BASIC позволяет с полпинка выводить достаточно сложную 2D графику на куче разных платформ - это его штатный функционал. При этом он прост как интерпретатор, но создаёт компилируемый код. Разве плохо?

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

И непопулярен он исключительно потому что «так исторически сложилось», а не потому что язык плохой. На примере того же PowerBASIC становится понятным, что сам по себе BASIC может быть очень и очень быстрым, к тому же скорость работы - это вообще не проблема языка (по крайней мере языка с полноценной поддержкой широкого спектра типов данных на все случаи жизни).

DRVTiny ★★★★★
() автор топика
Последнее исправление: DRVTiny (всего исправлений: 1)
Ответ на: комментарий от dmxrand

Во-первых там нет никакого «End For», Вы его придумали, во-вторых «End %SOMETHING%» и просто «End» как в Ruby и Julia - это 2 большие разницы. Я не вижу ничего зазорного в

Function getBoots (numLegs as integer) as tBoots
  Select Case D
    Case Is >B
      ...
  End Select
End Function

Но вот такие лестницы в Ruby у меня вызывают недопонимание:

def ...
  if ...
    for ...
    end
  end
end

Вспоминается «This is the end» из песни «Skyfall»: мало того, что это какой-то декаданс (конец-конец-конец!!!), так ещё и непонятно, какая закрывающая скобка к чему относится. Многие ставят комментарии после этих end'ов, я сам на на Perl'е для глубоко вложенных конструкций тоже вынужден писать комментарии после «}» - иначе вообще даже приблизительно непонятно, что она там закрывает.

DRVTiny ★★★★★
() автор топика
Последнее исправление: DRVTiny (всего исправлений: 2)
Ответ на: комментарий от DRVTiny

Да причем тут End For. Есть End If и еще куча эндов. А в C есть {} и все. А в Python и их нет. Так, что спасибо.... В паскале кстати Begin end.

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

GoTo statements can make code difficult to read and maintain. Whenever possible, use a control structure instead. For more information, see Control Flow.

А дальше - про массу ограничений, делающих его вообще бесполезным.

Как таковой goto остался ещё много где, но реальный код, его использующий, найти трудно. Я вот только в AUTOLOAD'е Perl'овом его использую, но там случай очень специфический, и этот вариант использования goto является нормальным с точки зрения разработчиков языка.

DRVTiny ★★★★★
() автор топика
Последнее исправление: DRVTiny (всего исправлений: 1)
Ответ на: комментарий от DRVTiny

В VB уже выпилен goto в принципе, либо если и есть то этот какой-то внутренний хак, который никто не использует.

Как таковой goto остался ещё много где, но реальный код, его использующий, найти трудно. Я вот только в AUTOLOAD'е Perl'овом его использую

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

А можно не голословно? Чем хуже?

О каком диалекте и какой нише идёт речь?

И как может быть хуже что-то, о чём Вы вообще ничего не знаете?

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

В VB уже выпилен goto в принципе

Это было описание моих скромных познаний о бэйсиках. Про goto был задан вопрос, без каких либо утверждений. Ответ получен. К чему столько обсуждать то, чего я не утверждал?

Во-первых, далеко не всегда не в пользу - полно проектов на VB.NET вполне себе развиваются и горя не знают.

Какие у этих проектов требования к производительности?

возможность вызывать сишный код и делать ассемблерные вставки как-то делает язык хуже?

Нет, только лучше.

Ну и да, попробуйте в 5 строк написать вывод какого-нибудь графика функции на Сях, не используя сторонние библиотеки

А может ещё компьютер не использовать? То, что в стандартную библиотеку какого-то ЯП засунули графику не значит, что все должны так делать. По возможностям с Qt она поспорит? Тогда в чём смысл тащить её везде?

И непопулярен он исключительно потому что «так исторически сложилось», а не потому что язык плохой.

Есть всего два типа языков программирования: те, на которые люди всё время ругаются, и те, которые никто не использует. ©

На примере того же PowerBASIC становится понятным

Я никогда не видел powerbasic, но вот различий между текущим vb и quickbasic больше, чем между c и c++. Так что делать выводы о всех бэйсиках на основе одного powerbasic необоснованно. Если ты, как человек сведущий, считаешь powerbasic достаточно производительным и удобным, то можем провести его сравнение с крестами.

к тому же скорость работы - это вообще не проблема языка

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

Ivan_qrt ★★★★★
()

Не знаю, как FreeBASIC, а в VBA, оказывается, есть ссылки на переменные как в Цэ, только плохо задокументированные. Было больно.

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

Во FreeBASIC недолго думая заимствовали синтаксис ссылок из языка Си. Это, кстати, я бы не стал относить к его достоинствам: символ умножения для разыменования ссылки - какая очень тупая идея от КиР.

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

Зато рефлекторно понятная. В VBA их объявляют.

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

Одно дело пробовать что-то использовать, а другое дело - быть неспособным обойтись без IDE, потому что без неё язык становится слегка непонятным местами.

Последнее - это очень плохо. Например, я люблю Komodo IDE за то, что с её помощью можно намного быстрее фигачить код на Perl'е. Но когда у меня на работе нет возможности использовать IDE, я редактирую код в ssh-сессии со screen'ом, используя простой текстовый редактор joe - и особых проблем не возникает, хотя без Ctrl+G (переход между открывающей и закрывающей скобками) - мне было бы весьма неудобно. C end'ами в ruby у меня всё сложнее это и не скобка, и вообще никаких признаков того, откуда оно растёт нет. Зачастую мне было бы достаточно знать, что это просто конец цикла, а не конец оператора if, но в ruby всё выглядит одинаково - и это реально раздражает очень сильно.

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

Иван, мне честно лень отвечать на всё, тут наверное у всех фломастеры разные...

А откуда информация о том, что VB.Net, который сейчас от C# весьма лайтово отличается синтаксисом, а по сути и то, и другое - одно и то же сказание про .Net... Так вот, откуда представление о том, что программа на VB.Net вообще хоть как-то отличается от C# скоростью исполнения?

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

откуда представление о том, что программа на VB.Net вообще хоть как-то отличается от C# скоростью исполнения?

Да я такого не говорил, так-то. И нет у меня такого представления.

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

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

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

Посмотрите, например, как они реализовали такую вроде бы не простую вещь, как полноценная многопоточность (которая даже в хвалёном Crystal'е в зачаточном состоянии в какой-то боковой ветке на гитхабе) : http://www.freebasic.net/wiki/wikka.php?wakka=CatPgThreading

Просто, понятно, с примерами, которые очевидны даже для человека, не видевшего BASIC в глаза никогда.

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

Иван, я же говорил о вставках на Си и асме во FreeBASIC

Как ни странно, я говорил о нём же, пока не всплыл vb.

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

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

По поводу многопоточности, непонятно, почему при наличии raii в языке, это самое raii не используется для тех же мьютексов. В общем-то пример по многопоточности для Си, по сути, будет точно таким же.

Почитал вики. Он появился в 2004. При этом это просто Си с классами. Я так понимаю, ни наследования, ни полиморфизма, ни дженериков. Ну в общем-то не удивительно, что популярность не зашкаливает. Кто будет начинать свой проект на fb, если единственное, что он предлагает, даже по сравнению с Си - это немного ООП и другой синтаксис, значительно более многословный. Кто будет отказываться от хорошо оптимизирующих компиляторов, которые есть вообще на всём, что хоть как-то шевелится. От мегатонн библиотек? Ради того, чтобы кто-то не знающий язык смог прочитать программу и хоть что-то понять?

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

Если я правильно понял «мега-идею» модного словечка из фармакологии «дженерики», то это такая замечательная возможность понагенерировать автоматом функций и процедур для однообразной работы с разными типами данных. То, что раньше делалось просто макроопределениями с генерацией кода в духе «sum_float(x as float, y as float)» - теперь делается несколько иначе и считается целой технологией.

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

Но зато можно отличить функцию от процедуры, и это хорошо

WAT

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

То, что раньше делалось просто макроопределениями

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

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

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

Разумно. С другой стороны, я бы сделал синтаксис таких чудо-методов всё-таки попроще чуток:

function sum (x,y/int,float,complex) / @typeof(x)
    sum = x + y
end sub

А то даже в языке Julia выглядит как-то не очень:

function sum {Type<:Number}(x::Type, y::Type)
  x + y
end

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

Разумно. С другой стороны, я бы сделал синтаксис таких чудо-методов всё-таки попроще чуток:

function sum (x,y/int,float,complex) / @typeof(x)
    sum = x + y
end sub

А то даже в языке Julia выглядит как-то не очень:

function sum {Type<:Number}(x::Type, y::Type)
  x + y
end

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

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

Ох ща тебе про Александреску начнут рассказывать. А ещё исходники какого-нибудь Boost.MSM, или Boost.Spirit, или любую библиотеку из буста.

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

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

Лучше отсутствием закорючек :)

...

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

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

Python посмотри

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

Сегодня с Бейсиком может только Lua в этом плане как-то соперничать в теории. Но там с практикой всё сильно хуже и жуткая масса своих заморочек :)

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

FreeBASIC классический или нет?

_Классический_ бейсик — это такой, когда включил девайс и сразу пишешь. Вот прямо сходу «PRINT 2*2» Enter и в ответ 4 :) Ну, или на крайняк, запустил программу и сразу же делаешь там то же самое.

Сегодня такого больше не делают. И не только на Бейсике.

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

Из того, что Perl позволяет делать всё, включая написание чего-то нечитабельного - не означает, что язык плох.

Если язык позволяет писать на нём нечитаемо, то 90% программистов будут писать нечитаемо. Можно добавить этот закон к сборнику Мёрфи :)

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

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

Не замечал :)

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

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

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

_Классический_ бейсик — это такой, когда включил девайс и сразу пишешь. Вот прямо сходу «PRINT 2*2» Enter и в ответ 4 :) Ну, или на крайняк, запустил программу и сразу же делаешь там то же самое.

Lua-же

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