Forth и другие саморасширяющиеся системы программирования Locations of visitors to this page
Текущее время: Чт мар 28, 2024 16:14

...
Google Search
Forth-FAQ Spy Grafic

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




Начать новую тему Ответить на тему  [ Сообщений: 120 ]  На страницу Пред.  1, 2, 3, 4, 5, 6, 7, 8  След.
Автор Сообщение
 Заголовок сообщения: Re: Маленькие хитрости
СообщениеДобавлено: Чт июн 30, 2016 20:02 
Не в сети
Аватара пользователя

Зарегистрирован: Вт июн 28, 2016 03:17
Сообщения: 31
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Мне сложно вставлять цитаты сейчас, ибо с телефона.

К вопросу о лекс и як:
Сначала определить базис, потом получить код на си, потом научить тому, на что программ не хватило.

К вопросу о типах:
Во первых кроме статической типизации как в си существует динамическая типизация, как в перле или тикле. Где переменная может легко самостоятельно менять тип. Все известные мне лиспы имеют динамическую типизации.

Во вторых строгость типизации - не бинарный параметр. Она может плавно меняться от отсутствующей типизации (асм, форт) через мягкую (perl, tcl) вплоть до жёсткой (visual basic, c, c++) и даже параноидальной (pascal, ada).

К вопросу о отношении концепций форта и лиспа: аргументируйте, пожалуйста.

К вопросу о стандартизации: да ладно вам, смешно же звучит "стандарт на форт", "стандарт на лисп", "стандарт на русский язык", "стандарт на процедуру размножения". В лучшем случае можно говорить о каноне.

К вопросу, на чем писать: так на Си же.

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

_________________
Also, liebe Kolleginnen und Kollegen,
Es werde Hölle...


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Маленькие хитрости
СообщениеДобавлено: Чт июн 30, 2016 20:40 
Desutorakuta писал(а):
Сначала определить базис, потом получить код на си, потом научить тому, на что программ не хватило.
Не имеет смысла. Никакого выигрыша не получится.

Desutorakuta писал(а):
Во первых кроме статической типизации как в си существует динамическая типизация...
Во вторых строгость типизации - не бинарный параметр. Она может плавно меняться...
Обосновать полезность подобных промежуточных решений практически невозможно. Получится (как в C++) и программист не уверен, с чем он имеет дело, и компилятор фигню пишет..

Desutorakuta писал(а):
К вопросу о отношении концепций форта и лиспа
LISP - это строго-математическая абстракция, реализуемая в виде виртуальной машины; FORTH - вырожденная виртуальная машина для решения сугубо прикладной проблемы. LISP рассматривает действия как разновидность данных, FORTH данные рассматривает как действия. LISP пытается отложить вычисления до последнего момента, FORTH требует вычислять все сразу. Если довести до абсолюта, то идеальный LISP пишется на LISP, а идеальный FORTH - сам на себе: т.е. в первом случае процесс итеративный, а во втором - рекурсивный.

Desutorakuta писал(а):
В лучшем случае можно говорить о каноне.
Дык, случай-то худший. И то и другое обросло стандартами чуть более, чем до полной потери смысла.

Desutorakuta писал(а):
К вопросу о интерфейсах: так этого уровня, как токового, и не существует...
См. мою табличку языков. На C реально написать свой BASIC... Или С++... Но идти через FORTH или LISP - крюк еще тот. (И Вы сами об этом писали). И не надо забывать, что C без ОС - пустышка. Именно ОС (shell, WIN-API, Qt или еще, что там у Вас) будет определять "уровень языка".


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения: Re: Маленькие хитрости
СообщениеДобавлено: Чт июн 30, 2016 22:12 
Не в сети
Аватара пользователя

Зарегистрирован: Вт июн 28, 2016 03:17
Сообщения: 31
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Цитата:
Не имеет смысла. Никакого выигрыша не получится.
Сложно возразить, не работал с ними. Но, ведь тем не менее - возможно, верно?

