Обсуждение:Brainfuck

message: http://ideone.com/msTeU
интерпрититор+исчерпывающая документация по языку
--213.88.39.97 10:34, 21 января 2012 (UTC)
thread_title: интерпрититор+исчерпывающая документация по языку

message: Для Ramir: Предлагаю не переводить слово fuck так буквально, тем более, что Ваш перевод и не вполне верен. Кроме слова fuck, в статье о языке Brainfuck и в самом языке нет ничего оскорбительного. Это язык представляет немалый теоретический интерес; Brainfuck - не какое-то девиантное явление, он включён во многие учебники по программированию в качестве интересного объекта для всевозможных упражнений и традиционно является одним из языков, на которых разрешается писать участникам различных состязаний программистов. К тому же, указаний на оскорбительность нет в статьях о Brainfuck'е на других языках Википедии. Наилучший, на мой взгляд, вариант - вообще никак не разъяснять этимологию слова (как и было изначально). --evgop 12:17, 31 июля 2005 (UTC)
replies: text: Но перевод названия - важное в этом случае сведение, даёт понять отношение авторов языка к нему. Перевод дать нужно. Другое дело - что можно перевести пуританско-ханженским "как бы научным" способом, но это долго. Мой перевод верен вполне: язык назван простым составлением  (:en:portmaneau :en:portmanteau)  двух слов, и "мозгоёбка" здесь - самый подходящий перевод. Если же Вы просто хотите, чтобы на странице не было обидной лексики, то я возражу вот так: все образованные русские знают английский, ну и слово "fuck" тоже. Оно ничуть не менее оскорбительно слова "ёб", и поэтому либо Вы тут закрасите название звёздочками, либо мы ничего не теряем применяя мат в статье. Ramir
replies: text: : Во-первых, ещё раз отсылаю Вас к английской Википедии, где никаких звёздочек не наблюдается, равно как и предупреждения об оскорбительной лексике. Дело в том, что слово fuck, хотя и является ругательным, существенно мягче русского мата. Я вовсе не ханжа-пуританин, и хочу сообщить, что fuck можно перевести так же словами хуй, чёрт, жопа и так далее. Так что, давайте заполним википедию всевозможными вариациями на эту тему? Вот именно, что слово fuck в переводе не нуждается. Ваш же перевод сделал из статьи про программирование (не знаю, читали ли Вы её дальше первой строчки), fuck knows what. Кстати, в большинстве википедий на других языках термин Brainfuck никак не переводится. И не транскрибируется тоже. --evgop 23:48, 31 июля 2005 (UTC)

text: 1. Вы не правы, самый умный — я. 2. «...что я сделал из статьи про программирование» за довод вообще не принимается. 3. Как делают на других Википедиях — нам не устав. Есть другие критерии, более подходящиие. 3. «в большинстве» — тем более показывает несостоятельность Вашего аргумента. Ну ладно, см. моё последнее слово ниже. Ramir 09:06, 1 августа 2005 (UTC)
И ещё для Ramir: я не понял, по какому принципу Вы заменили часть Brainfuck′ов на Брэйнфак′и, а часть - оставили. --evgop 12:24, 31 июля 2005 (UTC)

