Lasso — это сервер приложений и интерфейс управления сервером, предназначенный для разработки интернет-приложений. Это также язык программирования высокого уровня общего назначения . Первоначально инструмент для подключения к веб-источникам данных [1] для Filemaker , а затем включенный в FileMaker 4.0 и Claris Homepage от Apple Computer как CDML, [2] [3] с тех пор он превратился в сложный язык, используемый для разработки и обслуживания крупномасштабных интернет-приложений и веб-страниц.
Lasso включает простую систему шаблонов, позволяющую коду управлять генерацией HTML и других типов контента . Lasso — это объектно-ориентированный язык программирования, в котором каждое значение является объектом . Он также поддерживает процедурное программирование посредством несвязанных методов. Язык широко использует черты и множественную диспетчеризацию .
Lasso имеет динамическую систему типов , где объекты могут быть загружены и дополнены во время выполнения, автоматическое управление памятью , всеобъемлющую стандартную библиотеку и три методологии компиляции : динамическую (сравнимую с PHP - Python ), компиляцию just-in-time (сравнимую с Java или .NET Framework ) и предварительную компиляцию (сравнимую с C ). Lasso также поддерживает выражения запросов, [4] позволяя итерировать, фильтровать и манипулировать элементами в массивах и других типах последовательностей с использованием синтаксиса естественного языка, похожего на SQL . [5] Lasso включает полную поддержку символов Unicode в стандартном строковом объекте, что позволяет ему обслуживать и поддерживать многобайтовые символы, такие как японские и шведский, и поддерживает прозрачное преобразование UTF-8 при записи строковых данных в сеть или файловую систему.
Lasso часто используется как язык сценариев , а также используется в широком диапазоне несценарных контекстов. Код Lasso может быть упакован в отдельные исполняемые программы, называемые «LassoApps», в которых структуры папок компилируются в отдельные файлы. [6]
Сервер приложений Lasso Server работает как системная служба и получает запросы от веб-сервера через FastCGI . Затем он передает запрос соответствующему экземпляру Lasso, который формулирует ответ. Поддерживаются несколько отдельных экземпляров, что позволяет одному серверу обрабатывать несколько сайтов, каждый из которых является отдельным процессом. Сервер использует высокопроизводительную систему Green Threading на основе ввода-вывода, разработанную для многоядерных систем.
Lasso можно сравнить с серверными языками сценариев PHP [7] [8] и Python , ColdFusion , Ruby и т. д. [9] [10]
Lasso появился в середине 1990-х годов, когда первые веб-разработчики пытались создавать веб-сайты с поддержкой баз данных с помощью FileMaker Pro от Apple. На платформе Mac было два решения: WEB-FM Эрика Бикфорда и FileMaker CGI (ROFM) Рассела Оуэнса — оба были написаны на AppleScript и требовали использования полей вычислений FileMaker Pro для форматирования. (WEB-FM впоследствии был переписан на C).
Осенью 1995 года независимый разработчик Винс Бонфанти написал новый CGI на основе ROFM, используя C / C++ для повышения производительности и используя понятие HTML -основанных «шаблонов» вместо того, чтобы полагаться на поля расчета. Это оказалось очень популярным в сообществе FileMaker и было доведено до сведения Билла Доррфельда, владельца Blue World Communications Inc., фирмы по разработке печати и веб-сайтов, базирующейся в Иссакуа, штат Вашингтон , который купил исходный код . [11]
В это время Blue World экспериментировала с улучшениями CGI в среде сценариев Frontier, что вдохновило на название «Lasso». Дальнейшая потребность в улучшении привела к созданию CGI на основе C , который позже был выпущен как «Lasso 1.0». На тот момент Lasso работал только с FileMaker Pro 3.x и WebSTAR и работал только на Apple Mac OS 8 и выше. [12]
Использование Lasso значительно возросло из-за обзоров в печатных изданиях [13] [ обсудить ] и хостинга и участия Blue World во многих списках обсуждений по электронной почте, многие из которых конкретно относились к FileMaker Pro. Blue World также часто появлялась и была известна как ведущая компания на конференциях MacWorld . [14]
После выпуска линейки Lasso 1.2 в январе 1997 года Blue World и Bonfantis вступили в частные переговоры с Claris , подразделением программного обеспечения Apple Computer и владельцем FileMaker Pro. Claris в конечном итоге лицензировала исходный код Lasso после версии 1.2 и с помощью Винса и Пола Бонфанти выпустила FileMaker Web Companion как компонент FileMaker Pro 4.0. Язык FileMaker Web Companion, CDML (Claris Dynamic Markup Language), [15] отличался от LDML (Lasso Dynamic Markup Language) Lasso 1.2, но был достаточно близок, чтобы предложить простой переход для разработчиков, желающих работать с FileMaker Pro через сторонние серверы [16] , и предлагал более привлекательные функции. [17]
Включение Lasso-like Web Companion в FileMaker 4.0 также стимулировало рост Lasso в сообществе веб-разработчиков Macintosh . Blue World продолжила разработку Lasso, а Кайл Джессап стал ведущим программистом Lasso. Lasso 2.0 был выпущен в июле 1997 года, представив некоторые фундаментальные изменения в том, как можно было использовать Lasso. [18]
26 февраля 2002 года Blue World выпустила Lasso 5, радикально отошедший от FileMaker-ориентированного языка на сегодняшний день. (Lasso 4 так и не был выпущен; номер версии перескочил с 3 на 5.) Lasso 5 включал, среди многих обновлений, полностью переписанную архитектуру (для OS X, Windows, Linux) и встроенную базу данных MySQL . [19] Хотя Lasso 5 по-прежнему обращался к базе данных FileMaker (но не к серверу FileMaker), FileMaker как источник данных оставался относительно медленным по сравнению с движком SQL и был непозволительно более дорогим. Начиная с версии 2.0, Lasso был полностью многопоточным, позволяя устанавливать множество соединений одновременно, но поддавался задержке FileMaker или задержке в определенных операциях, и не было способа обойти это надежно, кроме как внести серьезные изменения в источник данных. [20]
Lasso 5 также добавила поддержку Apache HTTP Server нативно под OS X, Windows и Linux , присоединившись к Webstar 5, AppleShare IP (который был заменен OS X Server) и iTools (от Tenon [21] ). (Mac OS 9, на которой Lasso использовался много лет, не поддерживался). Это привело к более тесной связи с классической архитектурой сервера LAMP . [ необходима цитата ]
Blue World Communications выпустила серию плагинов для популярных пакетов веб-разработки от Macromedia и Adobe. Lasso Studio 1.5 для Dreamweaver занял второе место в конкурсе Editors' Choice Awards журнала MacWorld в номинации Internet and Development [22] в 2001 году, уступив Adobe Dreamweaver 3. Lasso Studio для Dreamweaver 1.5 [23] также получил положительные отзывы от журнала MacWorld, заработав 4+1 ⁄ 2 мыши. Более поздняя версия Lasso Studio поддерживала как Macromedia Dreamweaver , так и Adobe GoLive, включая Lasso Studio 7 для Dreamweaver и GoLive [24] 26 марта 2004 г.
С выпуском FileMaker Server и FileMaker Server Advanced версии 7 в 2004 году FileMaker обозначил существенное изменение в своей стратегии обслуживания данных на веб-сайтах. Они сделали акцент на возможности подключения XML-XSLT, ODBC и JDBC, но только через более дорогой продукт FileMaker Server Advanced. [25] Blue World начал дистанцировать язык Lasso от FileMaker и Apple. В 2005 году Lasso Pro получил сертификацию MySQL Network [26], что продемонстрировало важность популярной базы данных с открытым исходным кодом для будущего Lasso.
1 августа 2004 года Билл Доррфельд официально продал линейку продуктов Lasso компании OmniPilot Software, Inc. в Форт-Лодердейле, Флорида. Lasso 7.0.3 была последней версией Lasso, выпущенной Blue World. [27]
25 октября 2004 года OmniPilot официально объявила о выпуске Lasso 8, версии, включающей песочницу для нескольких сайтов на одном сервере и подключение ко многим новым источникам данных. [28] Это также включало первую «бесплатную» версию Lasso, ограниченную IP-адресами. [29] OmniPilot последовала за этим выпуском с рядом дополнительных продуктов, включая Lasso Studio 8 для Dreamweaver и GoLive [30] 28 марта 2005 года, Lasso Studio для Eclipse , интеграцию ChartFX и ряд бесплатных решений на основе Lasso. [31]
В 2007 году трое сотрудников OmniPilot, Кайл Джессап (первоначальный разработчик Lasso 1.0), Флетчер Сэндбек (один из первых сотрудников Blue World, известный своими регулярными советами и рекомендациями) и Керри Адамс (сотрудник OmniPilot) создали новую компанию LassoSoft LLC, чтобы выкупить интеллектуальную собственность Lasso у OmniPilot и продолжить разработку. [32] [33] Осознавая необходимость быть конкурентоспособными по сравнению с гораздо более популярными языками, такими как PHP и ASP , были сделаны радикальные изменения в архитектуре, синтаксисе и структуре, которые были выпущены как Lasso 9.0. Технические проблемы, вызванные этими изменениями, в сочетании с ограниченными маркетинговыми ресурсами привели к значительному упадку сообщества, поскольку компания изо всех сил пыталась выпустить документацию и поддержку нового языка. [34] [35]
В декабре 2010 года была образована новая канадская компания LassoSoft Inc., которая купила и вложила значительные средства в язык, маркетинг и документацию Lasso 9.0. Кайл Джессап согласился остаться в качестве ведущего разработчика Lasso и благожелательного диктатора на всю жизнь . Несколько релизов (9.1 и 9.2) выпустили дальнейшие разработки в последние годы. [36]
Вот три способа сказать «Привет, мир!» на странице Lasso.
<?лассо 'Привет, мир!' ?> [ 'Привет, мир!' ]Привет, мир!
Квадратные скобки зарезервированы в Lasso, поэтому HTML-сущности должны использоваться для отображения квадратных скобок на страницах Lasso для других целей, нежели маркировка тегов Lasso. В качестве альтернативы печать квадратных скобок может быть выполнена Lasso или отключена путем включения [no_square_brackets] в верхней части файла.
// Найти все записи в таблице inline ( -database = 'db_name' , -table = 'table_name' , -findall ) => { // Пройти по всем строкам и обработать их rows => { // Вывести каждую строку в текущий веб-запрос content_body += ' <a href="' + column ( 'url' ) + '"> ' + column ( 'title' ) + '</a>' } }
Встроенные строки — это базовый инструмент Lasso для действий с базами данных. Команды базы данных можно вводить, как указано выше, на метаязыке Lasso, независимом от базы данных, в этом случае тот же код поиска работает для MySQL, FileMaker Pro или для любого другого бэкэнда базы данных, к которому может подключиться Lasso.
При необходимости оператор SQL , конечно, может быть встроен в строку при использовании сервера базы данных, поддерживающего SQL:
// Выполнить встроенный оператор SQL ( -database = 'db_name' , -sql = 'SELECT * FROM table_name' ) ...
В приведенном выше примере тире (-) перед командами обозначают необязательные параметры. Они могут быть указаны в любом порядке и сгенерированы динамически; последний из любых дублирующих параметров имеет приоритет. Встроенная команда поддерживает большой диапазон параметров [56], позволяя разработчикам взаимодействовать с базами данных, о которых они могут не иметь глубоких знаний.
Можно создавать пользовательские коннекторы к базам данных, что позволяет использовать абстрактную природу встроенных команд.
Следующий процедурный пример выводит текст песни «99 Bottles of Beer».
// Определим пару полезных методовопределить br => '<br/>' определить бутылки ( n :: целое число ) => #n != 1 ? ' бутылки' | ' бутылка' // Объявляем локальный объект, который будет хранить текст песни в виде строкилокальный ( внешний = '' ) // Используйте синтаксис запроса Lasso для генерации текста песнис n в 99 до 1 по - 1 сделать { #out += #n + bottles ( #n ) + ' пива на стене, ' + br #out += #n + bottles ( #n ) + ' пива; ' + br #n -- #out += 'Сними одну, передай по кругу, ' + br #out += #n + bottles ( #n ) + ' пива на стене. ' + ( br * 2 ) } // Вывод результата#вне
В следующем примере используется ООП-подход для вывода текста песни, когда объект представлен в виде строки:
// Определить тип define bottles_of_beer => type { // Определить внутренние данные data private bottles = 99 // Определить частные методы private br => '<br/>' private s => . bottles != 1 ? 's' | '' // Генерация текста песни, когда объект представлен в виде строки public asstring => { local ( out = '' ) // Используйте синтаксис запроса Lasso для генерации текста песни с n в 99 до 1 по - 1 сделать { . bottles = #n #out += . bottles + ' bottle' + . s + ' пива на стене, ' + . br #out += . bottles + ' bottle' + . s + ' пива; ' + . br . bottles -- #out += 'Возьми одну, передай ее по кругу, ' + . br #out += . bottles + ' bottle' + . s + ' пива на стене. ' + ( . br * 2 ) } // Возврат результата return #out } } бутылки_пива