Цитата:
Обосновать полезность подобных промежуточных решений практически невозможно.
Просто C++ плохой пример. Ведь perl c php успешно существуют и используются, не смотря на это свое свойство. Просто - программист обычно уверен, с чем он работает. (Форт же как то существует). А если в системе появляется неопределенность в виду каких то причин, выручают всякие isnum? isstring? Которые позволяют программе быть чуточку умнее.

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

Цитата:
LISP - это строго-математическая абстракция, реализуемая в виде виртуальной машины; FORTH - вырожденная виртуальная машина для решения сугубо прикладной проблемы.
Не верно. И лисп и форт могут быть как прямо-интерпретируемы, так и завёрнуты в виртуалку и, даже, скомпилированы в машинный код. И лисп и форт - это в первую очередь формализм для записи работающих программ, и способ мышления на языке машины.

Цитата:
LISP рассматривает действия как разновидность данных, FORTH данные рассматривает как действия.
Т.е. оба языка обобщают данные и операции, правильно?

Цитата:
LISP пытается отложить вычисления до последнего момента, FORTH требует вычислять все сразу.
Это, по большей части миф. Большенство лиспов не использует ленивые вычисления штатно. То, что их можно организовать - так их и на форте можно организовать. Даже на вполне стандартном.

Цитата:
Если довести до абсолюта, то идеальный LISP пишется на LISP, а идеальный FORTH - сам на себе: т.е. в первом случае процесс итеративный, а во втором - рекурсивный.
Тоже не правда. Точно так же, как существуют форт-процессоры и форт-системы, весь код для которых представляет из себя исключительно форт, существуют лисп-процессоры, и лисп-компьютеры, весь код которых представляет из себя код на лисп. Оба процесса рекурсивны.

Цитата:
На C реально написать свой BASIC... Или С++... Но идти через FORTH или LISP - крюк еще тот.
Тут нужно понимать, где кончается расширение языка и начинается написание нового. Си сложно расширить до Форта. По крайней мере заметно сложнее, чем до бэйсика. Т.е. сделать так, что бы система, работающая с языком Си, начала работать на языке Форта. Но написать на Си форт - дело настолько же тривиальное, как написать форт на форте, или ассемблере. С лиспом то же самое.

Расширить форт до его понимания форт-системой языка Си в некотором роде проще. Но написать на Форте компилятор языка си в изначальном смысле этого слова - это не менее сложно, чем и реализация такового компилятора на Си.

Цитата:
И не надо забывать, что C без ОС - пустышка.
Кроме всего прочего, си, даже сам по себе, обеспечивает интерфейс со всеми операционными системами, написанными на си. И к многим - написанным без пременения си. А это не такой уж и короткий список выходит. Кроме того - существует большое количество библиотек, зависящих только от си и возможностей системы. Очень и очень вещь в себе, этот язык.

_________________
Also, liebe Kolleginnen und Kollegen,
Es werde Hölle...


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Маленькие хитрости
СообщениеДобавлено: Чт июн 30, 2016 23:18 
Desutorakuta писал(а):
Но, ведь тем не менее - возможно, верно?
Можно и к автомобилю лошадь прицепить. И даже обосновать. Но стоит ли?

Desutorakuta писал(а):
выручают всякие isnum? isstring?
Здесь, на самом деле, подразумевается не "какого типа переменная?", а "каково значение переменной?". Тип-то, вполне очевиден - ячейка, поле, введенный символ (в последнем случае FORTH работает точно также).

Desutorakuta писал(а):
И есть узкие места, где на форте это организовать будет затруднительно.
В узких-то местах, это, как раз просто. Например, в примере FORTH-LISP выше так был реализован ATOM.

Desutorakuta писал(а):
Не верно... <И далее про FORTH и LISP>
Боюсь, без копания во внутренностях этих машин, объяснить не получиться. Да, иногда, они могут действовать внешне схожим образом, но устроены, как я и написал выше, совершенно по-разному. Например, "обобщение действий и данных". Да, "обобщают" - в LISP просто нет действий, а в FORTH - данных. И т.д., и т.п.

