Модераторы: LSD

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> язык HQ9+ и его дальнейшее развитие, давайте его дальше развивать 
:(
    Опции темы
UniBomb
Дата 4.12.2009, 12:42 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
***
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 1754
Регистрация: 24.10.2006
Где: Санкт-Петербург




Добрый день. Сначала сопливая предыстория.

Началось всё очень давно, 20 минут назад. Я захотел создать интерпретатор/компилятор какого-нибудь языка. Я долго сидел и выбирал язык - хотелось создать чего-то полезное, чем могли бы пользоваться сотни тысяч человек во всём мире. Ещё хотелось чего-нибудь посложней - так сказать разминка для мозгов. Ну ещё и прославится конечно  smile Я рассматривал такие языки как C#, С++, java, ruby, haskel, lua, lisp, smalltalk. Но в итоге остановился на языке с романтичным названием HQ9+ 

И вот, потратив целых 7 минут обеденного времени я его написал. Не бахвальства ради должен признать, что интерпретатор удался на славу. Лицензия на интерпретатор естественно beer-ware. Все интересующиеся могут ознакомится с его исходным кодом:

Код

#include <iostream>

int main()
{
 char code;
 int some_counter(0);
 std::cin >> code;     
 switch(code)
 {
  case 'H': std::cout << "Hello world!" << std::endl; break;
  case 'Q': std::cout << code << std:: endl; break;
  case '+': some_counter++; break;
  case '9': 
           for(int i = 99; i > 0; i--)
            {
             std::cout << i << " bottles of beer. You take one down, pass it around "; 
             if(i-1)
              std::cout << i-1 << " bottles of beer on the wall." << std::endl;
             else
              std::cout << "no more bottles of beer on the wall." << std::endl;     
            }
 }
 return 0;
}



И тут я задумался - а ведь потенциал языка огромен, с его помощью можно делать намного больше. Посему предложение - а давайте вместе разовьём этот язык! Продемонстрируем весь неиспользованный потенциал! Не дадим забыть этот прекрасный язык!



Это сообщение отредактировал(а) UniBomb - 4.12.2009, 12:51


--------------------
PM MAIL ICQ Skype   Вверх
kosmonaFFFt
Дата 5.12.2009, 07:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 538
Регистрация: 14.4.2008
Где: Иннополис




ИМХО интерпретатор не очень, ибо нет возможности писать большие программы, например HQ999HHQQ++ smile Так что для начала надо бы заменить char code; на std::string program; smile


--------------------
user posted image
PM MAIL ICQ   Вверх
~FoX~
Дата 5.12.2009, 11:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


НЕ рыжий!!!
****


Профиль
Группа: Участник Клуба
Сообщений: 2819
Регистрация: 8.10.2003
Где: Зеленоград




UniBomb, Для начала хотя бы дополнить до HQ9++ и HQ9+- ... А так же можно дополнить все это дело какими нить стандартными процедурами... например "2*2"...

Это сообщение отредактировал(а) ~FoX~ - 5.12.2009, 11:08


--------------------
user posted image
…множественность никогда не следует полагать без необходимости…
PM MAIL WWW ICQ Jabber   Вверх
GrayCardinal
Дата 5.12.2009, 15:19 (ссылка)    | (голосов:3) Загрузка ... Загрузка ... Быстрая цитата Цитата


Фигасе
****


Профиль
Группа: Завсегдатай
Сообщений: 3039
Регистрация: 9.11.2003




На этом не прославишься. :(


--------------------
PM MAIL WWW   Вверх
UniBomb
Дата 7.12.2009, 09:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
***
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 1754
Регистрация: 24.10.2006
Где: Санкт-Петербург




kosmonaFFFt, это не интерпретатор виноват, а документация на язык  smile  Но зато уже есть первое расширение языка (точнее будет готово в обед (кстати можно назвать его обеденным языком или HQ9+ lunch edition)).


~FoX~, HQ9++ и HQ9+- не являются кошерными расширениями языка и заведомо ведут в тупиковый путь развития. Надо идти своим путём (ведь всем известно, что велосипедоводство спасёт мир). Насчёт "2*2" - не получится. Максимум "*2". Иными словами  - оператор "+" инкрементирует счётчик, так что по логике оператор "*" должен умножать его же. Если дополнить до всех команд, то можно получить следующее:

+ [value] - увеличивает счётчик на значение value, если оно не задано, то на единицу;
* [value] - умножает счётчик на значение value, если оно не задано, то на само себя;
/ [value] - делит счётчик на значение value, если оно не задано, то на само себя;
- [value] - уменьшает счётчик на значение value, если оно не задано, то на единицу;

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

С другой стороны - действительно было бы неплохо доработать этот язык до Тьюринг-полного. Но тогда нужно будет вводить типы данных. Какие нужны в первую очередь?


GrayCardinal, невидимый тег irony для кого придумывали  smile 


--------------------
PM MAIL ICQ Skype   Вверх
RockClimber
Дата 7.12.2009, 11:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 848
Регистрация: 5.5.2006
Где: планета 013 в тен туре




Цитата(UniBomb @  7.12.2009,  09:26 Найти цитируемый пост)
Но тогда нужно будет вводить типы данных. Какие нужны в первую очередь?

Ну раз это lunch edition и под лицензией beerware - то и главные типы должны быть beer и lunch. А то как иначе определить, кто перед кем должен "ку" делать?


--------------------
Хорошо кинутый дятел далеко летит, крепко встревает, долго торчит.
PM MAIL GTalk   Вверх
Shaggie
Дата 7.12.2009, 11:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Завсегдатай
Сообщений: 570
Регистрация: 21.12.2006
Где: outer space




Цитата(GrayCardinal @  5.12.2009,  15:19 Найти цитируемый пост)
На этом не прославишься. :( 

А вот если доработать язык до HQ9#, то вся слава твоя будет! Посему первое, что надо сделать, это компилировать программу на нашем замечательном языке в LLVM-байткод.


--------------------
Цитата(alina3000 @  6.3.2014,  10:47 Найти цитируемый пост)
Сорри что не по теме 
PM MAIL ICQ GTalk Jabber   Вверх
~FoX~
Дата 7.12.2009, 11:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


НЕ рыжий!!!
****


Профиль
Группа: Участник Клуба
Сообщений: 2819
Регистрация: 8.10.2003
Где: Зеленоград




Цитата(UniBomb @  7.12.2009,  10:26 Найти цитируемый пост)
Ещё чего стоил бы ввести - деление на ноль. Ну почему нигде нельзя делить на это замечательное число? Пусть хоть в этом языке это можно делать. Результат деления на ноль - операция не определённая, так что пусть эта конструкция возвращает рандомное число.

Деление на ноль возвращает бесконечность...В зависимости от деления на +0 или -0 вернется +бесконечность или -бесконечность соответственно...

Цитата(UniBomb @  7.12.2009,  10:26 Найти цитируемый пост)
С другой стороны - действительно было бы неплохо доработать этот язык до Тьюринг-полного. Но тогда нужно будет вводить типы данных. Какие нужны в первую очередь?

Нафига типы? пойдем по пути брейнфака! "<", ">" перемещаемся по ячейкам бесконечно ленты, S - записать данные L - прочитать данные из ячейки...Дальше как описано можно изощрятся...
Цитата(UniBomb @  7.12.2009,  10:26 Найти цитируемый пост)
+ [value] - увеличивает счётчик на значение value, если оно не задано, то на единицу;
* [value] - умножает счётчик на значение value, если оно не задано, то на само себя;
/ [value] - делит счётчик на значение value, если оно не задано, то на само себя;
- [value] - уменьшает счётчик на значение value, если оно не задано, то на единицу;

Нужно предусмотреть интерфейс куда все это дело можно выводить - экран, файл, принтер, поток етц. 


--------------------
user posted image
…множественность никогда не следует полагать без необходимости…
PM MAIL WWW ICQ Jabber   Вверх
UniBomb
Дата 7.12.2009, 12:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
***
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 1754
Регистрация: 24.10.2006
Где: Санкт-Петербург




Цитата(~FoX~ @  7.12.2009,  12:28 Найти цитируемый пост)
Деление на ноль возвращает бесконечность...

Не совсем так. Деление на ноль вызывает неопределённость, а вот бесконечность получается при делении на бесконечно малую величину. В любом случае можно оставить рандом как фичу)))


