Forth и другие саморасширяющиеся системы программирования Locations of visitors to this page
Текущее время: Чт сен 20, 2018 06:26

...
Google Search
Forth-FAQ Spy Grafic

Часовой пояс: UTC + 3 часа [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 255 ]  На страницу Пред.  1, 2, 3, 4, 5, 6 ... 17  След.
Автор Сообщение
 Заголовок сообщения:
СообщениеДобавлено: Вт дек 11, 2007 13:08 
Не в сети

Зарегистрирован: Вс дек 02, 2007 17:31
Сообщения: 442
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
K`[f писал(а):
А причём тут "не нравится как всем"?
При том, что вы привели пример того, что в С "лучше". Ну там, про необходимость бэктрейсит исходник чтобы понять что и откуда. Верно? Вот я вам привел пример как можно этого недостатка избежать, даже не расширяя Форт а просто используя не совсем обычный для Форта стиль программирования. В результате, понятность "что и откуда" будет на уровне С, особенно если использовать Венгерскую нотацию, и даже длиннющие описания можно будет создавать не теряя их читабельности и работоспособности. Понимаете? То-есть, методы программирования характерные, и единственно правильные для С, для форта являются опционально возможными - хотите используйте, не хотите, делайте по другому. Дело вкуса и личных предпочтений! :D (ЗЫ А "си" такого выбора не дает, вы никак не сможете там хранить значения в стеке между выражениями ;) )
K`[f писал(а):
У каждого, думаю, что-то своё,
И с этого надо начинать! Любой исходник можно оценить по следующим критериям: рабочий - нерабочий, легко читаемый - тяжело читаемый, легко расширяемый - тяжело расширяемый. Это верно для любого языка. Ну так вот, никого (в том числе и Броди ;) ) не должно волновать то, каким стилем вам удается достигать максимального результата по этим критериям - главное достигнуть его. Если кто нибудь напишет более стабильный, легче читаемый и легче расширяемый код используя переменные и опорожняя стек в конце каждой строки, с определениями в сотни строк, чем кто либо другой "классическим" методом, то первый вариант останется однозначно лучшим.
Возможность использовать практически любой стиль программирования является одним из преимуществ Форта, не стоит вычеркивать его создавая виртуальные табу и культ одного, якобы верного стиля. Его верность недоказуема, поскольку стиль программирования вещь субьективная. :D
Гость писал(а):
Смысл в физическом отделении стека управления может быть есть, но нехватает только действительно примеров его использования в рантайме
Я в его в рантайме использовал для локальных переменных. А так, на усмотрение программера, ведь слова для работы с ним определены. :)

_________________
Am I evil? I'm man - yes I am! © James Hatefield


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Вт дек 11, 2007 13:17 
Не в сети

Зарегистрирован: Вс дек 02, 2007 17:31
Сообщения: 442
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
true-grue писал(а):
Именно так и пишут на Форте. В большинстве серьезных расширений создаются пользовательские стеки для самых различных нужд.
Увы, пользовательский стек, никоим образом не поможет оптимизировать выполнение программ суперскалярными процессорами, поскольку вся работа с ним ведется через один и тот же DS. :weep;
Использование паралельного стека адресов как предлагает Лёха может это дать, поскольку скомпилированный текст будет содержать большее количество независимых комманд которые могут выполняться паралельно. И это гут! :D
true-grue писал(а):
В этом состоит большое заблуждение дилетантов. На самом деле, проще написать ту же Форт-систему, чем научиться программировать на Форте.
Хорошо сказано! :D Напоминает другую фразу, про причину вырождения человечества: "Homosapiens достигает половой зрелости на 5 лет раньше чем умственной." :))
Может это и есть причиной вырождения Форта?! :shock:
true-grue писал(а):
Тогда можно заняться чем-нибудь еще. Лучшие программные системы созданы одиночками.
Да ну! Неужели? Назвите несколько таких "лучших программных систем" созданных одиночками. :D

_________________
Am I evil? I'm man - yes I am! © James Hatefield


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: true-grue
СообщениеДобавлено: Вт дек 11, 2007 17:11 
Не в сети

