LINUX.ORG.RU

SP-Forth/4 для Linux


0

0

Михаил Максимов выпустил первую версию SP-Forth/4 для Linux. В комментариях к анонсу обсуждаются планы по развитию проекта с конечной целью написать самостоятельную операционную систему на Forth.

>>> Подробности

★★★

Проверено: Demetrio ()
Ответ на: комментарий от anonymous

А кто сейчас мешает? Уверен, у тебя в системе установлен язык dc...

Moridin
()
Ответ на: комментарий от Eldhenn

Если тебе неудобно быстро перестроить сознание под что-то новое и непривычное - то ты уже замшелый, и тебе пора на пенсию (по инвалидности).

Moridin
()
Ответ на: комментарий от Moridin

> перестроить сознание под что-то новое и непривычное

нет, переносить сознание лучше всего под чем-то старым и привычным

alisamelofonumenja
()
Ответ на: комментарий от Moridin

Такой умным?

Заставь кодеров на с++ выучить 1С и ваять непленку в бухгалтерии :)))

Если команда не владеет технологией, те. работает в другой

предметной области, за проект просто не берутся.

Sun-ch
()
Ответ на: комментарий от anonymous

можно. помнится в книжке по форту писалось, как такие трюки делать

mst_72
()
Ответ на: комментарий от Moridin

>Популярность технологии (и количество инженеров, на ней специализирующихся) - вообще ни разу не критерий выбора.

Это не критерий выбора, если вы пишете программу для себя, just for fun так сказать. А вот если вы занимаетесь разработкой коммерческого ПО, то тут уже необходимо считать деньги. Да, можно взять человека и обучить его определенной технологии. Но:
1. Это дорого. То время, пока сотрудник учится, он не приносит прибыли организации.
2. Никто не гарантирует, что после обучения сотрудник не уйдет в другую организацию.
3. Для самого сотрудника овладение экзотическими технологиями не выгодно - они больше никому не нужны и потом будет трудно найти работу.

anonymous
()
Ответ на: комментарий от Moridin

>Кто там о type safe Форте мечтает? Налетай - есть такой язык - Joy... Чисто функциональный типизированный, с GC, а в остальном - Форт...

Да ну, ИМХО, Форт от него сильно отличается.

Например, IMMEDIATE-mode слова + слова-конструкторы слов (CREATE .. DOES>). Еще много чего можно вспомнить.

WFrag ★★★★
()
Ответ на: комментарий от Moridin

>Саныч, придётся тебе раскошелиться. Форт - чистейший метаязык

Вот работающий вариант

#include <iostream>

using namespace std;

template<int n> struct F{enum {v = F<n-1>::v + F<n-2>::v};};

template<> struct F<0>{enum {v = 0};};

template<> struct F<1>{enum {v = 1};};

main(){ cout << F<42>::v << endl; }

Cel 433

g++ -v

3.4.2 [FreeBSD]

time ./fib
267914296
0.014u 0.007s

Ну давай, теперь твой ход, на форте?

Sun-ch
()
Ответ на: комментарий от anonymous

>А нельзя как-нибудь так:( 2 - 3 ) * 6 + 9 EXPR

Можно. Даже был пример того, как на форте работать с обычной записью.

kraw ★★★★
()

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

andrey-x
()
Ответ на: комментарий от Sun-ch

Про лапухов и непрофессионалов речи нет - они вообще не нужны, их не должно быть. Профессионал выучит 1С и вонять не будет.

Moridin
()

Вопрос знатокам Forth! Извините за тупость, но как добавить новый пункт меню загрузчика FreeBSD (хотя бы просто чтоб выводило "Hello World" при выборе)? Может поясните на примере. Что ни делал, не работает и всё. Доки по форту читал, но может не те ;)

Все фортовые дела во фряхе находятся здесь: /usr/src/sys/boot/forth

или

http://www.freebsd.org/cgi/cvsweb.cgi/src/sys/boot/forth/