Desutorakuta писал(а):
Тут нужно понимать, где кончается расширение языка и начинается написание нового...
И, опять, зачем? Да, все есть Машина Тьюринга и все эквивалентно, но не проще взять, то, что есть и написать то, что надо?

Desutorakuta писал(а):
Кроме того - существует большое количество библиотек, зависящих только от си и возможностей системы.
Это в переводе на русский язык и означает: сам C ничего не умеет. ОС должна предоставить ему библиотеку. Например, какой прок прок будет от файловых библиотек в ОС, не имеющих файловых систем?


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения: Re: Маленькие хитрости
СообщениеДобавлено: Пт июл 01, 2016 01:54 
Не в сети
Аватара пользователя

Зарегистрирован: Вт июн 28, 2016 03:17
Сообщения: 31
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Вам никто не говорил, что игнорирование причинно-следственных связей - не приближает всеобщее благо... в смысле затрудняет достижение истины?

Цитата:
Можно и к автомобилю лошадь прицепить. И даже обосновать. Но стоит ли?
Вы утверждали, что это невозможно. То что в данном конкретном слуае их использование не практично, я упомянул.

Цитата:
Боюсь, без копания во внутренностях этих машин, объяснить не получиться.
Я представляю себе устройство как лисп-машин так и форт машин. Я никогда не утверждал, что они идентичны в реализации или каких либо других частностях. Я говорил, что у них сходные концепции. Концепчия модулей и простого интерфейса между ними, концепция управления данными, концепция языка высокого/низкого уровней, концепция единого пространства данных.

Цитата:
Да, все есть Машина Тьюринга и все эквивалентно, но не проще взять, то, что есть и написать то, что надо?
Нет, не эквивалентно. Машина тьюринга - это модель выполнения. Она не имеет никакого отношения к циклу разработки и жизненному циклу программ.

На языке Си возможно написать программу без стека. На языке си возможно написать программу, работающую без языка си. Возможно ли реализовать Форт-Программу, работающую без стека или адресного интерпретатора?

Теперь пройдёмся по действительно интересным, методическим темам.

Цитата:
Здесь, на самом деле, подразумевается не "какого типа переменная?", а "каково значение переменной?"
Нет, на самом деле здесь подразумевается именно значение типа данных. Если на Стеке лежат какие либо данные, нет никакого способа узнать, что это за данные, без знания деталей реализации процедур, их туда поместивших. Каждая яыейка стека форт может содержать Беззнаковое целое, Целое со знаком, Число с плавающей запятой. Адресс какого то объекта в памяти. Смещение между двумя объектами в памяти. Упакованные несколько значений меньшей разрядности. Код символа из кодовой таблицы или еще какое-нибудь битовое поле. И никакого способа определить, как с этим работать, кроме как быть уверенным в их типе на момент создания программы.

Цитата:
В узких-то местах, это, как раз просто. Например, в примере FORTH-LISP выше так был реализован ATOM.
Уверен что это так. Не вникал в реализацию, так как осознав, что мне нужен лисп, решил писать сразу лисп, оставив форт на сладкое.

Цитата:
сам C ничего не умеет. ОС должна предоставить ему библиотеку. Например, какой прок прок будет от файловых библиотек в ОС, не имеющих файловых систем?
Ну, если эта библиотека именно описывает структуру файловой системы, а не является интерфейсной библиотекой какой нибудь третьей ос, то прок может быть великим: например что бы добавить в ОС поддержку файловых систем. Или что бы проигрывать аудиофайлы с флеш-карты не обращаясь к, а то и вовсе обходясь без ОС.

Да и интерфейсная библиотека файловой системы третьей ОС в отдельных случаях может быть полезна: если ФС например CIFS или NFS, а рабочая ос имеет поддержку сети (или программа притащила за собой драйвер сетевой карты и TCP/IP стек. В виде отдельных библиотек естественно) то программа сможет хранить свои файлы "foo" и "bar" на удалённой системе.

Я уже не говорю о том, что библиотеки языка Си могут быть статически подключены к программе, в результате чего результирующая программа будет включать такую библиотеку полностью, и обязанности ОС по предостовлению библиотек не будут востребованы вовсе.