Зарегистрирован: Пн ноя 05, 2007 13:54
Сообщения: 135
Благодарил (а): 0 раз.
Поблагодарили: 11 раз.
Forthware писал(а):
Использование паралельного стека адресов как предлагает Лёха может это дать, поскольку скомпилированный текст будет содержать большее количество независимых комманд которые могут выполняться паралельно. И это гут!

Почему, собственно, ставятся такие мизерные задачи? Давайте лучше мечтать о встроенном в Форт небольшом ФП-расширении, с оптимизирующим MIMD-компилятором. Сначала это реализовывается. Затем по результатам принимается решение, оставаться ли в рамках Форта или же делать turnkey, если мы заведомо уверны, что ниже нашего расширения прикладнику спускаться не следует.
Вот так и работают на Форте, вверх по иерархии программных средств. Кстати говоря, Форт, как никакой другой язык, удобен для экспериментов в области проектирования новых языковых конструкций.

Forthware писал(а):
Может это и есть причиной вырождения Форта?! :shock:

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

Forthware писал(а):
Да ну! Неужели? Назвите несколько таких "лучших программных систем" созданных одиночками. :D

Вы вот, давеча, посоветовали forther'у купить словарь по выч. технике(к слову сказать, forther один из немногих, кто занимается Фортом профессионально), а и сами, оказывается, «плаваете». Комитеты чаще всего создают малопривлекательные вещи. Не придумай Вирт в свое время Pascal и Modula, пришлось бы Вам иметь сомнительное удовольствие работать с Delphi, основанной на монструозном варианте Algol или PL/I. Lisp, APL, FP, Prolog, ML, Miranda... Unix, Emacs и тд. -- все это сделано одиночками. Это и понятно, ведь создание — процесс интимный, таинственный. Совершенствование же и развитие вполне может быть делом соборным.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Вт дек 11, 2007 19:04 
Не в сети

Зарегистрирован: Чт окт 25, 2007 08:01
Сообщения: 154
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Гость писал(а):
P.S. Ничто не мешает для адресов и данных ввести разные мнемоники операций.


А их почти и не понадобится вводить. Только A+, A- и, наверное, перекидывание числа на вершину, возможно с автоматическим прибавлением к вершине. Ну там ADUP и т.п. ещё. А !, @, , - они просто будут использовать новый стек.

true-grue писал(а):
Почему же то, что вполне можно оставить для расширений, Вы так стремитесь внести именно в стандарт?


Я тут начинал недавно тему "Forth и DOS", если не изменяет склероз. Приличного примера такого расширения для DOS (я имею в виду far-указатели при 16-битной арифметике) никто не привёл. Это "расширение" должно будет подменять большую часть системного словаря так-то...

true-grue писал(а):
В этом состоит большое заблуждение дилетантов. На самом деле, проще написать ту же Форт-систему, чем научиться программировать на Форте.


Месье теоретик? :)

true-grue писал(а):
Тогда можно заняться чем-нибудь еще. Лучшие программные системы созданы одиночками.


Приведите мне, плиз, систему аналогичную по сложности ArchestrA, 3D MAX или там CAD какой-нибудь. Только не опенсорсные недоделки, которыми я часто сам, надо признать, пользуюсь, а действительно полнофункциональные системы. То из опенсорса что "доделано" на какой-то стадии (или сразу) становилось коллективным проектом.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Вт дек 11, 2007 19:22 
Не в сети

Зарегистрирован: Чт окт 25, 2007 08:01
Сообщения: 154
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Forthware писал(а):
При том, что вы привели пример того, что в С "лучше".


Я имел в виду лишь то, что существующий в Сях подход в настоящее время явно продуктивнее. Если мы такое же сделаем с Фортом - это будет не Форт. :) Имхо - в Форте можно сделать не менее продуктивно, но - другими средствами.

Forthware писал(а):
А "си" такого выбора не дает, вы никак не сможете там хранить значения в стеке между выражениями Wink


А у него и назначение другое. Иначе я бы пользовался только Сями и ни о каком Форте не думал вовсе. Но - я верю в силу простых и красивых решений. А Форт - он простой и красивый. :)

