|
|
  |
Форт (Forth) и MSP430 для изучения, Программирование и исследование на Форт |
|
|
|
Nov 15 2012, 13:21
|

Частый гость
 
Группа: Участник
Сообщений: 95
Регистрация: 13-12-07
Пользователь №: 33 246

|
Цитата(chu @ Nov 14 2012, 03:30)  Первым желанием было - отредактировать текст, но оставил "как есть",пусть эта "лажа" послужит всем примером - "Форт не прощает ошибок". вот, лажу исправил Код : 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
|
|
|
|
|
Nov 15 2012, 16:00
|
Знающий
   
Группа: Участник
Сообщений: 598
Регистрация: 22-08-05
Пользователь №: 7 861

|
Цитата(MrYuran @ Nov 15 2012, 17:42)  А вроде как наоборот - во многие системы входят слова для "дизфорта", вываливающие исходники по имени слова. Да что далеко ходить - сборки .net, не прошедшие обфускацию, вываливают все свои потроха по первому требованию Сборки Net, Java показывают легко свои "потроха", если не убрана отладочная информация (в другом варианте могут быть проблемы, скорее всего) Статя Криса Касперски Защита игр от взлома (статья в журнале хакер) проясняющая некоторые моменты. (Особо действенный способ выполнять программу в рамках эмулируемого и ивестного "только" разработчику программы процессора) А как оно всё реально эффективно... P.S. Для развития интересна статья к прочтению Криса Касперски Языки, которые мы потеряли (Форт тоже упоминается) И также стоит ознакомитья с исследовательской статьёй приведённой в книге Брукса Мифический Человеко месяц начиная с главы.16 (online) Серебряной пули нет — сущность и акциденция в программной инженерии (русское издание данной книги, вроде 2002года ) Цитата(chu @ Nov 15 2012, 16:21)  Народ! если вас будут убеждать что на форте только так и приходится писать программы, знайте - вас обманывают. Ни один фортер в здравом уме и трезвой памяти не станет творить такое без особых на то причин ... Такое, только, в моём понимании: 1. Если выполнение будет происходить на "чисто" стековом процессоре (например графический процессор Вводная инфа: Gameduino Игровой адаптер для контролеров) 2.Других возможностей нет "по быстрому" добавить необходимую математику на "регистровой" реализации Форт, например в ассемблере. или требуется некоторая компактность занимаемого места кодом. (а надстройки (или "инородные"инструменты) по кодогенерации или кросс-компиляции кода не используются) 3. Проверить "абстрактные" оптимизационные возможности на данном коде на разных Форт системах.. 4. Из интереса (любви) к чистому искусству.(здесь есть некоторые оправданные аналоги Graphicals Haiku in Forth и код, возможно, с минимумом переделок использовать для этого. ...
Сообщение отредактировал Kopa - Nov 15 2012, 17:54
|
|
|
|
|
Nov 15 2012, 16:12
|

Частый гость
 
Группа: Участник
Сообщений: 95
Регистрация: 13-12-07
Пользователь №: 33 246

|
" Хорошая идея - приложить к этому делу Форт. Вот его преимущества: простота реализации Форт-машины, компактность p-кода, довольно высокая производительность, сложность декомпиляции и ни на что непохожесть. Форт стоит особняком от всех языков, совсем не стремясь соответствовать человеческим привычкам, "здравому смыслу" и "логике". Разобраться в его идеологии с нуля будет непросто. Хакеру придется нарыть кучу литературы и запастись терпением. Даже если ему не наскучит, разработчик защиты получит хорошую фору по времени, ну а там... мыщъх что-нибудь придумает!" Защита игр от взлома Автор: ©Крис Касперски ака мыщъх
|
|
|
|
|
Nov 15 2012, 16:15
|
Частый гость
 
Группа: Участник
Сообщений: 108
Регистрация: 8-09-05
Пользователь №: 8 384

|
Цитата(chu @ Nov 15 2012, 17:21)  Народ! если вас будут убеждать что на форте только так и приходится писать программы, знайте - вас обманывают. Ни один фортер в здравом уме и трезвой памяти не станет творить такое без особых на то причин ( например - защита от "реверс-инжениринга"). ( по мнению Криса Касперского программы на форте с трудом поддаются "хакингу") Увы, не сильно лучшего хватает, как уже упоминал, и в библиотеках расширений. Это не только извращения программистов, это отчасти свойство языка, ну провоцирует он к "мозголомству". И еще, когда глубоко погрузился в написание на форте, это уже не кажется ужасом, все понятно и прозрачно. До тех пор пока погрузился Проблемы с хакингом это во многом следствие неочевидности и сложности для восприятия базового синтаксиса и сложных стековых манипуляций (общепризнанная слабость языка). И тоже самое будет с пониманием кода другим программистом. Плюс бесконечное расширение новыми понятиями и новой лексикой, на выходе может легко дать текст на "птичьем" языке, малопонятном для других разработчиков (проблема для любого программного языка, но для форта такое расширение в гораздо большей степени "и нужно, и можно"). Скажут, что должно в идеале решатся правильной методой программирования, но (это уже как битый руководитель) лучше бы было жизнеспособно и без оной. Тем более для зачастую простых с программной точки зрения микроконтроллерных задач. Поэтому для командной работы (мы сейчас в основном только так и работаем, что правильно) я Forth поостерегусь применять, кроме случаев действительной нужды в нем. Цитата Если случается такой мозголомный ужас - имеет смысл задуматься - " А верно ли я подошел к решению задачи?" Правильно сказано. В том числе задуматься и про выбор инструментария. P.S. Сам не пробовал, но вроде исходный текст форт восстанавливается по скомпилированному бинарному коду (для некоторых систем). Вот где разгул для хакинга. Не так давно паролил часть слов интерпретатора, дающих доступ к памяти и "потрохам", когда пошли активные поставки изделий в Китай. Больше для очистки совести. Это к недостаткам Forth никак не не отношу.
|
|
|
|
|
Nov 15 2012, 17:49
|
Знающий
   
Группа: Участник
Сообщений: 598
Регистрация: 22-08-05
Пользователь №: 7 861

|
Цитата(SBE @ Nov 15 2012, 20:15)  Увы, не сильно лучшего хватает, как уже упоминал, и в библиотеках расширений. Да, может не хватать готовых и доступных существующих прототипов со знанием реализованных "наработок", как впрочем, и при создании "любого" программного изделия.  Но, в этом случае, программисты сами, зачастую, "запиливают" себе небходимый код и решения, по ходу. Цитата(SBE @ Nov 15 2012, 20:15)  Это не только извращения программистов, это отчасти свойство языка, ну провоцирует он к "мозголомству". И еще, когда глубоко погрузился в написание на форте, это уже не кажется ужасом, все понятно и прозрачно. До тех пор пока погрузился Проблемы с хакингом это во многом следствие неочевидности и сложности для восприятия базового синтаксиса и сложных стековых манипуляций (общепризнанная слабость языка). И тоже самое будет с пониманием кода другим программистом. Можно согласится, если нет привычки восприятия Форт программ. У меня проблем с восприятием и изменением чужого Форт кода особых не было. (всё в рабочем порядке), при этом те вещи которые не надо изменять, "легко" вычленяются из кода и не рассматриваются детально (Форт код действительно, в этом случае, минимально "защищает" себя от изучения.) Стековые маниуляции не так сложны и многочислены (зачастую типовое шаблонное использование) и "достаточно" наглядны в "коротких" интервалах кода. (но комментарии и правила оформления кода не помешают) Цитата(SBE @ Nov 15 2012, 20:15)  Плюс бесконечное расширение новыми понятиями и новой лексикой, на выходе может легко дать текст на "птичьем" языке, малопонятном для других разработчиков (проблема для любого программного языка, но для форта такое расширение в гораздо большей степени "и нужно, и можно"). В практической работе "мощные" механизмы по саморасширению Форт системы, зачастую, используются по минимуму необходимого. На выходе если получился "птичий" язык, то он уже носит "гордое" свойство проблемно-ориентированности. Цитата(SBE @ Nov 15 2012, 20:15)  Правильно сказано. В том числе задуматься и про выбор инструментария.  Полностью поддерживаю и стараюсь использовать, по возможности и необходимости, разные дополнительные инструментальные и не только средства.  Цитата(SBE @ Nov 15 2012, 20:15)  P.S. Сам не пробовал, но вроде исходный текст форт восстанавливается по скомпилированному бинарному коду (для некоторых систем). Наверное это можно отнести к Форт системам с "классической" реализацией использования шитого кода и с "небольшими" отклонениями от существующих стандартов. В русском SPF4 код после макрооптимизатора, уже наверное без "специальной" теории семантического анализа не понять,не имея исходного кода программы. Цитата(SBE @ Nov 15 2012, 20:15)  Поэтому для командной работы (мы сейчас в основном только так и работаем, что правильно) я Forth поостерегусь применять, кроме случаев действительной нужды в нем. Для командной работы на Форт необходимо желание самих программистов-разработчиков использовать данный инструментарий в своей работе, а также не ограничивать и индивидуальный интерес к опробированию задуманных решений на Форт. Цитата(SyncLair @ Nov 15 2012, 20:23)  И я также познавал азы протоассемблера, имея микро опыт в радиолюбительстве это и приводит некоторых людей к микроконтроллеру. Выходит Форт -- некоторое возвращение к истокам от современного Си ? Может и не возвращение, но как повод "переосмыслить" некоторые вещи полезен и в сравненнии с Си. Цитата(SBE @ Nov 15 2012, 19:15)  Тем более для зачастую простых с программной точки зрения микроконтроллерных задач. Задачи микроконтроллерные, изначально рассматриваются и определяются, как "простые", но дальше "аппетит" разработчика может быть ничем не ограничен к добавлению всё новых и новых "фич".
Сообщение отредактировал Kopa - Nov 15 2012, 17:57
|
|
|
|
|
Nov 16 2012, 12:38
|
Знающий
   
Группа: Участник
Сообщений: 598
Регистрация: 22-08-05
Пользователь №: 7 861

|
Цитата(MrYuran @ Nov 16 2012, 14:51)  Вопрос к знатокам форта.
Дано: #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
Сообщение отредактировал Kopa - Nov 16 2012, 12:48
|
|
|
|
|
Nov 16 2012, 12:53
|

Беспросветный оптимист
     
Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646

|
Цитата(Kopa @ Nov 16 2012, 16:38)  А для чего ноль в начале и запятая в конце? (в смысле, обязательно ли) Первая часть сработала  Код : /* 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
--------------------
Программирование делится на системное и бессистемное. ©Моё :) — а для кого-то БГ — это Bill Gilbert =)
|
|
|
|
|
Nov 16 2012, 13:08
|
Знающий
   
Группа: Участник
Сообщений: 598
Регистрация: 22-08-05
Пользователь №: 7 861

|
Цитата(MrYuran @ Nov 16 2012, 16:53)  А для чего ноль в начале и запятая в конце? (в смысле, обязательно ли) В этом варианте обязательно, 0 произвольное число чтобы не произошло исчерпания стека при выполнениии #define (т.к. первым действием слово дописывает данные в поле кода "условно предыдущего слова") а запятая, чтобы последняя константа тоже получила своё число.
Сообщение отредактировал Kopa - Nov 16 2012, 13:09
|
|
|
|
|
Nov 16 2012, 13:23
|

Беспросветный оптимист
     
Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646

|
Таки извратился  Код : #define :; ok #define abc 123; ok abc . 123 ok Осталось придумать, кто будет ; дописывать в конце каждой строки Чегт, ещё одна засада! Код #define ADC10CTL1_ 0x01B2 /* ADC10 Control 1 */ 0X01B2? Как бы объяснить, что 0x == hex
--------------------
Программирование делится на системное и бессистемное. ©Моё :) — а для кого-то БГ — это Bill Gilbert =)
|
|
|
|
|
Nov 16 2012, 13:30
|
Знающий
   
Группа: Участник
Сообщений: 598
Регистрация: 22-08-05
Пользователь №: 7 861

|
Цитата(MrYuran @ Nov 16 2012, 16:53)  А вот вторая - ни в какую. Рестартится, правда warm. Может, в этом варианте для 4e4h попробовать использовать последовательность [ LITERAL ] вместо запятой в дефине т.к. устройство данного Форта может отличаться от общей модели с неразделяемой памятью. P.S. Числа можно из входного потока например брать по такой схеме Код : # NextWord 0 0 2SWAP >NUMBER 2DROP DROP ,; IMMEDIATE Вместо NeхtWord вероятно есть слово WORD и тогда : NextWord ( -- addr len ) WORD COUNT ; и далее с возможными вариациями
Сообщение отредактировал Kopa - Nov 16 2012, 14:03
|
|
|
|
|
Nov 16 2012, 13:37
|

Беспросветный оптимист
     
Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646

|
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 прописалось, но выполняет что-то загадочное
--------------------
Программирование делится на системное и бессистемное. ©Моё :) — а для кого-то БГ — это Bill Gilbert =)
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|