_________________
Also, liebe Kolleginnen und Kollegen,
Es werde Hölle...


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Маленькие хитрости
СообщениеДобавлено: Пт июл 01, 2016 11:14 
Desutorakuta писал(а):
Вы утверждали, что это невозможно.
"Это" действительно невозможно. Просто Вы вместо него подставили "то". Вместо "компиляции неготовой грамматики" - "использование ограниченной грамматики".
Desutorakuta писал(а):
Я представляю себе устройство как лисп-машин так и форт машин... Я говорил, что у них сходные концепции.
Значит, не представляете. Наверное, стоит вынести противостояние LISP-FORTH в отдельную тему, иначе посты будут слишком длинными.
Desutorakuta писал(а):
На языке Си возможно написать программу без стека. На языке си возможно написать программу, работающую без языка си. Возможно ли реализовать Форт-Программу, работающую без стека или адресного интерпретатора?
C без стека - т.е. без вызовов функций? Без языка C?- А как Вы определите, что она написана "на C", если "без C"? FORTH-программа, работающая без стека - разумеется можно. Без адресного интерпретатора? В FORTH нет адресного интерпретатора. У него - словарь (который во время "работы программы" обычно не используется).

Тип данных, лежащих в ячейке стека FORTH только один - значение распознанного входного символа (то, что FORTH использует стек и для вычислений - это лишь оптимизация), и то, что он "распознан", для FORTH означает одно - он знает о нем все, что нужно, в т.ч. тип... Это та самая "разница концепций" - LISP сначала решает, что делать со значениями-параметрами, затем - делает; FORTH же обычно (за единственным исключением) считает, что параметры уже полностью соответствуют тому, что нужно сделать.

Методология здесь проста. Определение типа данных машиной нужно в одном единственном случае - унификации фреймов по Минскому. Для чего обычно используется вполне конкретный тип данных - список, строка, структура с вариантами... Например, FORTH считывает строку, проверяет ее (возможно, производя дополнительную обработку введенной строки) на наличие в словаре, потом - на соответствие некоторым регулярным выражениям, затем, возможно, в каталогах диска... Определив же, с чем имеет дело, он посылает в стек или словарь готовое значение.

Desutorakuta писал(а):
Ну, если эта библиотека именно описывает структуру файловой системы...
Все проще. Язык C потому и применяется для дописывания к ОС новых драйверов, что библиотеки в него не входят. Было бы неудобно для создания TCP/IP драйвера тащить в систему заодно и C-реализацию файловой системы.


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения: Re: Маленькие хитрости
СообщениеДобавлено: Пт июл 01, 2016 23:06 
Не в сети
Аватара пользователя

Зарегистрирован: Вт июн 28, 2016 03:17
Сообщения: 31
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Цитата:
"Это" действительно невозможно.
Напомню, что именно "Это":
gudleifr писал(а):
Desutorakuta писал(а):
Ну, если я правильно понял, то на выходе yacc и lex получается Си-код, который в свою очередь можно научить чему угодно

Неправильно. Сначала "научить", а потом "получается". А в интерпретаторах можно учить в процессе.
Получается возможно. Про целесообразность умолчим.

Цитата:
Наверное, стоит вынести противостояние LISP-FORTH в отдельную тему
Я думаю не стоит. Противостояния то особого и нету. Они друг-другу не мешают, и бог с ним. Если мы спускаемся к реаизации, мы уходим от концепций, так что не вижу смысла в продолжении полемики.

Цитата:
C без стека - т.е. без вызовов функций?
Не обязательно. С вызовом функций. Но без стека. Затруднение вызывает только рекурсия. Естественно, такой механизм должен явно поддерживать компилятор Си, но это возможно.

Цитата:
FORTH-программа, работающая без стека - разумеется можно.
Вот на такой пример действительно было бы интересно посмотреть.