Forthware писал(а):
Возможность использовать практически любой стиль программирования является одним из преимуществ Форта, не стоит вычеркивать его создавая виртуальные табу и культ одного, якобы верного стиля. Его верность недоказуема, поскольку стиль программирования вещь субьективная. Very Happy


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


Forthware писал(а):
Использование паралельного стека адресов как предлагает Лёха может это дать, поскольку скомпилированный текст будет содержать большее количество независимых комманд которые могут выполняться паралельно. И это гут! Very Happy


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


true-grue писал(а):
Напротив, Форт переживает своего рода ренессанс.


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

true-grue писал(а):
Напротив, Форт переживает своего рода ренессанс. На это указывает количество теоретических статей, диалектов Форта, заинтересованных программистов. Но Форт никогда не станет популярным в массах, точно таким же образом, как не популярны там хорошие, умные книги или музыка. Форт это инструмент художника, а не ремесленника. Не надо строить иллюзий о нем и о себе, в этом смысле. А вот вырождение фортеров, оказывается, вполне реальная вещь.


Вера в свою исключительность - оно иногда полезно. Но трезвый взгляд на вещи - по моему опыту - оно полезнее. Иначе Фортеры просто вымрут. :(

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

1. Инструмент А, для решения некоторой задачи эффективнее инструмента Б, если он требует меньше времени для решения той же задачи при примерно одинаковом уровне решения по параметрам расширяемости, повторного использования, лёгкости внесения модификаций и читаемости кода.

2. Инструмент А эффективнее иннструмента Б для решения задач в общем случае, если он эффективнее инструмента Б для большинства наиболее распространённых задач.

Наконец, предложу некоторый "типичный список мейнстрима":
1. Web-приложения
2._КЛИЕНТЫ_ для работы с базами данных
3.Отображение данных - отчёты, GUI...
4.Структурирование и "перелопачивание" данных, особенно строк. Например - XML-парсер.

Вот примерно как-то так... Последний список обсуждается - я не являюсь специалистом по некоторым из этих прикладных направлений.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Вт дек 11, 2007 19:32 
Не в сети

Зарегистрирован: Пн ноя 05, 2007 13:54
Сообщения: 135
Благодарил (а): 0 раз.
Поблагодарили: 11 раз.
K`[f писал(а):
Месье теоретик? :)

А вот г-н Forthware со мной согласился. Очевидно, даже он имеет больше опыта в использовании Форта, чем Вы.

K`[f писал(а):
Приведите мне, плиз, систему аналогичную по сложности ArchestrA, 3D MAX или там CAD какой-нибудь.

Помилуйте, неужели Вы и в самом деле считаете эту свою идейку настолько неподъемной для одного человека?
3D MAX... Вот уже где флейму-то раздолье! "Приведите мне то, покажите мне се!". Sapienti Sat.
Коллеги по Форту говорят, что терять свое время в этой теме нечего... Будем считать, что я, как и Forthware, немножко постарался ради молодежи :)


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Вт дек 11, 2007 19:39 
Не в сети

Зарегистрирован: Чт окт 25, 2007 08:01
Сообщения: 154
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
true-grue писал(а):
А вот г-н Forthware со мной согласился. Очевидно, даже он имеет больше опыта в использовании Форта, чем Вы.


Это-то запросто. Но при чём тут сложность Форта?

true-grue писал(а):
Помилуйте, неужели Вы и в самом деле считаете эту свою идейку настолько неподъемной для одного человека?


Речь опять же не про идейку, а про "одного человека чтоб горы сворачивал". И тут
true-grue писал(а):
г-н Forthware со мной согласился
. :)


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Вт дек 11, 2007 19:40 
Не в сети
Аватара пользователя

