Forth
http://fforum.winglion.ru/

Стек Форт-машины на Си
http://fforum.winglion.ru/viewtopic.php?f=55&t=2846
Страница 1 из 2

Автор:  Hishnik [ Вс май 06, 2012 01:31 ]
Заголовок сообщения:  Стек Форт-машины на Си

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

Хм, о чем это я? А, ну да. Итак, в рамках проекта OpenForth разбираемся с описанием стека на Си. ;)

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

Итак, переменные в Си описываются по шаблону.
Код:
<тип> <имя>

К примеру.
Код:
int a, b, c;

Это три целочисленные переменные a, b, c. Можно сделать и массов.
Код:
int x[100];

Это массив из 100 целочисленных переменных. Обращаться к ячейкам массива можно примерно так:
x[12]
Теперь, понятно, надо сделать по аналогии "стековое" имя. Не особо задумываясь, пишем
Код:
int Depth;
int Stack[100];

Переменная Depth нужна в качестве указателя. Пока на стеке ничего нет, она равна нулю. Следовательно, класть на стек надо в ячейку Stack[Depth], а верхнее число будет в Stack[Depth - 1].
Если говорить о более правильном стиле, то сразу можно заметить, что 100 - это вобщем-то для примера, причем очень простого. Решив изменить размер стека, придется побегать по всему тексту в поисках значения 100 (мало ли в каких проверках будет участвовать размер). Поэтому необходимо сделать хотя бы задание размера стека с помощью константы, а в Си это можно сделать еще и с помощью директивы #define. Это директива препроцессора, т.е. она производит лексическую замену - компилятор и не увидит наше символическое имя, которое мы выберем для обозначения размера стека. Вместо него всегда будет подставляться заданное нами значение.

#define STACKSIZE 100

Теперь стек можно определить как
Код:
int Stack[STACKSIZE];

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

1) typedef int cell;
2) cell * Stack;

Автор:  Zinger [ Вс май 06, 2012 12:35 ]
Заголовок сообщения:  Re: Стек Форт-машины на Си

Хищник писал(а):
Однажды принц полюбил девушку. Конечно же, принца хотели женить на принцессе, поэтому обратились к волшебнику, чтобы он заставил принца разлюбить свою избранницу. Принц ненавидел рыбу, поэтому волшебник пригласил его пойти кое-куда. Там, посреди леса, пропахшего рыбой, стоял домик из рыбьих костей. Принц постучал в дверь, и вышла его любимая девушка - в платье из рыбьей чешуи. И что же? С тех пор принц полюбил и рыбу.

Как говорил Лермонтов, нынешнее поколение не способно понять смысл басни, если в конце она не увенчана моралью. Так на что же вы намекаете, коллега Хищник? Уж не на то ли, что коль приглянулся Форт дивный, будьте добры, молодцы, и в Си не плеваться? Ну, знаете, таким манером не долго и до маш. кода добраться, а нас, программирующих профессионалов, то есть, непрофессиональных программистов (по образованию и профессии), такая перспектива крайне смущает, я бы даже сказал, немало пугает. Особенно это касается только-только делающих первые шаги. Каково, вы думаете, новичку, лишь недавно взявшемуся за программирование, в частности, на Форте, слышать, что, нет, дружище, одним этим своим Фортом ты не отделаешься, давай-ка сразу осознай, чтоб безо всяких иллюзий, что тебе также придётся освоить ещё 100500 языков, и без этого никак! :twisted:
Бесспорно, ваш проект по повышению квалификации фортеров со всех сторон заслуживает похвалы, но, в то же время, и не я один это так думаю, было бы гораздо лучше, если бы реализации Форта учили(сь) на Форте. Конечно, всё зависит от преследуемых вами целей. По вашим словам, судя по всему, следует, что ОпенФорт рассчитан на более или менее опытных фортеров и служит предметом для углублённого изучения механизмов функционирования Форт-системы, что ж, в таком случае изъянов у проекта, возможно, практически и нет.

Автор:  Antender [ Вс май 06, 2012 13:00 ]
Заголовок сообщения:  Re: Стек Форт-машины на Си

Zinger писал(а):
Особенно это касается только-только делающих первые шаги.

Им это вообще не надо читать. Материал для категории людей пишущих свой форт.
Zinger писал(а):
Каково, вы думаете, новичку, лишь недавно взявшемуся за программирование, в частности, на Форте, слышать, что, нет, дружище, одним этим своим Фортом ты не отделаешься, давай-ка сразу осознай, чтоб безо всяких иллюзий, что тебе также придётся освоить ещё 100500 языков, и без этого никак!

