Ide — IDE для языка программирования Ruby


Содержание

Глава 21. Инструменты разработки для Ruby

Человек — это животное, создающее инструменты.

Среда разработки включает не только интерпретатор. У каждого хорошего разработчика под рукой всегда есть целый набор средств, облегчающих жизнь. Некоторые из них зависят от языка, другие — нет.

Самый важный инструмент — редактор. Основная работа программиста — манипулирование текстом, поэтому выбор редактора (и ваше умение им пользоваться) оказывает огромное влияние на производительность труда. Немаловажно также наличие в нем поддержки конкретного языка или средств настройки. Мы дадим очень краткий обзор распространенных редакторов.

Другие инструменты помогают в составлении документации, установке библиотек, отладке и т.д. Мы уже познакомились с библиотекой отладки (не являющейся автономным приложением) в главе 16, а в главе 17 рассказали о системе RDoc. Поэтому здесь мы их касаться не будем. Также в главе 17 шла речь о системе RubyGems с точки зрения разработчика, создающего пакет; теперь же мы станем на место программиста, который пользуется пакетами, созданными другими людьми.

Также в этой главе мы рассмотрим программы

21.1. Система RubyGems

RubyGems — это не «официальная» система управления пакетами для Ruby, но одна из тех, что пользуются обширной поддержкой со стороны сообщества. В июле 2006 года она еще не входила в стандартный дистрибутив, но может стать его частью в будущем. Мы довольно подробно рассматривали процедуру создания gem- пакета в главе 17. А в этой главе расскажем, как пользоваться пакетами, созданными другими людьми.

RubyGems пытается решить несколько основных проблем, как то: простота установки, центральный репозиторий, управление версиями библиотек, управление зависимостями и т.д. Gem-пакеты предоставляют доступ к документации и позволяют легко контролировать, какие библиотеки установлены.

Если система RubyGems на вашем компьютере не установлена, зайдите на страницу http://rubyforge.org/projects/rubygems и выполните простые инструкции по загрузке и установке. В дальнейшем RubyGems будет обновляться автоматически.

Сам исполняемый файл называется

RubyGems — развитый менеджер пакетов для Ruby. Ниже приведена

краткая справка с указанием на источники дополнительной информации.

gem help commands показать все команды ‘gem’

gem help examples показать примеры использования

gem help COMMAND вывести справку о команде COMMAND

Самые важные команды не вызывают затруднений. Например, чтобы установить библиотеку

Сначала она будет искать gem-пакет локально, а если не найдет, то обратится к серверу Ruby Forge. По умолчанию устанавливается последняя версия (хотя в некоторых случаях вам задают вопрос, какой именно пакет вы хотите установить). Можно и явно указать версию с помощью флага

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

Как узнать имя нужного вам пакета? Если он находится на сайте RubyForge, то обычно называется так же, как проект. Например, программа

Если вы не располагаете даже такой информацией, попробуйте воспользоваться командой

Чтобы получить информацию об установленном пакете, введите команду

Кроме того, имеется команда деинсталляции

Полезно установить gem-сервер и на своей системе — не в качестве репозитория, из которого другие смогут дистанционно устанавливать пакеты, а как централизованный механизм, позволяющий просматривать в браузере все локально установленные пакеты вместе с документацией.

Для запуска gem-сервера просто наберите команду

О системе RubyGems можно еще многое сказать; к тому же она постоянно развивается. Самая актуальная информация представлена на сайте http://rubygems.rubyforge.org.

21.2. Программа Rake

Есть два варианта написания названия: Rake и

Нет сомнения, что на дизайн Rake оказала большое влияние программа make, так что терминология одна и та же. Как и раньше, мы говорим о целях, действиях, зависимостях и правилах.

Применениям Rake нет числа. Вы можете пользоваться ею для сборки проектов, написанных на С, C++ или Java (или на любом другом языке). Годится она и для генерирования документации с помощью RDoc, развертывания программ, обновления проекта на сайте Ruby Forge и множества других задач.

Неудивительно, что на вход Rake подается командный файл (rake-файл), который по умолчанию называется

$ rake # Искать сначала ‘rakefile’, потом ‘Rakefile’.

$ rake -f myfile # Использовать файл с именем ‘myfile’.

Основная «единица работы» в Rake — задание; именуются задания посредством символов Ruby. Предполагается, что в каждом rake-файле есть задание по умолчанию

$ rake # Выполнить задание по умолчанию.

$ rake mytask # Выполнить задание с именем ‘mytask’.

Внутри rake-файла мы указываем задания с помощью метода

Содержимое блока в примере выше опущено. То, что в нем находится, называется действием.

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

При желании можете заключать блок в фигурные скобки, но обычно в этом случае интерпретатор Ruby ожидает, что параметры будут заключены в круглые скобки.

Рассмотрим более конкретный пример. Предположим, что имеется программа

Мы хотим собрать из них исполняемый файл

Начнем с метода

Отметим, что метод

Теперь перейдем к построению двоичных файлов. Расширим написанный выше код. Если после вызова метода

sh «cc -o myprog myprog.о sub1.o sub2.o»

Здесь имеется некоторое дублирование, но от него можно избавиться. В Rake есть специальный механизм, который называется

Теперь можно определить действия в цикле, как показано ниже. И обратите внимание, что зависимости здесь не упоминаются — Rake самостоятельно учтет эту информацию, если она была задана в другом месте.

Однако проще пользоваться правилами. Это еще один механизм Rake, естественно, позаимствованный у

Тут мы наблюдаем небольшое волшебство. Rake устанавливает атрибут

Продолжим сеанс магии. Если затребовать библиотеку

Для этих напоминающих массив констант определен метод

Теперь наш rake-файл принимает такой вид:

Обратите внимание, что мы не задавали задания «clean» и «clobber» явно. Кроме того, отметим что «clobber» неявно включает операцию «clean». И наконец, мы определили задание

