Ниже преведен график популярности использования браузеров
среди пользователей России:
Рисунок 9 - График популярности браузеров.
В порядке убывания: Chrome,
Firefox, Opera, IE, Safari.
2. Концепция предлагаемого решения
#
C# - объектно-ориентированный язык программирования. Разработан в 1998-2001 годах группой инженеров под руководством Андерса Хейлсберга в компании Microsoft как язык разработки приложений для платформы Microsoft.NET Framework и впоследствии был стандартизирован как ECMA-334 и ISO/IEC 23270.# относится к семье языков с C-подобным синтаксисом, из них его синтаксис наиболее близок к C++ и Java. Язык имеет статическую типизацию, поддерживает полиморфизм, перегрузку операторов (в том числе операторов явного и неявного приведения типа), делегаты, атрибуты, события, свойства, обобщённые типы и методы, итераторы, анонимные функции с поддержкой замыканий, LINQ, исключения, комментарии в формате XML.
Java
Java - объектно-ориентированный язык программирования, разработанный компанией Sun Microsystems (в последующем приобретённой компанией Oracle). Приложения Java обычно транслируются в специальный байт-код, поэтому они могут работать на любой виртуальной Java-машине вне зависимости от компьютерной архитектуры. Дата официального выпуска - 23 мая 1995 года.
Программы на Java транслируются в байт-код, выполняемый виртуальной машиной Java (JVM) - программой, обрабатывающей байтовый код и передающей инструкции оборудованию как интерпретатор.
Достоинством подобного способа выполнения программ является полная независимость байт-кода от операционной системы и оборудования, что позволяет выполнять Java-приложения на любом устройстве, для которого существует соответствующая виртуальная машина. Другой важной особенностью технологии Java является гибкая система безопасности благодаря тому, что исполнение программы полностью контролируется виртуальной машиной. Любые операции, которые превышают установленные полномочия программы (например, попытка несанкционированного доступа к данным или соединения с другим компьютером) вызывают немедленное прерывание.
Pascal
Паскаль (англ. Pascal) - язык программирования общего назначения. Один из наиболее известных языков программирования, используется для обучения программированию в старших классах и на первых курсах вузов, является базой для ряда других языков.
Особенностями языка являются строгая типизация и наличие средств структурного (процедурного) программирования. Паскаль был одним из первых таких языков. По мнению Вирта, язык должен способствовать дисциплинированному программированию, поэтому, наряду со строгой типизацией, в Паскале сведены к минимуму возможные синтаксические неоднозначности, а сам синтаксис автор постарался сделать интуитивно понятным даже при первом знакомстве с языком.
Тем не менее, первоначально язык имел ряд ограничений: невозможность передачи функциям массивов переменной длины, отсутствие нормальных средств работы с динамической памятью, ограниченная библиотека ввода-вывода, отсутствие средств для подключения функций написанных на других языках, отсутствие средств раздельной компиляции и т.п. Подробный разбор недостатков языка Паскаль того времени был выполнен Брайаном Керниганом в статье «Почему Паскаль не является моим любимым языком программирования» (эта статья вышла в начале 1980-х, когда уже существовал язык Модула-2, потомок Паскаля, избавленный от большинства его пороков, а также более развитые диалекты Паскаля). Некоторые недостатки Паскаля были исправлены в ISO-стандарте 1982 года, в частности, в языке появились открытые массивы, давшие возможность использовать одни и те же процедуры для обработки одномерных массивов различных размеров.
Однако многие недостатки языка не проявляются или даже становятся достоинствами при обучении программированию. Кроме того, по сравнению с основным языком программирования в академической среде 1970-х (которым был Фортран, обладавший гораздо более существенными недостатками), Паскаль представлял собой значительный шаг вперёд. К 1980-м годам Паскаль стал основой для многочисленных учебных программ, в отдельных случаях на его основе были созданы специализированные обучающие языки программирования, так, в начале 1980-х годов в СССР для обучения школьников основам информатики и вычислительной техники Андрей Ершов разработал алголо-паскалеподобный «учебный алгоритмический язык».
Наиболее известной реализацией Паскаля, обеспечившей широкое распространение и развитие языка, является Turbo Pascal фирмы Borland, выросшая затем в объектный Паскаль для DOS (начиная с версии 5.5) и Windows и далее в Delphi, в которой были внедрены значительные расширения языка.
Диалекты Паскаля, применяемые в Turbo Pascal для DOS и Delphi для Windows, стали популярны из-за отсутствия других успешных коммерческих реализаций.
Fortran
Фортра́н (Fortran) - первый язык программирования высокого уровня, имеющий транслятор. Создан в период с 1954 по 1957 год группой программистов под руководством Джона Бэкуса в корпорации IBM (язык Планкалкюль, претендующий на пальму первенства, был изобретён ещё в 1945 году, но не был реализован вплоть до 2000 года). Название Fortran является сокращением от FORmula TRANslator (переводчик формул). Фортран широко используется в первую очередь для научных и инженерных вычислений. Одно из преимуществ современного Фортрана - большое количество написанных на нём программ и библиотек подпрограмм. Среди учёных, например, ходит такая присказка, что любая математическая задача уже имеет решение на Фортране, и, действительно, можно найти среди тысяч фортрановских пакетов и пакет для перемножения матриц, и пакет для решения сложных интегральных уравнений, и многие, многие другие.
Python
Python (МФА: [ˈpʌɪи(ə) n]; в русском языке распространено название пито́н) - высокоуровневый язык программирования общего назначения, ориентированный на повышение производительности разработчика и читаемости кода. Синтаксис ядра Python минималистичен. В то же время стандартная библиотека включает большой объём полезных функций.поддерживает несколько парадигм программирования, в том числе структурное, объектно-ориентированное, функциональное, императивное и аспектно-ориентированное. Основные архитектурные черты - динамическая типизация, автоматическое управление памятью, полная интроспекция, механизм обработки исключений, поддержка многопоточных вычислений и удобные высокоуровневые структуры данных. Код в Питоне организовывается в функции и классы, которые могут объединяться в модули (они в свою очередь могут быть объединены в пакеты).
Эталонной реализацией Python является интерпретатор CPython, поддерживающий большинство активно используемых платформ. Он распространяется под свободной лицензией Python Software Foundation License, позволяющей использовать его без ограничений в любых приложениях, включая проприетарные. Есть реализации интерпретаторов для JVM (с возможностью компиляции), MSIL (с возможностью компиляции), LLVM и других. Проект PyPy предлагает реализацию Питона на самом Питоне, что уменьшает затраты на изменения языка и постановку экспериментов над новыми возможностями.- активно развивающийся язык программирования, новые версии (с добавлением / изменением языковых свойств) выходят примерно раз в два с половиной года. Вследствие этого и некоторых других причин на Python отсутствуют стандарт ANSI, ISO или другие официальные стандарты.
Small Basic
Microsoft Small Basic - очень простой язык программирования и не менее простая среда разработки с интуитивно понятным интерфейсом. Разработан компанией Microsoft. Предназначен для начинающих разработчиков, желающих постигнуть основы создания программ.
Small Basic был выбран для данного проекта в связи с тем,
что он обладает максимально оптимальным соотношением простоты языка и
функционала.
Метод Co-Array представляет собой реализацию параллельного программирования на языке фортран. Данный метод был взят за основу в разработке решения проблемы дипломной работы.
За основу этого метода была заимствована модель программирования SPMD (SingleProgramMultipleData). Эту модель можно сравнить с MPI, то суть та же - мы пишем наше приложение, копии которого будут выполняться определенное количество раз параллельно. При этом у каждой копии имеются свои локальные данные. Те данные, к которым необходим доступ из разных копий, описываются с помощью специального синтаксиса, именуемого как Coarray.
Для понимания достаточно привести простой HelloWorld пример:hello(*,*) «Helloworld»program hello
Собственно, самый обычный код. Но скомпилировав его с с ключём - coarray (компилятором Intel), мы увидим «Hello world» из нескольких разных копий программы, или, в терминах Coarray, из разных Imagies (образов). Причём их число можно контролировать, например, через ключ - coarray-num-images=x, или переменную окружения FOR_COARRAY_NUM_IMAGES. Так же существует способ определять, в каком образе происходит выполнение.
Усложним наш пример:hello_image(*,*) «Hello from image», this_image(), «out of», num_images(),» total images «
end program hello_image
После запуска мы увидим следующие строки:
Hello from image 1out of 4 total imagesfrom image 4out of 4 total imagesfrom image 2out of 4 total imagesfrom image 3out of 4 total images
Очевидно, что наше приложение было выполнено 4 раза (4 копии / образа). Имея эти данные о Coarray, мы в принципе, уже способны создавать параллельные приложения.
Но пока они не принесут нам пользы, потому что нет ответа на главный вопрос - как быть с данными? Для этого потребуется простой синтаксис:, codimension[*]: x: y[*]
Квадратные скобки означают, что мы используем Сoarray.
В данном примере это просто скаляры, которые так же доступны в каждой копии программы. Но теперь мы можем обратиться к значению этого скаляра в нужной нам копии (образе).
Например, написав y[2] программа обратится к значению y в образе 2. Это открывает возможности для «настоящей» параллельной работы с данными.
Так же, существует ряд логичный ограничений, накладываемых на Сoarray’и, как, например, любая попытка связать объект Сoarray с другим объектом через указатели, или передача объектов Сoarray в С код.
Стоит рассмотреть ещё несколько примеров, считая ранее объявленной переменную x как Сoarray:= 42.0
В данном случае, мы оперируем с локальной для образа переменной х.
Как только в нашем коде появляются квадратные скобки - это явный указатель на то, что происходит доступ с переменной в другом образе программы:
· x[3] = 42.0! задаёт значение х равное 42 в образе 3
· x = x[1]! присваиваем локальной для текущего образа переменной х значение из образа 1
· x[i] = x[j]! присваиваем переменной х в образе I значение переменной х из образа j
Основной плюс Coarray в том, что в отличие от чистого MPI, нет необходимости заботимся о посылке или приеме сообщений. Кроме того, код будет работать как на системах с распределённой памятью, так и на системах с общей. Достаточно только поменять ключ на coarray=shared или coarray=distributed.
Так как мы имеем данные в разных копиях нашей программы, логично предположить, что должны быть и средства для их синхронизации. Конечно, они имеются. Это, например, конструкция SYNC ALL, синхронизирующая все образы. Есть ещё и SYNC IMAGES(), позволяющая синхронизировать только определенные образы.
Ещё один пример:, codimension[*]: fact: i, factorial= this_image()(this_image() == 1) then= 1= 1, num_images()= factorial * fact[i](*, *) num_images(), 'factorialis', factorial
endif
Данный пример иллюстрирует возможность поиска факториала методом Coarray.
В начале объявляем fact как Сoarray, и далее в каждом образе мы присваиваем значение, равное номеру образа. Перед тем, как мы перемножить все значения, нужно убедиться, что они уже присвоены, поэтому используем SYNC ALL. И в образе с номером 1 вычисляем факториал.
В итоге мы получили весьма эффективное средство - часть
языка, позволяющее создавать параллельные приложения для систем с различной
организацией памяти. Естественно, в компиляторной поддержке и реализации
Coarray основная трудность - это производительность. На данный момент она до
сих пор остается не самой сильной стороной… но здесь и открываются большие
перспективы для различных компиляторов.
Новый проект Microsoft Small Basic представляет собой очень простой язык программирования и не менее простую среду разработки с интуитивно понятным интерфейсом. Именно за эти качества этот язык был выбран для решения задачи данной дипломной работы.Basic обладает рядом преимуществ:
1. Достаточно простая среда разработки - текстовый редактор с многофункциональной подсказкой и небольшое количество кнопок для работы с текстом и запуска откомпилированных программ.
2. Легкий для изучения язык, содержащий лишь 15 основных слов
. Добавленная в саму среду разработки исчерпывающая документация обо всех элементах языка
. Возможность расширения компонентов Small Basic для включения дополнительного функционала. А так же написания и подключения собственных библиотек на различных языках, включая объектно-ориентированный язык С#.
Компилятор Small Basic разрешает использовать внешние подключаемые библиотеки, что позволяет получить дополнительные возможности при разработке. Эти библиотеки могут быть собраны с помощью любого.NET-ориентированного языка программирования. Существует несколько правил при разработке библиотеки, выполнив которые, Small Basic определит вашу библиотеку как еще один объект (тип).
Тип должен быть объявлен статическим. Тип должен быть обозначен как SmallBasicTypeAttribute. Свойства должны иметь тип Microsoft. SmallBasic. Library. Primitive. Все методы должны иметь тип Microsoft. SmallBasic. Library. Primitive. Все события должны иметь тип Microsoft. SmallBasic. Library. SmallBasicCallback.
Когда эти условия соблюдены, вы можете скомпилировать вашу библиотеку и положить ее в папку «lib», которая должна располагаться в установочной папке Small Basic. Например, если Small Basic был установлен на диск «C:» и ваша библиотека называется «myextensions», то вы должны поместить myextensions.dll в папку «c:\program files\microsoft\small basic\lib».
Ниже приведен образец расширения, написанный на C#. Пример добавляет
объект Settings, с помощью которого можно хранить и восстанавливать пары «имя -
значение» для конкретной программы.
using System. Collections. Generic;System.IO;System. Reflection;System. Runtime. Serialization. Formatters;System. Runtime. Serialization. Formatters. Binary;Microsoft. SmallBasic. Library;MyExtensions
{
/// <summary>
/// The Settings library consists of helpers that allow programs to
/// store and retrieve user settings.
/// </summary>
[SmallBasicType]static class Settings
{Primitive _filePath = new Primitive();
/// Gets the file path for the settings file.
/// </summary>static Primitive FilePath
{
{(string. IsNullOrEmpty(_filePath))
{
_filePath = Path. ChangeExtension (. GetEntryAssembly().Location,
«.settings»);
}_filePath;
}
}
/// <summary>
/// Gets the value for the setting identified by the specified name.
/// </summary>
/// <param name= «name»>
/// The Name of the setting.
/// </param>
/// <returns>
/// The Value of the setting.
/// </returns>static Primitive GetValue (Primitive name)
{(System.IO. File. Exists(FilePath))
{(Stream stream = System.IO. File. Open (FilePath,. Open))
{<string, string> contents = ReadContents(stream);(contents. ContainsKey (name)) {return contents[name];}
}
}«»;
}
/// <summary>
/// Sets a value for a setting identified by the specified name.
/// </summary>
/// <param name= «name»>
/// The Name of the setting.
/// </param>
/// <param name= «value»>
/// The Value of the setting.
/// </param>static void SetValue (Primitive name, Primitive value)
{<string, string> contents = null;(System.IO. File. Exists(FilePath))
{(Stream stream = System.IO. File. Open (FilePath,. Open))
{= ReadContents(stream);
}
}
{= new Dictionary<string, string>();
}[name] = value;(Stream stream = System.IO. File. Open (FilePath,. Create))
{(stream, contents);
}
}Dictionary<string, string> ReadContents (Stream stream)
{formatter = new BinaryFormatter();. AssemblyFormat = FormatterAssemblyStyle. Simple;(Dictionary<string, string>) formatter. Deserialize(stream);
}void WriteContents (Stream stream, Dictionary<string, string> map)
{formatter = new BinaryFormatter();. AssemblyFormat = FormatterAssemblyStyle. Simple;. Serialize (stream, map);
}
}
}
Так выглядит среда Small Basic, предназначенная для написания и запуска программ на языке Small Basic. Среда разграничена на три точно различимых друг от друга части.
Рисунок 10 - Среда разработки SmallBasic
Редактор, обозначенный [1], предназначен для написания программного кода на языке Small Basic. Если открыть пример программы, или заранее сохраненный исходный код программы, то она будет отображена в данном редакторе. Здесь можно изменить программу, а так же сохранить ее для последующего использования.
Также можно открыть одновременно несколько различных программ и работать более чем с одной программой в одно и то же время. Каждая отдельная программа, с которой работает пользователь, будет отображена в отдельном окне редактора. Редактор, в котором отображена программа, над которой работает пользователь в данный момент, называется активным редактором.