Цитата:
В FORTH нет адресного интерпретатора.
Если я правильно понимаю - на форуме более употребеленно понятие "виртуальная машина", что мне кажется не совсем корректным. И да - программа на форт может работать без адресного интерпретатора. Но для этого её нужно скомпилировать в классическом смысле понятия "компиляция".

Цитата:
LISP сначала решает, что делать со значениями-параметрами, затем - делает; FORTH же обычно (за единственным исключением) считает, что параметры уже полностью соответствуют тому, что нужно сделать.
Это не совсем верно, у лиспов обычно строгая типизация, так что он не решает, а выдает ошибку, если данная операция не доступна. И я бы не назвал это концептуальной разницей. - просто небольшая разница в уровне языка. Впрочем, даже в противном случае - этого различия недостаточно, что бы утверждать, что языки абсолютно противоаоложны концептуально. Скорее - это одно из тех самых отличий, которые позволяют говорить о разных языках.

Цитата:
Язык C потому и применяется для дописывания к ОС новых драйверов, что библиотеки в него не входят.
Почти верно. В любую уважающую себя реализацию языка Си входит набор стандартынх библиотек. Просто, Си не обязывает ими пользоваться. Однако, с другой стороны, позволяя программисту выбрать необходимый библиотечный базис и делает Си удобным как для работы в окружении ОС, так и вне его.

С третьей стороны - даже если не подключать к Си библиотек, на нём, опираясь уже на знания о конкретной машине, всё равно можно писать рабочие программы, так же, как на и на ассемблере. Так что утверждение "C без ОС - пустышка" так же верно, как и "карандаш без рамки чертежа - не имеет смысла".

_________________
Also, liebe Kolleginnen und Kollegen,
Es werde Hölle...


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Маленькие хитрости
СообщениеДобавлено: Пт июл 01, 2016 23:46 
Desutorakuta писал(а):
Напомню, что именно "Это"...
Не передергивайте. Изначально: "в них можно закладывать только готовые грамматики".

Desutorakuta писал(а):
Не обязательно. С вызовом функций. Но без стека.
Язык C так не умеет. Параметры и адреса возвратов хранятся в стеке.

Desutorakuta писал(а):
Вот на такой пример действительно было бы интересно посмотреть.
Например, классический пример Мура про таблицы, на который я ссылался. Очевидно, таблицы на стеке не поместятся и будут храниться "где-то рядом". Так что, стек необходим только на этапе интерпретации. А готовая программа может хранить и обрабатывать данные, где угодно.

Desutorakuta писал(а):
Если я правильно понимаю - на форуме более употребеленно понятие "виртуальная машина", что мне кажется не совсем корректным.
Да, именно некорректным, и именно потому, что навевает на мысли о всяких "адресных интерпретаторах", которые в некоторых FORTH если и существуют, то в зачаточной форме. Считать адресным интерпретатором команды "lodsd; jmp eax", стоящие в конце кода каждого слова?

Desutorakuta писал(а):
И я бы не назвал это концептуальной разницей. - просто небольшая разница в уровне языка.
Называйте как хотите. Если найдете то, что они делают одинаково, вот тогда и сможете утверждать, что они схожи. Только, лучше, в новой теме... И, кстати, называть FORTH языком не совсем корректно.

Desutorakuta писал(а):
В любую уважающую себя реализацию языка Си входит набор стандартынх библиотек.
Кроме родных. Так что, правильнее говорить не "набор библиотек", а POSIX-эмулятор.

Desutorakuta писал(а):
"C без ОС - пустышка" так же верно, как и "карандаш без рамки чертежа - не имеет смысла".
Скорее, "карандаш без бумаги". Ведь, "знания о конкретной машине", как раз, и подразумевают ОС (пусть, нулевую) - что и даст Вам уровень.


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения: Re: Маленькие хитрости
СообщениеДобавлено: Сб июл 02, 2016 02:07 
Не в сети
Аватара пользователя

Зарегистрирован: Вт июн 28, 2016 03:17
Сообщения: 31
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Цитата:
Не передергивайте. Изначально: "в них можно закладывать только готовые грамматики".
Я не передергиваю. Проследите внемательние тему разговора. На базе кода, полученного lex+yacc можно построить интерпретатор. Кроме того, при необходимости, можно обойти многие их ограничения через модификацию их выхода. Других утверждений я не делал.