Программа Rake сложнее, чем я описал в этом разделе (особенно это касается правил). И она продолжает развиваться. Как обычно, самую свежую информацию ищите в онлайновой документации (http://docs.rubyrake.org/).

21.3. Оболочка irb

Конечно, это больше, чем калькулятор. При желании можно ввести произвольный код на Ruby:

При установке флага

Тогда можно сделать следующее:

Отметим, что хотя обращаться к сущностям, определенным в файле (например, к константе

Новичков часто смущает информация, выводимая

Позвольте, что тут делает

Еще один источник недоразумений — метод

Вас ничего не удивляет? Но давайте запустим следующий сценарий и посмотрим, что произойдет:

# temp.rb:3: undefined local variable or method ‘var’ for main:Object

У Ruby есть такая особенность: когда вы выполняете

Поведение сценария следует считать более правильным. Не забывайте, что сама программа

Имейте в виду, что

• путь, указанный в переменной окружения

Инициализационные файлы пишутся на Ruby. В них можно настраивать текст приглашения и многое другое. Подробно эти файлы обсуждаются в книге «Programming Ruby». Ниже мы сделаем лишь несколько замечаний.

Если ваша версия Ruby собрана с поддержкой библиотеки GNU readline (обычно так и есть), то вы можете перемещаться по истории команд с помощью клавиш со стрелками вверх и вниз. Еще важнее, что работает механизм завершения по клавише Tab: когда вы набираете начало идентификатора, а затем нажимаете Tab,

Чтобы включить механизм завершения, добавьте в файл

Вот пример его использования:

«concat», «count», «crypt», «delete», «delete!», «downcase», «downcase!»,

«index», «insert», «intern», «length», «ljust», «lstrip», «lstrip!», «match»,

Может быть, вам это и не кажется полезным, но можно, например, задать объект в сочетании с подкомандой

irb#1(Mon Jul 31 04:51:50 CDT 2006):001:0> strftime(«%a %b %c»)

irb#1(Mon Jul 31 04:51:50 CDT 2006):002:0> to_i

irb#1(Mon Jul 31 04:51:50 CDT 2006):003:0> self + 1000

irb#1(Mon Jul 31 04:51:50 CDT 2006):004:0> wday

irb#1(Mon Jul 31 04:51:50 CDT 2006):005:0> class

irb#1(Mon Jul 31 04:51:50 CDT 2006):006:0> self.class

irb#1(Mon Jul 31 04:51:50 CDT 2006):007:0> quit

Мы уже убедились в полезности библиотеки

Иногда бывает полезна библиотека

if token.is_a? RubyToken::TkIDENTIFIER or

Calls block with two arguments, the item and its index,

Отметим, что в ней есть ошибки и странности. Можете сообщать о них (а равно об опечатках и других неточностях), если найдете человека, который сознается в авторстве.

Мартин Анкерл (Martin Ankerl) написал графическую утилиту

21.5. Поддержка со стороны редакторов

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

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

Два прекрасных редактора — это SciTe (на базе виджета редактирования Scintilla) и TextMate (имеется только для Mac OS X). Оба хорошо поддерживают Ruby, но больше я о них ничего сказать не могу.

Третий редактор — jEdit, написанный на Java редактор для программистов (www.jedit.com). Роб МакКиннон дополнил его модулем для Ruby (http://rubyjedit.org/). Но в этой книге я не могу задерживаться на его описании.

Среди программистов наиболее распространены редакторы vi (или vim) и emacs. Их мы кратко рассмотрим.

Исторически для пользователей vim было создано три разных пакета. К счастью, теперь они объединены в пакет

Если вы работаете с vim версии 7 (как и положено), то этот пакет, вероятно, уже установлен. (Если же по какой-то неуважительной причине вы все еще используете версию 6.x, то самое время провести обновление.)

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

Есть также по меньшей мере две реализации сворачивания кода для Ruby. На мои взгляд, любая методика сворачивания, которая требует вставлять в код специальные комментарии или символы, не оптимальна. Хороший механизм сворачивания должен анализировать код и распознавать в нем классы, модули, методы и т.д. Такую реализацию для vim написал Маурицио Фернандес (http://eigenclass.nrg/hiki.rb?Usable+Ruby+folding+for+Vim).

В принципе есть много причин не любить редактор vim; одна из самых основательных — язык vimscript. Хорошая новость — теперь есть возможность программировать поведение vim на Ruby! И плохая… она неважно документирована. Если хотите узнать подробнее, рекомендую для начала набрать команду :help ruby в vim. Дополнительная информация имеется на странице http://wiki.rubygarden.org/Ruby/page/show/VimRubyInterface. Наконец, загляните на сайт http://vim/org; может быть, там появилось что-то новенькое.

Еще один популярнейший в мире редактор — emacs. Вообще-то называть его редактором не вполне правильно. Это, скорее, миниатюрная операционная система, которая заодно позволяет и редактировать тексты. Одно из главных достоинств emacs — поразительная расширяемость; пользователь программирует его поведение на диалекте языка Lisp (elisp). Язык elisp мощнее, чем vimscript, но читать написанные на нем программы не менее сложно (правда, по другой причине).

Я сам не работаю с emacs, но очень уважаю тех, кто им пользуется. Не могу почти ничего сказать о поддержке Ruby в emacs; отсылаю вас на wiki-страницу RubyGarden (http://wiki.rubygarden.org/Ruby/page/show/EmacsExtensions).

21.6. Интегрированные среды разработки

Можно спорить с тем, что компания Borland со своим языком Turbo Pascal (в середине 1980-х годов) стала праотцом всех современных интегрированных сред разработки (IDE), но без сомнения Borland сделала идею популярной. Кто бы ни стоял у ее истоков, идея IDE в обозримом будущем никуда не денется.

В центре IDE обычно стоит мощный редактор, знающий обо всех особенностях синтаксиса языка. Такие средства, как синтаксическая подсветка и автоматическое формирование отступов, стали стандартными. Обычно включают также отладчик и средства управления проектом. Все чаще в среду интегрируются механизмы тестирования и сопряжение с системой управления версиями.

Трудно проводить осмысленное сравнение IDE. Все они похожи и все в чем-то различаются. Выбор такой же личный и субъективный, как при покупке автомобиля. Я попытался провести небольшое исследование, чтобы помочь вам принять решение:

• Одна из самых важных для Ruby сред — FreeRIDE. Она «заточена» специально под Ruby и всецело контролируется разработчиками, входящими в сообщество пользователей этого языка. В число основных авторов входят Рич Килмер (Rich Kilmer), Курт Гиббс (Curt Hibbs) и Лоран Жуллиар (Laurent Julliard), но есть и много других. Как и в случае любого крупного проекта с открытыми исходными текстами, разработка ведется медленно. Получить самую свежую информацию и загрузить программу можно на сайте http://freeride.rubyforge.org.

• Одно из самых последних решений — программа Komodo производства компании ActiveState. Это мощная, полнофункциональная среда, но имейте в виду, что продукт коммерческий. Полную информацию можно найти на странице http://www.activestate.com/Products/Komodo/.

• Если вы поклонник Eclipse, то должны знать о существовании Ruby Development Tool (RDT). Это набор подключаемых модулей для поддержки Ruby на платформе Eclipse. Детали изложены на странице http://sourceforge.net/projects/rubyeclipse.

• ArachnoRuby — еще один коммерческий продукт; автор Лотар Шольц (Lothar Scholz). Набор функций достаточно полон, но в июле 2006 года он работал еще не так устойчиво, как другие IDE. Дополнительную информацию ищите на странице http://wwwruby-ide.com/ruby/ruby_ide_and_ruby_editor.php.

• Наконец, есть еще RDE, Ruby Development Environment. Работает неплохо, достаточно мощная и бесплатная. Но только на платформе Windows.

В таблице 21.1 перечислены характеристики различных IDE.

Таблица 21.1. Сравнение пяти IDE для Ruby

Характеристика Free-RIDE RDE RDT ArachnoRuby Komodo
Коммерческий нет нет нет да да
Платформы все Win32 все Linux, Win32 все
Синтаксическая подсветка да да да да да
Автоматическое формирование отступов да да да да да
Сворачивание кода да нет нет да да
Редактирование нескольких документов да да да да да
Поддержка других языков (Perl и т.д.) ограниченная да да да да
Настраиваемые привязки клавиш да нет нет да да
Макросы редактора да нет нет да да
Обзор кода да да да да да
Интеграция с системой управления версиями нет нет да нет да
Построитель графических интерфейсов нет нет нет нет да
Управление проектом да нет да да да
Интегрированное тестирование да нет да нет нет
Прочие замечания чистый Ruby включены инструменты для Web построен на базе Mozilla

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

В таблице рассматриваются только три платформы: семейство Linux/UNIX, семейство Win32 и Mac OS X. Когда мы пишем «все», имеются в виду только эти платформы.

21.7. Заключение

В этой главе мы рассмотрели ряд инструментов, облегчающих жизнь программисту на Ruby. К числу общеупотребительных относятся интерактивная оболочка для Ruby

Примечания:

Огромное спасибо (яп.)

Программа печатает эту информацию на английском языке. Для удобства читателей приводим русский перевод. — Прим. перев.

Integrated development environment (also known as IDE) is created for deep work with specific language, Ruby for example. Despite the fact that many programmers prefer text editors, IDE-systems offer a much bigger range of possibilities. They simplify code navigation, have an auto-completion function, highlight the syntax and errors in it.

Ruby exists for more than 20 years, and during this time dozens of integrated development environments have appeared and disappeared. Not every solution that are currently available on the market is comfortable and really helps to write quality code. Let’s figure out which of them will suit Ruby programmers.

Here are the criterias of compare:

  1. Platform : Windows, Linux, Mac OS.
  2. Solution type. Is there only a boxed version of the IDE, or is it possible to purchase a cloud version of application with a rent?
  3. Integration level with Ruby. Can it only, for example, highlight the syntax or can also do an auto-completion, find errors and necessary parts of code?
  4. Trial version availability and the conditions for its provision.
  5. Capability to work with other programming languages.

General market overview

All existing development environments for Ruby can be divided into two large groups:

  1. A system that supports multiple languages. Usually it’s a text editor, which with the help of plugins can be «trained» to work with necessary syntax. Such solutions are not demanding on the power of the computer, they are easily modified and often free, such as Vim. Minuses are: the need to find and install third-party modules, limited support of specific language, which sometimes includes only basic function like highlighting.
  2. Profile IDE. As a rule, they work only with one or two related languages. For example, RubyMine, in addition to support Ruby itself, allows you to take advantage of the development environment for other major web developer tools: JavaScript, HTML and CSS. The disadvantages of such solutions are: higher requirements for hardware and prices at the level of professional corporate software.

Recent years trend of using the SaaS services hadn’t bypass Ruby IDEs. Some of these solutions are cloud-based.

  • The main advantage of cloud IDEs is ability to use it on any device or platform. They do not require high computer performance, even cheap tablet will fit. You can use it anywhere you have the Internet. A monthly rent will allow to use professional IDE even for small start-ups or freelance programmers.
  • However, dependence on the Internet is a disadvantage; if the connection is lost, there will not be access the service. The cloud IDEs also have issues with safety and stability. If there is a issue on the side of the service provider, there is nothing user can do. There can be problems with the data security — recent incident with GitLab eloquently illustrates the situation.

Price is very important too. In general, text editors are freeware, so you can choose the right solution among them. If you need a more powerful application, then most likely you will have to pay — only free IDE you can find is Aptana Studio.


What IDE solutions are now available on the market for Ruby developers and what can they offer?

RubyMine

Platforms: Windows, Linux, Mac OS.

Solution type: boxed application with the ability of monthly payment.

Trial version: 30 days trial is available without any limitations on the functionality. You can get a 90 days free trial for a developers team.

Price. Payment is possible only on a rental basis. For an individual user, the year of use of RubyMine will cost $ 89 for the organization it will cost $ 199 for one copy. You can buy a license for several years ahead, saving about 40% of the amount. Monthly payment is possible, however in this case the total price tag for 12 months will grow by approximately 20% — $ 238.8 for the company. JetBrains offer completely free access to their IDE for students, teachers, educational institutions, open-source projects. Startups can receive a 50% discount for three years. The price for graduates of universities and users of other Ruby IDEs is reduced by 25%.

Supported languages: HTML, CSS, JavaScript. The list can be extended by purchasing a license for other IDEs from this developer.

  • Specialized solution for Ruby programmers;
  • Syntax highlighting and autocompletion, the written code is analyzed «on the fly», with the immediate fix ability;
  • Navigation by code elements or bu the project itself;
  • Built-in Ruby debugger;
  • RoR and Sinatra support;
  • Integrated with Git, Subversion, Mercurial, Perforce, CVS;
  • Flexible customization.

Сonclusion: powerful multi-platform tool for Ruby coding with support for important features. The main disadvantage is a high price even with allowances for possible discounts.

RubyMine videoreview by JetBrains

TextMate

Platforms: Mac OS.

Solution type: boxed application with a single payment for the number of users.

Trial version: not available.

Price. One copy costs $54-55, depends on country. For EU users it’s $65, but $54 corporate version is also available for them. When application is purchased for 30, 50 or 100 users at once there is big discount. An academic license is available for the non-commercial use of TextMate — it is cheaper by an additional 15%.

Supported languages: all popular.

Features:

  • Big set of ready-made libraries and snippets for any programming language;
  • Navigation thru functions using hotkeys;
  • Ability to create own code templates and insert them quickly;
  • Work with projects is supported;
  • Convenient files search;
  • Highlighting of syntax and errors.
  • Working with Ruby in TextMate is supported by David Hannson, the creator of Ruby on Rails.

Conclusion: excellent development environment for any programmer, including Ruby coder, while quite good price. The main disadvantage is only Mac OS support.

Platforms: Windows, Mac OS, UNIX-systems, iOs, Android.

Solution type: boxed application with free license.

Price: freeware with ability for donation.

Supported languages: PHP, Python, C, C++, Delphi, Perl and many others.

Features:

  • Modification of popular, but outdated text editor Vi for Linux;
  • Wide customization capabilities, simple tools for creating own Vim plugins;
  • Workspace organization: simultaneous work with few files and it’s tabs management, three modes (command, insert and last line mode), ability to save session’s settings;
  • Syntax highlight and it’s simple editing: unlimited number of «undo» operations, comparing of two files and changes transfer, autocompletion;
  • Search history by different parameters;
  • Automation of standard operations.

Conclusion: Vim is a text editor that provides features of full-fledged IDE. Strong side of the application is freeware and support for the most of platforms, including mobile.

Sublime Text

Platforms: Windows, Linux, Mac OS.

Solution type: boxed application.

Trial version: no time or functionality limits, but with regularly reminds about purchase.

Price: no need to purchase the application to use it. Individual license will cost $70. Discounts are available for massive one time purchase for business using.

Supported languages: C, C++, CSS, HTML, Java, JavaScript, PHP, Python and other.

Sublime Text interface

Features:

  • Syntax highlight support and quick navigation using the code map;
  • API for creating own plugins for Python applications;
  • Simultaneous work with few files and multi-correction;
  • Creating of own snippets and keywords for them.

Conclusion: test editor that cannot replace IDE, but it can fit for a coder, that has enough of provided features and doesn’t need specify Ruby support.

Emacs

Platforms: Windows, Linux, Mac OS.

Solution type: boxed application with free license.

Price: freeware with ability for donation.

Supported languages: most of the popular.

Features:

  • Flexible code editing: most of the operations have hotkeys, cursor can be moved by symbols, worlds, lines, paragraphs, functions or massives;
  • High level of customization. Almost all functions of the editor can be reconfigured for you. To do this, you must have at least basic knowledge in Elisp, but some changes can be made through a visual interface;
  • A separate editing mode for each language, including Ruby;
  • Quick access to configuration files and navigation through Rails directories.

Conclusion: a powerful text editor with IDE functions, which can provide high-quality work with Ruby code. It does not have a binding to a specific platform, like TextMate, and not so complicated for beginners as Vim. Freeware. Great choice.

Цукерберг рекомендует:  Эффект приближения для миниатюр

Aptana Studio

Platforms: Windows, Linux, Mac OS, plugin for Eclipse.

Solution type: boxed application with a free license.

Price: freeware.

Supported languages: HTML, CSS, JavaScript, PHP, Python.

Aptana Studio interface

Features:

  • IDE is primarily designed for HTML, CSS and PHP, other languages support ​​is more like an addition to the basic functionality;
  • Works with Rails;
  • Syntax and error highlighting, auto-completion;
  • Integrated Ruby Debugger;
  • Code represented in the tree structure to simplify navigation.

Conclusion: a simple free IDE, which is good for private use at home and in small companies that can not afford to buy specialized software for working with Ruby.

Platforms: Windows, Linux, Mac OS.

Solution type: boxed application with a free license.

Price: freeware.

Supported languages: HTML, Java, JavaScript, Objective-C, Perl, PHP, Python and others.

Features:

  • Application is based on the Chromium browser, so it’s great for web development;
  • Flexibly customization and a large selection of themes;
  • Syntax highlighting, work with templates and searching for files by exact or incomplete name supported;
  • Automatic indentation according to the specification, displaying of invisible characters.
  • Auto-completion for Ruby is not available.

Conclusion: the editor does not have a specialization under Ruby, although it can work with the code written on it. You can try, if for some reason, do not like classic solutions like Vim and Emacs.

Atom video introducing

Komodo IDE

Platforms: Windows, Linux, Mac OS.

Solution type: boxed application.

Trial version: 21 day trial without functionality limits.

Price: it comes only with the support of all available languages, without the possibility to purchase a solution for 1-2 specific languages. The cost of one license is $ 295, with updates and techsupport — $ 394. It is possible to purchase a group license for a team of five men for $ 1695. Students and freelancers can get a solution for a half of price, teachers who need the system for studying — for free.

Supported languages: more than 100.

Komodo IDE interface

Features:

  • Integration with Task Managers and bug trackers;
  • Syntax highlighting and autocompletion for all supported languages;
  • Works with all popular Ruby frameworks;
  • Remote code debugging;
  • Simultaneous work with several projects;
  • Interactive terminal for Ruby.

Conclusion: the most expensive solution of the considered. The main component of the price is multi-lingual, therefore it is not advisable to use Komodo IDE for programming on 1-2 languages.

Engine Yard

Platforms: any.

Solution type: cloud application.

Trial version: 500 hours for 6 months.

Price: based on hourly pay. Solo — $ 0.03 ($ 25 per month), Standard — $ 0.20 ($ 150 per month), Premium — $ 0.40 ($ 300 per month). The difference is in the functional. There are no binding to the number of employees.

Supported languages: Ruby, PHP, JavaScript.

Engine Yard interface

Features:

  • Platform can be used not only as IDE, but also as a hosting for applications written in PHP, Ruby and Node.js;
  • Remote access to the application;
  • GitHub integration;
  • Automation of work with the developed application, monitoring of its availability and stability;
  • The platform positions itself as specializing, first of all, for Ruby on Rails.

Conclusion: a good solution, allowing to combine the development environment with hosting for the application.

Engine Yard video

Cloud9

Platforms: any.

Solution type: cloud-based application.

Trial version: limited functionality (one private workspace).

Price: monthly payment. The individual license will cost $ 19, corporate with the support of the team workspace — $ 29 per user. For educational projects, IDE is available for a symbolic price of $ 1.

Supported languages: Ruby, PHP, JavaScript, HTML, CSS, Python.

Features:

  • Integration with Bitbucket and GitHub;
  • Applications transfer from Microsoft Azure;
  • Built-in the command line terminal;
  • Fast transition by variables, code completion and syntax highlighting.
  • Flexible interface customization as in VIM, Emacs or Sublime.

Conclusion: inexpensive, but sufficiently functional IDE. Can be a replacement for one of the desktop applications, and an auxiliary solution for organizing common work on the project.

Ruby > Вебмастеру / Программирование

Начал достаточно серьезно изучать Ruby. Заинтересовал сам язык, его отличная от классики (c++/java/pascal/c#) концепция. Для изучения новых языков нам нужен стандартный набор — книги, справки, доки, а для практики — компилятор, соединенный с IDE. Вот созданию этого испытательного полигона, а именно компилятор плюс IDE и будет повещен данный обзор.

Исходная предпосылка: достаточно мощный, двух ядерный компьютер с 4 Гб оперативки под управлением Windows XP, runtime java последней версии и Ruby (onclick Installer 1.86.xx)

Что мне хочется получить от IDE для начала:

Завершение кода (code completion)

Работу с отладчиком

Удобную навигацию по коду

Интеграцию с CVS, сайтостроение Rails, интеграция с unit тестами и т.д. оставим на 2-й план. Для меня это пока не важно. На рынке представлено много различных IDE, много бесплатных проектов, попадаются и коммерческие решения. Я не буду составлять список тех или иных фич продуктов, т.к. зачастую заявленные функции или работают неверно или находятся в совершенно зачаточном состоянии.

Бесплатная/Java Тестирование версии 1. 2.7.xxxxx

IDE разработана не с нуля, собрана на базе Eclipse. Скорость запуска IDE достаточно большая, на более медленных компьютерах это будет заметно еще более. Подсветка синтаксиса Ruby присутствует, редактор работает нормально, «задумчивой» реакции я не наблюдаю. Есть сворачивание кода.

Заявлен Code Completion, но в реальности он работает плоховато. В коде примера явно указан Array, а где поддерживаемые им методы map, each ? Самые ходовые методы из Kernel, Array, Object и Enumerable как раз и отсутствуют:

Aptana Code Completion

У строкового типа данных чуток получше, но опять не полно: aptana_string

Точно так же не показаны методы численного типа. После не продолжительной работы (3-5) минут получаем: aptana_error

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

Рефакторинг не работает вообще. Причем, 1-2 раза мне удалось запустить обычный Rename, в дальнейшем ни один из его видов не запускалось.

Навигация по коду стандартна — список классов, методов, переменных, модулей в файле. Быстрого перехода к файлу из require ‘LibName’ нет.

Итог — не очень стабильна работа IDE. Заявленного Code Completion считаем что и нет. Проблема падания IDE возможно в большом количество включенный по умолчанию плагинов.

Платная/Java Тестирование версии 2.xxxxx

Продукт от фирмы CodeGear (ранее фирмы Borland) построен на базе бесплатного Eclipse’а. IDE стартует быстрее предыдущего IDE Aptana, в процессе загрузки предлагается выбрать текущее рабочее место workspace, и далее тот проект с которым будем работать.

Подсветка синтаксиса присутствует, так же как и свёртка отдельных логических блоков кода. Код нельзя свернуть до класса, а можно сворачивать только до методов. Это вообще странное поведение, т.к. обе IDE собраны на базе одного opensource eclipse. Возможно, что данная функция запрятана в настройках.

Авто завершение строки работает на все 100%. Показываются методы, и их краткое описание и примеры использования. Методы отсортированы в удобном алфавитно классовом порядке, т.е. если мы стоим на типе Array, сначала будут показаны методы относящиеся к нему и Enumerable, а уже потом в общей группе Kernel, Object и прочие.

Единственный минус — Code Complition работает не всегда, т.е. бывают случаи (причем частные), когда появляется пустой список. Так же этот механизм достаточно задумчив, на более слабых машинах подтормаживание будет заметным.

Отладчик работает аналогично предыдущему IDE. Переменные, вызовы, глобальные переменные, переменные среды — все доступно для просмотра:

Рефакторинга как такового нет, даже самого простого вида — изменение имени переменной.

Возможно, что под рефакторингом в данной IDE понимается изменение названий моделей, модулей, т.е. как я понимаю он более ориентирован на Ruby On Rails.

Навигация по коду на уровне Aptana.

Платная/Java Тестирование версии 2.xxxxx

Если 3rdRail ориентирован на ROR разработку, то эта вариация IDE ориентирована на разработку именно Ruby приложений. Все то же самое, что и в описанном выше 3rdRail. По моему это просто маркетинговый финт с разделением одного продукта на два.

Подводя итог по продуктам Embarcadero — судя по последнему билду, а он датирован аж 06.2008 (сейчас конец 06.2009) я думаю, что о этих продуктах можно смело забывать — они не развиваются.

Скриншоты редактора кода из наиболее интересных ide для ruby

Ruby IDE : Aptana, 3rdRail, TurboRuby, NetBeans, RubyMine

Безплатная/Java Тестирование версии 6.5 (6.7 RC)


Я тестировал как продакшен версию 6.5, так и релиз кандидат 6.7 и могу сказать, что этой ide я очень доволен. Быстрый старт, «отзывчивая» реакция IDE, цветовые схемы, плагины — всё на высочайшем уровне. В редакторе присутствует завершение кода и возможность просмотра примеров использования методов. Представление этой информации в NetBeans, пожалуй самое лучшее, из всех, рассмотренных мною сред. Посмотрите на скриншоты, очень удобное разделение методов: netbeans IDE netbeanS IDE

Среда поддерживает собственные Code Templates и для каждого языка можно создавать свои наборы. Эта фича есть во всех более менее современных языках и позволяет значительно сокращать время набора кода.

Следующая интересная возможность NetBeans это работа с Ruby Gems. В окне показывается список установленных пакетов и доступных для установки. Так же есть возможность поиска и обновления: netbeans gems

Local History — еще одна замечательная штука. В IDE нет кнопки save(принудительная Save All конечно же есть). Все изменения по проекту ведутся в виде локальной истории. Имеется возможность откатиться до нужного состояния.

Рефакторинг работает именно так как нужно, пример rename: netbeans refactor

Навигация по коду так же на высоте — дерево проектов, файлы проекта, классы/модули открытого файла, мониторинг изменений в бакграунде — все это конечно же присутствует и работает. Так же порадовала удобная навигация к файлам в секции require.

Платная/Java Тестирование версии 1.xxx

Функционал этой IDE, как редактора, находится на высоте — используются все наработки IntelliJ IDEA:

— свертка кода по классам и модулям

— удобная возможность просмотра проекта в файловом виде и в виде классовой структуры

— навигация по коду

Всё это присутствует и работает на 5+

Система авто-завершения кода работает стабильно, есть правда один минус — это сортировка.

Методы типа помещаются в общую кашу к родительским (в самом простом случае Object и Kernal) и на мой взгляд, это не удобно. Пишем мы, к примеру, класс B >
мы получим список из методов Object, Kernal и BClass. На мой взгляд, логичнее методы класса BClass выделять ставить выше в списке сортировки: rubymine

Второй минус — нет возможности посмотреть подсказки к методам, как это сделано, к примеру, у NetBeans. По моему мнению, система Code Completion у NetBeans самая удобная и более интеллектуальная — RubyMine тут явно проигрывает (надеюсь что пока).

Большим плюсом является стабильность среды — за всё время тестирования (

2-3 месяца) не рухнула ни одного раза. Стандартные Local History, RubyGems, интеграция с Version Control системами — в наличии. Так же присутствуют встроенные системы тестирования Rake

У RubyMine присутствуют и некоторый уникальный функционал, например инспектор кода. Достаточно удобная штука — даёт советы по улучшению кода :) Иногда бывает полезна встроенная в IDE IRB консоль, и редактор reg expo’в (plugin).

Общее впечатление о среде могу охарактеризовать как крайне положительные. Среда заточена именно под Ruby и постоянно развивается. Минусом может стать только цена продукта — для начинающих она будет кусаться.

Еще один не понятный мне момент. Фирма по сути продает два продукта для работы с ruby — RubyMine и IDEA. ��� ��� dle

6 лучших >

Перевод статьи «6 Best IDEs For C and C++ Programming Language».

Способность понимать и писать код это одна из вещей, которые превращают выпускника вуза в программиста или разработчика. Большинство вузов начинают свою программу с языка С, а затем переходят на С++. И поскольку С++ является производной С и предлагает функционал объектно-ориентированного программирования, то без хорошей IDE вам будет сложно писать код.

Интегрированная среда разработки (Integrated Development Environment, IDE) оказывает большую помощь программисту, предоставляя все необходимые для работы удобства. Также она повышает производительность труда разработчика благодаря полезным инструментам, функциям автозаполнения и сотням сочетаний клавиш.

Сегодня я расскажу о нескольких лучших IDE для разработчиков, пишущих на C и C++. Эти инструменты сделают вашу работу более легкой и позволят выполнять больше задач за меньшее время.

1. Eclipse

Eclipse это одна из самых богатых функционалом IDE с открытым исходным кодом. Изначально она главным образом использовалась для разработки на Java, но сейчас поддерживает большее разнообразие языков. Эта IDE поставляется с отличным графическим пользовательским интерфейсом и функционалом drag-and-drop.

Eclipse доступна для Windows, Linux и MacOS. Эта среда предоставляет много продвинутых фич, таких как автоматический анализ кода, интеграция git, статический анализ кода и т. д.

Поддерживаемые языки: C, C++, C#, Java, JavaScript, Perl, PHP, Python, COBOL и т. д.

2. NetBeans

NetBeans это еще одна из лучших IDE для программирования на С и С++. Она имеет дружественный к пользователю интерфейс, а также несколько потрясающе полезных шаблонов проектов. Есть функционал drag-and-drop. Netbeans написана на Java, но предоставляет полную поддержку и набор инструментов, необходимых для разработчиков, пишущих на С и С++.

Лучшее в Netbeans это ее простые и эффективные инструменты для управления проектами. Поставляемый функционал можно расширить при помощи разнообразных полезных плагинов. С NetBeans вы сможете мониторить разработку вашего проекта удаленно.

Эта среда доступна для Windows, Mac OS X, Linux и Solaris.

Поддерживаемые языки: C, C++, Java, HTML, HTML 5 и другие.

3. Visual Studio Code

Visual Studio Code от Microsoft это одна из самых надежных и функциональных IDE, доступных для Windows, Linux и MacOS. Эта IDE базируется на фреймворке Electron.

Если говорить о функционале, Visual Studio Code обладает всеми нужными свойствами, такими как умное дополнение кода, подсветка синтаксиса, рефакторинг кода, поддержка сниппетов, возможности отладки, интегрированный контроль Git и т. д. Кроме того, вы можете кастомизировать эту IDE многими способами, включая сочетания клавиш и настройки.

Поддерживаемые языки: C, C++, C#, CSS, Go, HTML, Java, JavaScript, Python, PHP, TypeScript и т. д.

4. Code::Blocks

Code::Blocks поддерживает мало языков, но зато для них является одной из лучших IDE. Разработчики, пишущие на С и С++, оценят ее настраиваемость и гибкость. Лучшее в Code::Blocks это доступность множества плагинов. Функционал этой среды разработки можно сколь угодно расширить, в том числе с помощью пользовательских плагинов.

Умная подсветка синтаксиса, автодополнение кода и полнофункциональный отладчик, имеющиеся в Code::Blocks, сделают разработку действительно быстрой.

Code::Blocks доступна на всех платформах, включая Windows, Linux и MacOS.

Поддерживаемые языки: C, C++ и Fortran.

5. Atom

Atom это один из самых популярных и высоко настраиваемых редакторов кода. Он разработан Github и является прекрасным выбором как для маленьких, так и для крупных проектов. Доступен для Windows, Linux и OS X, поставляется с очень минималистическим пользовательским интерфейсом.

Эта IDE обладает всем необходимым функционалом. В ней есть менеджер пакетов, несколько панелей, функция поиска и замены текста, поддержка палитры команд и т. д. Кроме того, для Atom доступно множество плагинов: с их помощью вы сможете расширить функционал этого редактора и сделать его еще более полезным.

Поддерживаемые языки: C/C++, CSS, HTML, JavaScript, PHP, Python, Ruby и т. д.

6. Dev C++

Если вы ищете популярную IDE для разработки на С/С++ на начальном уровне, обратите внимание на Dev C++. Хотя эта среда не имеет многих более продвинутых функций, вам будут доступны автодополнение кода, менеджмент проектов, подсветка синтаксиса, поддержка CVS, встроенная отладка и пр. Dev C++ базируется на GNU Compiler Collection (GCC).

Эта среда вполне подходит для разработки мини-проектов на платформе Windows.

Поддерживаемые языки: C и C++.

Заключение

Надеюсь, вы найдете эту статью полезной. Хорошая IDE может помочь вам во многих вещах. Благодаря ей вы сможете писать код быстро и эффективно, поддерживать порядок в импортируемых библиотеках, экономить силы и время. Кроме того, ваша IDE может существенно облегчить вашу задачу по нахождению и исправлению багов.

А чем пользуетесь вы? Поделитесь в комментариях!

Искусство Ruby №1

В последнее время Ruby, что называется «на
слуху». Однако, не смотря на то, что в
Интернете есть достаточно много материала
по этой теме, разобраться с тем, что же собою
представляет Ruby, в чем его преимущества и в
том, как и где его использовать не совсем
просто. В этой статье я попытаюсь не только
рассказать о языке Ruby, но и о технологиях,
связанных с ним. Я позволю себе снабдить
этот обзор некоторыми комментариями,
которые, возможно, покажутся вам
субъективными. Тем не менее, надеюсь, что
они помогут понять причины такой
популярности нового языка и оценить,
насколько же эффективно его можно
использовать в собственных разработках.

Прежде всего, во избежание путаницы,
давайте разберемся с терминологией. Что
такое
Ruby? В чистом виде, это просто язык
программирования. Кроме того, это
транслятор кода (ruby.exe, если мы говорим о
версии для Win32).

Ruby on Rails – платформа (framework) для
разработки Web приложений на базе Ruby.
FreeRIDE и SciTE — IDE и редактор кода для Ruby.

Инсталляция и начало работы

На сегодняшний день последней версией Ruby
является 1.8.4. С сайта http://www.ruby-lang.org/
можно скачать интерпретатор Ruby и
библиотеки. Можно так же скачать FreeRIDE и SciTE.
К слову, если вы не можете скачать несколько
десятков мегабайт – не расстраивайтесь.
Все это входит в комплект Ruby on Rails, который
публиковался
в Спеце, посвященном
Web.

Для запуска Ruby программы достаточно
набрать ruby .
Естественно при этом не стоит забывать о
путях. Если же вы хотите воспользоваться
FreeRIDE под Windows, то сразу включите опцию «Run
process in terminal» в Debugger Preferences. Конечно, FreeRIDE не
слишком функциональная среда разработки,
но, тем не менее, минимальный набор
необходимых функций она обеспечивает.
Помимо редактора, со стандартным набором
функций и подсветкой синтаксиса
присутствует дебаггер, а также
автоматизирован запуск и остановка
программ. Что еще надо для отладки скриптов?
Итак, запускаем первую программу:

puts ‘hello world ‘

Жмем F5, открывается так называемое
терминальное окно, в котором и отображается
искомая фраза. Не забывайте, что вы имеете
дело с транслятором, поэтому перед запуском
программы модифицированный код
обязательно нужно сохранить в файл. Я
попробовал сразу поставить птичку «save files
before running/debug» (меню «edit/ Preferences… /Debugger/Run»), но
ожидаемого эффекта это не дало. Такие
мелкие багги, конечно, имеют место в IDE.

Я позволю себе маленькое лирическое
отступление. За несколько дней, до того, как
приступить к написанию данного обзора я
общался со своим коллегой на предмет
сравнения языков и принципиальной
возможности и целесообразности «отсечения
тупиковых путей развития языков».
Соответственно, мы затронули и вопрос «строгости»
языков. Нужно ли четко определять типы
переменных, нужно ли обязательно вручную
высвобождать объекты и т.д. И вот здесь была
озвучена прекрасная, на мой взгляд, мысль.
Отсутствие строгости в языках – прекрасно,
более того, оно предоставляет кодерам
некоторые замечательные возможности и в
значительной мере упрощает их работу. Но
все это справедливо тогда и только тогда,
когда программист четко представляет, как
это работает и к каким последствиям это
может привести. В противном случае это
может сильно навредить разработчику и не
только затруднить процесс отладки
программы, но и привести к неявным ошибкам в
алгоритмах, которые очень трудно отловить.
Поэтому, возможно, ответ на часто
задаваемый вопрос о том, какой язык стоит
начинать учить – не столь очевиден. Здесь
следует понимать, что имеет в виду
вопрошающий. Или он знает основы
программирования и пытается выбрать для
себя среду разработки для практической
работы с перспективой на будущее. Или он
просто хочет научиться программировать «с
нуля».

Теперь давайте посмотрим, что собою
представляет Ruby, с точки зрения
вышесказанного. Сразу скажу, что Ruby не
является «Си-образным» языком. Создатели
языка называют это преимуществом. Мне же
синтаксис Ruby напомнил одновременно
синтаксис Бейсика и Паскаля. Здесь имеют
место конструкции «BEGIN … END», «IF … THEN ..» и т.д.
Но есть некоторые особенности синтаксиса,
которых лично я не встречал нигде.

Прежде всего, сразу скажу, что этот язык
чувствителен к регистру. Но не в
классическом понимании, как в С, где нельзя
использовать переменную MyVar вместо myvar. Имя
переменной всегда должно начинаться с
маленькой латинской буквы (например myVar).
Если же мы напишем в коде MyVar, то это уже
будет константа. Весьма интересно, не
правда ли? Возможно, у вас возникнет вопрос:
«А зачем?». Ответ очевиден. Ruby –
транслируемый язык, и компилятор не сможет
вам указать на ошибку при попытке присвоить
константе новое значение. А когда вы
наглядно видите отличие между константой и
переменной (даже в чужом коде), вы постоянно
будете начеку. Как по мне – весьма удобно.

Переменные в Ruby объявлять не надо. При
первом вызове Ruby сам догадается о типе
переменной. Второй пример более интересный:

print(‘Enter your name: ‘ )
name = gets()
puts( «Hello #» )

Здесь программа спрашивает имя пользователя и после его ввода выводит его на экран вместе со словом «Hello». Обратите внимание на то, как передается значение переменной name. Оно как бы врезано непосредственно в строку, при этом признаком переменной является набор символов #<…>. Эквивалентным выражением будет и следующая строка
puts( «Hello » + name). Вместо двойных кавычек можно использовать одинарные, но при этом «врезать» значение переменной уже не удастся.
С тем же успехом можно подставлять значения не только строковых переменных, используя #<…>. Результатом следующего выражения будет вывод на экран числа 9.

Отличие print от puts в том, что в последнем случае происходит перевод строки. Перевод строки можно так же реализовать и с помощью директивы \n, а вставку табуляции — \t. Но это будет работать так же только тогда, когда используется двойная кавычка. Эквивалентом puts(‘Enter your name: ‘ ) будет print(“Enter your name:\n” ).

К слову, круглые скобки – опциональны. Выражение puts «#<(1+2) * 3>» так же будет работать.

Конечно, малоприятным моментом является искажение русской кодировки при работе со строками. Скажем, результатом выполнения следующей строки кода будет некая шифрограмма:

print(‘Введите ваше имя: ‘ )

Я попробовал запустить эту программу в FARe, который спокойно «разговаривает» по-русски, но получил тот же результат. В документации присутствует небольшой раздел, посвященный кодировке, но конкретных рецептов там не приводится.

Объектно-ориентированная концепция Ruby

Конечно, в рамках обзора невозможно полностью описать весь синтаксис языка. Но я не случайно начал с обзора работы со строками. Это связано с тем, как позиционируется язык. Но давайте теперь рассмотрим еще один пример, который продемонстрирует, как происходит преобразование типов в Ruby.

taxrate = 0.175
print «Enter price (ex tax): »
s = gets
subtotal = s.to_f
tax = subtotal * taxrate
puts «vat on $# is $#, so grand total is $# «

Смысл кода, приведенного выше – очевиден. Считается сумма с налогом. Но обратите внимание на строчку

Несложно догадаться, что to_f это метод объекта s. Следовательно, становится очевидным, что любой тем данных в Ruby – класс, а любая переменная – объект, или, если хотите, экземпляр класса. Это очень похоже на концепцию .Net вообще и C# в частности. Более того, если анализировать следующий фрагмент кода x = 1 + 2, то + будет методом, а 2, соответственно, передаваемым ему параметром. С точки зрения концепции языка логичнее было бы написать x=1.+(2) . Мне захотелось проверить это предположение, и я ввел в редакторе кода следующее выражение

Представьте мое удивление, когда в результате выполнения программы на экране высветилась тройка. На самом деле в документации по Ruby позиционируются основные типы данных. Но нужно четко понимать, что на самом деле это классы.

Здесь я не могу не вспомнить одного из интервью David’а I, в котором он сказал, что мечтает реализовать IDE для Ruby в рамках BDS. Лично мне совершенно понятна его заинтересованность в этом. Объектно-ориентированный подход дает массу технологических преимуществ, позволяющих создавать качественные и функциональные IDE продукты и, тем самым, повышать скорость разработки конечных решений. Достаточно вспомнить, что MDA реализация от Borland получила перспективы лишь с переходом на .Net. Учитывая примитивность FreeRide (как же хочется увидеть в редакторе, после нажатия точки, выпадающий список всех методов), у DevCo есть прекрасная перспектива создать средство разработки, которое может стать реальным конкурентом ASP .Net в своем сегменте рынка.

И еще одна маленькая ремарка. В своей предыдущей статье я делал краткий
обзор нового языка
D. И автор этого языка Уолтер Брайт высказывал мысль о том, что объекты уместны лишь там, где это действительно нужно. В Ruby реализован другой принцип – объектами является все. Я не буду судить у преимуществах каждого из этих подходов. На мой взгляд, основной вопрос заключается в том, как правильно этим распорядиться.

Теперь давайте посмотрим, как в Ruby создаются классы. Но прежде немного определимся с терминологией.
Декларация класса начинается со слова class (нижний регистр), затем следует его имя (начинаться должно с верхнего регистра). Заканчивается декларация класса ключевым словом
end.

class Magazine
def set_mag(aName)
@myname=aName
end
def get_mag
return(@myname)
end
end

В теле класса определены два метода set_mag и get_mag. Следующий фрагмент кода проиллюстрирует, как создается экземпляр класса.

likedMagazine = Magazine.new
likedMagazine.set_mag(‘Xakep’)
puts(likedMagazine.get_mag)

Обратите внимание на переменную @myname, используемую внутри методов. Знак «@» перед именем переменной означает, что она определена для каждого экземпляра класса и не может вызываться вне класса. Своеобразный способ задать область видимости или, если угодно, реализовать инкапсуляцию.

Цукерберг рекомендует:  Один день жизни Product manager

Кстати, слово return в методе get_mag – опционально. На самом деле, Ruby в качестве возвращаемого значения возьмет последнее выражение.

То, что Ruby полностью объектно-ориентированный язык доказывает следующая строка.

В качестве результата будет выведено слово Object.
puts self выдаст – main. Обратите внимание на то, что Object с синтаксической точки зрения – константа.

На самом деле все создаваемые в Ruby классы наследуются от класса Object. Среди методов, описанных в этом классе, есть такой как to_s, определяющий строковое представление класса. Что бы проверить это, достаточно в последнем примере дописать еще одну строку

Программа выдаст вполне корректный, хотя и малоосмысленный результат.
Классы в Ruby никогда не бывают закрытыми. В существующий класс всегда можно добавить метод. Это работает как для стандартных классов, так и для «самописных». Иными словами мы всегда можем переопределить метод стандартного класса в наследнике.

class Magazine
def set_mag(aName)
@myname=aName
end
def get_mag
return(@myname)
end
def to_s
@myname
end
end

likedMagazine = Magazine.new
likedMagazine.set_mag(‘Xakep’)
puts likedMagazine.to_s

В приведенном выше коде показано переопределение метода to_s. Теперь результатом выполнения программы буде не внутренний идентификатор объекта, а название (точнее, значение внутренней переменной myname) журнала.

Еще один метод, описанный в классе Object – initialize. Это специальный метод, который вызывается при создании объекта. Он может оказаться очень удобным для задания начальных значений переменных создаваемого объекта.

Теперь давайте попробуем разобраться с наследованием в Ruby. Естественно, что эта концептуальная идея ООП так же реализована. Вот пример реализации:

class Magazine
def set_mag(aName)
@myname=aName
end
def get_mag
return(@myname)
end
def to_s
@myname
end
end

Ruby на прямую не поддерживает множественного наследования, т.е. у класса может быть непосредственно только один родитель. Однако в Ruby классы можно подключать модули и, соответственно, отдельные методы модуля могут вызываться как отдельные модули класса. Эта возможность носит название Mixin. Но прежде всего давайте разберемся с понятием модуль. Модули в Ruby очень напоминают паскалевские
(unit).

module Trig
PI = 3.141592654
def Trig.sin(x)
# .. , кстати, комментарий в Ruby — #

Выше приведен пример описания модуля. Подключение внешних модулей (т.е. тех модулей, которые размещены в другом файле) выполняется с помощью ключевого слова require.

require «trig»

А вызов производится с использованием точечной нотации.

Точка используется перед вызовом метода, а двойное двоеточие – перед обращением к константе.

Таким образом, модули могут объединять в себе константы, классы и методы. Тем не менее, модуль – не более чем пространство имен. В одном файле может быть размещено несколько модулей.
Когда подключается модуль, Ruby создает безымянный класс, который ссылается на этот модуль и подставляет его как отдельный суперкласс для класса, в который он подключается. Немного запутанно, но, тем не менее, на практике все выглядит достаточно просто.

В класс можно подключать несколько модулей одновременно. Однако, нужно следить за тем, что бы имена методов внутри модулей не пересекались.

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

Массивы в Ruby, в отличии от большинства языков могут объединять в себе данные разных типов. При этом в качестве элемента массива может использоваться даже метод некоторого класса, при условии, что он возвращает какое-либо значение.

a1 = [1,’two’, 3.0, array_length( a0 ) ]

Нумерация элементов массива начинается с 0.
Обращение к элементу массива по его индексу можно осуществлять следующим образом:

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

print( arr[0,4] )
print( arr[0,5] )

Для создания массива достаточно его просто определить в коде. Но, не стоит забывать, что массив, как и все остальное в Ruby, это класс. Поэтому можно использовать и такой синтаксис.

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

a = Array.new(2)
a[0]= Array.new(2,’hello’)
a[1]= Array.new(2,’world’)

Оператор ветвления задается конструкцией if … then … end. Например:

Логично, что между then и end может ставиться else.
Если сравнивать с Паскалем, то объективно, такая конструкция немного удобнее, ведь тогда не имеет смысла использовать блоки. Блоки, к слову задаются конструкцией

Противоположностью if является конструкция unless (если не):

unless aDay == ‘Saturday’ or aDay == ‘Sunday’
daytype = ‘weekday’
else
daytype = ‘weekend’
end

Как и в большинстве других языков в Ruby есть несколько вариантов организации циклов, каждый из которых удобен в разных конкретных случаях. Две конструкции цикла приведены в следующем примере. Думаю, комментарии излишни.

# for
for x in [1, «two», [3,4,5] ] do puts( x ) end
# each
[1, «two», [3,4,5] ].each do |x| puts( x ) end

К слову, в последней версии Delphi Language также введена конструкция for … in, именно с целью облегчить работу с классами.

А таким образом работает цикл While:

a=0
begin
puts a
a=a+1
end while a

Так же в Ruby можно использовать цикл until:

i = 10
until i == 10 do puts(i) end # never executes
until i == 10 # never executes
puts(i)
i += 1
end

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

В заключение хочу сказать, что все вышеизложенное не абстракция. На Ruby разрабатываются реальные Веб-приложения. Во второй части я попытаюсь рассказать о практической стороне Ruby, а собственно о том, как создаются приложения на платформе Ruby on Rails. Думаю, что преимущества и недостатки синтаксиса Ruby станут более очевидными.

Мой первый урок по языку программирования XOD IDE.

Представляю первый мой урок по визуальному языку XOD IDE для микроконтроллеров. Язык разрабатывается российской компанией Амперка.

Сайт языка программирования — https://xod.io/

Обещают летом включить в программу помощь на русском языке.

Программирование осуществляется с помощью блоков, это т.н. ноды. Также сами ноды можно создать из самих же нодов и на С++.

Как раз из нодов я написал библиотеки для аналогового датчика температуры LM35 https://xod.io/libs/vitaliysh/lm35-thermometer/lm35-thermome. и датчика освещенности i2c

В следующих уроках я планирую рассказать как писать эти ноды для новичков.

Не пинайте сильно. Это первый опыт. Сейчас подъезжает новый микрофон и звук будет лучше.

Дубликаты не найдены


У меня какая-то аллергия на HiASM\Blueprint подобное программирование, но для привлечения школоты к этой теме — хорошая штука! Ставлю плюс!)

Зависит от сферы применения. Мне, как электронщику, удобно соединять элементы DSP — ассоциация с коммуникацией железных приборов.

Спасибо. Показал XOD одному товарищу, которого я пару лет назад ардуино заинтересовал. Встретил он XOD в штыки, хочет ручками писать скетчи. Не понимает алгоритм программирования блоками. Подавай ему переменные.

а я чет наоборот блоками бы поучился

Как только блоков будет хотя бы пара десятков — взвоешь

следующий шаг это простой СИ, не ардуиновский, на атмеле например, а потом только ассемблер =).

Но, промышленные мк таки чаще блоками программируются

Микроконтроллеров не совсем верно, точнее будет Ардуино. Причем еще большой вопрос, какие из Ардуино-плат поддерживаются.
Тут по-русски чутка есть:
https://xod.io/ru/docs/tutorial/

По поводу отсутствия русского языка, помню мощные бурления были на их канале.

Список большой. Я же пробовал на клонах arduino uno и leonardo. Но не нашел в нем недавно купленную Iskra Nano Pro. Оказывается для Iskra Nano Pro надо добавить в файл your_workspace/__packages__/extra.txt строчку https://raw.githubusercontent.com/amperka/iskra-boards/maste. И все заработало.

Самое интересное это чтобы esp8266 взлетела.

Она есть в виде модуля связи или как целевая борда?

Тут можно посмотреть библиотеки под нее https://xod.io/libs/ и в самом XOD она есть в списке плат для загрузки.

Спасибо, бро, пишет что есть!

хм, видос не смотрел, но за инфу о такой ide плюс. подобное заинтересовало в unreal engine, мобыть за этим будущее? )

DSP Robotics Flowstone удачно совмещает наглядность блочно-модульного программирования с гибкостью Руби и мощью Ассемблера. Мой текущий проект изнутри выглядит так (второй уровень вложения)

Вот моя нода аналогового термометра LM35. Всего один блок и датчик работает. Снизу нода датчика находится отладочный нод для показа в реальном времени данных с датчика. Добавляем нод экрана, соединяем связью с нодом датчика и все. На LCD экране в первой строчке мы видим показания температуры.

Дерзайте дальше, посмотрим, что из этого выльется!

Спасибо. Микрофон сильно подвел и я не спец в видео и стримах.

Ну раз не спец, то, может, статья со скриншотами? Откровенно говоря — ничего не видно из показываемого, вы ездите мышкой по экрану, что-то быстро открываете-закрываете, предлагаете посмотреть код на экране. Меня всегда удивляло, вы серьезно? Что там можно разглядеть?

Сразу видно, что план своего выступления вы не составляли и перед съемкой не тренировались Много лишних слов, а информативность видео практически нулевая. Нельзя такое называть уроком. Мы должны с интересом смотреть, как вы собираете схему на макетной плате? Это же издевательство. Нельзя заранее это сделать было? А для новой схемы нажать на паузу. Вы рассказываете, что куда подключать, а проиллюстрировать это нарисованной схемой не вышло?

Но, может, текстовый вариант урока лучше? С ним можно ознакомиться или это видео и есть — весь урок?

Честно, называть такое видео уроком — перебор. Просили сильно не пинать — не буду. Но все плохо. Единственное — это все, кто не знал, узнали о проекте и адрес сайта. Пожалуй все.

CodeGear IDE для Ruby

Компания CodeGear выложила триальную версию 3rdRail ( > >>> Подробности

Re: CodeGear IDE для Ruby

зачем они это сделали, ведь есть vim

Re: CodeGear IDE для Ruby

vim — а это что RAD? По-моему это VVSAD

Re: CodeGear IDE для Ruby

Ждём релиза NetBeans 6 с поддержкой Ruby.

Пока лично я использую jEdit + Ruby Plugin + кучу других плагинов :)

Re: CodeGear IDE для Ruby

У них же сайт на asp.

Re: CodeGear IDE для Ruby

Borland, значит.. ну-ну..

Re: CodeGear IDE для Ruby

У нее кстати есть RAD для PHP. http://cc.codegear.com/free/delphiphp А как дела у OpenSource?

Re: CodeGear IDE для Ruby

PHP не нужен. Это доказано.

Re: CodeGear IDE для Ruby

А, забыл. Сабж тоже не нужен.

Re: CodeGear IDE для Ruby

Тю, а для Python нима :(

Кстати, это что, их первый продукт под Linux?

Re: CodeGear IDE для Ruby

Ба. Дык этож просто плаг для эклипса.

Re: CodeGear IDE для Ruby

Да, это действительно Borland)

Re: CodeGear IDE для Ruby

» Download Size: 331.8MB » o_OO

а я пока на NetBeans лучше погляжу, раз уж textmate не доступен.

Re: CodeGear IDE для Ruby

>а я пока на NetBeans лучше погляжу

Поглядел.. мда. *ставит емакс на полку, дописывает в требования на ноутбук еще 256-512 метров памяти*

Re: CodeGear IDE для Ruby

В печь проприентарщину. Emacs наше всё. Как только закончу с текущим проектом сделаю из emacs’a такой мега ruby ide что всем проприентарщикам и не снилось, а потом ещё скрещу эти возможности с emacs-rails и будет он лучшим rails IDE, хотя он и сейчас один из лучших.

Re: CodeGear IDE для Ruby

> . *ставит емакс на полку

И что в netbeanse мега такого?

Re: CodeGear IDE для Ruby

зачем они это сделали, ведь есть textmate?

Re: CodeGear IDE для Ruby

>И что в netbeanse мега такого?

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

Ну — возможности отладки там хорошие, все эти автодополнения html-тегов с всплывающим списком полей, то да се, мелочи приятные которых в ruby-electric не было ( или не настроил, что вероятнее). магическое слово «искаропки» ;-)

Re: CodeGear IDE для Ruby

+1. emacs-rails лучшее из опробованных

Re: CodeGear IDE для Ruby

И чем оно лучше в конце концов того же radrails? а скриншотик зачОтный — 7051×3250 — они сначала распечатали а потом со сканера что ли картинку взяли?

Re: CodeGear IDE для Ruby

почему ошибка вылетает?

Re: CodeGear IDE для Ruby

Re: CodeGear IDE для Ruby

Ну а проблема то в чем?

И мне что то ни один IDE не нравится для Ruby, все они какие то кривые.

Re: CodeGear IDE для Ruby

У меня с руби проблем нет, это я отвечал на вопрос анонимуса — anonymous (*) (16.09.2007 12:08:24) > И мне что то ни один IDE не нравится для Ruby, все они какие то кривые.

посмотри textmate http://macromates.com/ только для мака

Re: CodeGear IDE для Ruby

А кто мне объяснит, почему рельсисты так любят сидеть на маке? Да ещё и в textmate.

Re: CodeGear IDE для Ruby

Далеко не все. Уровень не изменится, если поменять ось ;) код не улучшится если пересеть offtopic linux mac you_favorite_OS. Лично я использую линукс. И дома, и на работе.

Re: CodeGear IDE для Ruby

А почему что не скринкаст с рельсами, так обязательно textmate? Вим с емаксом недостаточно гламурные, что ли?

Re: CodeGear IDE для Ruby

Может не те скринкасты смотрите? :) Видел даже один скринкаст, где набирали текст в Notepad’е. в текстмэйте из коробки много чего вкусного и сразу, часть из этого «вкусного» есть в jEdit, вернее в плагинах к нему, но это не из коробки ;) Лень обычно побежает =)

