Pull to refresh

Comments 57

Что-то на сайте ни один пример не заработал.
все три примера рабочие. Проверено в chrome, ff, opera
Они просто ооооочень долго грузятся.
Это точно. Оптимизация еще предстоит
Эх, уже в третий раз за пол года haxe клонируют… Кто следующий?
дико извиняюсь, что такого языка не знал. А на haxe можно desktop приложение написать? И если можно, то как нас это продвинет к идее перевода pascal->js?
Да, haxe поддерживает компиляцию в cpp, который компилируетс в exe. Также есть проект nekonme который эмулирует практически полное flash 9 api для всех платформ, даже для мобильных телефонов(смартфонов). Чтобы особо не пиарить малоизвестную бесплатную платформу кидаю ссылочку haxe.ru
Цель — безболезненное портирование существующего млн строк дельфей, а не создание нового на хаксе.
Ну учитывая платность ext.js не каждый программист сможет себе это позволить в коммерческих целях. Я лишь привел бесплатную альтернативу. Лучше б они qooxdoo за основу взяли.
Выглядит круто. Видно, что работа проделана огромная. Этот инструмент может стать востребованным, ведь сейчас есть тенденция переносить приложения в браузер, а программ, написанных на Delphi, всё еще много.

А элементы позиционируются в окне абсолютно? Или layout-ы тоже поддерживаются? (Честно говоря, не знаю, есть ли в Delphi layout-ы.)
да, все координаты указываются абсолютно, да и в delphi layout'ов нет(разве что в каких-то спец.компонентах)
А как делфовые Anchors делаете?
Я лично этой задачей не занимался, но по разговорам в курилке могу предположить что весились все
UFO just landed and posted this here
В смысле повесились :)
UFO just landed and posted this here
UFO just landed and posted this here
фишка в том, чтобы сохранить desktop, т.е. придется поддерживать 2-а исходных кода
Как насчет лицензирования? на сайте ExtJS указано что построители приложений лицензируются особо и сумма рассчитывается отдельно для каждого случая.
для коммерческого использования. Пока тут коммерции нет
Мне кажется вам стоит уточнить этот момент или у ExtJs или с юристами.
мне кажется это планируется
Любопытно. А как быть со сторонними VCL компонентами например такими монстрами как QuantumGrid от DevExpress?
Видимо нужно договариваться с DevExpress, чтобы они создали компонент и на JS. Они уже много платформ поддерживают. Ну или рискнуть самому :)
А вы подготовили свой сайт у хабраэффекту, ведь мы зайдем к вам!? (с)
если честно, нет. Вся контора начинает на меня недобро смотреть :)
Вы попробуйте код в QIP вставьте. Там такие говорящие смайлы будут! Все в тему.
Сейчас занимаюсь переводом одного крупного проекта на веб морду. И тоже delphi, и тоже ExtJS.

По сути, я пошел путём преобразования одного клиента — в 1 сессию веб-сервера. Сам веб-сервер — обертка вокруг сессий. JS — только отображение, и немножко бизнес-логики. Уже всё почти работает).

И вот что я скажу:
1. Графику перевести можно, не беда, хоть и мороки много. Может даже получится перенести бизнес-логику, но спец. фичи с участием WinAPI — никогда. Например, потоки, select, mutex… Можно сделать аналоги, но работать так же оно не будет, а вносить изменение в транслированный код — чревато последствиями. Вот еще Midas, всякие сетевые датасеты. Печаль.

2. Рефакторинг модальных окон. Из-за модальных окон, в своем проекте я отказался от ExtPasal, запилил собственный веб-сервер и собственную логику потоков, сокетов, прочего. И в итоге модальность оставил. То, что вы сделали на js — «Браво!», жаль на самом Delphi так делать нельзя.

3. Я думаю, что нужно будет скоро заниматься трансляцией в JS внутреннего скриптового языка, но уж явно не самого Delphi кода, это просто невозможно в полной мере.

