LINUX.ORG.RU

Вышла версия 0.92 языка программирования Factor

 , ,


0

0

16 февраля 2010 г. после почти двухлетнего перерыва вышла версия 0.92 языка программирования Factor. Сам язык представляет собой развитие языка Forth, в который добавлены объектно-ориентированные возможности с полиморфизмом, автоматическая сборка мусора и JIT компиляция. Также на язык оказали влияние Lisp и Smalltalk.

Factor 0.92 now available

Официальная страница языка Factor

youtube Авторская презентация языка Factor



Проверено: anonymous_incognito ()
Последнее исправление: anonymous_incognito (всего исправлений: 1)

Ответ на: комментарий от dave

> Поэтому тогда форт был очень актуален. Я даже баловался 83-forth на такой бекашке и фиг-фортом на двк.

Да, очень ностальгические вещи описываешь. А Factor позволяет всё это вспомнить, являясь при этом высокоуровневым языком вроде CL. Это ж хорошо.

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

>Боюсь, мне скобок будет не хватать :)

Ну тру-лиспера никто на Factor пересадить не сможет. Концептуально Лисп с его S-выражениями на всё и про всё — неповторим (тут лучше одного Лиспа может быть только другой Лисп).

А фактор это таки new generation forth (при чём надо переводить это надо как «форт для молодого поколения»). Ну и для отдельных старых пионеров, вроде меня, интересная штука.

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

>Почему же тогда для бангалорцев Oracle выкладывает JDeveloper, а не ForthDeveloper?

Потому что популярность языка не имеет никакой корреляции с трудоёмкостью разработки на нём.

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

> А квест — это прикручивание к CommonLisp-у gtk под Windows...

Да ладно! Нечего там прикручивать. Работает и есть не просит.

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

> Потому что популярность языка не имеет никакой корреляции с трудоёмкостью разработки на нём.

Господа вы уже второй день дрочите на этот язык. Осильте уже яву и дот нет.

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

>Господа вы уже второй день дрочите на этот язык.

Ты про Форт? Я на него не дрочу, а просто использую на практике уже без малого 20 лет :)

Осильте уже яву и дот нет.


На Java я тоже уже лет 12 программирю, и что? И на Си программировал более 7 лет. Ещё практикую PHP, JavaScript. Иногда пописываю на Python, C#. Практиковал 3-4 вида ассемблера, Perl, Basic, FORTRAN. Имею представление о LISP, Haskell, O'Caml, Пролог и др. Наверняка ещё что-то упустил.

Что ещё нужно осилить? :)

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

> На Java я тоже уже лет 12 программирю, и что? И на Си программировал более 7 лет. Ещё практикую PHP, JavaScript. Иногда пописываю на Python, C#. Практиковал 3-4 вида ассемблера, Perl, Basic, FORTRAN. Имею представление о LISP, Haskell, O'Caml, Пролог и др. Наверняка ещё что-то упустил.

Что ещё нужно осилить? :)

Боже мой вы такой умный. Аж страшно. Скажите а камасутру вы читали?

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

> Что ещё нужно осилить? :)

Осознать красноглазие и осилить лечение. Пока ты язычки всякие дрючишь, жизнь проходит мимо.

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

> Осильте яву, c++ и старый добрый C. Этого хватит на все случаи жизни.

Если забить на производительность своего труда - да хватит. Почти на все случаи жизни. При чём «плюсы» из этого списка можно даже выкинуть — можно обойтись «старым добрым» и Java.

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

Как в Форте бороться с ситуациями, когда на стек кладётся разное количество данных в разных ветках ветвления? Как такие ошибки обнаруживать?

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

> Как в Форте бороться с ситуациями, когда на стек кладётся разное количество данных в разных ветках ветвления? Как такие ошибки обнаруживать?

Очень просто. Надо взять и перейти на windows 7, там таких ошибок нет

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

> Если забить на производительность своего труда - да хватит.