anonymous
()
Ответ на: комментарий от anonymous

Ты читать умеешь? Сказано ведь - сложность проекта СУЩЕСТВЕННО выше сложности технологии. Так что учить всё равно надо, и много - и тут уж чем лучше технология позволяет снизить сложность проекта, тем меньше расходов. Так что учись считать деньги, это полезно.

Да, и на работу берут не по списку освоенных технологий, а по степени способности к освоению технологий. По крайней мере, в цивилизованных странах.

Moridin
()
Ответ на: комментарий от Sun-ch

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

Учти, printf везде одинаково быстро отработает, так что результаты для Форта, Лиспа и C++ должны совпасть.

Moridin
()
Ответ на: комментарий от WFrag

Всё это есть - только несколько иными средствами реализуется (currying, partial application) - то есть, как в функциональных языках.

Moridin
()
Ответ на: комментарий от Moridin

>Профессионал выучит 1С и вонять не будет.

Генеколог, никогда не будет делать работу зубного врача.

В любом ремесле профи - очень узкие спец-ты

ЗЫ

Какой умный, просто ужас :)

Ты код на форте давай в студию, или коньяк :)

Sun-ch
()
Ответ на: комментарий от anonymous

2anonymous:

>Для embedded приложений он еще может иметь какую-то нишу, хотя C/C++/Java все равно гораздо удобней.

>Одно дело, Фибоначчи, и совсем другое дело - Apache, такой вот каламбур

AFAIK на форте написан, например, Eserv (для оффтопика) - IMHO вполне серьёзная и полезная софтинка...

Led ★★★☆☆
()
Ответ на: комментарий от kraw

>Вообще-то странно, что называют "Forth". Этот язык называется "Fort", хотя происходит от слова "Forth". Просто по неким соображениям (не помню уже по каким) название должно было содержать только 4 буквы.

"И не волгу, а 100 рублей, и не выиграл, а проиграл..." Не четыре, а пять :D И не Forth должен был быть, а Fourth :)

>я не мастак в форте однако в твоем примере так и не разглядел ничего похожего на printf

Оно и видно, что не мастак. В Форте неформатированная печать выполняется точкой. Кроме того - что, printf в Linux 3 секунды может занимать? :D :D :D

>Я правильно понял, что программы на форте надо читать справа налево?

Неправильно. Там используется стековая нотация. На которой работают процессоры. Которой мы пользуемся в быту (не математике). На которой работают те же PostScript или JavaVM. В которую для вычислений переводятся _все_ арифметические выражения...

>Двоечники, вас че в институте программировать не учат?

Двоечники те, кто не умеет читать. Потому что я по этому поводу (предвидя таких, как ты) специально в своём постинге отметился.

А более быструю программу написать можно, во-первых, хвостовой рекурсией, во-вторых (самый большой выигрышь) - итеративно. Кстати, ты не прикидывал, СКОЛЬКО будет это выражение считать препроцессор? :D

>Как впрочем и наделать ошибок в программе на Форте ЗНАЧИТЕЛЬНО проще

У Форта подход к программированию заложен снизу вверх с независимым тестированием каждого структурного элемента. Это ЗНАЧИТЕЛЬНО повышает надёжность разработки. Кроме того, на нём путём некоторой потери производительности элементарно реализуются любые проверки, вплоть до стиля ADA. Форт - это единственный массовый _метаязык_. Ты на нём можешь реализовать всё, что тебе нужно, делая _ориентированный на задачу_ язык.

>есть одна существенная проблема: очень мало программистов, знающих форт и готовых на нём писать

Как и в любом немейнстримном языке, будь то Forth, Haskell или O'Caml :)

>> 2 3 - 6 * 9 + == (2-3)*6+9

> А нельзя как-нибудь так:

"( 2 - 3 ) * 6 + 9" EXPR-EVAL

или

EXPR: ( 2 - 3 ) * 6 + 9