Это нормально. У каждого языка, в принципе, своя ниша.
Zinger писал(а):

было бы гораздо лучше, если бы реализации Форта учили(сь) на Форте.

А то, что при самокомпиляции часто используеется "чёрная магия" - это вас не смущает. Там и опытный фортер может "без бутылки не разобраться".
Zinger писал(а):
Конечно, всё зависит от преследуемых вами целей. По вашим словам, судя по всему, следует, что ОпенФорт рассчитан на более или менее опытных фортеров и служит предметом для углублённого изучения механизмов функционирования Форт-системы, что ж, в таком случае изъянов у проекта, возможно, практически и нет.

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

Автор:  VoidVolker [ Вс май 06, 2012 13:30 ]
Заголовок сообщения:  Re: Стек Форт-машины на Си

Zinger писал(а):
Уж не на то ли, что коль приглянулся Форт дивный, будьте добры, молодцы, и в Си не плеваться? Ну, знаете, таким манером не долго и до маш. кода добраться

Хорошо. Сделайте этот же стек на ХХХ-форте, и соберите простой бинарник для Win, Linux, Android, Arm. Хотя бы. В данном случае, используется преимущество СИ - программу можно скомпилировать под большинство современных платформ не вникая в особенности строения исполняемых файлов под них.

Автор:  вопрос [ Вс май 06, 2012 15:09 ]
Заголовок сообщения:  Re: Стек Форт-машины на Си

VoidVolker писал(а):
Хорошо. Сделайте этот же стек на ХХХ-форте, и соберите простой бинарник для Win, Linux, Android, Arm. Хотя бы. В данном случае, используется преимущество СИ - программу можно скомпилировать под большинство современных платформ не вникая в особенности строения исполняемых файлов под них.

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

Автор:  WingLion [ Вс май 06, 2012 15:12 ]
Заголовок сообщения:  Re: Стек Форт-машины на Си

вопрос писал(а):
когда-то существовала надежда, что именно форт будет обладать абсолютной переносимостью ввиду лёгкости организации начального транслятора, однако не сложилось - это удивительное преимущество осталось совершенно незатребованным



По экономическим причинам. За переносимый софт деньги можно содрать только один раз.

Автор:  вопрос [ Вс май 06, 2012 15:35 ]
Заголовок сообщения:  Re: Стек Форт-машины на Си

WingLion писал(а):
По экономическим причинам. За переносимый софт деньги можно содрать только один раз.
8)
ВИдимо, кроме этой были ещё причины, иначе форт был бы затребован свободными исходниками (там где денег не надо).

Автор:  WingLion [ Вс май 06, 2012 15:43 ]
Заголовок сообщения:  Re: Стек Форт-машины на Си

В мире, где все завязано на деньги, места, где "денег не надо" душат всеми возможными способами.

Автор:  Hishnik [ Вс май 06, 2012 15:45 ]
Заголовок сообщения:  Re: Стек Форт-машины на Си

Zinger писал(а):
Каково, вы думаете, новичку, лишь недавно взявшемуся за программирование, в частности, на Форте, слышать, что, нет, дружище, одним этим своим Фортом ты не отделаешься, давай-ка сразу осознай, чтоб безо всяких иллюзий, что тебе также придётся освоить ещё 100500 языков, и без этого никак!

Для освоения самого принципа построения Форта все остальное стоит выбрать по принципу максимальной простоты и удобства. Си есть на множестве платформ, а программировать на нем вполне можно, подглядывая в справку и примеры. Я уже не говорю о том, что первый пост содержит на самом-то деле всего две строчки кода :) Эти две строчки вряд ли представляют существенную проблему для освоения.
Zinger писал(а):
но, в то же время, и не я один это так думаю, было бы гораздо лучше, если бы реализации Форта учили(сь) на Форте.

Тогда получится в некотором смысле замкнутый круг. Как разбираться в реализации языка, если он уже сам предлагает "шпаргалки"? В то же время, на Си (Паскаль, Бейсик...), будучи достаточно простыми, смогут обеспечить программирование на уровне перекладывания чисел из одной переменной в другую, не заставляя вникать в свои собственные нюансы. Кроме того, я имею положительный опыт объяснения устройства Форта на примере Си-Паскаля, поэтому вполне готов прогнозировать результаты.