Хватит про производительность заливать. Кодирование это самая незначительная часть работы. Важнее чтение, отладка, рефакторинг, проектирование. Не в строчках кода в минуту производительность измеряется, и не в функциональных единицах тоже.

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

>Кодирование это самая незначительная часть работы. Важнее чтение, отладка, рефакторинг, проектирование.

И итеративная разработка в Лиспе, Факторе и Форте (хотя в последнем, ИМХО, не всё так радужно) очень упрощает тестирование/отладку/рефактоинг. Си с java и рядом не лежали. А простота рефакторинга и динамизм языка (опять же особенно в случае лиспа и фактора) позволяет приступить к работе не имея выверенного проекта (а в real life часто полноценное проектирование является непозволительной роскошью). Лисп (а за ним и Фактор) хороши там, где вообще невозможно в разумные сроки чёько формализовать задачу (вам, если что, Archimag расскажет, как он для мерчендайзинга программу писал).

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

> Си с java и рядом не лежали.

Ты приличную Java-IDE видел? Например, IntelliJ IDEA. Лиспы как раз рядом не лежали.

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

>Как в Форте бороться с ситуациями, когда на стек кладётся разное количество данных в разных ветках ветвления? Как такие ошибки обнаруживать?

Ну на http://fforum.winglion.ru/ не так давно обсуждали статические анализаторы форт-кода (хотя у тру-фортеров это дело всё же не в почёте), и тот же Фактор такие ошибки ловит.

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

> Ты приличную Java-IDE видел? Например, IntelliJ IDEA. Лиспы как раз рядом не лежали.

Сложная навороченная система, костыль, призванный заменить гибкость языка и естественный пошаговый процесс разработки.

Из всего, что я видел под разные языки, по мне, listener в Фактор — самая удобная среда.

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

>Пока ты язычки всякие дрючишь, жизнь проходит мимо.

Собственно, именно из-за того, что я освоил такую массу языков в своё время, я сейчас жизнью и наслаждаюсь :D

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

>Как в Форте бороться с ситуациями, когда на стек кладётся разное количество данных в разных ветках ветвления? Как такие ошибки обнаруживать?

Это не ошибка, а нормальное поведение огромной массы Форт-слов, например, возвращающих код ошибки.

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

Напомню, что Форт - это не язык, а _мета_язык. Хочется более жёсткого контроля - никто не мешает ввести его.

...

Когда у меня, наконец, снова всплывёт потребность и до JBForth2 руки дойдут, там этот механизм будет «из коробки». Все методы классов там будут полноценными Java-методами со всеми вытекающими ограничениями.

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

> Это не ошибка, а нормальное поведение огромной массы Форт-слов, например, возвращающих код ошибки.

Понятно, что если, скажем, на вершине будет какой-то тег (код ошибки) и, в зависимости от него, разное количество данных, то понятно, что это не ошибка. А как быть именно с ошибками? Скажем, по недосмотру. Что-то вроде: IF 2 1 ELSE 3 2 1 THEN. Вылезет-то такое только в рантайме. Насколько легко их обнаруживать?

Контроль? Как его тут добавить?

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

> На Java я тоже уже лет 12 программирю, и что? И на Си программировал более 7 лет. Ещё практикую PHP, JavaScript. Иногда пописываю на Python, C#. Практиковал 3-4 вида ассемблера, Perl, Basic, FORTRAN. Имею представление о LISP, Haskell, O'Caml, Пролог и др. Наверняка ещё что-то упустил.

Что ещё нужно осилить? :)

Повзрослеть и начать делать деньги.

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

>Что-то вроде: IF 2 1 ELSE 3 2 1 THEN

Для Форта это, как раз, норма. Именно так и пишутся слова с кодами ошибок :) ... if file-handle 0 else file-error then ;

Контроль? Как его тут добавить?


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