text: Убрал «дословный» перевод, название языка править не стал, не знаю точно какие насчёт этого договорённости есть. Лий 13:26, 31 июля 2005 (UTC)
replies: text: : Я сделал неправильно: название языка следует (покуда произношение однозначно) заменить на транскрипцию везде, кроме введения. Ramir
replies: text: :: Однозначно, не однозначно... Уважаемый Ramir, а Вы современные книжки по программированию читаете? Давным давно называния языков пишутся по-английски: Java, Delphi, Visual Basic и т.д. Была такая тенденция в 60/70-х годах переводить всё на русский. У меня советская книжка сохранилась, где переводчики даже операторы по-русски записали. Но сейчас такое выглядит старомодно и просто неумно. Это как в медицинской книжке транскрибировать латынь.  --evgop 23:48, 31 июля 2005 (UTC)
replies: text: ::: Я почти что не читаю книг о программировании, особенно современных на русском языке. Но мой довод не в том, как пишут нынешние переводчики, а в том, как удобно русскому читателю. Однако... похоже, среди википедийцев столько очень современных программистов, что я не смогу всем восперечить. Пишите хоть на латыни, хоть на китайском. Брэйнфак-то останется мозгоёбкой. (отбой) Ramir 09:06, 1 августа 2005 (UTC)
гг, пишите 'взрыв мозга' >_< --81.200.20.167 14:15, 24 июня 2008 (UTC)
replies: text: ::::: Уважаемый Ramir, согласно правилам русского языка названия и имена НЕ переводятся. Если вы хотите записать название или имя, вы должны написать его либо на оригинальном языке, либо в транслитированом варианте, без изменения звучания и произношения. "Brainfuck", он хоть на русском, хот ьна китайском будет писаться "Brainfuck"(в русском языке возможен вариант "Брэйнфак"). Господа, прежде, чем разводить дискуссию о правильном написании в русском разделе википедии, удосужитесь заглянуть в правила русского языка. Спасибо. --Hakujin 06:55, 24 марта 2010 (UTC)
thread_title:  О переводе 

message: Вопрос к 62.85.72.62 по поводу Brainfuck - идеальное средство для решения задач генетического программирования. Поясните, пожалуйста! --evgop 17:28, 10 августа 2005 (UTC)
replies: text: В принципе, довольно логично - синтаксис очень простой, правила "скрещивания" алгоритмов сформулировать легко, так что в экспериментах по "выращиванию" алгоритмов BF вполне может занять свою нишу.  Но насчёт идеальности, на мой взгляд, товарищ несколько переборщил. ==Maxim Razin(talk) 17:48, 10 августа 2005 (UTC)
replies: text: : По-моему, искусственный минимализм BF не позволяет программировать на нём что-либо реально полезное. Тем более, "идеально". А вообще, идея интересная, я как-то не задумывался. Но - только в качестве учебной задачи.
replies: text: :: Замени "идеально" на "хорошо" :) ==Maxim Razin(talk) 19:18, 10 августа 2005 (UTC)

text: : Кстати, ты немного изменил текст, фактически заменил машину Тьюринга на полноту по Тьюрингу. А ведь несколько ниже про полноту по Тьюрингу уже есть. К тому же, машина, которой управляет BF -  действительно машина Тьюринга :) --evgop 18:38, 10 августа 2005 (UTC)
replies: text: :: Принимаю.  BF это МТ с дополнительными ограничениями. ==Maxim Razin(talk) 19:18, 10 августа 2005 (UTC)
replies: text: ::: А с какими ограничениями? В абстрактном BF бесконечная лента и размер ячейки никак не декларируется. По-моему, МТ в чистом виде :) --evgop 19:31, 10 августа 2005 (UTC)
replies: text: :::: У BF, по сравнению с МТ, сильно ограниченная система команд, и априори неясно, что они эквивалентны. ==Maxim Razin(talk) 20:08, 10 августа 2005 (UTC)
replies: text: ::::: Вообще говоря, наоборот :) В МТ нет таких сложных операций, как «+» и «-», тем более «[» и «]», не говоря уже о «.» и «,». С другой стороны, да, МТ - это не только лента, движущая головка и конечный алфавит. Ещё есть множество состояний, текущее состояние и таблица переходов. Но говоря, что BF - язык управления MT, я имел в виду, что "аппаратная часть" BF совпадает с "аппаратной частью" MT. Пожалуй, я сделал это не совсем корректно. --evgop 21:16, 10 августа 2005 (UTC)
thread_title:  «Генетическое программирование» 