4. ExtJS – что-то, что любит плодить DOM элементы. Мы в своем проекте очень аккуратно относимся к их количеству. А вы не можете, потому что не контролируете код javascript. Более того, код js нуждается в дополнительных обработках (чтоб окно за пределы родительского окна нельзя было выпилить; чтоб CSS классы не перемешивались от чрезмерного указывания кто кому предок), и код js в большинстве случаев не нуждается в приколах delphi. По сути, я уверен, что после генерации получается куча мусора и куча недоработок, из-за чего оно работает медленно и не правильно.

Я понимаю сложность работы, снимаю шляпу перед разработчиками, и при этом не рискну подпустить эту штуку к своему проекту.
Мы четко разделяем компоненты и приложения, которые из этих компонентов состоят. Для библиотек мы делаем js-обертки ручками, поэтому работаем с Ext не напрямую (так как, согласен, Sencha — любители dom). Сами приложения у нас «тупенькие». Никакой многопоточности, сокетов, win api и др. изысков. Единственная заморока — модальные диалоги. Над ними долго трудились.

С датасетами все отлично. Просто у нас собственный сервер приложений, который обеспечивает доступ к данным. С ClientDataSet тоже хорошо получилось. Сделали на js — скорость неплохая (сами удивились).

>жаль на самом Delphi так делать нельзя.
Над этим не думал. Поразмышляю на досуге

>Delphi кода, это просто невозможно в полной мере.
Да все прекрасно работает, не сомневайтесь. И dfm мы разбираем и var|оut аргументы. И события и все все…
Вы, наверное, путаете синтаксис языка и runtime library? Синтаксис поддерживается в полной мере.

>и код js в большинстве случаев не нуждается в приколах delphi.
Вы абсолютно точно это подметили, но на уровне прикладных программ приколов delphi и не нужно. По крайней мере в наших задачах.

Вы, наверное, путаете синтаксис языка и runtime library

Ничего я не путаю. Синтаксис — молодцы, а вот когда будут толстые и сложные приложения — будут толстые и сложные проблемы.
Можно поинтересоваться? А вот delphi вроде как отходит на второй план и потихоньку загибается. стоит ли для него такие проекты писать?
Безусловно интересно как тут происходит работа с базой данных и прочими вещами как это разносится на клиентскую и серверную части.
И конечно хочется тестов производиельности ))
А нет ли смысла перейти с delphi на java а там и GWT есть, который уже себя зарекомендовал?
Промышленные программные продукты не создаются, а «прорастают». Они растут годами, под влиянием множества программистов, разной квалификации. Ну и в какой-то момент может возникнуть идея — а что если все это выбросить и начать заново. Например, на каком-нибудь современном продвинутом языке. Сколько таких попыток видел — все неудачные. Почему? Да фиг знает. Медицинский факт. Наверное, потому что бизнес-логика никуда при этом не девается, а заменятся но новый вариант с новыми багами, после чего дерево нужно опять начинать растить.

>интересно как тут происходит работа с базой данных
сервер приложений принимает soap-запросы в которых передается sql или ХП с параметрами. Обратно возвращается ответ сериализованный в json. Такой вот сетевой аналог JDBC.

>И конечно хочется тестов производиельности
Пока плохо

>А нет ли смысла перейти с delphi на java а там и GWT есть,
может когда-нибудь?