Цитата:
Язык C так не умеет. Параметры и адреса возвратов хранятся в стеке.
Умеет. У микрочип есть семейство микроконтролёров PIC10f, в которых глубина аппаратного стека - два адреса, без возможности прямой работы с ним (только посредствам call/ret). Штатный компилятор языка поддерживает большую глубину вложения вызовов, нежели два.

Если функция не рекурсивна (или строго тайл-рекурсивно) достаточно хранить только один адресс возврата, и для этого достаточно задействовать статически распределенную оперативную память. И компилятор Си вполне способен это сделать.

Параметры функций - это вообще отдельный разговор. Даже на i386 есть как минимум четыре распространенных соглашения, где и как хранить параметры функций. И любой компилятор C умеет в любую, из этих четырех: ccall, stdcall, pascal, fastcall. fastcall-функции используют стек, только если у них больше двух параметров (или, если параметры > 32 бит).

Цитата:
Например, классический пример Мура про таблицы, на который я ссылался. Очевидно, таблицы на стеке не поместятся и будут храниться "где-то рядом". Так что, стек необходим только на этапе интерпретации. А готовая программа может хранить и обрабатывать данные, где угодно.
А где же храниться указатель для работы с памятью? Ведь всё равно в самом низу абстракции форта будут '@' и '!'. Которые принимают значения как? Через что? Правильно. Упс =)

Цитата:
И, кстати, называть FORTH языком не совсем корректно.
Лисп тоже с натяжной, на самом деле.

Цитата:
Кроме родных. Так что, правильнее говорить не "набор библиотек", а POSIX-эмулятор.
Ошибаетесь. Если система не посикс-совместимая, то компилятор тащит за собой и родные интерфейсные библиотеки тоже. Не говоря уже о том, что посикс-эмулятором стандартные библиотеки можно назвать только исходя из соображений, что Си - тоже часть POSIX. Например в Visual C++ от микрософт нету (по крайней мере небыло, когда я пользовался им в последний раз) заголовочного файла signals.h и соответствующей библиотеки - родного интерфейса к UNIX. Хотя в стандарт POSIX он входит.

Цитата:
Скорее, "карандаш без бумаги". Ведь, "знания о конкретной машине", как раз, и подразумевают ОС (пусть, нулевую) - что и даст Вам уровень.
Нет, именно без рамки чертежа. Бумага в данном случае - это голое железо.

Не существует понятия "нулевой ос". ОС либо есть, либо нету. Если ос есть - значит можно рассчитывать на какой-то уровень абстракции с её стороны. (Всё что в рамке - чертёж). Если ос нету - селявизор. Хочешь рисуй, хочешь набросок набрасывай, хочешь - чертёж делай. С собственной рамкой. Но если потом это скопировать на новый лист не получиться (поля ксерокс срежет) - то тут уж извините. Госты на то и писаны, что бы переносимо было.

Знания о конкретной системе не подразумевают ос. То, что я знаю, что на тумбочке у меня лежит старый атлон с 256мБ RAM никак не поставят на него ОС. Там нет накопителя, и всё ПО, что на нём есть - это BIOS в ROM памяти. Надеюсь вы не будете спорить со мной, что базовая система ввода-вывода не является операционной? Тем не менее - если сильно понадобиться, я смогу написать для него программу на си, и даже запустить её - через сетевую загрузку, закатав программу прямо в память.

_________________
Also, liebe Kolleginnen und Kollegen,
Es werde Hölle...


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Маленькие хитрости
СообщениеДобавлено: Сб июл 02, 2016 10:25 
Desutorakuta писал(а):
можно обойти многие их ограничения через модификацию их выхода
Ограничение "в них можно закладывать только готовые грамматики" обойти нельзя. В интерпретаторах, в общем случае, можно.