message: Моя правка делает определения [ и ] симметричными и позволяет уменьшить число проверок условия.
Можно еще определить ] как безусловный переход к [, это уменьшит размер скомп. программы, но добавит лишние переходы, и этим снизит производительность.
thread_title:  Интерпретация [] 

message: #Что это значит?
#Как насчёт интерпретируемых языков типа Perl и Python?
##А как насчёт Forth?
#И компиляторы есть.
##Даже про hardware интерпретаторы пишут.
—AVRS 11:03, 12 августа 2007 (UTC)
replies: text: Прошло 2 месяца с момента постановки . Удалил. --AVRS 22:19, 21 ноября 2007 (UTC)
thread_title:  «все существующие BF-машины являются эмуляторами» 

message: На мой взгляд, можно чуууть улучшить
   @(t+1)[-]+@(-t-1) устанавливаем флаг 1 для случая else
   [
    здесь действия ветки true
    @(t+1)[-] устанавливаем флаг 0 для случая else, выход из цикла
    ]
   @(t+1)
   [
    здесь действия ветки false
    [-] выход из цикла
    ]
   @(-t-1)
Не согласен с этим. После цикла ветки if в данной версии мы можем оказаться как в @0 ячейке (если текущая ячейка - ноль), так и @(t+1) (если мы прошли по циклу), а это делает дальнейший алгоритм бессмысленным, т.к. переход из @(t+1) на @(t+1) приведёт к неизвестному результату (зависит от t).
Worldalexey 20:49, 18 января 2011 (UTC)
thread_title:  Оператор условия 

message: Уважаемые, у вас в исходник «Hello world!» закралась ошибка. Первый оператор '<' (17-й символ) явно лишний. 217.10.38.243 21:28, 23 ноября 2008 (UTC)speller
thread_title:  ++++++++++[>+++++++>++++++++++>+++>+<<<<-]>++.>+.+++++++..+++.>++.<<+++++++++++++++.>.+++.------.--------.>+.>. - так верней ;) 

message: Я считаю что создать на brainfuck генератор случайных чисел(без вмешательства юзера) невозможно.
Кто-нибудь знает как на нём написать калькулятор? 95.58.7.74 15:13, 18 марта 2009 (UTC)
Пожалйста, простейший калькулятор. Требует доработки и оптимизации :) состряпано  на коленке.
 						*******************								
						*       Ввод      *
						*******************
,														Читаем первое число
>														сдвигаемся
,														читаем второе число
<
 						*******************								
						*   Копирование   *
						*******************
						    
[>>>+>+<<<<-]>>>>[<<<<+>>>>-]<<<						первое число
[>>>+>+<<<<-]>>>>[<<<<+>>>>-]<<<<<						второе число
[>>>>>>+>+<<<<<<<-]>>>>>>>[<<<<<<<+>>>>>>>-]<<<<<<		первое число
[>>>>>>+>+<<<<<<<-]>>>>>>>[<<<<<<<+>>>>>>>-]<<<<<<<<	второе число
[>>>>>>>>>>>+>+<<<<<<<<<<<<-]>>>>>>>>>>>>
[<<<<<<<<<<<<+>>>>>>>>>>>>-]<<<<<<<<<<<					первое число
[>>>>>>>>>>>+>+<<<<<<<<<<<<-]>>>>>>>>>>>>
[<<<<<<<<<<<<+>>>>>>>>>>>>-]<<<<<<<<<<<<<				второе число
														теперь у нас есть
														четыре пары чисел
														вида хх0хх0хх0хх0
														указатель стоит в начале
 						*******************								
						*    Сложение     *
						*******************
++++++++++++++++++++++++++++++++++++++++++++++++.
------------------------------------------------		печатаем первое число
>>+++++++++++++++++++++++++++++++++++++++++++.			печатаем символ плюс
<++++++++++++++++++++++++++++++++++++++++++++++++.
------------------------------------------------		печатаем второе число
>++++++++++++++++++.[-]									печатаем знак равно
														освобождаем ячейку
<
[<+>-]													складываем
<++++++++++++++++++++++++++++++++++++++++++++++++.		печатаем результат
[-]+++++++++++++.										делаем возврат каретки
>>>														переходим к началу
														новой пары символов
 						*******************								
						*    Вычитание    *
						*******************
						
++++++++++++++++++++++++++++++++++++++++++++++++.		печатаем первое число
------------------------------------------------
>>+++++++++++++++++++++++++++++++++++++++++++++.		печатаем знак минус
<++++++++++++++++++++++++++++++++++++++++++++++++.
 ------------------------------------------------		печатаем второе число
>++++++++++++++++.[-]									печатаем знак равно
														освобождаем ячейку