слово EXPR: или EXPR-EVAL пишется в десяток строк за полчаса средней интенсивности работы :)

>Язык симпатичный, в изучении действительно простой, и изучить его полезно, так же как и lisp, - для общего развития.

Хотя я коммерческим программирование на Форте уже 11 лет не занимаюсь (до этого была система управления наземной станцией спутниковой связи), но идеология, изложенная в "Thinking Forth" Лео Броуди мне до сих пор очень здорово помогает даже в программировании на PHP или Perl :) Программы пишутся быстрее надёжнее и поддерживать и проще и доходчивее. Вот только я всё не могу в двух словах суть книги изложить. Наверное, тут лучше Чарльза Мура цитировать: "Программировать нужно так, как будто в редакторе нет функции копирования" :)

>Серъезную программу на нем написать практически невозможно

eServ/eProxy? Море узкозаточенных программ по управлению железками?

>полное отсутствие проверок на количество и типы аргументов в вызовах функций

Добавить не просто легко, но можно и достаточно эффективно это сделать. Но смысл? Такие проверки - это паразитные затраты на мышление классических полуимперативно-полуфункциональных (Си и наследники) программистов.

>и плохая читаемость кода

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

>Одно дело, Фибоначчи, и совсем другое дело - Apache, такой вот каламбур.

Ну, естественно, eServ - не Apache, он попроще будет. Ну так и на Си/Си++ не только Апач написан. Но и tux, lighthttpd, Comanche и т.п. :)

>так что в нём и покруче compile time вычисления делать можно.

Да, собственно, с точки зрения таких вычислений compile time от run time вообще не отличаются :D

>267914296

А должно быть 433494437 :) Впрочем, ладно, понимаю, что от нуля считаешь.

>Ну давай, теперь твой ход, на форте? Всё то же самое, только: : MAIN [ 42 FIB ] LITERAL . BYE ;

И всё. Компиляция под Linux в ELF пока не пашет, а под виндой - время измерению не поддаётся, там команды time нет :) по timer: в FAR'е: 00.047s. Это, собственно, чисто системные расходы. В цикл надо загонять :D И будет это измерение уже не скорости вызовов языка и математики, а измерение скорости печати :)

KRoN73 ★★★★★
()
Ответ на: комментарий от anonymous

>Вопрос знатокам Forth!

Вопрос знатокам Си - как в Апаче добиться нормальной работы mpm_perchild? А то постоянно ругается, что процессов с нужным PID не находит. Исходники лежат на www.apache.org :)

KRoN73 ★★★★★
()
Ответ на: комментарий от Sun-ch

2Sun-ch:

>В любом ремесле профи - очень узкие спец-ты

Это если меряешь по себе и американскими мерками. "Узкие профи" - это не профи, а ремесленники, кодеры, а не программеры, работники конвейера, а не инженеры...

Led ★★★☆☆
()
Ответ на: комментарий от Moridin

>Учти, printf везде одинаково быстро отработает, так что результаты для Форта, Лиспа и C++ должны совпасть.

Кстати, забавы ради.

fibz = 1 : 1 : [ x+y | (x,y) <- zip fibz (tail fibz)] main = print (fibz !! 42)

Хаскелл тут выдаст 42-е число за время, гораздо меньшее, чем работает print :)

KRoN73 ★★★★★
()
Ответ на: комментарий от Moridin

>Сказано ведь - сложность проекта СУЩЕСТВЕННО выше сложности технологии. Так что учить всё равно надо, и много - и тут уж чем лучше технология позволяет снизить сложность проекта, тем меньше расходов.

Скажите пожалуйста, а сколько лет вы собрались обучать человека прежде чем он начнёт работать? На то, чтобы в совершенстве освоить какой-нибудь ЯП нужны годы. Да, знание "в совершенстве" нам не нужно, но ведь и безграмотного программиста к проекту лучше не подпускать.