Например, добавить на этапе компиляции стек типов и при вызове во время оной любого слова выполнять проверку соответствия. Более развитой вариант слова, типа ?PAIR. В классическом Форте оно служит только для контроля парности управляющих слов (условия, циклы) но оно может служить и для контроля типов.

Задаются типы и число входных аргументов, тем более, что правило хорошего тона на Форте - всегда их описывать. Мы же можем это описание сделать жёстким. Скажем из классического
: fact ( n — n! ) dup if dup 1- recurse * else drop 1 then ;

делаем:

: fact (( n : int — n! ))

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

Этим значением инициируем стек типов.

Дальше, каждое используемое слово уже ранее прототипировано и мы можем проверять тип во время компиляции этого слова:
операция \ стек типов до -> стек типов после
dup \ int -> int int
if \ int int -> int; запоминаем состояние стека типов.
dup \ int -> int int
1- \ int int -> int int
recurse \ int int -> int int
* \ int int -> int
else \ int -> int ; запоминаем состояние стека типов и восстанавливаем его от if
drop \ int -> [пусто]
1 \ [пусто] -> int
then \ int -> int; сверяем состяние стеков нынешнее и после else, должны совпадать
; \ int - сверяем типы результата с возвращаемыми типами.

Любая ошибка в этой последовательности приведёт или к нарушению числа типов в стеке типов или их несоответствию.

Понятно, что это вводит сразу ряд ограничением - слово ?dup в такой системе уже не может существовать, ибо его прототип зависит от значения аргумента. Это или ( n — n n ) или ( 0 — 0 ).

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

> Контроль? Как его тут добавить?

В общем в конце концов, чтобы добавить контроль и хороший оптимизатор при компиляции в фортоподобных языках приходится отказываться от слов с переменным стековым эффектом (либо, возможно, сводить их к неким общим случаям). Именно так и сделано в Факторе (есть исключение для макросов (immediate-слов) но макросы они макросы и есть. А все остальные проблемы — решаемые.

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

>Повзрослеть и начать делать деньги.

Сразу после Вас, уважаемый Безымянный :)

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

> Собственно, именно из-за того, что я освоил такую массу языков в своё время, я сейчас жизнью и наслаждаюсь :D

Сколько в месяц-то выходит? Жалкие две штуки, да? Ради этого ты тратил столько времени и сил? Какое ещё наслаждение? Съемная обшарпанная халупа, очередь в сраный государственный детский сад — развлечение что-ли? И дальше будет только хуже — приготовься встретить старость с протянутой рукой.

Ты неудачник. Дрочил на язычки, когда реальные мужчины делали реальную карьеру. Теперь они все в начальниках сидят, а ты кодерочек-лузер.

Иди, таким же модеркам-неудачникам пожалуйся, поплакайся им в жилетку. О, ты сам в состоянии удалить сообщение. Давай, действуй! Ведь все твои достижения в жизни — пять звезд на ЛОРе. Умора. Смайлик ещё прилепил, хотя тут только рыдать остается.

Тьфу.

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

>Если бы в мейнстриме водились форт-процессоры, то форт был бы востребован.

Но увы: вместо этого пишут ПО для МК и даже смарт-карточек на жабе.

Ява-процессоры это и есть форт-процессоры с другим транслятором байткода.

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

> Хех. Сходи к психологу, а то у тебя явные проблемы. :)

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

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

Ты слишком зол на окружающую тебя действительность. Значит, у тебя «всё плохо». Судя по твоему тону, ты осознано так не считаешь. Получается, проблема у тебя в подсознании. Так что - сходи к психологу. Чтобы не страдала твоя семья.

...

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

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

>Ява-процессоры это и есть форт-процессоры

Не все :)

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

> Realtime убивает не скорость выполенния - его убивают недетерминированные задержки/заморозки GC - stop the world.

дык есть же инкрементальные GC, где не надо stop the world?

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

> Ты слишком зол на окружающую тебя действительность. Значит, у тебя «всё плохо». Судя по твоему тону, ты осознано так не считаешь. Получается, проблема у тебя в подсознании.

