Написал на днях "Машину Тьюринга". Сам пишу курсовую работу, так что это всего лишь прототип... Следовательно постарайтесь не ругать за обилие быдлокода и наличие "кода в куче"
Dat_Spy, если ты хочешь сделать что-то качественное и хорошее - нужно попотеть, потратить свое время, подумать... Иначе никак...
ЛУЧШИЙ движок - это тот, который писался лично тобой ради решения КОНКРЕТНОЙ задачи. Остальные будут хуже (если движок писал с умом, конечно же), потому что они делаются с упором на универсальность.
К слову об универсальности: на любом современном движке можно сделать то, чего ты хочешь. Другое дело - если ты не знаешь как это сделать. Но тогда и вопрос надо было формулировать иначе
webGL - лучше обойти сторонойю. Сыро, сыро... где идёт // где неидёт и смысл его в 2D??
WebGL + WebCL позволят перенести большую часть нагрузки на GPU. Если говорить чисто о WebGL - то можно рендерить прямо на видеокарте (а это огромный плюс)...
Gudleifr, это само собой. Интерпретатор я писал просто ради пробы, решил поделиться со всеми. И да, можно много чего допилить - но эту возможность я даю людям, которых мой урок заинтересовал.
Существует один очень забавный эзотерический язык программирования, имя которому - brainfuck. Что же в нём такого мозговыносящего? А то, что весь язык состоит лишь из простейших команд:
Цитата
">" - перейти к следующей ячейке "<" - перейти к предыдущей ячейке "+" - прибавить единицу текущей ячейке "-" - отнять единицу у текущей ячейки "." - вывести значение текущей ячейки на экран "," - ввести с клавиатуры значение ячейки "[" - начало цикла (если значение ячейки == 0, то переходим к "]") "]" - конец цикла (если значение ячейки == 0, то идём дальше. Иначе - возвращаемся к "[")
В языке мы работаем с ячейками некоторой ленты. Обычно размер ленты - это 30000 ячеек. Язык полон по Тьюрингу, а значит на нём возможно реализовать тоже самое, что и на других языках! Теперь, думаю, ясно почему язык назвали "brainfuck"?
Пример программы и результат:
Код
++++[>++++[.-]>++++++++++.----------<<-]
Команды языка крайне просты, так почему бы не написать для него интерпретатор? Что ж, приступим! Нам понадобятся следующие библиотеки:
Код
#include <iostream> #include <string> #include <fstream> //т.к. программу будем брать из файла #include <vector>
Так же нам понадобится массив ячеек (переменных типа char) и индекс текущей ячейки:
Код
#define CELLS_NUM 30000 unsigned char arr[CELLS_NUM] = {}; unsigned int current_cell = 0; //по-умолчанию мы находимся на первой ячейке
Далее нам необходимо получить текст программы на языке brainfuck:
while (!source_file.eof()) { char ch = 0; source_file.get(ch); source.push_back(ch); }
source_file.close();
Как вы уже догадались, текст программы лежит в векторе source. Осталось пробежаться по каждому символу вектора:
Код
for (unsigned i = 0; i < static_cast<unsigned>(source.size()); ++i) { unsigned char ch = source[i]; switch (ch) { case '>': current_cell++; break; case '<': current_cell--; break; case '+': arr[current_cell]++; break; case '-': arr[current_cell]--; break; case '.': cout << arr[current_cell]; break; case ',': cin >> ch; arr[current_cell] = ch; break; case '[': if (arr[current_cell] == 0) { unsigned j = 1; while (j != 0) { i++; switch (source[i]) { case '[': j++; break; case ']': j--; break; default: break; } } } break; case ']': if (arr[current_cell] != 0) { unsigned j = 1; while (j != 0) { i--; switch (source[i]) { case '[': j--; break; case ']': j++; break; default: break; } } } break; default: break; } }
Что ж, вот и всё! Интерпретатор написан. Основная трудность, как вы заметили, может возникнуть лишь при обработке циклов. А так - всё элементарно Надеюсь, что урок Вам понравился!
Gc-SupeR, Gudleifr, HTML не полон по Тьюрингу. На хабре была интересная статья: тык.
Цитирую:
Цитата
Можно ли называть HTML языком программирования? В зависимости от контекста — да, можно. Но при этом следует помнить, что с таким же успехом можно назвать ЯП и CSS и XML и SQL. Другими словами данные языки формально могут быть названы языками программирования, но только с определенной долей скептицизма и с полным понимаем того, что эти языки не удовлетворяют всем требованиям.
Является ли HTML языком программирования? Нет. Задача обычного языка программирования в обработке данных, а задача HTML в отображении данных. Он не является языком программирования и на нем нельзя произвести вычислений.
Мне больше нравились Fallout 1/2... Fallout NV ещё прошёл, но чисто третий фол - это уже не то С четвёртым, наверное, тоже самое будет... Но я всё равно буду ждать, потому что мне нравится вселенная Fallout
Ну как сказать.. нету лучших или худших ЯПов,кто что смог освоить,выучить,кому что нравится,кому на чем проще писать код и так далее,сказать какой ЯП есть лучший трудно,у каждого свои нравы..)