chu 0 November 15, 2012 Posted November 15, 2012 (edited) · Report post Пропаганда :salmari: ага Edited November 15, 2012 by chu Quote Share this post Link to post Share on other sites More sharing options...
chu 0 November 15, 2012 Posted November 15, 2012 · Report post Первым желанием было - отредактировать текст, но оставил "как есть",пусть эта "лажа" послужит всем примером - "Форт не прощает ошибок". вот, лажу исправил : My_Func ( L2 L1 X2 X1 X --- N ) DUP >R OVER - R> \ L2 L1 X2 X1 [X-X1] X SWAP >R >R \ L2 L1 X2 X1 || R: [X-X1] X OVER R> - >R - \ L2 L1 [X2-X1] || R: [X-X1] [X2-X] SWAP R> M* >R \ L2 [X2-X1] || R: [X-X1] L1*[X2-X] SWAP R> \ [X2-X1] L2 L1*[X2-X] || R: [X-X1] SWAP R> M* D+ \ [X2-X1] L1*[X2-X]+L2*[X-X1] SWAP m/round ; Народ! если вас будут убеждать что на форте только так и приходится писать программы, знайте - вас обманывают. Ни один фортер в здравом уме и трезвой памяти не станет творить такое без особых на то причин ( например - защита от "реверс-инжениринга"). ( по мнению Криса Касперского программы на форте с трудом поддаются "хакингу") Если случается такой мозголомный ужас - имеет смысл задуматься - " А верно ли я подошел к решению задачи?" Впрочем, об этом лучше читать уже рекомендованное - Thinking Forth Quote Share this post Link to post Share on other sites More sharing options...
MrYuran 34 November 15, 2012 Posted November 15, 2012 · Report post ( по мнению Криса Касперского программы на форте с трудом поддаются "хакингу") А вроде как наоборот - во многие системы входят слова для "дизфорта", вываливающие исходники по имени слова. Да что далеко ходить - сборки .net, не прошедшие обфускацию, вываливают все свои потроха по первому требованию Quote Share this post Link to post Share on other sites More sharing options...
Kopa 0 November 15, 2012 Posted November 15, 2012 (edited) · Report post А вроде как наоборот - во многие системы входят слова для "дизфорта", вываливающие исходники по имени слова. Да что далеко ходить - сборки .net, не прошедшие обфускацию, вываливают все свои потроха по первому требованию Сборки Net, Java показывают легко свои "потроха", если не убрана отладочная информация (в другом варианте могут быть проблемы, скорее всего) Статя Криса Касперски Защита игр от взлома (статья в журнале хакер) проясняющая некоторые моменты. (Особо действенный способ выполнять программу в рамках эмулируемого и ивестного "только" разработчику программы процессора) А как оно всё реально эффективно... P.S. Для развития интересна статья к прочтению Криса Касперски Языки, которые мы потеряли (Форт тоже упоминается) И также стоит ознакомитья с исследовательской статьёй приведённой в книге Брукса Мифический Человеко месяц начиная с главы.16 (online) Серебряной пули нет — сущность и акциденция в программной инженерии (русское издание данной книги, вроде 2002года ) Народ! если вас будут убеждать что на форте только так и приходится писать программы, знайте - вас обманывают. Ни один фортер в здравом уме и трезвой памяти не станет творить такое без особых на то причин ... Такое, только, в моём понимании: 1. Если выполнение будет происходить на "чисто" стековом процессоре (например графический процессор Вводная инфа: Gameduino Игровой адаптер для контролеров) 2.Других возможностей нет "по быстрому" добавить необходимую математику на "регистровой" реализации Форт, например в ассемблере. или требуется некоторая компактность занимаемого места кодом. (а надстройки (или "инородные"инструменты) по кодогенерации или кросс-компиляции кода не используются) 3. Проверить "абстрактные" оптимизационные возможности на данном коде на разных Форт системах.. 4. Из интереса (любви) к чистому искусству.(здесь есть некоторые оправданные аналоги Graphicals Haiku in Forth и код, возможно, с минимумом переделок использовать для этого. ... Edited November 15, 2012 by Kopa Quote Share this post Link to post Share on other sites More sharing options...
chu 0 November 15, 2012 Posted November 15, 2012 · Report post "Хорошая идея - приложить к этому делу Форт. Вот его преимущества: простота реализации Форт-машины, компактность p-кода, довольно высокая производительность, сложность декомпиляции и ни на что непохожесть. Форт стоит особняком от всех языков, совсем не стремясь соответствовать человеческим привычкам, "здравому смыслу" и "логике". Разобраться в его идеологии с нуля будет непросто. Хакеру придется нарыть кучу литературы и запастись терпением. Даже если ему не наскучит, разработчик защиты получит хорошую фору по времени, ну а там... мыщъх что-нибудь придумает!" Защита игр от взлома Автор: ©Крис Касперски ака мыщъх Quote Share this post Link to post Share on other sites More sharing options...
SBE 1 November 15, 2012 Posted November 15, 2012 · Report post Народ! если вас будут убеждать что на форте только так и приходится писать программы, знайте - вас обманывают. Ни один фортер в здравом уме и трезвой памяти не станет творить такое без особых на то причин ( например - защита от "реверс-инжениринга"). ( по мнению Криса Касперского программы на форте с трудом поддаются "хакингу") Увы, не сильно лучшего хватает, как уже упоминал, и в библиотеках расширений. Это не только извращения программистов, это отчасти свойство языка, ну провоцирует он к "мозголомству". И еще, когда глубоко погрузился в написание на форте, это уже не кажется ужасом, все понятно и прозрачно. До тех пор пока погрузился :rolleyes: Проблемы с хакингом это во многом следствие неочевидности и сложности для восприятия базового синтаксиса и сложных стековых манипуляций (общепризнанная слабость языка). И тоже самое будет с пониманием кода другим программистом. Плюс бесконечное расширение новыми понятиями и новой лексикой, на выходе может легко дать текст на "птичьем" языке, малопонятном для других разработчиков (проблема для любого программного языка, но для форта такое расширение в гораздо большей степени "и нужно, и можно"). Скажут, что должно в идеале решатся правильной методой программирования, но (это уже как битый руководитель) лучше бы было жизнеспособно и без оной. Тем более для зачастую простых с программной точки зрения микроконтроллерных задач. Поэтому для командной работы (мы сейчас в основном только так и работаем, что правильно) я Forth поостерегусь применять, кроме случаев действительной нужды в нем. Если случается такой мозголомный ужас - имеет смысл задуматься - " А верно ли я подошел к решению задачи?" Правильно сказано. В том числе задуматься и про выбор инструментария. :rolleyes: P.S. Сам не пробовал, но вроде исходный текст форт восстанавливается по скомпилированному бинарному коду (для некоторых систем). Вот где разгул для хакинга. Не так давно паролил часть слов интерпретатора, дающих доступ к памяти и "потрохам", когда пошли активные поставки изделий в Китай. Больше для очистки совести. Это к недостаткам Forth никак не не отношу. Quote Share this post Link to post Share on other sites More sharing options...
SyncLair 0 November 15, 2012 Posted November 15, 2012 · Report post Хотя с другой стороны, я сам когда-то учился программировать на стековой машине советского калькулятора, с сомнительным как видим результатом :rolleyes: И я также познавал азы протоассемблера, имея микро опыт в радиолюбительстве это и приводит некоторых людей к микроконтроллеру. Выходит Форт -- некоторое возвращение к истокам от современного Си ? Quote Share this post Link to post Share on other sites More sharing options...
Kopa 0 November 15, 2012 Posted November 15, 2012 (edited) · Report post Увы, не сильно лучшего хватает, как уже упоминал, и в библиотеках расширений. Да, может не хватать готовых и доступных существующих прототипов со знанием реализованных "наработок", как впрочем, и при создании "любого" программного изделия.:) Но, в этом случае, программисты сами, зачастую, "запиливают" себе небходимый код и решения, по ходу. Это не только извращения программистов, это отчасти свойство языка, ну провоцирует он к "мозголомству". И еще, когда глубоко погрузился в написание на форте, это уже не кажется ужасом, все понятно и прозрачно. До тех пор пока погрузился :rolleyes: Проблемы с хакингом это во многом следствие неочевидности и сложности для восприятия базового синтаксиса и сложных стековых манипуляций (общепризнанная слабость языка). И тоже самое будет с пониманием кода другим программистом. Можно согласится, если нет привычки восприятия Форт программ. У меня проблем с восприятием и изменением чужого Форт кода особых не было. (всё в рабочем порядке), при этом те вещи которые не надо изменять, "легко" вычленяются из кода и не рассматриваются детально (Форт код действительно, в этом случае, минимально "защищает" себя от изучения.) Стековые маниуляции не так сложны и многочислены (зачастую типовое шаблонное использование) и "достаточно" наглядны в "коротких" интервалах кода. (но комментарии и правила оформления кода не помешают) Плюс бесконечное расширение новыми понятиями и новой лексикой, на выходе может легко дать текст на "птичьем" языке, малопонятном для других разработчиков (проблема для любого программного языка, но для форта такое расширение в гораздо большей степени "и нужно, и можно"). В практической работе "мощные" механизмы по саморасширению Форт системы, зачастую, используются по минимуму необходимого. На выходе если получился "птичий" язык, то он уже носит "гордое" свойство проблемно-ориентированности. Правильно сказано. В том числе задуматься и про выбор инструментария. :rolleyes: Полностью поддерживаю и стараюсь использовать, по возможности и необходимости, разные дополнительные инструментальные и не только средства.:) P.S. Сам не пробовал, но вроде исходный текст форт восстанавливается по скомпилированному бинарному коду (для некоторых систем). Наверное это можно отнести к Форт системам с "классической" реализацией использования шитого кода и с "небольшими" отклонениями от существующих стандартов. В русском SPF4 код после макрооптимизатора, уже наверное без "специальной" теории семантического анализа не понять,не имея исходного кода программы. Поэтому для командной работы (мы сейчас в основном только так и работаем, что правильно) я Forth поостерегусь применять, кроме случаев действительной нужды в нем. Для командной работы на Форт необходимо желание самих программистов-разработчиков использовать данный инструментарий в своей работе, а также не ограничивать и индивидуальный интерес к опробированию задуманных решений на Форт. И я также познавал азы протоассемблера, имея микро опыт в радиолюбительстве это и приводит некоторых людей к микроконтроллеру. Выходит Форт -- некоторое возвращение к истокам от современного Си ? Может и не возвращение, но как повод "переосмыслить" некоторые вещи полезен и в сравненнии с Си. Тем более для зачастую простых с программной точки зрения микроконтроллерных задач. Задачи микроконтроллерные, изначально рассматриваются и определяются, как "простые", но дальше "аппетит" разработчика может быть ничем не ограничен к добавлению всё новых и новых "фич". Edited November 15, 2012 by Kopa Quote Share this post Link to post Share on other sites More sharing options...
MrYuran 34 November 16, 2012 Posted November 16, 2012 · Report post Вопрос к знатокам форта. Дано: #define ADC10DTC0_ 0x0048 /* ADC10 Data Transfer Control 0 */ Требуется преобразовать в: 0x0048 constant ADC10DTC0_ То есть перетасовать порядок следования слов. Можно это как-нибудь реализовать? Quote Share this post Link to post Share on other sites More sharing options...
Kopa 0 November 16, 2012 Posted November 16, 2012 (edited) · Report post Вопрос к знатокам форта. Дано: #define ADC10DTC0_ 0x0048 /* ADC10 Data Transfer Control 0 */ Требуется преобразовать в: 0x0048 constant ADC10DTC0_ То есть перетасовать порядок следования слов. Можно это как-нибудь реализовать? Самое простое, без обработки входного потока и "извращений" : /* POSTPONE \ ; : #define , CREATE DOES> @ ; 0 #define ABC 123 #define CCC 456 , P.S. Вспомнилось, попутно, обcуждение простых действий по преобразованию постфикса ассемблера в инфикс Число ли? В devel SPF4, вроде есть ещё варианты для #define Edited November 16, 2012 by Kopa Quote Share this post Link to post Share on other sites More sharing options...
MrYuran 34 November 16, 2012 Posted November 16, 2012 · Report post А для чего ноль в начале и запятая в конце? (в смысле, обязательно ли) Первая часть сработала :) : /* POSTPONE (; ok : */ POSTPONE ); ? : // POSTPONE \; ok /* 12345 fjf j j */ ok 10 4 5 */ .s <0> ok Правда, случайно переопределил */, ну да ладно.. А вот вторая - ни в какую. Рестартится, правда warm. 0 ok #define abc 123 ok , ok abc4Ñ30G2553 v0.34 Apr 15 2012|110001110 Warm В последней строке написал abc и нажал Enter Quote Share this post Link to post Share on other sites More sharing options...
Kopa 0 November 16, 2012 Posted November 16, 2012 (edited) · Report post А для чего ноль в начале и запятая в конце? (в смысле, обязательно ли) В этом варианте обязательно, 0 произвольное число чтобы не произошло исчерпания стека при выполнениии #define (т.к. первым действием слово дописывает данные в поле кода "условно предыдущего слова") а запятая, чтобы последняя константа тоже получила своё число. Edited November 16, 2012 by Kopa Quote Share this post Link to post Share on other sites More sharing options...
MrYuran 34 November 16, 2012 Posted November 16, 2012 · Report post Таки извратился :) : #define :; ok #define abc 123; ok abc . 123 ok Осталось придумать, кто будет ; дописывать в конце каждой строки Чегт, ещё одна засада! #define ADC10CTL1_ 0x01B2 /* ADC10 Control 1 */ 0X01B2? Как бы объяснить, что 0x == hex Quote Share this post Link to post Share on other sites More sharing options...
Kopa 0 November 16, 2012 Posted November 16, 2012 (edited) · Report post А вот вторая - ни в какую. Рестартится, правда warm. Может, в этом варианте для 4e4h попробовать использовать последовательность [ LITERAL ] вместо запятой в дефине т.к. устройство данного Форта может отличаться от общей модели с неразделяемой памятью. P.S. Числа можно из входного потока например брать по такой схеме : # NextWord 0 0 2SWAP >NUMBER 2DROP DROP ,; IMMEDIATE Вместо NeхtWord вероятно есть слово WORD и тогда : NextWord ( -- addr len ) WORD COUNT ; и далее с возможными вариациями Edited November 16, 2012 by Kopa Quote Share this post Link to post Share on other sites More sharing options...
MrYuran 34 November 16, 2012 Posted November 16, 2012 · Report post ok, попробую :) Хотя, полюбому матчасть учить. Слова есть такие: words ABC #DEFINE ABC ABC #DEFINE // /* S2? S2 GREEN RED P3 P2 P1 UNUSED MEM MEMTOP MEMBOT CGET CTOGGLE CCLR CSET MS 1MS BIN BELL .VER \ 2CONSTANT WIPE FACTORY COLD WARM BOOT SAVE VALID? APPCRC ITHERE crc (crc ccrc .S DUMP U.R WORDS MARKER FLALIGNED NOOP ENVIRONMENT? DEPTH MOVE WITHIN LEAVE +LOOP LOOP ENDLOOP DO L> >L REPEAT WHILE AGAIN UNTIL BEGIN ELSE THEN IF POSTPONE ['] ; : IMMEDIATE REVEAL HIDE ] [ RECURSE DOES> (DOES>) CREATE <BUILDS HEADER ( [CHAR] CHAR ' ABORT" ?ABORT ABORT QUIT EVALUATE INTERPRET ?NUMBER >NUMBER ?SIGN DIGIT? LITERAL FIND IMMED? NFA>CFA NFA>LFA WORD >COUNTED /STRING SOURCE IC, I, IALLOT IHERE C, , ALLOT HERE HEX DECIMAL . U. SIGN #> #S # >DIGIT <# HOLD UD* UD/MOD IWORD ." S" IS" (S") (IS") ITYPE ICOUNT TYPE ACCEPT UMAX UMIN SPACES SPACE CR COUNT 2OVER 2SWAP 2DUP 2DROP 2! 2@ MIN MAX */ */MOD MOD / /MOD * FM/MOD SM/REM M* DABS ?DNEGATE DNEGATE ABS ?NEGATE S>D APPU0 INFOB COR #INIT UINIT BL TIBSIZE TIB S0 R0 L0 PAD CAPS APP NEWEST IDP LP HP LATEST 'SOURCE DP STATE BASE >IN U0 ,NONE !DEST ,DEST ,BRANCH , EXIT !COLON ,JMP ,CALL ,CF !CF COMPILE, >BODY CHARS CHAR+ CELLS CELL+ CELL ALIGNED ALIGN KEY? KEY EMIT N= S= SCAN SKIP I->D CMOVE> CMOVE FILL UM/MOD UM* UNLOOP J I (+loop) (loop) (do) ?branch branch U> U< > < <> = 0< 0= RSHIFT LSHIFT 2/ 2* >< 1- 1+ NEGATE INVERT XOR OR AND - M+ +! + D->I IC@ I@ IC! I! FLERASE C! C@ ! @ TUCK RP! RP@ SP! SP@ R@ R> >R NIP ROT OVER SWAP DROP ?DUP DUP USER CONSTANT VARIABLE EXIT lit EXECUTE ok Все-таки ABC прописалось, но выполняет что-то загадочное :) Quote Share this post Link to post Share on other sites More sharing options...