Desutorakuta писал(а):
Умеет.
Частные случаи реализации нас не интересуют. Программисту гарантирован стек возвратов (с кадром под локальные переменные) и он его имеет.

Desutorakuta писал(а):
Ведь всё равно в самом низу абстракции форта будут '@' и '!'.
Совершенно необязательно.

Т.е. Вы путаете "компилятор C может сделать программу без стека" и "FORTH-программист может написать программу без стека".

Desutorakuta писал(а):
Лисп тоже с натяжной, на самом деле.
Так как Вы его собираетесь сравнивать с FORTH?

Desutorakuta писал(а):
Если система не посикс-совместимая, то компилятор тащит за собой и родные интерфейсные библиотеки тоже.
Т.е. тащит POSIX-эмулятор. Да, кривой, да нечестный.

Desutorakuta писал(а):
Бумага в данном случае - это голое железо.
Т.е. "нулевая ОС".

Desutorakuta писал(а):
ОС либо есть, либо нету.
Отсутствие ОС с точки зрения языка, тоже - ОС.

Desutorakuta писал(а):
базовая система ввода-вывода не является операционной?
Является. Какая разница, использовать printf или int10? Только для человека, который думает, что C-библиотеки - часть языка. Но, не для программиста.
Кстати, даже тут на Форуме были товарищи, которые предлагали начать писать FOFTH-ОС с подключения stdio.h.


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения: Re: Маленькие хитрости
СообщениеДобавлено: Сб июл 02, 2016 14:38 
Не в сети
Аватара пользователя

Зарегистрирован: Вт июн 28, 2016 03:17
Сообщения: 31
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Цитата:
Ограничение "в них можно закладывать только готовые грамматики" обойти нельзя.
Что ни на что не влияет, поскольку Lex и Yacc не являются языками программирования. На основе кода, сгенерированного Lex и Yacc можно построить интерпретатор, в т.ч. с неполной граматикой.

Цитата:
Программисту гарантирован стек возвратов (с кадром под локальные переменные) и он его имеет.
Программисту гарантирована только возможность вызова процедур и обеспечение лексической видимости имён переменных. Ни в одном стандарте СИ не прописан жесткий, обязательный механизм реализации этого.

Цитата:
Т.е. Вы путаете "компилятор C может сделать программу без стека" и "FORTH-программист может написать программу без стека".

Вопрос стоял
Цитата:
Возможно ли реализовать Форт-Программу, работающую без стека или адресного интерпретатора?
Нужна программа вообще не использующая стек. Пока форт остаётся фортом, параметры вызова процедур на любом уровне будут лежать на стеке. Мур, Броуди, и все стандарты описывали стек, как часть языка. Значит нельзя.

В книжке Керригана и Ритчи (первый исторический стандарт языка СИ) не слова не сказано, как должен работать вызов процедур. Он просто должен работать. В Си - не обязателен стек.

gudleifr писал(а):
Desutorakuta писал(а):
Если система не посикс-совместимая, то компилятор тащит за собой и родные интерфейсные библиотеки тоже.
Т.е. тащит POSIX-эмулятор. Да, кривой, да нечестный.
Здесь потеряна причинно-следственная связь. Из первого не следует второе.

Например на POSIX-несовместимой Windows полный пакет компилятора MinGW содержит полноценный POSIX-эмулятор. С эмулятором signals, программами sh, sed, flex и, емнип, bison.

Цитата:
Т.е. "нулевая ОС".
Эта абстракция не имеет смысла. Голое железо - это голое железо. Представьте себе спектрум с чистой ром.

Цитата:
Отсутствие ОС с точки зрения языка, тоже - ОС.
Аргументируйте пожалуйста. Отсутствие ОС - с любой точки зрения это отсутствие ОС.

