Знакомство с Джулией
Для тех из вас, кто не знает, Julia - это язык программирования с несколькими парадигмами (полностью императивный, частично функциональный и частично объектно-ориентированный) разработан для научных и технических (читай числовых) вычислений. Он предлагает значительный прирост производительности по сравнению с Python (при использовании без оптимизации и векторизованных вычислений с использованием Cython и NumPy). Время на проявление сокращается в среднем в 2 раза. Прирост производительности находится в диапазоне от 10 до 30 раз по сравнению с Python (R еще медленнее, поэтому мы не включаем его. R не был создан для скорости). Отраслевые отчеты в 2016 показали, что Julia - язык с высоким потенциалом и, возможно, шанс стать лучшим вариантом для науки о данных, если он получит поддержку и принятие сообществом. Итак, два года спустя версия 1.0 Julia вышла в августе 2018 (версия 1.0), и она пользуется поддержкой сообщества программистов и принята многими компаний (см. https://www.juliacomputing.com) в качестве предпочтительного языка для многих доменов - включая науку о данных.
Из https://blog.simos.info/learning-the-julia-computer-language-on-ubuntu/
Хотя он имеет много общих функций с Python (и R) и различными другими языками программирования, такими как Go и Ruby, есть несколько основных факторов, которые заставляют Джулию помимо остальных участников конкурса:
Преимущества Юлии
- Производительность
По сути, Julia - это скомпилированный язык, тогда как Python и R интерпретируются. Это означает, что код Julia выполняется непосредственно на процессоре как исполняемый код. Есть оптимизации, которые можно сделать для вывода компилятора, чего нельзя сделать с помощью интерпретатора. Вы можете возразить, что Python, который реализован на C как пакет Cython, может быть оптимизирован до уровня производительности, подобного Julia, также может быть оптимизирован, если вы хорошо знаете язык. Но настоящий ответ на вопрос о производительности заключается в том, что Julia дает вам скорость, подобную C, без оптимизации и ручных методов профилирования. Если такая производительность вообще доступна без оптимизации, зачем использовать Python? Джуа вполне может быть решением всех ваших проблем с производительностью.
Сказав это, Джулия все еще подросток в том, что касается зрелости роста и развития как языка программирования. Некоторые операции, такие как ввод-вывод, вызывают довольно резкое падение производительности, если им не управлять должным образом. Исходя из опыта, я предлагаю, если вы планируете реализовывать проекты в Julia, использовать Jupyter Notebooks, использующие Julia 1.0 в качестве ядра. IDE Juno в редакторе Atom является рекомендуемой средой, но отсутствие отладчика является серьезным недостатком, если вы хотите использовать код Julia в производственной среде в среде, подобной Visual Studio. Jupyter позволяет разрабатывать код по одной функции и обеспечивает легкий доступ к любым значениям переменных и массивов, которые вам нужно «наблюдать». У экосистемы Julia есть энтузиазм и широкое сообщество, разрабатывающее ее, но поскольку обновление до 1.0 было выпущено менее шести месяцев назад, не все пакеты в Julia из версии 0.7 были полностью перенесены, поэтому вы можете придумать странный проблема с версией пакета при установке необходимых пакетов для вашего проекта.
Использование ноутбуков HPC (от Unsplash)
2. Поддержка графического процессора
Это напрямую связано с производительностью. Поддержка графических процессоров прозрачно осуществляется некоторыми пакетами, такими как TensorFlow.jl и MXNet.jl. Для разработчиков, которые в 2018 году уже использовали чрезвычайно мощные графические процессоры для различных приложений с CUDA или майнингом криптовалюты (просто чтобы взять два распространенных примера), это огромный бонус, а прирост производительности может составлять от 100 до 1000 раз для определенных операций и конфигураций. Если вам нужна определенная емкость графического процессора, Джулия предложит вам библиотеки, такие как cuBLAS.jl и cuDNN.jl для конкретных поставщиков и CUDANative.jl для ручного программирования и поддержки GPU. Низкоуровневое программирование CUDA также возможно в Julia с помощью CUDAdrv.jl и библиотеки времени выполнения CUDArt.jl. Очевидно, что Джулия значительно расширилась за рамки стандартной поддержки и возможностей графического процессора. И даже пока вы читаете эту статью, активное сообщество работает над расширением и полировкой поддержки GPU для Джулии.
3. Плавная кривая обучения и обширные встроенные функции
Julia удивительно проста в освоении и приятна в использовании. Если вы являетесь программой Python, вы будете чувствовать себя как дома, используя Julia. В Julia все является выражением, и есть базовая поддержка функционального программирования. Функции высшего порядка поддерживаются простым присваиванием (=) и оператором функции - ›(лямбда в Python, =› в C #). Поддержка многомерных матриц отличная - функции для пакетов BLAS и LINPACK включены в пакет LinearAlgebra стандартной библиотеки. Во время инициализации строки разделяются запятой (,), а столбцы - точкой с запятой (;). Транспонирование матриц, присоединение, факторизация, деление матриц, тождество, нарезка, решение системы линейных уравнений, триангуляция и многие другие функции доступны только при вызове отдельных функций . Поддержка даже неровных многомерных матриц доступен. Отсутствующие, ничего, любые, все, isdef, istype, oftype, hash, Base в качестве родительского класса для каждого объекта Julia, isequal и даже undef (для представления неинициализированных значений) - это лишь некоторые из доступно множество ключевых слов и функций для повышения читабельности вашего кода. Другие примечательные функции включают встроенную поддержку арифметики произвольной точности, комплексных чисел, словарей, наборов, битовых строк, битовых массивов и конвейеров. Я только что поцарапал здесь поверхность. Обширные встроенные функции - одна из лучших функций Джулии, с гораздо более легкодоступными и хорошо документированными модулями.
4. Множественная рассылка
Это основная функция языка программирования Julia. Множественная отправка или мультиметодическая функциональность в основном означает, что функции могут вызываться динамически во время выполнения, чтобы вести себя по-разному в зависимости от не только переданных аргументов (что называется функцией перегрузка) и вместо этого может варьироваться в зависимости от объектов, динамически передаваемых в него во время выполнения. В объектно-ориентированной терминологии эта концепция фундаментально связана с шаблонами проектирования стратегии и шаблонов. Мы можем изменять поведение программы в зависимости от любого атрибута, а также от вызывающего объекта и объектов, передаваемых в функцию во время выполнения. Это одна из самых убийственных особенностей Джулии как языка. Можно передать любой объект функции и, таким образом, динамически изменять его поведение в зависимости от любого незначительного изменения в его реализации, и во многих случаях стандартная библиотека построена вокруг этой концепции. Некоторые статистические данные исследований показывают, что среднее количество строк стандартного кода, требуемого в сложной системе, уменьшается в три или более раз (!) из-за этого выбора языка. Это значительно и чисто упрощает разработку очень сложных программных систем без какого-либо непредсказуемого или ошибочного поведения. Поэтому неудивительно, что Джулия получает признание, которое она вполне заслуживает.
5. Поддержка распределенных и параллельных вычислений
Джулия прозрачно поддерживает параллельные и распределенные вычисления с использованием нескольких топологий. Как и в языке программирования Go, есть поддержка сопрограмм, которые представляют собой вспомогательные функции, которые работают параллельно на многоядерных архитектурах. Существует обширная поддержка потоков и примитивов синхронизации, которые были тщательно разработаны, чтобы максимизировать производительность и минимизировать риск состояний гонки. С помощью простых текстовых макросов и декораторов / аннотаций, таких как @Parallel, любой программист может написать код, который выполняется параллельно. Поддержка OpenMP также присутствует для выполнения параллельного кода с директивами компилятора и макросами. С самого начала своего существования Julia была языком, предназначенным для поддержки высокопроизводительных вычислений с одновременным выполнением нескольких рабочих процессов. И это значительно упрощает использование для параллельных вычислений, чем (скажем) Python, у которого всегда была GIL (глобальная блокировка интерпретатора для потоков) как серьезная проблема производительности.
6. Взаимодействие с другими языками программирования (C, Java, Python и т. Д.)
Джулия может вызывать код C, Go, Java, MATLAB, R и Python, используя собственные функции-оболочки - фактически, каждый широко используемый сегодня язык программирования имеет поддержку взаимодействия с Julia. Это значительно упрощает работу с другими языками. Единственное существенное отличие состоит в том, что в Julia индексы массива начинаются с 1 (например, R), тогда как во многих других языках он начинается с 0 (C, C ++, Java, Python, C # и многие другие). Поддержка взаимодействия делает жизнь разработчика Julia намного проще и легче, чем если бы вы работали на Python или C ++ / Java. В реальном мире вызов других библиотек и пакетов является частью повседневной работы специалистов по обработке данных, частью повседневной рутины разработчика. Пакеты с открытым исходным кодом имеют здесь преимущество, поскольку они могут быть изменены в соответствии с требованиями вашей проблемной области. Взаимодействие со всеми основными языками программирования - одно из главных преимуществ Джулии.
Основы программирования :-)
Текущие недостатки
Юля все еще развивается, несмотря на выпуск 1.0. На производительность, что является важным аргументом в пользу продажи, сильно влияет использование глобальных переменных, и первый запуск программы всегда медленный по сравнению с выполнением после первого. Основным разработчикам языка Julia необходимо поработать над системой управления пакетами и, что особенно важно, над миграцией всех сторонних библиотек на версию 1.0. Поскольку это то, что со временем произойдет при активном участии сообщества (вроде перехода с Python 2.7 на 3.6, но с гораздо меньшими трудностями), это проблема, которая со временем разрешится сама собой. Кроме того, для повышения производительности на старых устройствах требуется больше единообразия языка. Устаревшие системы без качественных графических процессоров могут столкнуться с трудностями при запуске Julia только с вычислительной мощностью процессора. (Графические процессоры не требуются, но настоятельно рекомендуется запускать Julia и обеспечивать оптимальную продуктивность разработчика, особенно для библиотек глубокого обучения, таких как Knet (библиотека Julia для нейронных сетей и глубокого обучения)). Включение поддержки Unicode 11.0 может стать сюрпризом для тех, кто к нему не привык, а манипуляции со строками могут стать головной болью. Поскольку Джулии нужно немного повзрослеть как язык, вы также должны обязательно использовать профилировщик для выявления и устранения возможных узких мест в производительности в вашем коде.
Заключение
Итак, вы можете задать себе вопрос: если ваша компания проводит курсы по R и Python, зачем вам публиковать статью, в которой пропагандируется другой язык для науки о данных? Просто. Если вы новичок в науке о данных и программировании, изучение Python и R - лучший способ немедленно начать изучение текущей отрасли (это похоже на изучение C до C ++). А Python и R никуда не денутся в ближайшее время. Поскольку существует как огромная кодовая база, так и тонна существующих фреймворков и производственного кода, которые работают на Python и на более низком уровне, на R, спрос на специалистов по данным, обладающих навыками в Python, будет расти далеко в будущем. Так что да, вам стоит потратить время на изучение как Python, так и R. Более того, Джулия еще не получила широкого распространения в отрасли (хотя есть много евангелистов Джулии, которые ее активно продвигают - например, см. Www.stochasticlifestyle.com). Ожидайте, что еще как минимум десять лет Python станет основным игроком в области науки о данных.
Более того, языки программирования никогда не вымирают полностью. COBOL был разработан комитетом под руководством Грейс Хоппер в 1959 году и по-прежнему остается основным языком программирования для мэйнфреймов пятьдесят лет спустя. Учитывая это, можно ожидать, что повсеместно используются Python и R будет рыночной силой еще как минимум два десятилетия. Даже если более 70% сообщества специалистов по науке о данных обратятся к Джулии как к первому выбору для науки о данных, существующая кодовая база на Python и R не исчезнет в ближайшее время . Джулия также требует большей зрелости как язык (как уже упоминалось) - некоторые функции работают медленнее, чем Python, где реализация не была оптимальной и хорошо протестированной, особенно на старых устройствах. Следовательно, до зрелости Джулии как языка программирования может потребоваться еще год или два. Итак, читая эту статью, поймите, что Python и R - очень необходимые навыки, чтобы стать профессиональным специалистом по данным прямо сейчас. Но - исследуйте Юлию немного в свободное время. Всего наилучшего!
Поддержите мое письмо
И посетите Amazon Store Томаса, чтобы ознакомиться с лучшими ресурсами, которые я выбрал из всего, что Amazon может предложить для изучения Python, Microsoft.NET, шаблонов проектирования, искусственного интеллекта, машинного обучения. , Квантовые вычисления, разработка программного обеспечения, блокчейн и чистый код. Посетите мой магазин и посмотрите, какая книга вам подходит. Или электрические скрипки, если вы хотите в том направлении! Удачи и поблагодари меня, купив то, что тебе нравится.
https://www.sites.google.com/view/thomascherickal/intro
Поддержите мое письмо. Присоединяйтесь к Medium, чтобы читать лучший контент в Интернете по ссылке ниже, и 50% вашего членского взноса поддерживает меня каждый месяц. Искренняя благодарность всем моим замечательным подписчикам, которые помогают мне и поддерживают мое письмо каждый месяц. Любите каждого из вас!
Присоединяйтесь к Medium по моей реферальной ссылке ниже - Thomas Cherickal
https://thomascherickal.medium.com/membership
Бог благословил. Люблю вас всех!