Pull to refresh

Comments 48

Сугубо личное мнение, но по-моему, такое можно сказать о любом новом языке/инструменте, который хочет своей аудитории и популярности: «можно отнести ряд таких особенностей, как дружелюбное сообщество, полностью открытый исходный код, приятную IDE и ещё множество приятных мелочей.»…
Согласен с вами. Но вот своей философией и концептуальной целостностью могут похвастаться очень немногие языки. Особенно это заметно, когда в него добавляется новая возможность. Если у языка нет целостности, то он начинает собирать в себе все возможные фичи, превращаясь в итоге в месиво, в котором крайне сложно разобраться.

В Fantom же новые возможности добавляются очень осторожно и от сомнительных расширений предпочитают отказываться. Схожего мнения придерживаются и создатели Clojure, например.
Когда я вижу новость о новом JVM-based языке программирования (via):

image
Предпочитаете писать на Java?
Java, Groovy, Scala (после Scala пока никакой JVM-based язык нет желания и необходимости изучать).
А как насчет Clojure? Как вы считаете, выигрывает у Fantom'а или нет?
Неожиданно своевременный вопрос :-) Я совсем недавно ушёл из «евангелистов» Фантома и переключился на Кложу. У Фантома при всех его плюсах есть один большой недостаток — его никто не использует. А по Clojure буквально на днях прошёл хакатон, в котором я с огромным удовольствием принял участие. Можно почитать подробнее, если интересно.
За то в ней есть pattern matching и не различаются statment и expression.
Кстати, Scala поощряет создание иммутабельных структур. Нужна ли возможность проверить иммутабельность произвольного объекта я не уверен.
Fantom не такой уж и новый, на самом деле. Если заглянуть в changelog, можно узнать, что первый релиз был аж в сентябре 2005.

Картинка конечно смешная, но подпись к ней подкачала. Да и не новость это, а скорее brief overview, так что ваши мотивы запостить «смешную картинку» на читая топика мне не понятны.
Как язык интересен. Но вот область применения у него какая? Какой язык из какой ниши он «должен» вытеснить? Есть ли у него необходимый «отвес»?
Я думаю у языка большой потенциал. Во-первых, это конечно же серверные приложения. Мне доводилось сравнивать Tales с Play и моё первое впечатление — почему первое настолько быстрее второго? Плюс лично мне концепции Tales кажутся более правильными, тот же «html stays html» в шаблонах. С другой стороны, у этих проектов совершенно разный размер комьюнити, а потому и Play намного более стабилен.

Во-вторых, мне кажется, что Fantom мог бы стать хорошей платформой для разработки графических приложений. Например, кросс-платформеных мобильных приложений. Во-первых, он был создан для того, чтобы работать в разных средах. Во-вторых, декларативный синтаксис и прочие возможности делают его очень удобным для описания интерфейсов. Fantom в чём-то похож на JavaFX Script который не пытается встроить в мой браузер дурацкий java plugin, а транслируется с честный JavaScript.
К слову о серверных приложениях
>Running the code in Production mode
>To run code in production mode use the «exec» command instead of «run». Open command prompt. Cd to the application directory and type
>fan tales exec
>That's it. Your code is running production mode now.

И как же прикрутить к другому серверу, например к jetty? Или что придется весь функционал веб-сервера еще самому реализовывать?
Или например как реализовать сервлет на этом Fantom?
Насчёт запуска Tales в jetty я, к сожалению, не знаю. Хотя даже если этого ещё нет, я не думаю, что это слишком сложная задача, учитывая возможности Fantom. Кроме того, на сколько я помню в Play 2 с этим всё ещё проблемы.

Fantom может использовать Java, кроме того у него есть встроенный простой веб-движок, который уже давно запускается в любом контейнере сервлетов.
Сначала были машинные коды. Потом asm. Дальше прикладные языки ( можно считать 1м уровнем абстракции), потом появились вируальные машины (CLR, JVM) и к ним языки 2го уровня асбтракции, сейчас благодаря LLVM — все больше новостей о языках 3го уровня…
Интересно на этому процесс остановится? :)
Ну ведь очевидно, что это не более чем «рекламный слоган». Привязки к VM не будет только если мы используем исключительно native-библиотеки. Которые в свою очередь должны иметь полностью совместимые порты под разные VM. Выглядит утопично.
Fantom не предлагает невозможного, он предлагает прозрачный способ написания переносимого кода. Например, стандартная библиотека работает во всех трёх VM. Модуль actors работает только для Java и .NET, поскольку в JavaScript он и не нужен (по крайней мере пока). А допустим fwt (Fantom Widget Toolkit) предоставляет один и тот же интерфейс для доступа к SWT на java и DOM для веба.

Я несколько лет назад занимался разработкой RichText, который отрисовывался на canvas в HTML5 и SWT используя один и тот же код на Fantom. При этом там, где нам нужно было, мы совершенно прозрачно использовали jQuery в JS или скажем JFace в Java.
В настоящий момент у Fantom ограниченная поддержка дженериков — пользователь не может использовать свои собственные. Однако, три встроенных класса могут List, Map и Func. К примеру, список целых чисел в Fantom объявляется как Int[]. Создатели Fantom считают, что попали в середину: дженерики есть, но без усложнения системы.

