Python против Pharo

Python широко считается простым языком для начинающих. Но знаете ли вы, что существует более простой язык, обладающий гораздо большими возможностями? Он называется Pharo, современный вариант Smalltalk. Давайте сравним два…

Простота, лаконичность и элегантность

Pharo намного проще Python. В нем всего шесть зарезервированных слов. Полный синтаксис умещается на открытке!

Вы, черт возьми, не можете этого сделать с Python!

Вы можете выучить весь язык за 15 минут: Learn Smalltalk с ProfStef. Вы, черт возьми, не можете этого сделать с Python!

Pharo удивительно лаконичен и элегантен. Вот несколько замечательных однострочников:

"Compute difference in days between two dates"
('2014-07-01' asDate - '2013/2/1' asDate) days
"Set up an HTTP server that returns the current timestamp"
(ZnServer startDefaultOn: 8080) 
  onRequestRespond: [ :request | 
    ZnResponse ok: (ZnEntity with: DateAndTime now printString) ]
"Split a string on dashes, reverse the order of the elements and join them using slashes"
$/ join: ($- split: '1969-07-20') reverse
"Sum of the primes up to 64"
(Integer primesUpTo: 64) sum
"Extract a Unix format timestamp from the 5th to 8th byte of a byte array given in hex"
DateAndTime fromUnixTime:
  ((ByteArray readHexFrom: 'CAFEBABE4422334400FF') 
      copyFrom: 5 to: 8) asInteger
"Return the weekday of a date"
'2013/5/7' asDate dayOfWeekName
"Save the HTML source of a web page to a file"
'https://www.pharo.org' asUrl saveContentsToFile: 'page.html'
"Count the number of, or show the leap years between two years"
(1914 to: 1945) count: [ :each | Year isLeapYear: each ].
(1895 to: 1915) select: [ :each | Year isLeapYear: each ].
"Encode the same string using Latin1, UTF-8 and UTF-16"
#(latin1 utf8 utf16) collect: [ :each | 
  (ZnCharacterEncoder newForEncoding: each)
    encodeString: 'Les élèves Français' ]

В Python практически невозможно сделать что-либо в одной строке.

Правило вне игры

Использование отступов в Python в качестве синтаксиса вызывает большие споры. Это основная причина, по которой так много разработчиков ненавидят Python. Одна из проблем заключается в том, что случайное смещение кода может вызвать очень тонкую и трудную для поиска ошибку. Кто может утверждать, что несчастных случаев не бывает?

Фаро не страдает этой болезнью.

Объектно-ориентированное программирование

Pharo полностью объектно-ориентирован сверху вниз. Его ясность и последовательность в этом отношении не имеют себе равных ни в одном другом языке.

Python, с другой стороны, имеет импровизированную реализацию ООП, которая кажется привязанной. Например, в Python нет истинной инкапсуляции: переменные и методы экземпляра «скрыты» или делаются «закрытыми» путем добавления к их именам символов подчеркивания. Это очень глупо.

Python требует, чтобы вы явно передавали «self» в качестве первого аргумента всем методам экземпляра. Это невероятно хоккей.

Объекты Python не всегда имеют ожидаемый атрибут. Например, свойство length почти всегда является внешней функцией len ().

Функциональное программирование

В Pharo есть прекрасная реализация лямбда-выражений в своих «блоках». Это дает Pharo прекрасные возможности функционального программирования. Фактически, библиотека классов Pharo содержит множество функциональных конструкций.

Python также может выполнять функциональное программирование. Однако его лямбда-выражения ограничены одним выражением, а не допускают несколько строк кода. Ни один другой язык программирования в мире не имеет этого ограничения! Я не решаюсь называть это глупым и глупым. (Хорошо, я соврал: это глупо и глупо.)

IDE (интегрированная среда разработки)

Pharo имеет прекрасную встроенную среду IDE живого кодирования, которая так же проста и удобна в использовании, как и сам язык. Живое кодирование позволяет вам проверять и изменять код и данные в вашей программе во время ее работы! Этот мощный метод практически исключает традиционный цикл редактирования-компиляции-тестирования-отладки, который мешал разработчикам более полувека . Это основная причина, по которой Pharo (Smalltalk) является самым производительным языком программирования общего назначения в мире, согласно исследованию, проведенному Namcook Analytics.

Лучшая IDE для Python - это PyCharm. Конечно, это хорошая IDE, но нет никаких сомнений в том, что она намного больше и сложнее, чем IDE Pharo. Освоение этой программы заняло бы много времени.

А PyCharm не поддерживает живое кодирование.

Производительность и простота разработки

Python имеет репутацию продуктивного человека. Namcook Analytics сообщает нам, что Pharo (Smalltalk) вдвое производительнее Python. Это в среднем. Во многих случаях Pharo будет намного продуктивнее, иногда в пять раз!

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

Экосистема

У Python есть завидная экосистема библиотек. Это слабое место для Pharo. Несмотря на это, Pharo невероятно универсален. Он используется для самых разных приложений. Например, Pharo очень хорош для веб-разработки, благодаря Seaside web framework и Teapot micro framework.

Благодаря PharoJS Pharo очень хорош для фронтенд-разработки.

Pharo хорош для науки о данных благодаря PolyMath и Roassal.

Pharo хорош для виртуальной реальности:

Pharo хорош для Интернета вещей и встроенного программирования. См. Научитесь программировать.

Pharo используется для написания сценария игрового движка Unreal:

Pharo используется для борьбы с лихорадкой Эбола!

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

Pharo используется для обработки естественного языка.

Pharo используется для машинного обучения и обработки нейронных сетей.

Smalltalk в целом универсален. Объединенные военные США использовали Smalltalk для написания симулятора боя на миллион строк под названием JWARS. Фактически она превзошла программу моделирования под названием STORM, написанную на C ++ ВВС США. Ого! Это потрясающе!

Smalltalk использовался JP Morgan для написания своей массивной системы управления финансовыми рисками под названием Kapital.

Orient Overseas Container Lines использовала Smalltalk для разработки своей системы управления перевозками IRIS-2.

Если Pharo находится в невыгодном положении из-за своей экосистемы, это, конечно, не замедляет его. На самом деле, я думаю, будет справедливо сказать, что Pharo более универсален, чем Python.

Многопоточность

И Pharo, и Python могут выполнять многопоточность, но Python сдерживается GIL (глобальная блокировка интерпретатора), на которую давно жалуется большинство программистов.

(Впервые опубликовано на Code.)