Re: CodeGear IDE для Ruby

забыл добавить: маки и даже хакинтоши не особо распространены в нашей раше

Re: CodeGear IDE для Ruby

> А кто мне объяснит, почему рельсисты так любят сидеть на маке? Да ещё и в textmate.

Сам не могу понять) мода наверное.

Re: CodeGear IDE для Ruby

Re: CodeGear IDE для Ruby

>> А кто мне объяснит, почему рельсисты так любят сидеть на маке? Да ещё и в textmate.

>Сам не могу понять) мода наверное.

Шрифты красивые и настроен удобно «искаробки». И в отличии от java-поделок не тормозит.

А Emacs и vim ещё осилить надо, и интерфейс не гламурный

А еще после использования мака начинают напрягать хоткеи с Ctrl и хоткеи с F1-F12, потому что неудобно нажимать

Re: CodeGear IDE для Ruby

> и интерфейс не гламурный

Ви таки не видели 22й Emacs собранный под Carbon ;)

btw, /me ниасилил textmate

Re: CodeGear IDE для Ruby

> А еще после использования мака начинают напрягать хоткеи с Ctrl и хоткеи с F1-F12, потому что неудобно нажимать

Хоткеи с контролом меня всегда напрягали. Поэтому я забиндил контрол на капс лок и пересатло напрагать. А F1-F12 очень удобны для функций которые не требуют сразу после этого каких либо действий. Например: открытие доки по функции или запуск тестов.