<[<->-]
<++++++++++++++++++++++++++++++++++++++++++++++++.
[-]+++++++++++++.										возврат каретки														
>>>														к первому символу
 						*******************								
						*    Умножение    *
						*******************
++++++++++++++++++++++++++++++++++++++++++++++++.		печатаем первое число
------------------------------------------------
>>++++++++++++++++++++++++++++++++++++++++++.			печатаем знак умножения
<++++++++++++++++++++++++++++++++++++++++++++++++.
 ------------------------------------------------		печатаем второе число
>+++++++++++++++++++.[-]								печатаем знак равно
														освобождаем ячейку 
<<
[>
[>>+>+<<<-]>>>[<<<+>>>-]<<<								сисходники взяли
<-]														а понимать кто будет
>>>														я то понял а теперь
++++++++++++++++++++++++++++++++++++++++++++++++.		ваша очередь
>[-]+++++++++++++.[-]
 						*******************								
						*     Деление     *
						*******************
>														ставим указатель на 
														первый символ
														
++++++++++++++++++++++++++++++++++++++++++++++++.		печатаем первое число
------------------------------------------------
>>+++++++++++++++++++++++++++++++++++++++++++++++.		печатаем знак умножения
<++++++++++++++++++++++++++++++++++++++++++++++++.
 ------------------------------------------------		печатаем второе число
>++++++++++++++.[-]										печатаем знак равно
														освобождаем ячейку 
<<														встаем в обратный зад												
  [
  >[->+>+<<]											копируем
  >[-<<-[>]>>>[<[>>>-<<<[-]]>>]<<] 						вычитаем и если ноль то 
	 													выходим
  >>>+ 													счетчик
  <<[-<<+>>] 											копируем
  <<<													возвращаемся к делимому
  ]														конец деления
  >[-]>>>>[-<<<<<+>>>>>] 								привет тому кто дочитал
  <<<<<  												возврат к результату	
														
														
++++++++++++++++++++++++++++++++++++++++++++++++.		Autor
>[-]+++++++++++++..+++++++++++++++++++++++++++++		ASU 05 1
+++++++++++++++++++++++.++++++++++++++++++.++.--		Kovalyov V M
--------------------------------------.+++.+++++
.--------.++++.[-]+++++++++++++.++++++++++++++++
++++++++++++++++++++++++++++++++++++++++++++++.+
+++.+++++++.---------------------.+++++++++++.++
+++++++++++.----------.+++++++.
 Manya g 23:58, 24 марта 2009 (UTC)Маня a-ka Monyag
Я считаю что создать на brainfuck генератор случайных чисел(без вмешательства юзера) невозможно - думаю вполне можно если через brainfuck можно обратиться к дампу по адресу хранения времени(0040:006c) Advisors 14:18, 2 июня 2009 (UTC)
thread_title:  Программы на brainfuck 

message: предлагаю внести в статью информацию о том что можеть "убить" БФ машину. (ну или как это назвать?)
например такой код
  ++[>++]
приведет к почти мгновенному переполнению буффера 78.111.145.29 16:27, 15 апреля 2010 (UTC)
А можно не так жестоко? Например бесконечный цикл без переполнения буфера:
  ++[]
lohmatiyy 12:51, 18 августа 2010 (UTC)
Зависит от реализации интерпретатора/компилятора. В IronBrainFuck лента и значения зациклены между 0 и MaxValue (=UInt16.MaxValue) и поэтому через некоторое время (пару секунд) код вернёт управление в ячейке с индексом 0, где все остальные будут равны MaxValue-2.
Worldalexey 20:46, 14 января 2011 (UTC)
thread_title:  Фатальные ошибки 

message: К списку прилагаемых ссылок я бы добавил описание интерпретатора и компилятора Brainfuck, исходные тексты открыты.
Кстати, в статье написано о компиляторах размером в 200 байт, что кажется несерьезным. Почему нет соответствующих ссылок?
--Ignizavr 18:23, 12 мая 2010 (UTC)
replies: text: тут исходный вариант в 240 байт, остальное еще искать надо.--AlexVinS 19:52, 18 августа 2010 (UTC)