> Да, и на работу берут не по списку освоенных технологий, а по степени способности к освоению технологий. По крайней мере, в цивилизованных странах.

Уж не знаю как у вас, а у нас в России из двух кандидатов, один из которых знаком (пусть даже частично) с некоторой технологией, а второй нет, выберут того, который знаком.

anonymous
()
Ответ на: комментарий от KRoN73

Вот, ещё :)

Boeing 777 avionics systems

Designed and coded embedded Forth kernels to run on Boeing 777 avionics systems. The Forth kernels are used for verification of engineering design, verification of manufacturing, and debugging of failed hardware units. The kernel was written in assembly language for the 68030, 68332, and 80960 microprocessors. I taught introductory Forth programming classes to the hardware design engineers, and assisted with problems in their Forth code. Development was done on a VAX computer using CMS (Code Management System) to track source code development. Debug and integration of the kernel was done using In-Circuit-Emulators.

KRoN73 ★★★★★
()
Ответ на: комментарий от Sun-ch

Профессионал и узкий специалист - понятия несовместимые. Код будет - когда ты научишься время выполнения считать.

Moridin
()
Ответ на: комментарий от KRoN73

А если $(fibz !! 42) в последних ghc (где есть template haskell) - то вообще шик.

Moridin
()
Ответ на: комментарий от anonymous

Годы нужны на освоение математики. После чего любая технология в совершенстве изучается за несколько дней.

Выберут же того, у кого могзи лучше работают, а не обезьянку-ремесленника.

Moridin
()
Ответ на: комментарий от Moridin

>Выберут же того, у кого могзи лучше работают, а не обезьянку-ремесленника.

Смотря кто будет выбирать.

WFrag ★★★★
()
Ответ на: комментарий от KRoN73

>>Вопрос знатокам Forth!

>Вопрос знатокам Си

К чему это ёрничество? :( Мне действительно было нужно, а тут вместо помощи предложение править Апач :( В общем, спасибо на добром слове..

anonymous
()
Ответ на: комментарий от WFrag

2WFrag:

>>Выберут же того, у кого могзи лучше работают, а не обезьянку-ремесленника.

>Смотря кто будет выбирать.

Ясный перец, что обезьяна выберет обезьяну:)

Led ★★★☆☆
()
Ответ на: комментарий от Led

> Ясный перец, что обезьяна выберет обезьяну:)

-- В подчинённом, главное не ум, я чтоб "не подсаживал" (с)

anonymous
()
Ответ на: комментарий от Moridin

Ты наверное хорошо знаешь математику :)

Дык вот, я участвовал в проекте, где программировали сигн. процессоры

(DSP). там был паренек (ну очень узкий специалист), который

знал, сколько наносекунд проходит после перепада фронта сигнала и

выполнения первой команды в isr, который посмотрев на кусок ассем.

кода

мог сказать сколько тактов надо на его исполнение и тд.

Правда он не знал что такое FFT и вайвлет анализ.

Многие знали это, но как программисты - тихо курили в стороне.

Я чё то сильно сомневаюсь, что ты через несколько дней работал бы

лучше его, особенно учесть, что в фирменных даташитах некоторой инфы

просто не было и он ее доставал с помощью осциллографа.

Sun-ch
()
Ответ на: комментарий от anonymous

>К чему это ёрничество? :( Мне действительно было нужно, а тут вместо помощи предложение править Апач :( В общем, спасибо на добром слове..

Это не ёрничество. Мне, действительно, нужен mpm_perchild...

А разбираться в чужих исходниках под чужую ОС мне не менее лень, чем тебе - в Апаче :)

KRoN73 ★★★★★
()
Ответ на: комментарий от KRoN73

Про Пруткова, ясен пень. Про Форт, правда, народ тоже явно не догнал.

Moridin
()
Ответ на: комментарий от Sun-ch

2Sun-ch:

>там был паренек (ну очень узкий специалист), который знал, сколько наносекунд проходит после перепада фронта сигнала и выполнения первой команды в isr, который посмотрев на кусок ассем. кода мог сказать сколько тактов надо на его исполнение и тд.

Я тоже когда-то знал наизусть количество байт ассемблерных комманд (8086/8088 и 80286) и их длительность в тактах (когда программил на асме), но если б я только на этом зацикливался, то наверное сошёл бы с ума или стал бы "пареньком":)