Цитата(~FoX~ @  7.12.2009,  12:28 Найти цитируемый пост)
Нафига типы? пойдем по пути брейнфака!

О, а если вместо ленты оставить один единственный счётчик (типа как аккумулятор), но с возможностью его сохранять в стеке. Ну т.е. как в асме:

Код

; 2 + 3

+2
01P          ;записали в ячейку 01   
0              ;обнулили счётчик
+3
+P01        ;сложили с содержимым ячейки 01



Цитата(~FoX~ @  7.12.2009,  12:28 Найти цитируемый пост)
Нужно предусмотреть интерфейс куда все это дело можно выводить - экран, файл, принтер, поток етц. 


ну так нет ничего проще)))

Код


S               ;вывели на экран по-умолчанию
L               ;сосчитали с клавиатуры по-умолчанию
S(printer)  ;вестимо понятно
S(file)  ;вестимо понятно



Цитата(Shaggie @  7.12.2009,  12:26 Найти цитируемый пост)
А вот если доработать язык до HQ9#, то вся слава твоя будет!

Ну вот так всегда - делаешь-делаешь что-то полезное, потом приходит GrayCardinal, дописывает в конце # и забирает себе всю славу :(


RockClimber, бир к ланчу - это профит, а не сущности в языке  smile

Добавлено @ 12:16
ё-мае, уже треть обеда просидел в этой теме, думаю не успею сделать всё в этот раз (((

Это сообщение отредактировал(а) UniBomb - 7.12.2009, 12:24


--------------------
PM MAIL ICQ Skype   Вверх
~FoX~
Дата 7.12.2009, 17:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


НЕ рыжий!!!
****


Профиль
Группа: Участник Клуба
Сообщений: 2819
Регистрация: 8.10.2003
Где: Зеленоград




Цитата(UniBomb @  7.12.2009,  13:13 Найти цитируемый пост)
, а если вместо ленты оставить один единственный счётчик (типа как аккумулятор), но с возможностью его сохранять в стеке. Ну т.е. как в асме:

Тока не в стеке, а в очереди  smile  FIFO в данном случае лучше LILO  smile 


--------------------
user posted image
…множественность никогда не следует полагать без необходимости…
PM MAIL WWW ICQ Jabber   Вверх
UniBomb
Дата 7.12.2009, 17:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
***
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 1754
Регистрация: 24.10.2006
Где: Санкт-Петербург




Цитата(~FoX~ @  7.12.2009,  18:27 Найти цитируемый пост)
Тока не в стеке, а в очереди 


А может ну его, издевательство это?  smile  Может просто массив ячеек с произвольным доступом к любой из них?  smile

Добавлено через 2 минуты и 48 секунд
О, а пусть ещё эта ячейка может иметь произвольный тип данных  smile  В одной ячейки будет число, в другой строка  smile 


--------------------
PM MAIL ICQ Skype   Вверх
Zloxa
Дата 8.12.2009, 16:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Чо?
****


Профиль
Группа: Завсегдатай
Сообщений: 3473
Регистрация: 12.9.2008




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

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

Основная идея языка HQ9+ - позволить программисту очень просто осваивать те задачи, которые обычно ему трудно даются. Вспомните сколько времени у вас заняло написание самого первого хелловорда в вашей жизни.. Сколько времени ушло чтобы понять что присваивание и равенство - суть разные понятия. Сколько времени ушло на понимание что есть суть цикл. Как радовались когда "поняли" как этот код может воспроизвести себя сам.

Благодаря HQ9+, у начинающего программиста появилась возможность очень просто и быстро пройти эти фазы. HQ9+ дружественен прежде всего к программисту. Более того - к начинающему, мало опытнтному программисту.

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

Пытаясь развить HQ9+ заимствованием из BrainFuck вы губите обе идеи.


Я думаю HQ9+ обязательно надо дополнить рекурсией. Понимание рекурсии, обычно, требует от новичков много усилий. Классический же пример рекусрии - ханойские башни./*факториал, как пример рекурсии не интересен, потому что новичек, приступая к изучению рекурсии, обычно уже знает о циклах и понимает абсурдность решения факториала рекурсией*/
Думаю следующий шаг - HQ9+H
При вводе H, должна решаться задача ханойских башен с высотой башни равной текущему значению внутреннего счетчика.



--------------------
Достоверно известно, что 89% людей доверяют статистике взятой с потолка smile
PM   Вверх
SoWa
Дата 8.12.2009, 16:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Харекришна
****


Профиль
Группа: Комодератор
Сообщений: 2422
Регистрация: 18.10.2004




UniBomb, когда новую версию зарелизишь? ))


--------------------
Всем добра smile
PM MAIL ICQ   Вверх
UniBomb
Дата 8.12.2009, 17:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок
***
Награды: 1



Профиль
Группа: Завсегдатай
Сообщений: 1754
Регистрация: 24.10.2006
Где: Санкт-Петербург




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

С другой стороны - у языка не имеющего недостатков (а вед все мы прекрасно понимаем - HQ9+ идеальный язык) может быть ещё непокрытые задачи. Так например тренировка мозга. Почему не научить человека не только справляться с задачами, но ещё и думать? Никто ведь не может сказать, с каким задачами придётся столкнуться начинающему гуру в дальнейшем.

А по поводу BrainFuck - приглядись - в нашем случае от брейнфака позаимствовано ровно столько, сколько в нём позаимствовано например от Java. 

И в качестве контр-аргумента скажу, что мы специально остановились на HQ9+, а не на HQ9+PSL. Это значит, что у нас рождается новый язык, в который мы закладываем новые идеи для всестороннего развития языка. А вот какой именно частью пользоваться - пусть решает сам программист. Ну и напомню, что наш язык называется HQ9+ Lunch Edition.


SoWa, со дня на день. Я столкнулся с некоторыми трудностями, но я работаю над собой.


--------------------
PM MAIL ICQ Skype   Вверх
~FoX~
Дата 8.12.2009, 18:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


НЕ рыжий!!!
****


Профиль
Группа: Участник Клуба
Сообщений: 2819
Регистрация: 8.10.2003
Где: Зеленоград




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


--------------------
user posted image
…множественность никогда не следует полагать без необходимости…
PM MAIL WWW ICQ Jabber   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила раздела «Флейм»
Sneg0k

Добро пожаловать в «Флейм».

В разделе не действуют многие правила:

  • Можно оффтопить(умеренно)
  • Можно общаться на темы, не только связанные с программированием.

Строго запрещено:

  • Размещать рекламу
  • Обсуждать политику
  • Оскорблять друг-друга и переходить на личности
  • Наезжать, провоцировать других участников форума
  • Материться
  • Троллить

Напоминаем о существовании волшебной кнопочки "Репорт". Если вы увидели сообщение, несовместимое с жизнью, просьба подвести на нее курсор и клацнуть левой клавишей мышки. Тем самым вы сможете призвать злого, но жутко справедливого джина-модератора, который нашлет порчу на злостного нарушителя. Кстати - счётчик сообщений здесь не растёт.


Глас Винграда:


Глас Философии:


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Sneg0k

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Флейм | Следующая тема »


 




[ Время генерации скрипта: 0.1045 ]   [ Использовано запросов: 20 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.