Зарегистрирован: Чт июл 20, 2006 11:31
Сообщения: 2120
Откуда: Екб
Благодарил (а): 0 раз.
Поблагодарили: 40 раз.
K`[f писал(а):
А их почти и не понадобится вводить. Только A+, A- и, наверное, перекидывание числа на вершину, возможно с автоматическим прибавлением к вершине. Ну там ADUP и т.п. ещё. А !, @, , - они просто будут использовать новый стек.

Это целесообразно сделать лишь при переходе на 64-разрядную ФС (на РС). Там открываются доп. регистры.
Делать стек без указателя в регистре - плохо - еще более затормозим итак очень тормозной форт-код. Доп. стеки с указателем в ячейке памяти допустимы когда они используются только при компиляции.
K`[f писал(а):
Приведите мне, плиз, систему аналогичную по сложности ArchestrA, 3D MAX или там CAD какой-нибудь. Только не опенсорсные недоделки, которыми я часто сам, надо признать, пользуюсь, а действительно полнофункциональные системы. То из опенсорса что "доделано" на какой-то стадии (или сразу) становилось коллективным проектом.

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

_________________
С уважением, chess


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Вт дек 11, 2007 19:42 
Не в сети

Зарегистрирован: Вт май 09, 2006 12:31
Сообщения: 3438
Благодарил (а): 5 раз.
Поблагодарили: 16 раз.
Цитата:
1. Web-приложения
2._КЛИЕНТЫ_ для работы с базами данных
3.Отображение данных - отчёты, GUI...
4.Структурирование и "перелопачивание" данных, особенно строк. Например - XML-парсер.


Нет, неправильно!
0. Способность к продуцированию общезначимых библиотек для быстрого создания пунктов 1-4! Ну разве что генератор синтаксических анализаторов (типа YACC) - для Форта - обязательный конечный продукт, всё остальное - нужны не продукты а предпосылки

_________________
понимаю некоторую бестолковость некоторых вопросов


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Вт дек 11, 2007 20:58 
Не в сети

Зарегистрирован: Чт окт 25, 2007 08:01
Сообщения: 154
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
chess писал(а):
Это целесообразно сделать лишь при переходе на 64-разрядную ФС (на РС). Там открываются доп. регистры.


Гм... Не совсем понял при чём тут файловая система (вы про это?). Стек указатлей, конечно, имеет смысл максимально быстрым. Но фокус не в этом, а в том, чтобы он был ИМЕННО ОТДЕЛЬНЫМ. В мозгу программиста всё дело.

chess писал(а):
Форт сегодня не инструмент коллективного труда и будет-ли когда таким непонятно,


Я не про Форт конкретно говорил. Ни на плюсах, ни на Java я таких проектов не знаю...

вопрос писал(а):
0. Способность к продуцированию общезначимых библиотек для быстрого создания пунктов 1-4! Ну разве что генератор синтаксических анализаторов (типа YACC) - для Форта - обязательный конечный продукт, всё остальное - нужны не продукты а предпосылки


Э... Типа это мейнстрим по вашему мнению такой? А назвать последние пять раз, когда вы такие инструменты создавали, сможете? ;)


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Вт дек 11, 2007 21:25 
Не в сети

Зарегистрирован: Вт май 09, 2006 12:31
Сообщения: 3438
Благодарил (а): 5 раз.
Поблагодарили: 16 раз.
Цитата:
0. Способность к продуцированию общезначимых библиотек для быстрого создания пунктов 1-4!
Типа это мейнстрим по вашему мнению такой?
Нет, я же пишу - это ПРЕДПОСЫЛКИ. а пункты 1-4 я не отрицаю, только без предпосылок - как?
ладно, может я не в тему, выскажу свою мысль отдельно позднее

_________________
понимаю некоторую бестолковость некоторых вопросов


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Вт дек 11, 2007 21:31 
Не в сети

Зарегистрирован: Чт окт 25, 2007 08:01
Сообщения: 154
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
вопрос писал(а):
Нет, я же пишу - это ПРЕДПОСЫЛКИ. а пункты 1-4 я не отрицаю, только без предпосылок - как?
ладно, может я не в тему, выскажу свою мысль отдельно позднее


Вообще-то я говорил о наиболее типичных задачах, а не о чём-то ещё. :) Имхо - Форт будет популярен, если на нём можно будет производительно программировать, допустим, написав соответствующие библиотеки.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Вт дек 11, 2007 23:01 
Не в сети