Цитата:
Является. Какая разница, использовать printf или int10?
Двойной фейспалм на мою голову. Ладно, замнём. От осознания что на лежащем у меня в тумбочке планшете0, с процессором TI OMAP 4430 (Два АРМ ядра + ядро GPU, 1Gb Рам и флеш-памятью размером 8 Gb, не создаёт на нём ОС. Ибо. Я. Лично. Отформатировал. Его. Флеш-память. Внешним. Программатором. Тем не менее, это никак не может помешать писать для него программы на Си.

Или тот же самый спектрум с потёртой ROM-памятью. Нету ничего, никакого программного обеспечения. Уж тем более ОС. Но программы писать можно.

Да, ведь сами ОС пишутся (Все UNIX, Все BSD, Linux, Minix, Ядро NT) пишутся на СИ. Или любая ОС работает под управлением другой ОС? Тогда под чем работает ваша ОС нулевого уровня? Давайте введем ОС -1 уровня. ОС -2 уровня. Очень удобные абстракции же.

_________________
Also, liebe Kolleginnen und Kollegen,
Es werde Hölle...


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Маленькие хитрости
СообщениеДобавлено: Сб июл 02, 2016 15:42 
Desutorakuta писал(а):
На основе кода, сгенерированного Lex и Yacc можно построить интерпретатор, в т.ч. с неполной граматикой.
В надцатый раз: "в них можно закладывать только готовые грамматики". То что Вы на основе "полной грамматики" затем будете строить "неполную" - Ваши проблемы.

Desutorakuta писал(а):
Пока форт остаётся фортом, параметры вызова процедур на любом уровне будут лежать на стеке.
Учите матчасть!

Desutorakuta писал(а):
В книжке Керригана и Ритчи...
Открываем, ищем слово "стек", удивляемся.

Desutorakuta писал(а):
... ОС ...
Хорошо, убедили. Считайте "уровнем ОС" "уровень C" и пишите "просто на C".


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения: Re: Маленькие хитрости
СообщениеДобавлено: Сб июл 02, 2016 18:20 
Не в сети
Аватара пользователя

Зарегистрирован: Вт июн 28, 2016 03:17
Сообщения: 31
Благодарил (а): 0 раз.
Поблагодарили: 0 раз.
Цитата:
В надцатый раз
В надцатый раз - это никак не влияет на принципиальную возможность получения нужных свойств у конечного продукта.

Цитата:
Учите матчасть!
Именно этим сейчас и занимаюсь - прорабатываю книжку Structure and Interpretation of Computer Programs Абельсона Суссмана и Суссман. Спасибо за совет.

Цитата:
Открываем, ищем слово "стек", удивляемся.
Открыл. Перевод под ред. Штаркмана, издетельство "СПб.: "Невский Диалект", 2003 год. Единственное упоминание стека, не связанно с явной реализацией этой структуры через механизмы Си в пояснительных примерах, это следующий абзац во введении:
Цитата:
В языке нет каких-либо средств распределения памяти, помимо возможности определения статических переменных и стекового механизма при выделении места для локальных переменных внутри функций.
Из контекста которого даже не следует, что разговор идёт о том самом традиционном для си "стеке возвратов". Почитайте книжку на досуге по-внимательнее. Хорошая книжечка, интересная.

Цитата:
Хорошо, убедили.
Я рад, что вы наконец то признали очевидное. С вами было очень приятно и интересно поспорить.

_________________
Also, liebe Kolleginnen und Kollegen,
Es werde Hölle...


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения: Re: Маленькие хитрости
СообщениеДобавлено: Сб июл 02, 2016 18:42 
Desutorakuta писал(а):
В надцатый раз - это никак не влияет на принципиальную возможность получения нужных свойств у конечного продукта.
Влияет. Не понимая, свойств инструмента, Вы не сможете нормально его использовать.

Desutorakuta писал(а):
не следует, что разговор идёт о том самом традиционном для си "стеке возвратов"
Но еще менее следует "отсутствие стека". Тем более, что Вы опять малость передернули.

Desutorakuta писал(а):
прорабатываю книжку Structure and Interpretation of Computer Programs
Пытаясь понять FORTH?


Вернуться к началу
  
Ответить с цитатой  
 Заголовок сообщения: Re: Маленькие хитрости
СообщениеДобавлено: Сб июл 02, 2016 18:46 
<Дубль>


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

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


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

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


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

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