Где злость то? Иль сказать человеку как все на самом деле - проявление злобы?

Конечно все плохо. Ибо ничего хорошего у кодерка быть не может по определению. То, что я кодерок-неудачник особо и выяснять нет нужды - на ЛОРе других и не бывает.

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

>Где злость то?

Вот видишь, ты её даже не замечаешь. И это говорит о твоих проблемах только больше.

Иль сказать человеку как все на самом деле - проявление злобы?


«Как на самом деле» в этом контексте - это очень субъективное понятие. И то, что ты этого не замечаешь, тоже говорит не в пользу твоего душевного здоровья.

То, что я кодерок-неудачник


Видишь, как всё плохо у тебя с самооценкой.

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

Ну когда на fforum'е обсуждали, народ сошёлся, что нужно ещё учитывать передачу массива со счётчиком через стек, и имея под рукой переведённую мной статью «Новый подход к генерации Фортом машинного кода» (довольно старую :) ), вроде прикинули, что делать с ?DUP.

По мне проще ?DUP выкинуть, чем с ним возится, да и в прочих случаях овчинка выделки вряд ли стоит.

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

> То, что я кодерок-неудачник особо и выяснять нет нужды - на ЛОРе других и не бывает.

Врешь. Еще есть админчики-неудачники.

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

Если про real-time - то очевидно, что сборка мусора и real-time несовместимы.

реал-тайм не надо, надо надёжность ПО и возможность (инструменты) по его верификации.

Автор поставил задачу добиться независимости от конкретной реализации компилятора C++ и добиться чтобы компиляция работала и под GCC, и под MSVC. Replacing GNU assembler with Factor code

Если он будет компилиться под BSD системы и Minix3, то было бы вообщде прекрасно!

Автор занимается оптимизацией полиморфных вызовов. Factor's implementation of polymorphic inline caching

К сожалению, не знаю что это такое.

Автор - наш соотечественник. Если уж у нас нет своих процессоров, то пусть будут хотя бы свои языки программирования.

Можно разработать свой процессор и прошить в ПЛИС, как это иногда делают. Вопрос в том, чтобы суметь его раскрутить.

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

В равных прочих условиях трудоёмкость разработки на Форте на порядок ниже, чем на классических языках. Для этого он и разрабатывался :)

Прошу доказательства в студию!

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

> Господа вы уже второй день дрочите на этот язык. Осильте уже яву и дот нет.

не надо глупостей, есть pascal

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

> Боже мой вы такой умный. Аж страшно. Скажите а камасутру вы читали?

нет, он её писал )))

yantux
()
Ответ на: комментарий от Gleb-ax

> Большие, громоздкие IDE зачастую являются костылями скрытия недостатков используемых языков.

Это касается С и С++, но не pascal

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

Понятно, что если, скажем, на вершине будет какой-то тег (код ошибки) и, в зависимости от него, разное количество данных, то понятно, что это не ошибка. А как быть именно с ошибками? Скажем, по недосмотру. Что-то вроде: IF 2 1 ELSE 3 2 1 THEN. Вылезет-то такое только в рантайме. Насколько легко их обнаруживать?

Контроль? Как его тут добавить?

Присоединяюсь, а если надо обработать исключение?

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

Почему-то Delphi на просторах xСССР бесконечно более популярный, хотя при этом более простой в использовании, чем Java, дело только в IDE? Если бы для форта в 1997 году была IDE как у ObjectDelphi, то он бы стал языком СССР №1?

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

Нет. Дельфы всё-таки паскаль, на паскале можно «что-нибудь» наваять каждому, он для этого и сделан. А на форте надо всё-таки понимать, чтО пишешь.

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

Нет. Дельфы всё-таки паскаль, на паскале можно «что-нибудь» наваять каждому, он для этого и сделан. А на форте надо всё-таки понимать, чтО пишешь.

А на паскале не надо понимать что пишешь? Так всё само собой получается?

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