Led ★★★☆☆
()
Ответ на: комментарий от Sun-ch

2Sun-ch:

>Ну за его зарплату можно и "пареньком" работать :)

Ой-ли?:) К тому же быть по-жизни таким "пареньком" и работать "пареньком" - несколько разные вещи:)

Led ★★★☆☆
()
Ответ на: комментарий от Sun-ch

Дикари! Если человек не знает Форт и обратной польской матзаписи -- то этот человек всего лишь манкибейсик

anonymous
()
Ответ на: комментарий от KRoN73

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

ugoday ★★★★★
()
Ответ на: комментарий от ugoday

>afaik, выпрямление алгоритма даст гораздо больший прирост производительности, чем использование лучшего компилятора

Безусловно. См. тот же пример выше на Хаскелле. Когда на трансляторе, на два порядка более медленном, при примерно той же алгоритмической сложности, но ином алгоритме, получается выигрышь по скорости на много порядков :) У меня все 10452 знака 10000-го числа Фибоначи считаются за 0.8 секунды :)

"Не экономьте одну команду. Экономьте сразу 50". Это лозунг времён программируемых калькуляторов :)

KRoN73 ★★★★★
()
Ответ на: комментарий от Sun-ch

2Sun-ch:

>если чел. виртуозно играет на скрипке, зачем ему уметь играть на барабане?

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

Главное - знать принципы и теорию, тогда практика - дело времени (небольшого) и желания

Led ★★★☆☆
()
Ответ на: комментарий от KRoN73

2KRoN73:
Поздравляю, в Вашу замечательную программу на Хаскелле или Форте
закралась ошибка. 10000-ое число Фибоначчи имеет всего 2092 знака
(это можно понять, поскольку в замкнутой форме F(n) ~ A^n, где A - заметно меньше 10).

Вот полная программа на Питон, которая считает F(10000) точно
меньше чем за 1сек, а F(100000), емеющее 20901 знак, за чуть более секунды на моей машине.

def fib(n):
a,b,c,d=1L,0L,0L,1L
a0,b0,c0,d0=1L,1L,1L,0L
while n>1:
if n&1:
a,b,c,d=a*a0+b*c0,a*b0+b*d0,c*a0+d*c0,c*b0+d*d0
a0,b0,c0,d0=a0*a0+b0*c0,(a0+d0)*b0,(a0+d0)*c0,b0*c0+d0*d0
n >>= 1
return a*a0+b*c0

print fib(10000)



anonymous
()
Ответ на: комментарий от KRoN73

2KRoN73:
Поздравляю, в Вашу замечательную программу на Хаскелле или Форте
закралась ошибка. 10000-ое число Фибоначчи имеет всего 2092 знака
(это можно понять, поскольку в замкнутой форме F(n) ~ A^n, где A - заметно меньше 10).

Вот полная программа на Питон, которая считает F(10000) точно
меньше чем за 1сек, а F(100000), емеющее 20901 знак, за чуть более секунды на моей машине.

def fib(n):
    a,b,c,d=1L,0L,0L,1L
    a0,b0,c0,d0=1L,1L,1L,0L
    while n>1:
        if n&1:
            a,b,c,d=a*a0+b*c0,a*b0+b*d0,c*a0+d*c0,c*b0+d*d0
        a0,b0,c0,d0=a0*a0+b0*c0,(a0+d0)*b0,(a0+d0)*c0,b0*c0+d0*d0
        n >>= 1
    return a*a0+b*c0

print fib(10000)



anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.