> и интерфейс не гламурный

Ну почему, у меня забиндена на C-c M-g l a m функция, которая перекрашивает бэкграунд в нежно-розывый цвет, а текст делается ярко-розовом. Включаются сглаженные шрифтики и всё начинает весело мигать. Всё очень даже гламурно, девочкам нравится.

Re: CodeGear IDE для Ruby

а не могли бы выложить скриншот этого дела, интересно посмотреть на нежно-розовый цвет и ярко-розовый текст %)

Re: CodeGear IDE для Ruby

> А кто мне объяснит, почему рельсисты так любят сидеть на маке? Да ещё и в textmate.

А кто мне объяснит, почему дизайнеры так любят сидеть на маке? Да еще и в photoshop.

Re: CodeGear IDE для Ruby

>А кто мне объяснит, почему дизайнеры так любят сидеть на маке? Да еще и в photoshop.

Нашим дизайнерам обяснили, что ихние дизайнеры любят сидеть на маге. И теперь наши дизайнеры сидят на магах, чтобы обяснять другим, что дизайнеры должны сидеть на магах. Это магия. Think Different:)

Искусство Ruby №1

В последнее время Ruby, что называется «на
слуху». Однако, не смотря на то, что в
Интернете есть достаточно много материала
по этой теме, разобраться с тем, что же собою
представляет Ruby, в чем его преимущества и в
том, как и где его использовать не совсем
просто. В этой статье я попытаюсь не только
рассказать о языке Ruby, но и о технологиях,
связанных с ним. Я позволю себе снабдить
этот обзор некоторыми комментариями,
которые, возможно, покажутся вам
субъективными. Тем не менее, надеюсь, что
они помогут понять причины такой
популярности нового языка и оценить,
насколько же эффективно его можно
использовать в собственных разработках.