Я это прекрасно знаю, что готовый продукт с обширным фнкционалом вот так за месяцок с нуля не напишешь. Но все же есть точка невозврата, вопрос тольок в том когда она настанет.
Ничего не имею против вашей идее, но по мне это слишком (уж простите), но если работает — имеет право на жизнь
А Вы случайно не пробовали использовать Node JS, а не просто JavaScript на стороне клиента?
мы же клиентскую программу делаем? А если я правильно понимаю node js это server side
Маленький баг — tooltip Свернуть, Развернуть, Закрыть отображаются за окнами.
Chrome 16.0.889
> А можно транслировать и иметь решение на обеих платформах.
Если вопрос стоял именно о поддержке других платформ, а не запуска в браузере, то не проще ли было заюзать Lazarus?
Вариант рассматривался. Но решение в браузере имеет еще кучу всяких плюсов, не правда ли?
Да, но в реализации сложнее. Впрочем вам виднее.
Кстати, а проекты lazarus я так понял не поддерживаются? Я попробовал загрузить свою поделку, как раз сейчас курсач на нем пишу, не получилось.
Lazarus просто не пробовали. Вышлите проект, если это возможно. Я обещаю попробовать
Конкретно мой проект пробовать нет смысла, так как это GUI к sipcalc, которого на вашей машине может не оказатся. Впрочем пустой проект тоже не транслировался. db.tt/1q8Jr47h
Мне сказали, что модуль FileUtils, по понятным причинам, не включен в rtl. Ну и на серваке настроена компиляция dpr. Завтра, сказали, настроят компиляцию lpr.
Совет: раз уж вы парсите Delphi — генерите байт-код, а на JavaScript напишите VM для этого байт-кода.
а как же работа в браузере?
JS и выполняет этот байткод в браузере.
На этом принципе куча браузерных эмуляторов построено вроде NES.
shambho предлагает вместо трансляции производить эмуляцию.
Это интересно. Сразу идею shambho не понял. Спасибо
UFO just landed and posted this here
UFO just landed and posted this here
Только по-видимому команды в VM должны быть достаточно высокоуровневыми, объектными, как в Java или .NET.
В качестве учебника порекомендовал бы Свердлова — «Языки программирования и методы трансляции», в книге приведены исходники компилятора Oberon-0 (подмножества Oberon — наследника Pascal-а от того же Вирта) на нескольких языках (Java, Delphi, C++, C#). Реализуется стековая VM похожая на Forth.
Спасибо за совет. Уже имел опыт создания VM. В свое время выбрал структуру байт-кода как в java. Она мне больше всего понравилась.
Спорная работа с точки зрения качества и целесообразности, но явно сильная и интересная. А плюсиков маловато, мало кто осилил. Кончилось время технарей, набегает школота, дизайнеры, управленцы, бездари, выродки, глупцы… обидно даже как-то.
Так везде. Когда инженеры сказали всё, что могли — приходит время дизайнеров.
Весьма оригинальная вещь, но также весьма бесполезная. Она позволяет транслировать в JS/HTMl только часть кода программы, связанной с обработкой событий оконного интерфейса. Если у вас в проекте эта логика щедро переплетена с работой с файлами, вызовами винапи, собственными компонентами, то вам приличную часть кода придется как-то переписывать.
Все дело в правильном конструировании программ. Вот у нас в бизнес-приложениях ни одного обращения к win api не встретишь. Это слишком низкий уровень абстрагирования для прикладных программ. Поэтому они переводятся вообще без проблем. Все, что Вы имеете ввиду располагается в компонентах, которые переписываются ручками, с сохранением интерфейса.

Ну конечно, если у Вас
>логика щедро переплетена
то будет сложно. Хотелось бы отметить, что и в обычной жизни Вам не просто.

Приведу пример. Казалось бы вот есть системный реестр. С ним то что делать? А сделали так. Есть js объект в котором хранятся только те значения ключей системного реестра, которые или запрашивались или устанавливались. Этот объект в определенные моменты времени (асинхронно) сериализует ключи и отправляет их на сервер. Там все хранится в БД. С точки зрения прикладной программы ничего не меняется. Она обращается к знакомым методам. Тем временем реализация подменена. Вот что инкапсуляция животворящая делает :)
Некоторые из вас такие приколисты. Отправляют нам программы которые пытаются с диском поработать или системным реестром с враждебными намерениями. Еще раз для тех кто на бронепоезде — «компилируем на Сервере, исполняем на Клиенте»
Sign up to leave a comment.

Articles