text: а вот тут исходник компилятора для Линукс размером 171 байт. Итого факт есть, но лучше конечно найти вторичный АИ на тему "самый маленький компилятор брейнфака", чтобы не превращать статью в каталок ссылок.--AlexVinS 20:04, 18 августа 2010 (UTC)
Кстати, в разделе ссылок уже есть , откуда есть есть ссылка на исходник компилятора размером 166 байт.--AlexVinS 20:11, 18 августа 2010 (UTC)
thread_title:  Дополнение ссылок 

message: Ниже приведён код интерпретатора Brainfuck'а, написанный на языке Python 3.x
import sys
str = ''
for line in sys.stdin:
    str += line.replace ( ' ', )
cmdIndex = 0
cmd = ''
index = 0
memMap = []
memMap.append (0)
ceillSize = 256
loopsMap = []
while cmdIndex < len ( str ):
    cmd = str [cmdIndex]
    memMap [index] %= ceillSize
    if cmd == '<':
        index -= 1
        if index < 0:
            print ( 'Error index < 0')
            sys.exit ( - 1 )
    elif cmd == '>':
        index += 1
        if index == len ( memMap ):
            memMap.append ( 0 )
    elif cmd == '+':
        memMap [index] += 1
    elif cmd == '-':
        memMap [index] -= 1
    elif cmd == '.':
        sys.stdout.write ( chr ( memMap [index] ) )
    elif cmd == ',':
       memMap [index] = ord ( sys.stdin.read (1) )
    elif cmd == '[':
        loopsMap.append ( cmdIndex + 1 )
    elif cmd == ']':
        if memMap [index] == 0:
            loopsMap.pop ()
        else:
            cmdIndex = loopsMap [ len ( loopsMap ) - 1]
            continue
    cmdIndex += 1
print ()       
Sviridenkovalera 14:09, 25 мая 2013 (UTC)
thread_title:  Я новый участник и хочу добавить исходный код интерпретатора BrainFuck на Python 3.x  

message: Реализованный на встроенном языке 1С предприятия: http://infostart.ru/public/198930/ 91.241.13.31 15:39, 27 августа 2013 (UTC)Илья
thread_title:  Ещё один интерпретатор Brainfuck  

message: Скажите, кто и зачем так отформатировал код интерпретатора Brainfuck'а на Perl'е? — Kotolegokot 16:17, 26 июня 2014 (UTC)
thread_title:  Оформление интерпретатора 

message: В статье на русском языке описывается реализация языка для платформы Arduino. Представлены тексты и работающие примеры.
http://arduino.ru/forum/programmirovanie/razrabotka-sketchei-na-yazyke-brainfuck
Asper321 06:27, 2 мая 2016 (UTC)
thread_title:  Реализация Brainfuck для Arduino 

message: else if (acc[i] == ']') {
            if (!cpu[j])
                continue;
            else {
                if (acc[i] == ']') // думаю, это лишнее :)
                    brc++;
 elsif ($code[$_] eq ']') {
    if (!$cpu[$i]) {
      next;
    } else {
      ++$brc if $code[$_] eq ']'; // аналогично
или я чего-то недопонимаю ? — поправьте, меня или текст :)
thread_title:  else if (acc[i] == ']') { ...  if (acc[i] == ']') - "масло масляное" ? 

message: Написал вот такой интерпретатор на C# Net6.0
Прекрасно справляется со своей задачей.
byte[] Excute(string code, int allocSize = 30000)
{
    byte[] bytes = new byte[allocSize];
    short pos = 0;
    Dictionary<char, Action> types = new(){
        {'>', new(() => pos++)}, {'<', new(() => pos--)},
        {'+', new(() => bytes[pos]++)}, {'-', new(() => bytes[pos]--)},
        {'.', new(() => Console.Write(bytes[pos]))}, {',', new(() => bytes[pos] = (byte)Console.ReadLine()[0])}
    };
    foreach (string z in code.Replace("[", "[|").Replace(']', '[').Split('['))
        if (z[0] == '|')
            while (bytes[pos] != 0)
                for (int i = 1; i < z.Length; i++)
                    types[z[i]]();
        else
            for (int i = 0; i < z.Length; i++)
                types[z[i]]();
    return bytes;
}
thread_title:  Интерпретатор на C#