Может просто не осилили реализовать, учитывая различия между дженериками Java и CLI (C#)? А там еще и JS заявлен…
Интересно, получается 3 типа (List, Map и Func) по сути имеют статус «встроенных», на подобие массивов в Java. И реализуются они на уровне компилятора/языка, а не на уровне библиотеки?
Не совсем так. Они, как и все остальные нативные типы стандартной библиотеки, реализуются для каждой из платформ. Кроме того, в компиляторе уже есть поддержка дженериков. Но возможная область применения этих дженериков пока ограничивается только этими тремя типами.
Как только увидел статью про Fantom, первая мысль — уж не в xored ли работает автор? :) Пять минут в гугле — и точно. Интересно, хоть кто-то в России еще работает с этим языком?
Наша компания серьёзно рассматривает этой язык и с большой вероятностью мы будем его использовать. Но правда я — основной идеолог и ex-xored :-)
А мне понравилось. Пока применения особо не вижу, но для себя, для развития изучить захотелось, чем и займусь на досуге.
Да, в чем-то вы правы. Особенно в отношение графических интерфейсов, потенциал большой.
Java перевешивает все плюшки своей популярностью и простотой. А где искать разработчиков для этого языка? Только обучать.
Одно из главных достоинств Fantom — это его простота и схожесть с Java/C#. У меня есть опыт обучения новых людей этому языку и могу вам сказать совершенно точно — гораздо проще найти людей, способных освоить Fantom, чем тех, кто может писать многопоточный код на Java.
А можно подробнее, какие средства есть для упрощения создания многопоточных программ.
Ну кроме иммутабелных полей/объектов и акторов (которые есть и в Java).
На самом деле в Java нет ни того, ни другого. Иммутабельность в Fantom гарантируется компилятором, и это не аналог final в Java, это настоящая иммутабельность. Например, константный список может содержать только константные элементы. В Java вы не можете такого гарантировать. В Fantom константность можно определить на уровне интерфейса и тогда его смогут реализовывать только константные типы, никаких внутренних состояний. Даже замыкания делятся на константные и не константные в зависимости от того, используют ли они изменяемое окружение.

В Fantom нет примитивов синхронизации вообще. Никаких мониторов, локов, synchronize-блоков и так далее. Новичок не сможет вызвать дедлок случайно поставив «synchronized» в неправильном месте. Все статические переменные обязаны быть иммутабельными. Потоков в явном виде тоже нет, они могут создаваться только для акторов. И вот уже на базе всего этого строятся акторы. Они мало бы чем отличались от потоков, если бы могли одновременно менять один и тот же объект. В Fantom такого не может быть, поскольку у них есть только внутреннее thread-local состояние и константные объекты, которыми они могут обмениваться со внешней средой.

Справедливости ради стоит заметить, что в Fantom поддержка многопоточности не такая крутая, как, например, в Clojure. Нет персистентных структур данных и нет STM. Но это скорее из-за того, что пока не было большой потребности.
Хорошим примером является пакет java.io, который содержит больше 60 классов и интерфейсов, в Fantom все необходимое лежит в четырех классах: File, Buf, InStream и OutStream.
Зато в InputStream в Java 9 методов, а в InStream 35. Тут уж приходится решать — использовать из кучи непонятных классов один, который полностью понимаешь или из нескольких классов тот, в котором полно ненужных тебе вещей. Кроме того, специализированные варианты потоков и файлов наверняка есть в глубинах этого Fantom, просто наружу не торчат.
Главный вопрос: как мне использовать уже имеющиеся JVM-based библиотеки? Я очень ленивый и не хочу писать все с нуля!!!
Очередной байт-код. Чтобы потом его перевести в байт-код.
Сразу в глаза бросается первая причина никогда не использовать этот язык — детское название.
Слово, конечно, не детское, но первое впечатление не изменишь
У меня с научной фантастикой.
А просто интерпретатор байткода есть? А IO в стандартной библиотеке как на опкоды отображается?

Я давно хочу «взрослый» язык, виртуальная машина которого способна работать в произвольном event loop. Lua и JavaScript/V8 не предлагать.
Интерпретатор какого байткода? Fantom конечно же умеет интерпретировать свой байткод, он это и делает во время исполнения :-)

Не очень понял ваш второй вопрос, но может быть вам будет достаточно поиграть с Fantom online?
По второму вопросу — нечто, что можно встроить в сервер с FSM-архитектурой. Типа nginx/lighttpd.

Я это как вижу:

1) виртуальная машина поддерживает множество контекстов выполнения без необходимости создания тредов или процессов;
2) вычисления: виртуальная машина выполняет сколько сказали тиков и возвращает управление;
3) I/O — виртуальная машина дергает переданный снаружи коллбэк, которому говорит, что надо сделать, и какой коллбэк дернуть, когда будет сделано, и тоже возвращает управление.
братьями Фрэнками (Brian Frank, Andy Frank).

Brian Frank я прочитал как Brainfuck…
Желаю конечно удачи проекту, но не приведет ли это к тому, что мы опять будем бодаться с кросскомиляцией? И зачем спрашивается вобще нужно было в виртуальные машины тогда съезжать?
Спасибо за пост. Я с fan познакомился недавно, но опечалило одно — IDE для него. Что то умней Клипсы мне нужно.

Был плагин fan4idea, но он старый. Его можно конечно поднять к IDEA 13, но ограничения — только Java + JS, меня это огорчает.
Спасибо, сам использую F4, насколько мне известно это fantom IDE де-факто.
Я это знаю, но я сторонник IntelliJ платформы, или exIntelliJ(долго обьяснять). А F4 — eclipse-based.

Их минус — никто не поддерживает .NET. Это печально. Но поправимо.
Sign up to leave a comment.

Articles