вопрос писал(а):
когда-то существовала надежда, что именно форт будет обладать абсолютной переносимостью ввиду лёгкости организации начального транслятора, однако не сложилось - это удивительное преимущество осталось совершенно незатребованным

А вот от исключительных характеристик мы тут будем последовательно отходить. Я вот уже слышу нотку "если уж браться, то чтобы получилось ого-го!". Нет, не ого-го, а просто чтобы получилось.

Автор:  Hishnik [ Вс май 06, 2012 15:50 ]
Заголовок сообщения:  Re: Стек Форт-машины на Си

WingLion писал(а):
В мире, где все завязано на деньги, места, где "денег не надо" душат всеми возможными способами.

Да зачем же специально душить? Достаточно не решать на Форте актуальные задачи, и он будет даже не задушен, а просто отодвинут в сторону. Разве я должен каждому спамеру объяснять, почему я не буду покупать его суперпродукт со склада, с доставкой, суперакция, только сегодня? Сегодня ситуация далеко не такая, чтобы каждый язык программирования был интересен уже тем, что он просто есть (потому что редкость). Чтобы язык развивался, он должен решать действительно актуальные проблемы, а не быть коллекцией эпатажных приемов.

Автор:  WingLion [ Вс май 06, 2012 16:02 ]
Заголовок сообщения:  Re: Стек Форт-машины на Си

Специально и не надо. Самоудушение - это тоже удушение.
Хотя, формально, имело место и самоудушение и удушение извне.

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

И поэтому, я не кричу на каждом углу на работе, о том, что у меня тут Форт, Форт-процессор, Форт-компилятор и т.д. и т.п. И не пытаюсь его втюхать кому попало.

Прибор должен работать в корпусе, а не в принципе - посему, когда заработает, тогда уже и буду говорить о том, что там Форт делает и почему это делают не Си с Паскалем на пару.

Автор:  Hishnik [ Вс май 06, 2012 16:09 ]
Заголовок сообщения:  Re: Стек Форт-машины на Си

WingLion писал(а):
Когда я в университете ляпнул, что программирую на Форте, мне была прочитана внеплановая получасовая лекция на тему, "почему Си лучше всех и Форт надо бросать". Я ее вытерпел и возражать не стал потому, что сие могло иметь пагубные последствия в дальнейшем.

Ну вот разве что из-за последствий. Потому что если человек не уточняет, для каких целей используется Форт, и чем был вызван его выбор, на его последующие лекции можно смело не обращать внимания. Это как минимум.
WingLion писал(а):
Прибор должен работать в корпусе, а не в принципе - посему, когда заработает, тогда уже и буду говорить о том, что там Форт делает и почему это делают не Си с Паскалем на пару.

+1. Что характерно, когда это уже работает, рассказ о Форте воспринимается совсем иначе.

Автор:  diver [ Вс май 06, 2012 22:38 ]
Заголовок сообщения:  Re: Стек Форт-машины на Си

WingLion писал(а):
Когда я в университете ляпнул, что программирую на Форте, мне была прочитана внеплановая получасовая лекция на тему, "почему Си лучше всех и Форт надо бросать". Я ее вытерпел и возражать не стал потому, что сие могло иметь пагубные последствия в дальнейшем.

у нас, к примеру, на равных правах существуют в рамках дисциплины "технологии программирования" Си, Паскаль, Форт. включая их диалекты

Автор:  Гость [ Пн май 07, 2012 02:22 ]
Заголовок сообщения:  Re: Стек Форт-машины на Си

Про стек в моей базе данных:
http://www.gudleifr.h1.ru/cgi-bin/pilo.cgi?FL=../g9.txt&IS=%5C4.%CF%CE%CB%C5%C7%CD%DB%C5%20%CA%CE%CD%D6%C5%CF%D6%C8%C8%5C%D1%D2%C5%CA%20%C4%C0%CD%CD%DB%D5
Gudleifr 07.05.12

Автор:  zehotello [ Пн май 07, 2012 05:15 ]
Заголовок сообщения:  Re: Стек Форт-машины на Си

Гость писал(а):
Про стек в моей базе данных:
http://www.gudleifr.h1.ru/cgi-bin/pilo.cgi?FL=....
Gudleifr 07.05.12

хотел поблагодарить за линк через "кнопку", но
оказалось, такой вариант не предусмотрен :(
[а есть только вариант "пожаловаться" :wink: ]
посему спасибо(!) здесь

Страница 1 из 2 Часовой пояс: UTC + 3 часа [ Летнее время ]
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/