Прежде всего, во избежание путаницы,
давайте разберемся с терминологией. Что
такое
Ruby? В чистом виде, это просто язык
программирования. Кроме того, это
транслятор кода (ruby.exe, если мы говорим о
версии для Win32).

Ruby on Rails – платформа (framework) для
разработки Web приложений на базе Ruby.
FreeRIDE и SciTE — IDE и редактор кода для Ruby.

Инсталляция и начало работы

На сегодняшний день последней версией Ruby
является 1.8.4. С сайта http://www.ruby-lang.org/
можно скачать интерпретатор Ruby и
библиотеки. Можно так же скачать FreeRIDE и SciTE.
К слову, если вы не можете скачать несколько
десятков мегабайт – не расстраивайтесь.
Все это входит в комплект Ruby on Rails, который
публиковался
в Спеце, посвященном
Web.

Для запуска Ruby программы достаточно
набрать ruby .
Естественно при этом не стоит забывать о
путях. Если же вы хотите воспользоваться
FreeRIDE под Windows, то сразу включите опцию «Run
process in terminal» в Debugger Preferences. Конечно, FreeRIDE не
слишком функциональная среда разработки,
но, тем не менее, минимальный набор
необходимых функций она обеспечивает.
Помимо редактора, со стандартным набором
функций и подсветкой синтаксиса
присутствует дебаггер, а также
автоматизирован запуск и остановка
программ. Что еще надо для отладки скриптов?
Итак, запускаем первую программу:

puts ‘hello world ‘

Жмем F5, открывается так называемое
терминальное окно, в котором и отображается
искомая фраза. Не забывайте, что вы имеете
дело с транслятором, поэтому перед запуском
программы модифицированный код
обязательно нужно сохранить в файл. Я
попробовал сразу поставить птичку «save files
before running/debug» (меню «edit/ Preferences… /Debugger/Run»), но
ожидаемого эффекта это не дало. Такие
мелкие багги, конечно, имеют место в IDE.

Я позволю себе маленькое лирическое
отступление. За несколько дней, до того, как
приступить к написанию данного обзора я
общался со своим коллегой на предмет
сравнения языков и принципиальной
возможности и целесообразности «отсечения
тупиковых путей развития языков».
Соответственно, мы затронули и вопрос «строгости»
языков. Нужно ли четко определять типы
переменных, нужно ли обязательно вручную
высвобождать объекты и т.д. И вот здесь была
озвучена прекрасная, на мой взгляд, мысль.
Отсутствие строгости в языках – прекрасно,
более того, оно предоставляет кодерам
некоторые замечательные возможности и в
значительной мере упрощает их работу. Но
все это справедливо тогда и только тогда,
когда программист четко представляет, как
это работает и к каким последствиям это
может привести. В противном случае это
может сильно навредить разработчику и не
только затруднить процесс отладки
программы, но и привести к неявным ошибкам в
алгоритмах, которые очень трудно отловить.
Поэтому, возможно, ответ на часто
задаваемый вопрос о том, какой язык стоит
начинать учить – не столь очевиден. Здесь
следует понимать, что имеет в виду
вопрошающий. Или он знает основы
программирования и пытается выбрать для
себя среду разработки для практической
работы с перспективой на будущее. Или он
просто хочет научиться программировать «с
нуля».

Теперь давайте посмотрим, что собою
представляет Ruby, с точки зрения
вышесказанного. Сразу скажу, что Ruby не
является «Си-образным» языком. Создатели
языка называют это преимуществом. Мне же
синтаксис Ruby напомнил одновременно
синтаксис Бейсика и Паскаля. Здесь имеют
место конструкции «BEGIN … END», «IF … THEN ..» и т.д.
Но есть некоторые особенности синтаксиса,
которых лично я не встречал нигде.

Прежде всего, сразу скажу, что этот язык
чувствителен к регистру. Но не в
классическом понимании, как в С, где нельзя
использовать переменную MyVar вместо myvar. Имя
переменной всегда должно начинаться с
маленькой латинской буквы (например myVar).
Если же мы напишем в коде MyVar, то это уже
будет константа. Весьма интересно, не
правда ли? Возможно, у вас возникнет вопрос:
«А зачем?». Ответ очевиден. Ruby –
транслируемый язык, и компилятор не сможет
вам указать на ошибку при попытке присвоить
константе новое значение. А когда вы
наглядно видите отличие между константой и
переменной (даже в чужом коде), вы постоянно
будете начеку. Как по мне – весьма удобно.

Переменные в Ruby объявлять не надо. При
первом вызове Ruby сам догадается о типе
переменной. Второй пример более интересный:

print(‘Enter your name: ‘ )
name = gets()
puts( «Hello #» )

Здесь программа спрашивает имя пользователя и после его ввода выводит его на экран вместе со словом «Hello». Обратите внимание на то, как передается значение переменной name. Оно как бы врезано непосредственно в строку, при этом признаком переменной является набор символов #<…>. Эквивалентным выражением будет и следующая строка
puts( «Hello » + name). Вместо двойных кавычек можно использовать одинарные, но при этом «врезать» значение переменной уже не удастся.
С тем же успехом можно подставлять значения не только строковых переменных, используя #<…>. Результатом следующего выражения будет вывод на экран числа 9.

Отличие print от puts в том, что в последнем случае происходит перевод строки. Перевод строки можно так же реализовать и с помощью директивы \n, а вставку табуляции — \t. Но это будет работать так же только тогда, когда используется двойная кавычка. Эквивалентом puts(‘Enter your name: ‘ ) будет print(“Enter your name:\n” ).

К слову, круглые скобки – опциональны. Выражение puts «#<(1+2) * 3>» так же будет работать.

Конечно, малоприятным моментом является искажение русской кодировки при работе со строками. Скажем, результатом выполнения следующей строки кода будет некая шифрограмма:


print(‘Введите ваше имя: ‘ )

Я попробовал запустить эту программу в FARe, который спокойно «разговаривает» по-русски, но получил тот же результат. В документации присутствует небольшой раздел, посвященный кодировке, но конкретных рецептов там не приводится.

Объектно-ориентированная концепция Ruby

Конечно, в рамках обзора невозможно полностью описать весь синтаксис языка. Но я не случайно начал с обзора работы со строками. Это связано с тем, как позиционируется язык. Но давайте теперь рассмотрим еще один пример, который продемонстрирует, как происходит преобразование типов в Ruby.

taxrate = 0.175
print «Enter price (ex tax): »
s = gets
subtotal = s.to_f
tax = subtotal * taxrate
puts «vat on $# is $#, so grand total is $# «

Смысл кода, приведенного выше – очевиден. Считается сумма с налогом. Но обратите внимание на строчку

Несложно догадаться, что to_f это метод объекта s. Следовательно, становится очевидным, что любой тем данных в Ruby – класс, а любая переменная – объект, или, если хотите, экземпляр класса. Это очень похоже на концепцию .Net вообще и C# в частности. Более того, если анализировать следующий фрагмент кода x = 1 + 2, то + будет методом, а 2, соответственно, передаваемым ему параметром. С точки зрения концепции языка логичнее было бы написать x=1.+(2) . Мне захотелось проверить это предположение, и я ввел в редакторе кода следующее выражение

Представьте мое удивление, когда в результате выполнения программы на экране высветилась тройка. На самом деле в документации по Ruby позиционируются основные типы данных. Но нужно четко понимать, что на самом деле это классы.

Здесь я не могу не вспомнить одного из интервью David’а I, в котором он сказал, что мечтает реализовать IDE для Ruby в рамках BDS. Лично мне совершенно понятна его заинтересованность в этом. Объектно-ориентированный подход дает массу технологических преимуществ, позволяющих создавать качественные и функциональные IDE продукты и, тем самым, повышать скорость разработки конечных решений. Достаточно вспомнить, что MDA реализация от Borland получила перспективы лишь с переходом на .Net. Учитывая примитивность FreeRide (как же хочется увидеть в редакторе, после нажатия точки, выпадающий список всех методов), у DevCo есть прекрасная перспектива создать средство разработки, которое может стать реальным конкурентом ASP .Net в своем сегменте рынка.

И еще одна маленькая ремарка. В своей предыдущей статье я делал краткий
обзор нового языка
D. И автор этого языка Уолтер Брайт высказывал мысль о том, что объекты уместны лишь там, где это действительно нужно. В Ruby реализован другой принцип – объектами является все. Я не буду судить у преимуществах каждого из этих подходов. На мой взгляд, основной вопрос заключается в том, как правильно этим распорядиться.

Теперь давайте посмотрим, как в Ruby создаются классы. Но прежде немного определимся с терминологией.
Декларация класса начинается со слова class (нижний регистр), затем следует его имя (начинаться должно с верхнего регистра). Заканчивается декларация класса ключевым словом
end.

class Magazine
def set_mag(aName)
@myname=aName
end
def get_mag
return(@myname)
end
end

В теле класса определены два метода set_mag и get_mag. Следующий фрагмент кода проиллюстрирует, как создается экземпляр класса.

likedMagazine = Magazine.new
likedMagazine.set_mag(‘Xakep’)
puts(likedMagazine.get_mag)

Обратите внимание на переменную @myname, используемую внутри методов. Знак «@» перед именем переменной означает, что она определена для каждого экземпляра класса и не может вызываться вне класса. Своеобразный способ задать область видимости или, если угодно, реализовать инкапсуляцию.

Кстати, слово return в методе get_mag – опционально. На самом деле, Ruby в качестве возвращаемого значения возьмет последнее выражение.

Цукерберг рекомендует:  5 ошибок, которые допускают разработчики при поиске работы

То, что Ruby полностью объектно-ориентированный язык доказывает следующая строка.

В качестве результата будет выведено слово Object.
puts self выдаст – main. Обратите внимание на то, что Object с синтаксической точки зрения – константа.

На самом деле все создаваемые в Ruby классы наследуются от класса Object. Среди методов, описанных в этом классе, есть такой как to_s, определяющий строковое представление класса. Что бы проверить это, достаточно в последнем примере дописать еще одну строку

Программа выдаст вполне корректный, хотя и малоосмысленный результат.
Классы в Ruby никогда не бывают закрытыми. В существующий класс всегда можно добавить метод. Это работает как для стандартных классов, так и для «самописных». Иными словами мы всегда можем переопределить метод стандартного класса в наследнике.

class Magazine
def set_mag(aName)
@myname=aName
end
def get_mag
return(@myname)
end
def to_s
@myname
end
end

likedMagazine = Magazine.new
likedMagazine.set_mag(‘Xakep’)
puts likedMagazine.to_s

В приведенном выше коде показано переопределение метода to_s. Теперь результатом выполнения программы буде не внутренний идентификатор объекта, а название (точнее, значение внутренней переменной myname) журнала.

Еще один метод, описанный в классе Object – initialize. Это специальный метод, который вызывается при создании объекта. Он может оказаться очень удобным для задания начальных значений переменных создаваемого объекта.

Теперь давайте попробуем разобраться с наследованием в Ruby. Естественно, что эта концептуальная идея ООП так же реализована. Вот пример реализации:

class Magazine
def set_mag(aName)
@myname=aName
end
def get_mag
return(@myname)
end
def to_s
@myname
end
end

Ruby на прямую не поддерживает множественного наследования, т.е. у класса может быть непосредственно только один родитель. Однако в Ruby классы можно подключать модули и, соответственно, отдельные методы модуля могут вызываться как отдельные модули класса. Эта возможность носит название Mixin. Но прежде всего давайте разберемся с понятием модуль. Модули в Ruby очень напоминают паскалевские
(unit).

module Trig
PI = 3.141592654
def Trig.sin(x)
# .. , кстати, комментарий в Ruby — #

Выше приведен пример описания модуля. Подключение внешних модулей (т.е. тех модулей, которые размещены в другом файле) выполняется с помощью ключевого слова require.

require «trig»

А вызов производится с использованием точечной нотации.

Точка используется перед вызовом метода, а двойное двоеточие – перед обращением к константе.

Таким образом, модули могут объединять в себе константы, классы и методы. Тем не менее, модуль – не более чем пространство имен. В одном файле может быть размещено несколько модулей.
Когда подключается модуль, Ruby создает безымянный класс, который ссылается на этот модуль и подставляет его как отдельный суперкласс для класса, в который он подключается. Немного запутанно, но, тем не менее, на практике все выглядит достаточно просто.

В класс можно подключать несколько модулей одновременно. Однако, нужно следить за тем, что бы имена методов внутри модулей не пересекались.

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

Массивы в Ruby, в отличии от большинства языков могут объединять в себе данные разных типов. При этом в качестве элемента массива может использоваться даже метод некоторого класса, при условии, что он возвращает какое-либо значение.

a1 = [1,’two’, 3.0, array_length( a0 ) ]

Нумерация элементов массива начинается с 0.
Обращение к элементу массива по его индексу можно осуществлять следующим образом:

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

print( arr[0,4] )
print( arr[0,5] )

Для создания массива достаточно его просто определить в коде. Но, не стоит забывать, что массив, как и все остальное в Ruby, это класс. Поэтому можно использовать и такой синтаксис.

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

a = Array.new(2)
a[0]= Array.new(2,’hello’)
a[1]= Array.new(2,’world’)

Оператор ветвления задается конструкцией if … then … end. Например:

Логично, что между then и end может ставиться else.
Если сравнивать с Паскалем, то объективно, такая конструкция немного удобнее, ведь тогда не имеет смысла использовать блоки. Блоки, к слову задаются конструкцией

Противоположностью if является конструкция unless (если не):

unless aDay == ‘Saturday’ or aDay == ‘Sunday’
daytype = ‘weekday’
else
daytype = ‘weekend’
end

Как и в большинстве других языков в Ruby есть несколько вариантов организации циклов, каждый из которых удобен в разных конкретных случаях. Две конструкции цикла приведены в следующем примере. Думаю, комментарии излишни.

# for
for x in [1, «two», [3,4,5] ] do puts( x ) end
# each
[1, «two», [3,4,5] ].each do |x| puts( x ) end

К слову, в последней версии Delphi Language также введена конструкция for … in, именно с целью облегчить работу с классами.

А таким образом работает цикл While:

a=0
begin
puts a
a=a+1
end while a

Так же в Ruby можно использовать цикл until:

i = 10
until i == 10 do puts(i) end # never executes
until i == 10 # never executes
puts(i)
i += 1
end

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

В заключение хочу сказать, что все вышеизложенное не абстракция. На Ruby разрабатываются реальные Веб-приложения. Во второй части я попытаюсь рассказать о практической стороне Ruby, а собственно о том, как создаются приложения на платформе Ruby on Rails. Думаю, что преимущества и недостатки синтаксиса Ruby станут более очевидными.

Построение рабочего места Ruby on Rails-разработчика на базе IDE NetBeans Текст научной статьи по специальности « Автоматика. Вычислительная техника»

Аннотация научной статьи по автоматике и вычислительной технике, автор научной работы — Шелудько С.Д., Науменко А.М., Радыгин В.Ю.

Данная статья посвящена исследованию вопроса формирования рабочей среды для разработчика веб приложений на базе фреймворка Ruby on Rails . Выполнен подробный анализ существующих технологий и программных продуктов. Показано отсутствие или экономическая несостоятельность готовых полноценных решений. Обосновано преимущество расширения среды разработки NetВeans для формирования готово рабочего места Ruby on Rails программиста. Показано, что создание полноценного решения требуется интеграция в данный фреймворк дополнительных языковых модулей: модуля языка разметки HAML и модуля библиотеки JBuilder. Выполнен подробный анализ существующих программных средств автоматического построения лексического и синтаксического анализаторов языка. Доказано преимущество технологии ANTLR и объектно-ориентированного языка программирования Java для решения поставленной задачи. Рассмотрены все необходимые конструкции, задействованные при разработке языковых модулей для языка разметки HAML и библиотеки JBuilder. На примере создания языкового модуля HAML раскрыты основные технологические этапы проектирования собственных языковых дополнений для среды разработки NetBeans. Показана структура классов готового лексического анализатора, используемого для синтаксической раскраски, автодополнения, автоматического выравнивания и анализа ошибок HAML программ. Рассмотрен пример функционирования готового языкового HAML модуля. Описано преимущество полученного полноценного программного решения. Подчёркнута возможность применения отработанных технологий для решения аналогичных задач. Отмечено экономическое преимущество исследованных технологий, достигаемое за счёт использования бесплатного программного обеспечения.

Похожие темы научных работ по автоматике и вычислительной технике , автор научной работы — Шелудько С.Д., Науменко А.М., Радыгин В.Ю.,

Design of Integrated Development Environment for Ruby on Rails Programmers Based on Netbeans Platform

This article is devoted to design of integrated development environment for web-developers, whose site works based on framework Ruby on Rails . A detailed analysis of modern integrated development environments and attendant technologies is performed. Lack or economic inexpediency of existing programming products is shown. The advantages of using of Netbeans Platform for design new Integrated Development Environment for Ruby on Rails is proved. Two main directions of solving this problem are revealed. The first point is HAML language module. The second point is JBuilder syntax highlighting module. A detailed analysis of tools for automatic design of lexical analyzers and parsers is performed. The advantages of using ANTLR technology and Java object-oriented language are shown. All necessary constructions applied for development of HAML language and JBuilder syntax highlighting modules are described. By example of HAML language module the main technological stages are shown. Advantages of the created product are disclosed. Example of using HAML language module as a part of fully-functionality integrated development environment is shown. Economic benefits of using only free soft are emphasized.

Текст научной работы на тему «Построение рабочего места Ruby on Rails-разработчика на базе IDE NetBeans»

О технологиях. Просто

Главная Научный журнал Новости IT-help Контакты

Купить, снять квартиру.

ЦИАН — продажа, аренда недвижимости. Подбор квартиры по параметрам, поиск по карте! cian.ru

Построение рабочего места Ruby on Rails-разработчика на базе IDE Netbeans

Design of Integrated Development Environment for Ruby on Rails Programmers Based on Netbeans Platform

Шелудько С.Д., Науменко А.М., Радыгин В.Ю. Построение рабочего места Ruby on Rails-разработчика на базе IDE Netbeans //ИТпортал, 2020 №2 (17). URL: http://itportal.ru/science/tech/postroenie-rabochego-mesta-ruby-on-/

Шелудько С.Д. 1, Науменко А.М.2, Радыгин В.Ю.3

1 студент 4-го курса бакалавриата по направлению «Информационные системы и технологии», ФГАОУ ВО Национальный исследовательский ядерный университет «МИФИ», Москва, Российская Федерация (115409, г. Москва, Каширское ш., 31), e-mail: sheludko.serg@gmail.com.

2 студент 4-го курса бакалавриата по направлению «Информационные системы и технологии», ФГАОУ ВО Национальный исследовательский ядерный университет «МИФИ», Москва, Российская Федерация (115409, г. Москва, Каширское ш., 31), e-mail: naumenko.mephi@gmail.com.

3 к.т.н., доцент кафедры финансового мониторинга, ФГАОУ ВО Национальный исследовательский ядерный университет «МИФИ», Москва, Российская Федерация (115409, г. Москва, Каширское ш., 31), email: vyradygin@mephi.ru.

Sheludko S.D.1, Naumenko A.M.2, Radygin V.Yu.3

1 fourth year BA-student, specialty»Information systems and technologies», National Research Nuclear University MEPhI (Moscow Engineering Physics Institute), Moscow, Russian Federation (115409, Moscow, Kashirskoe shosse, 31), e-mail: sheludko.serg@gmail.com.

2 fourth year BA-student, specialty»Information systems and technologies», National Research Nuclear University MEPhI (Moscow Engineering Physics Institute), Moscow, Russian Federation (115409, Moscow, Kashirskoe shosse, 31), e-mail: naumenko.mephi@gmail.com.

3 Ph.D., assistant professor of dept. Financial Monitoring, National Research Nuclear University MEPhI (Moscow Engineering Physics Institute), Moscow, Russian Federation (115409, Moscow, Kashirskoe shosse, 31), e-mail: vyradygin@mephi.ru.

Ruby on Rails, HAML, IDE NetBeans, ANTLR, Java, плагин Keyword:

Ruby on Rails, HAML, IDE NetBeans, ANTLR, Java, plug-in Аннотация:

Данная статья посвящена исследованию вопроса формирования рабочей среды для разработчика веб приложений на базе фреймворка Ruby on Rails. Выполнен подробный анализ существующих технологий и программных продуктов. Показано отсутствие или экономическая несостоятельность готовых полноценных решений. Обосновано преимущество расширения среды разработки NetВeans для формирования готово рабочего места Ruby on Rails программиста. Показано, что создание полноценного решения требуется интеграция в данный фреймворк дополнительных языковых модулей: модуля языка разметки HAML и модуля библиотеки JBuilder. Выполнен подробный анализ существующих

Главная страница журнала

IT и технические науки

Экономические науки О журнале Редакция Общая лента Выпуски

Опубликовать статью. Авторам

© Инвестиции от 10$

* AJpari limited Доходность в прошлой не может

программных средств автоматического построения лексического и синтаксического анализаторов языка. Доказано преимущество технологии ANTLR и объектно-ориентированного языка программирования Java для решения поставленной задачи. Рассмотрены все необходимые конструкции, задействованные при разработке языковых модулей для языка разметки HAML и библиотеки JBuilder. На примере создания языкового модуля HAML раскрыты основные технологические этапы проектирования собственных языковых дополнений для среды разработки NetBeans. Показана структура классов готового лексического анализатора, используемого для синтаксической раскраски, автодополнения, автоматического выравнивания и анализа ошибок HAML программ. Рассмотрен пример функционирования готового языкового HAML модуля. Описано преимущество полученного полноценного программного решения. Подчёркнута возможность применения отработанных технологий для решения аналогичных задач. Отмечено экономическое преимущество исследованных технологий, достигаемое за счёт использования бесплатного программного обеспечения.

This article is devoted to design of integrated development environment for web-developers, whose site works based on framework Ruby on Rails. A detailed analysis of modern integrated development environments and attendant technologies is performed. Lack or economic inexpediency of existing programming products is shown. The advantages of using of Netbeans Platform for design new Integrated Development Environment for Ruby on Rails is proved. Two main directions of solving this problem are revealed. The first point is HAML language module. The second point is JBuilder syntax highlighting module. A detailed analysis of tools for automatic design of lexical analyzers and parsers is performed. The advantages of using ANTLR technology and Java object-oriented language are shown. All necessary constructions applied for development of HAML language and JBuilder syntax highlighting modules are described. By example of HAML language module the main technological stages are shown. Advantages of the created product are disclosed. Example of using HAML language module as a part of fully-functionality integrated development environment is shown. Economic benefits of using only free soft are emphasized.

На сегодняшний день разработка крупной коммерческой информационной системы невозможна без использования фреймворков или аналогичных им программных систем. Для каждого из популярных на сегодняшний день языков построения веб-ориентированных приложений существует целый спектр подобных средств. Например, высокую востребованность имеют следующие фреймворки: ASP.NET MVC Framework для языков программирования семейства .NET (таких, как C#, Visual Basic.NET, JScript.NET), Django для скриптового языка Python, Spring Framework для языка программирования Java, AngularJS для языка JavaScript и другие.

В последнее десятилетие особо активное развитие демонстрирует фреймворк Ruby on Rails [1]. Согласно статистике Австралийского независимого агентства BuiltWith [2], фреймворк Ruby on Rails в той или иной мере лежит в основе десятой части самых посещаемых сайтов Интернета. Работы различных авторов подтверждают популярность данной системы, как за рубежом, так и в нашей стране. Например, перспективы использования Ruby on Rails в своих статьях рассматривают П. Вагстрём (P. Wagstrom) [3] и Д.Ю. Куприянов [4, 5], Вишванатан (Viswanathan) [6].

Особую популярность данной системы обуславливают три фактора: полноценная реализация MVC (ModelView-Controller) шаблона проектирования, базирование на современном языке программирования Ruby и универсальная поддержка взаимодействия с большинством популярных систем управления базами данных, включая как поддержку реляционных баз данных на уровне объектно-реляционного преобразователя (например, PostgreSQL, Oracle, MySQL и т.д.), так и поддержку NoSQL систем (например, MongoDB).

Системы, базирующиеся на шаблоне проектирования MVC, обычно не ограничены одним языком разработки, а объединяют в своей основе целый пакет языков, начиная с языков разметки и заканчивая языками низкого уровня. В частности, крупное коммерческое Ruby on Rails приложение может включать в себя комбинацию языков SQL, Ruby, С (или C++) на уровне моделей, комбинацию языков Ruby и C (или C++) на уровне контроллеров, и комбинацию целой россыпи языков на уровне представлений (интерфейсной части), в том числе языки: Ruby, ERB, HAML, JavaScript, Sass, CSS, SCSS, CoffeeScript, LaTeX, MarkDown, YAML и т.д. Такое разнообразие программных средств накладывает серьёзные квалификационные требования не только на самих разработчиков, но и на их рабочее место. Использование несвязанных инструментов, таких как: текстовый редактор, компилятор, отладчик, система контроля версий и т.д. в такой ситуации невозможно. Потери большого количества времени, а, главное, концентрации разработчика, обусловленные переключением между компонентами, приводят к снижению общей эффективности программистов, как отдельных производственных единиц, так и целых трудовых коллективов. Оптимизировать процесс реализации проекта позволяет полноценное рабочее место, сформированное на основе интегрированной среда разработки (IDE).

Интегрированные среды разработки в последнее время стали неотъемлемой частью рабочего процесса как разработчиков программного обеспечения, так и специалистов других областей науки и промышленности. Данная тематика подробно раскрыта в работах многих авторов. Например Х. Танк (H. Tunc) в своей работе [7] рассматривает вопрос разработки веб-ориентированного IDE для событийных приложений. Д. Лиу (D. Liu) исследует вопрос разработки IDE для микросервисного программирования [8]. Ф Кремона (F. Cremona) в своём исследовании [9, 20, 21] раскрывает особенности использования IDE при проектировании элементов приложений, использующих Mock-up-технологии.

Большое внимание уделено интегрированным средам разработки и среди учёных других научных областей. Например, С Крупицер (C. Krupitzer) [10] показывает использование IDE для проектирования электронных схем, Л.-Е.И. Куадрадо (L.-E.I. Cuadrado) [11] — для обучения роботов, Б. Шётц (B. Schätz), [12] — для решения физических задач, С. Грун (Grun, C.) [13] — для решения задач нанотехнологий. Таким образом, вопрос использования интегрированных сред разработки для формирования рабочих мест разработчика и исследователя на сегодняшний день крайне актуален.

С другой стороны, сегодня существует большое число программных продуктов предназначенных для обеспечения нужд Ruby on Rails-девелоперов. Все они в той или иной мере претендуют на роль полноценной среды разработки, формирующей рабочей место веб-программиста. К сожалению, все они обладаю рядом существенных недостатков. В частности, к таким программным продуктам можно отнести бесплатные системы NetBeans от компании Oracle и Aptana Studio (на основе Eclipse), редактор Atom с набором Ruby on Rails плагинов и коммерческую систему RubyMine от компании JetBrains.

RubyMine является платной средой разработки и ориентирована исключительно на Ruby on Rails. Данная однобокость этого продукта не даёт возможности использовать его в проектах совмещающих технологию Ruby on Rails с другими современными технологиями, такими как, Java-фреймворки или C++-приложения. Более того, проприетарность данного продукта не позволяет крупным компаниям осуществить её доработку для собственных нужд.

С бесплатными продуктами также есть ряд проблем. Aptana Studio больше не поддерживается на должном уровне. Редактор Atom не является средой разработки в своей основе, что затрудняет как работу с ним, так и его дальнейшее развитие. NetBeans не поддерживает ряд современных Ruby on Rails технологий, так как начиная с версии 7.0 модуль поддержки языка Ruby и фреймворка Ruby on Rails не входит в состав его стандартной сборки, а предоставляется в виде плагина.

Таким образом, можно смело говорить о необходимости создания полноценного рабочего места Ruby on Rails-разработчика и его востребованности в мире.

Из рассмотренных существующих систем некоторые являются универсальными и широко используются программистами при создании приложений на основе множества языков отличных от языка Ruby. Наибольший интерес среди них представляет среда разработки NetBeans, которая является одной из наиболее востребованных систем в мире [14]. При этом данная IDE является кросс-платформенной и поддерживает многие языки программирования и веб-технологии, используемые одновременно с Ruby on Rails в крупных проектах. Причём одной из ключевых особенностей этой среды является возможность написания собственного плагина для добавления ещё не поддерживаемого языка.

Всё вышесказанное показывает возможность использования NetBeans как основы для построения полноценного рабочего места Ruby on Rails-разработчика, но не устраняет её недостатков. Среди них можно выделить два основных: отсутствие поддержки языка разметки HTML-представлений HAML и отсутствие поддержки средства формирования JSON-представлений JBuilder. Разработка данных языковых модулей и их последующая интеграция с уже существующими модулями поддержки языка Ruby и фреймворка Ruby on Rails позволит значительно повысить востребованность IDE NetBeans в среде Ruby on Rails разработчиков и даст возможность сформировать полноценное рабочее место современного веб программиста.

Актуальность задачи определила необходимость разработки данных языковых модулей средствами программистов НИЯУ МИФИ.

Разработка языкового модуля для IDE NetBeans

Для реализации языковых модулей NetBeans были построены программные реализации лексического и синтаксического анализаторов [15]. Программная реализация должна была быть выполнена на базовом языке IDE NetBeans (Java) и встроена в полноценный плагин-проект. Особенную сложность при разработки данных плагинов определяет тот факт, что и HAML и JBuilder являются композициями нескольких языков. HAML по своей сути является композицией трёх языков Ruby, HTML и новых языков элементов, задаваемых самим HAML. JBuilder — это комбинация Ruby и новых элементов, определяемых самим JBuilder. Так как языки похоже, но HAML сложнее по своей структуре, то далее будем рассматривать только модуля для языка HAML. Схема взаимодействия лексического и синтаксического анализаторов показана на рисунке 1.

Рис. 1. Принципиальная схема анализа

Существуют два способа создания лексического и синтаксического анализаторов: самостоятельное описание алгоритма его работы на языке программирования и автоматическая генерация программного кода на основе формального описания языка с помощью специализированных программных средств. Для написания плагина поддержки языка HAML для NetBeans более приемлема автоматическая генерация анализатора, так как его самостоятельная разработка — процесс излишне трудоёмкий, затраты на который не оправдывают потенциальной выгоды (пользы) от разработанного языкового модуля. В качестве программного средства генерации синтаксического и лексического анализаторов использовался генератор нисходящих анализаторов [16] для формальных языков ANTLR [17]. Такой выбор был сделан по следующим причинам: ANTLR, в отличие от большинства альтернативных продуктов, таких как, например, Flex и Bison, предоставляет возможность генерации обоих анализаторов, и лексического (далее лексера) и синтаксического (далее парсера). Это позволяет использовать одно программное средство для решения обеих задач. Кроме того, одним из возможных целевых языков генерируемого кода ANTLR является язык Java, являющийся основным языком разработки плагины для NetBeans. Не менее важно, что ANTLR является широко используемым программным средством с подробной документацией и большим сообществом.

Для реализации, непосредственно, HAML-плагина был выбран ANTLR версии 3.5.2. На данный момент существует более поздняя версия ANTLR — 4.5.3, но в ней отсутствует поддержка автоматического построения деревьев разбора [18], что затрудняет её использование для решения поставленной задачи.

ANTLR генерирует код лексера и парсера на основе файла с расширением *.g. Синтаксис подобных файлов довольно прост, что делает их удобными для описания формального языка. Каждый g-файл начинается с ключевого слова grammar, определяющего название грамматики [19] (указывается сразу после него). Название грамматики должно совпадать с названием самого файла. Далее может идти блок опций, начинающийся с ключевого слова options. Доступный для ANTLR версии 3.5.2 ряд опций приведён в таблице 1.

Опции грамматики для ANTLR версии 3.5.2

language Целевой язык для генерации. Доступные языки генерации: Java, C/C++, C#, Python, Ruby и другие. При отсутствии данной опции целевым языком является Java

tokenVocab Позволяет описывать грамматики лексера и парсера в разных файлах. Опция задает имя грамматики лексера, из которой парсер возьмёт идентификаторы токенов.

output Задает тип структуры данных, возвращаемый парсером. Возможные значения: AST или template.

ASTLabelType Задает тип возвращаемого парсером дерева разбора. Возможные значения: CommonTree или собственный класс. По умолчанию ANTLR генерирует парсер, возвращающий дерево типа CommonTree.

TokenLabelType Задает тип возвращаемых лексером токенов. Возможные значения: CommonToken или собственный класс. По умолчанию ANTLR генерирует лексер, возвращающий токены типа CommonToken.

superclass Задает суперкласс для лексического или синтаксического анализаторов. Используется в тех

случаях, когда необходимо переопределить стандартные методы класса лексера или парсера. При отсутствии опции лексический анализатор наследуется от класса Lexer, синтаксический анализатор — от класса Parser.

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

rewrite Необходим в тех случаях, когда входной поток после работы парсера должен измениться. Значение по умолчанию — false.

k Задает ограничение для LL(k)-анализатора на количество токенов, доступных для предварительного просмотра. Опция уменьшает время работы парсера, однако может вызвать его некорректную работу. По умолчанию для предпросмотра доступны все токены, т.е. используется LLO-анализатор.

backtrack Меняет алгоритм выделения нужной альтернативы в правилах разбора с LLO-анализатора, где для однозначного выделения нужной альтернативы поток токенов просматривается вперед на нужное кол-во элементов, на алгоритм с откатами. Возможные значения: true, false. Значение по умолчанию — false.

memoize При алгоритме с откатами (backtrack = true) можно включить опцию memoize, которая позволяет запоминать применение правила к определенной позиции, таким образом, одна и та же последовательность токенов не может быть обработана синтаксическим анализатором более одного раза. В некоторых случаях существенно уменьшает время разбора, но требует больших ресурсов памяти. Возможные значения: true, false. Значение по умолчанию — false.

Пример использования блока options показан на рисунке 2.

language = Java; backtrack=true; memoize=true; output=AST;

Рис 2. Пример использования блока options

После блока options могут идти блоки @header и @members. В блоке @header располагается код, который будет помещен в начало генерируемого файла. В блоке @members располагается код, который будет помещен в тело классов лексического и синтаксического анализаторов. При помощи конструкции @lexer:: и @parser:: можно задать @header и @members для лексера и парсера раздельно. Пример использования блоков @header и @members показан на рисунке 3.

Блок @rulecatch позволяет заменить стандартное содержимое catch-раздела для каждого правила. Пример использования блока @rulecatch показан на рисунке 4.

Правила лексического анализатора задаются в верхнем регистре и представляют из себя шаблоны идентификаторов токена. Правила синтаксического анализатора задаются в нижнем регистре и представляют из себя шаблон корректной последовательности токенов. Шаблоны задаются через двоеточие после названия правила, в конце ставится точка с запятой. Их синтаксис во многом основан на регулярных выражениях. При создании плагина использовались конструкции языка ANTLR, показанные в таблице 2.

Основные конструкции языка ANTLR

(. )* повторение подправила 0 или более раз

(. )+ повторение подправила 1 или более раз

(. )? подправило, может отсутствовать или встречаться один раз

<. >семантические действия (на языке, использующемся в качестве выходного)

Ide — IDE для языка программирования Ruby

Eric — интегрированная среда разработки для языков программирования Python и Ruby.

Интерфейс программы выполнен в классическом IDE-стиле. Главная рабочая область разделена на несколько окон (подобластей). Каждое окно содержит дополнительные вкладки. Расположение окон можно настраивать.

При первом запуске программы открывается окно конфигурации, в котором представлено множество настроек.

Поддерживается автодополнение кода, настраиваемая подсветка синтаксиса, сворачивание блоков кода, проверка синтаксиса, продвинутый поиск по проекту, интегрированная система документации, отладка кода, профилирование, тестирование и многое другое.

Eric написан с использованием библиотеки Qt. Распространяется бесплатно и доступен для Linux и Windows.

Понравилась статья? Поделиться с друзьями:
Все языки программирования для начинающих