Зарегистрирован: Вс дек 02, 2007 17:31
Сообщения: 442
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
K`[f писал(а):
Только A+, A- и, наверное, перекидывание числа на вершину, возможно с автоматическим прибавлением к вершине. Ну там ADUP и т.п. ещё. А !, @, , - они просто будут использовать новый стек.
И это все? Держи:
Код:
VARIABLE astack 1000 allot HERE CELL- CONSTANT alim astack DUP !
: >A ( a -- ) ( as: -- a ) astack @ CELL+ alim MIN DUP astack ! ! ;
: A> ( -- a ) ( as: a -- ) astack @ DUP @ SWAP CELL- astack MAX astack ! ;
: A+ ( as: a1 a2 -- a1+a2 ) A> A> + >A ;
: A- ( as: a1 a2 -- a1-a2 ) A> A> SWAP - >A ;
: ADUP ( as: a -- a a ) A> DUP >A >A ;
: ADROP ( as: a -- ) A> DROP ;
: +A ( n -- ) ( as: a -- a+n ) A> + >A ;
: -A ( n -- ) ( as: a -- a-n ) A> SWAP - >A ;
: ! ( n -- ) ( as: a -- ) A> ! ;
: @ ( -- n ) ( as: a -- ) A> @ ;

:lol:
(ЗЫ писал прямо тут так что если есть ошибки, сильно не пинайте :P )[/code]

_________________
Am I evil? I'm man - yes I am! © James Hatefield


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Вт дек 11, 2007 23:13 
Не в сети
Administrator
Administrator
Аватара пользователя

Зарегистрирован: Вт май 02, 2006 22:48
Сообщения: 6402
Благодарил (а): 14 раз.
Поблагодарили: 100 раз.
Стек адресов - это элемент контроля типов в рантайме. Если превращение данных в адрес будет происходить путем физического перемещения чисел... :aaa; Уж лучше вводить теги, а еще лучше - иметь систему контроля типов на этапе компиляции. Хоть встроенную в язык, хоть постороннюю. А это это ж ужас какой-то! И так память - проблемный элемент в плане производительности, а тут ей еще тормоза добавляются.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Вт дек 11, 2007 23:36 
Не в сети

Зарегистрирован: Вс дек 02, 2007 17:31
Сообщения: 442
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
true-grue писал(а):
Вы вот, давеча, посоветовали forther'у купить словарь по выч. технике(к слову сказать, forther один из немногих, кто занимается Фортом профессионально)
"Не виноватая я! Он сам пришел!"(с) :lol:
true-grue писал(а):
сами, оказывается, «плаваете».
Ага, как Титаник. :))
true-grue писал(а):
Не придумай Вирт в свое время Pascal
Стоп, стоп! Вы заявляли: "Лучшие программные системы созданы одиночками." Теперь расскажите сколько людей создавали Юникс? Вирт в одиночку создал систему? :?
true-grue писал(а):
Это и понятно, ведь создание — процесс интимный, таинственный.
А, понял. Вы под созданием системы подразумеваете ее изобретение а не реализацию. :) Ну в таком плане все верно. Правда тогда Лёха, можно сказать, систему тоже уже создал. Просто, пока, не реализовал. ;)

K`[f писал(а):
Я имел в виду лишь то, что существующий в Сях подход в настоящее время явно продуктивнее. Если мы такое же сделаем с Фортом - это будет не Форт.
Ага. А я имел ввиду что ничего реализововать не нужно, оно всегда было есть и будет в Форте. Хотите вы этого или нет. :)
K`[f писал(а):
Примерно таких же позиций придерживался Бьярн Страуструп.
И Калигула был прав. :twisted:
K`[f писал(а):
Имхо - просто слишком много людей наконец-то поняли, что пора что-то менять.
Не менять надо, а развивать. Когда С исчерпал свой потенциал, даже Страуструп ничего в нем не изменил, а добавил. :)

_________________
Am I evil? I'm man - yes I am! © James Hatefield


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 255 ]  На страницу Пред.  1, 2, 3, 4, 5, 6 ... 17  След.

Часовой пояс: UTC + 3 часа [ Летнее время ]


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1


Вы не можете начинать темы
Вы можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
phpBB сборка от FladeX // Русская поддержка phpBB