Сейчас много языков программирования, соперничающих за ваше внимание, особенно «горячие» (или «модные!») новые языки, такие как Ceylon, Crystal, Dart, Elixir, Elm, Go, Haxe, Julia, Kotlin, Rust, Swift, TypeScript. И новые, кажется, появляются каждый месяц!

Даже некоторые из не совсем новых языков привлекают внимание, такие языки, как Clojure, Erlang, F#, Haskell, Lua, OCaml, Scala. Некоторым из них исполнилось несколько десятилетий!

Поэтому мне стало интересно: что делает язык программирования, независимо от возраста, модным и захватывающим? Почему 27-летний Haskell все еще вызывает разговоры? Как можно испытывать эмоции к 31-летний Erlang после стольких лет? Какова любовь к 24-летнему Lua? Об F# до сих пор говорят очень нежно, хотя за ним стоит 12-летняя история.

Конечно, одной из главных причин является растущий в последние годы интерес к функциональному программированию. Люди изучают все их функциональные возможности, в том числе языки, предшествующие Java (порой несправедливо называемые древними и устаревшими).

Erlang примечателен OTP (Open Telecom Platform) и его системой времени исполнения (BEAM), что делает Erlang замечательным для написания распределённых отказоустойчивых приложений.

Clojure использует силу и элегантность Lisp. Lua популярен в игровой индустрии как встраиваемый язык. Kotlin и Scala пытаются улучшить Java, самый популярный язык программирования на планете.

Dart и Elm предлагают альтернативы широко презираемому JavaScript. Rust обещает безопасность памяти. Julia – технологический tour de force.

Таким образом, казалось бы, эти языки популярны по разным причинам. За исключением функционального программирования, действительно нет общих признаков. Даже 7-летний Go поднялся на вершину языковых чартов благодаря простоте и минималистичности, без каких-либо инноваций в дизайне языка!

Тогда как мы объясним тот факт, что языку Smalltalk сегодня так мало уделяют внимания? У него есть всё нужное…

  1. Smalltalk – один из самых маленьких, простых и элегантных языков программирования, когда-либо созданных. Весь его синтаксис может поместиться на обратной стороне открытки! Это делает Smalltalk очень, очень лёгким в изучении. У Smalltalk крайне низкое, если не несущественное когнитивное трение при кодировании. Вам не нужно задумываться над языком, вы просто решаете вашу проблему.

  2. Smalltalk имеет великолепные «живое кодирование и отладку» в IDE, которые делают программирование чрезвычайно быстрым и продуктивным. Вы можете внести изменения в текущую программу и сразу увидеть результаты. Это почти полностью исключает цикл edit-compile-test-debug, который затрудняет работу почти со всеми иными языками программирования. И это удивительно просто в использовании. В современном мире программирования нет ничего подобного.

  3. Smalltalk – один из самых продуктивных языков программирования. Более чем в два раза производительнее, чем Python и Ruby. Более чем в 3 раза эффективнее JavaScript!

  4. Несмотря на свою относительную безвестность, Smalltalk – очень практичный промышленный язык! Он коммерчески использовался более трёх десятилетий. Его известные пользователи включают JPMorgan, Desjardins, UBS, Florida Power & Light, Texas Instruments, Telecom Argentina, Orient Overseas Container Lines, Siemens AG и прочие. Проверьте ALLSTOCKER и банкоматы на улицах Москвы.

  5. Smalltalk прекрасно масштабируем. В начале 2000-х годов объединённые военные силы США использовали Smalltalk для написания программы в миллион строк по моделированию боевых действий под названием JWARS. Фактически он превзошел аналогичное моделирование под названием STORM, написанное на C++ в ВВС США.

  6. Smalltalk имеет богатое наследие. Это был первый язык программирования для популяризации ООП, и он остается прекрасным примером языка ООП (именно поэтому он породил целое поколение языков ООП, таких как Java, Python, PHP, Ruby, Perl, Objective-C, CLOS, Dart, Scala, Groovy и прочие). Smalltalk – это правильное ООП

  7. Smalltalk продолжает активно развиваться, особенно в рамках проекта Pharo и Inria. И Amber для сети, и Redline для JVM. Smalltalk был модернизирован для двадцать первого века.

  8. Кстати, у Smalltalk также есть функции первого класса и замыкания, поэтому он хорош и для функционального программирования!

Smalltalk чрезвычайно универсален (является языком программирования общего назначения):


И я лишь начал!

Smalltalk заслуживает место среди «горячих» (или «модных!») новых языков, таких как Elixir, Elm, Go, Julia, Kotlin, Rust. В конце концов, Pharo всего 9 лет.

Об авторе


Ричард Энг – отставной разработчик программного обеспечения из Канады с более чем 30-летним опытом работы в ИТ-индустрии. Он работал в сфере видео графики, баз данных и финансов, программного обеспечения реального времени, мобильных приложений для iOS и Android, а также в веб-разработке. Он писал в основном на C, но также использовал FORTRAN, Tandem TAL, C++, C#, Objective-C, Java, Smalltalk, Python и Go. Сейчас он возглавляет кампанию Smalltalk Renaissance. Большую часть времени Ричард проводит за написанием статей и эссе.
Поделиться с друзьями
-->

Комментарии (79)


  1. MetromDouble
    08.07.2017 01:20
    +41

    Эм, так что именно делает язык программирования «модным»?


    1. express
      08.07.2017 15:35

      По-моему, то же самое что и мессенджеры — новизна, хайп, сообщество. А вот как это сообщество решает, что сейчас модно — для меня загадка. На функционал и удобство, кажется, всем плевать.


      1. ooprizrakoo
        09.07.2017 01:22
        +5

        А я бы раскрыл бы слово «хайп» более прямо: все зависит от того, какая компания двигает тот или иной язык.
        C# появился как попытка Майкрософта (и многие соглашаются — что удачная) изобрести Java заново без свойственных ему недостатков, с возможностью развивать этот ЯП под своим контролем.
        Ruby никогда не стал бы популярным как сейчас, если бы не вышел RoR, который был создан сотрудником 37signals, и ими же пропагандирован.
        Или вон, взять JS-фреймворки — Angular вышел из Гугла, React — из Фейсбука.

        Хайп задается гиками, которые находясь на переднем крае ИТ-технологий пробуют все, что выходит от «корпораций добра». Если сейчас появится компания-звезда, создавшая сверхуспешный бизнес/сервис на языке Cobol с собственным фреймворком — однозначно определенный хайп с этим языком обеспечен :)


        1. firk
          09.07.2017 16:49
          +1

          C# появился как попытка Майкрософта (и многие соглашаются — что удачная) изобрести Java заново без свойственных ему недостатков

          "недостаток" там был один — споры об авторском праве в связи их Java-компилятором J++


      1. S_A
        09.07.2017 08:23

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

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

        Потом языки начинают обрастать несвойственными ему фреймворками в попытках объять необъятное, и хайп сменяется хэйтом. Вон node.js — сильно пострадал от проблемы callback hell, пока не вышел ES6 (от лапши плевались все, но всем хотелось писать быстро!). C++ до сих пор страдает от ненависти к управлению памятью, хотя все страдания вытекают из попыток решать высокоуровневые прикладные задачи на нём (но вот за скорость выполнения никто платить не хочет). C#/Java универсальны, но написать всё-всё-все на них до сих пор не получается.

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


  1. staticlab
    08.07.2017 01:45
    +9

    Весь его синтаксис может поместиться на обратной стороне открытки!

    Почему Oberon и Smalltalk так гордятся простотой синтаксиса? В Forth куда более простой синтаксис, а одни из самых популярных языков — C++, C#, JavaScript — год от года только увеличивают количество синтаксических правил. Язык программирования — это ведь не только синтаксис, но и семантика. JavaScript вот недолюбливают из-за сложности не синтаксиса, а именно многочисленных нюансов поведения, полностью изучить которые, не прибегая к помощи стандарта, наверное, нереально. А вот синтаксис на практике изучается довольно быстро.


    Smalltalk имеет великолепные «живое кодирование и отладку» в IDE, которые делают программирование чрезвычайно быстрым и продуктивным. Вы можете внести изменения в текущую программу и сразу увидеть результаты. Это почти полностью исключает цикл edit-compile-test-debug, который затрудняет работу почти со всеми иными языками программирования.

    Живое кодирование — это хорошо. Но ведь те же C++, да впрочем и Шарп с Джавой компилируются для обеспечения высокой производительности кода. Впрочем, может быть я просто не пробовал программировать на Smalltalk, но слабо представляю себе разработку и поддержку довольно сложного алгоритма без прогона юнит-тестов. Тем более, что тестовые фреймворки для Smalltalk тоже есть.


    Smalltalk – очень практичный промышленный язык! Он коммерчески использовался более трёх десятилетий.

    Замечательно, но в каком объёме. Может быть он использовался исключительно для прототипирования систем, может быть для каких-то R&D проектов или чего-то нишевого. Вряд ли хоть одна из перечисленных компаний начала активно переходить на Smalltalk. В конце концов, мы — не Google, чтобы бежать переходить на язык только лишь из-за известности бренда, который его использует.


    Smalltalk – один из самых продуктивных языков программирования. Более чем в два раза производительнее, чем Python и Ruby. Более чем в 3 раза эффективнее JavaScript!

    Согласно тому же исследованию, можно было бы заявить, что "Visual Basic – один из самых продуктивных языков программирования. Почти в два раза производительнее, чем Python и Ruby. Почти в 3 раза эффективнее JavaScript!" А SQL и Excel там вообще в абсолютном топе.


    Сейчас он возглавляет кампанию Smalltalk Renaissance. Большую часть времени Ричард проводит за написанием статей и эссе.

    Извините, но почему он пишет, как хорошо программировать на Smalltalk, а не программирует на Smalltalk?


    1. arielf
      08.07.2017 01:49

      Ну почему? У него были проекты на нём.


      1. staticlab
        08.07.2017 01:56

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


        Может быть на Smalltalk скучно программировать? Нет "вызова".


        1. Fesor
          08.07.2017 10:40
          +1

          На самом деле smalltalk убила модель лицензирования. И все. Довольно просто.


          Есть неплохой доклад на эту тему — David West — OOP is Dead! Long Live OODD!


          1. staticlab
            08.07.2017 10:54
            +2

            Нашёл хорошую статью: http://wiki.c2.com/?WhyIsSmalltalkDead


            1. Fesor
              08.07.2017 11:17

              Там же в целом есть ответ на вопрос "что делает язык популярным" — за технологию не надо платить и она доступна на широком количестве платформ. Смолтак на момент появления той же java не мог похвастаться ни тем ни другим, да еще и синтаксис непривычный.


              Ну а далее в ход вступает маркетинг.


    1. evocatus
      09.07.2017 16:39

      Юнит-тесты? Это для Smalltalk родное. Kent Beck, создатель TDD, писал именно на SmallTalk.


      1. staticlab
        09.07.2017 17:10
        -1

        Вот. А автор уверяет нас, что тесты вроде как и не нужны.


        1. Fesor
          10.07.2017 00:30

          А не подскажите где такое говорится?


          1. staticlab
            10.07.2017 01:25

            Думаю, что мы оба понимаем, о какой фразе идёт речь, однако, видимо, я неправильно понимаю её смысл?


            1. Fesor
              10.07.2017 22:19

              Нет, я серьезно не понимаю о какой фразе идет речь.


              1. staticlab
                11.07.2017 09:34

                Ну вот смотрите. Автор говорит: "Вы можете внести изменения в текущую программу и сразу увидеть результаты. Это почти полностью исключает цикл edit-compile-test-debug, который затрудняет работу почти со всеми иными языками программирования." В разрезе проектирования пользовательского интерфейса понять его ещё можно. Подобное давным давно было в редакторах HTML, а теперь hot reloading есть, в частности, в React. Однако реальные программы состоят не только из интерфейса. Если мы имеем алгоритм, то live coding может помочь только в плане быстрого внесения изменений. Но если при этом произошла регрессия, то отловить её практически реально только прогоняя юнит-тесты, то есть так или иначе возвращаемся к циклу edit-test-debug, то есть "внесение изменений — прогон тестов — поиск ошибки".


                То есть либо автор лукавит, что ive coding реально спасёт от постоянного прогона тестов, либо он подразумевает его только в контексте разработки UI, либо Smalltalk на самом деле предлагает уникальный процесс разработки, действительно исключающий классический цикл разработки. Конечно возможно, что я неправильно понял эту мысль автора, и он подразумевал что-то совсем иное. Буду рад, если вы поможете разобраться.


                1. Fesor
                  11.07.2017 09:59

                  то есть так или иначе возвращаемся к циклу edit-test-debug, то есть "внесение изменений — прогон тестов — поиск ошибки".

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


                  live-coding не подразумевает отказ от тестов или от дебага. Он позволяет поменять флоу работы. Конкретно тут testing вообще указывалось в контексте мануальной проверки, и автор говорит о кейсах когда на любой чих надо 3-4 минуты сидеть и ждать пока ваша платформа пересоберет весь код.


                  Самое близкое что есть — опять же в Erlang. А эти ребята весьма часто практикуют и хот код свап и тесты.


                  1. staticlab
                    11.07.2017 10:06

                    когда на любой чих надо 3-4 минуты сидеть и ждать пока ваша платформа пересоберет весь код

                    Но ведь это относится только к компилируемым языкам.


                    1. 0xd34df00d
                      12.07.2017 19:44

                      Это вообще непонятно к чему относится.


                      Компилируемые языки бывают с вполне себе адекватным REPL. Внёс изменения в проект на хаскеле, переключился на терминал с ghci, два раза стрелка вверх по истории — :r (перезагрузка модуля), два раза стрелка вверх по истории — hspec ModuleName.spec (запуск тестов). Всё, весь цикл — секунды три-четыре.


                      Хотя хаскель вполне себе компилируемый язык.


  1. DaneSoul
    08.07.2017 01:58
    +2

    Для начала термин мода часто трактуется довольно вольно и неопределенно и я бы рассматривал два момента по-раздельности:
    1) реальная востребованность языка, то есть то насколько часто его используют и сколько на нем сделано разных проектов, присутствует вакансий и т.п.
    2) обсуждаемость языка, то есть то насколько он на слуху, но при этом не обязательно активно используется в реальной разработке. Сюда попадают не только широко востребованные языки, но и языки с интересными идеями и реализациями, но которые при этом не очень широко применяются в реальной разработке, как тот же Haskel, например.


    1. dolovar
      11.07.2017 15:21

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


      1. dolovar
        11.07.2017 15:55

        В оригинале:

        What makes a programming language “cool?” What makes a programming language, regardless of age, trendy and exciting?

        Предлагаю при переводе «cool» использовать «крутой» — вполне устоявшийся термин. А «trendy» можно заменить на «перспективный».


  1. GDXRepo
    08.07.2017 02:00
    +1

    Вообще не понял посыл статьи. Тема про модность языков программирования, а фактически — перечисление преимуществ (спорных) конкретно Smalltalk перед другими языками (по описанию он чуть ли не «серебряная пуля», но почему-то его мало используют, о нем не так много информации, он не популярен и не востребован — с чего бы это?).


    1. arielf
      08.07.2017 02:03
      -4

      Я всего лишь перевёл. :3


      1. beeruser
        08.07.2017 04:18
        +19

        Вот, а могли бы в это время программировать на Smalltalk.


      1. http2
        09.07.2017 13:49
        -3

        Зачем ты перевел рекламу? :)


        1. Fesor
          09.07.2017 15:21

          Попробуй из этого всего выделить "не рекламу". У Алана Кея есть несколько неплохих выступлений на тему "почему платформы и языки которые мы используем сегодня не круче чем то что было 40 лет назад".


  1. DaneSoul
    08.07.2017 02:09
    +1

    А что касается реальной востребованности языка, то тут важны несколько моментов:
    1) История и количество кодовой базы. А соответственно и объем обучающих материалов, количество опытных специалистов, изучение в университетах и т.д.
    Именно поэтому гиганты C, С++, C# Java и т.п. еще очень долго будут в лидерах, даже если появятся намного более удобные им замены.
    2) Кто стоит за языком.
    Если за языком стоит крупный гигант (C# — Microsoft, Java — Oracle, Go — Google и т.д.), который готов его продвигать и развивать, то язык может быстро набрать популярность и долго ее удерживать.
    3) Актуальность специализации языка.
    * Стала широко встребована DataScience — R значительно набрал позиции, хотя сам по себе язык далеко не новый.
    * PHP набрал популярность именно на фоне быстрого роста Веб.
    * JavaScript фактически не имела альтернатив если надо писать нативно под браузер


  1. Nakosika
    08.07.2017 03:03
    +1

    Нет у него фичи, вот и не пишут на нем. Без солидного маркетинга серенькому языку не стать популярным. Остался как историческая достопримечательность, по которой сохнут ООП пуристы.


  1. Vjatcheslav3345
    08.07.2017 07:54
    +2

    Скорее, Smalltalk — это "паскаль 21 века", предназначенный качественно и без искажений донести идеи ООП до учащихся и начинать его продвижение надо с учебных заведений.
    Тогда же, с появлением большого количества начинающих программистов хорошо знакомых с ним, язык придёт в сферу широкого прикладного применения.


    1. RPG18
      08.07.2017 11:28
      +2

      Спрос рождает предложение. Без спроса на рынке труда, никто не будет создавать отдельный курс по Smalltalk и отдельный курс по Java/C#/C++.


      Начинающие программисты потом идут работать, а там уже есть куча legacy кода на Java/C#/C++. Так же есть тимлиды, менеджеры не дадут писать на новом языке, т.к. им надо переучиваться и есть сроки сдачи.


      1. AnutaU
        08.07.2017 17:19
        +1

        Не обязательно делать отдельный курс по Smalltalk. Можно сделать курс ООП на базе Smalltalk, например. Мой преподаватель ООП в своё время так и делал, правда он менял языки каждый год, поэтому нам тогда достался другой язык. Так или иначе, думаю, Vjatcheslav3345 подметил самую-самую сильную сторону Smalltalk, которая действительно выделяет его среди других языков.


  1. MrGobus
    08.07.2017 09:13
    +2

    ИМХО, модным язык программирования делает возможность решать современный уровень задач и простота вхождения. Все остальное это брейнфак.

    Бегло, пара причин делающих smalltalk таким непопулярным

    1. Отвратительная поддержка языка. Сайт http://smalltalk.org/ на который ссылается wikipedia представляет собой текстовик мелким шрифтом с большим количеством букв мелким шрифтом. В первых строках видим "… reinvention in process ..." (идет переосмысление)

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

    Итого, язык скорее мертв чем жив, не о какой популярности не может идти речь. Единственное, как мне кажется, что делало язык популярным, это схожесть с паскалем. Но после «падения дома Borland» такое уже никому не доставляет, так как «дела минувших дней».


    1. KvanTTT
      08.07.2017 15:11
      +2

      Отвратительная поддержка языка. Сайт http://smalltalk.org/ на который ссылается wikipedia представляет собой текстовик мелким шрифтом с большим количеством букв мелким шрифтом.

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


    1. chaetal
      08.07.2017 21:36
      +2

      Вот же он — ответ!

      Двоеточия везде где не поподя

      Просто таков современный уровень попсы :) …Люди-таки не хотят поэзии, на!


  1. Legion21
    08.07.2017 09:56
    -1

    Модным язык программирования делает количество популярных продуктов в продакшене и комьюнити… по крайней мере это я так вижу)))


    1. yarric
      08.07.2017 13:00
      +6

      А почему появляются проекты в продакшн и коммьюнити на этом языке?


  1. Fesor
    08.07.2017 10:47
    +2

    Банально маркетинг. Если бы Xerox отдали smalltalk товаристчу Джобсу, его судьба могла сложиться сильно по другому. Или даже если бы не это, возможно если бы Xerox договорились в свое время с Sun, то быть может не было бы java.


  1. Rogaven
    08.07.2017 11:08
    +2

    Хорошая попытка, Smalltalk, но нет.


  1. NLO
    08.07.2017 12:03

    НЛО прилетело и опубликовало эту надпись здесь


    1. yarric
      08.07.2017 13:04
      -3

      С C++ по скорости в целом так никто и не сравнялся, так что смысл тратить время на Rust и Go под вопросом.


      1. NLO
        08.07.2017 13:56

        НЛО прилетело и опубликовало эту надпись здесь


        1. NLO
          08.07.2017 14:57

          НЛО прилетело и опубликовало эту надпись здесь


        1. yarric
          08.07.2017 15:40
          +2

          Ну вот смотрю я эти бенчмарки: Go слил C++ местами в несколько раз. В этих Rust быстрее C++ в-основном там, где в Rust используются библиотечные функции типа regex, а в C++ написанные с 0 на fseek-ах, в других местах Rust опять же медленнее, иногда в разы. Да, на Rust можно писать как на C — с небезопасными указателями и т. д., но на C++ так тоже можно, и сделать это проще.


          Не так уж важно, что там во что компилируется, как важно, какой в итоге получается машинный код и сколько запихивается runtime-а в получившийся исполняемый файл. Тот же Go с его "Hello, World"-ами почти на мегабайт можно назвать native довольно условно, а "Hello, World", сгенерированный Nim-ом в C, даже отдалённо не похож на "Hello, World", который написал бы на C человек.


          Также картину портит сборщик мусора, из-за которого у тебя параллельно исполняется не только то, что ты непосредственно написал. Его нет только у C++, Ada и Rust. Ada мало кто пользуется, Rust довольно заморочен, не имеет классов и мало кем реально используется.


          все эти языки безопасно работают с памятью

          C++ тоже безопасно работает с памятью, если не использовать new и delete, которые теперь нужны разве что разработчикам специальных структур данных. Можно вообще всюду использовать shared_ptr, будет совсем безопасно, правда медленнее, но раз уж устраивает скорость Go, то и этого хватит.


          Я уже года три не писал на С++

          А на чём пишете для заработка? Неужели Rust?


          1. NLO
            08.07.2017 17:09

            НЛО прилетело и опубликовало эту надпись здесь


            1. yarric
              08.07.2017 18:08

              с fseek вы гарантировано получите жесть

              Зачем мне fseek, если можно подыскать regex-библиотеку для C++. Кстати в Rust со сторонними библиотеками как-то не сложилось.


              будете ловить потом это дело профилировщиком

              Обычно ± десяток мегабайт утёкшей памяти в прототипе всё-же гораздо лучше, чем отсутствие прототипа из-за того, что людям надоело читать мануалы.


              Между Rust и С++ давно можно ставить ===

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


              минусы с++ не только в управлении памятью, а по большей части в зло**бучем синтаксисе

              А можно примеры, где Rust по синтаксису лучше C++? По-моему в Rust накидали ещё больше знаков пунктуации, чем в C++, а ещё много синтаксического шума вроде fn, let, mut...


              Там стандартная библиотека, которой в С++ практически нет и приходиться тащить Boost

              При этом исполняемые файлы С++ c Boost всё равно меньше в разы, ведь в C++ есть нормальный линкер.


              1. Fedcomp
                10.07.2017 13:48

                > Кстати в Rust со сторонними библиотеками как-то не сложилось.

                Ого, вы это серьезно? В языке так то встроенный менеджер зависимостей.
                https://crates.io/


            1. yarric
              08.07.2017 18:14

              Ещё забыл упомянуть Swift как язык, у которого нет сборщика мусора. Кстати очень перспективный высокоуровневый нативный язык, учитывая поддержку со стороны Apple (язык программирования i-девайсов) и IBM (веб-фреймворк Kitura) — во всяком случае там, где не нужно слишком выжимать железо. Для выжимания железа всё-же понадобится C++.


              1. NLO
                08.07.2017 20:16

                НЛО прилетело и опубликовало эту надпись здесь


                1. yarric
                  08.07.2017 21:09

                  Проекты, компании, вся фигня, а TensorFlow таки не на Go и не на Rust почему-то написан ;)


                  Вот и верь этим хайперам после этого.


                  1. NLO
                    09.07.2017 00:28

                    НЛО прилетело и опубликовало эту надпись здесь


                    1. yarric
                      09.07.2017 12:13

                      Нет, ну а всё-таки: я-то ладно, но почему Google, Intel, Facebook, Space X серьёзные проекты типа AI и бортовых программ ракет до сих пор пишут на C++, а не на модненьком Go или Rust?


                      Разве что Apple, которая честно использует Swift для прикладного программирования, в этом плане отличается.


                      такой негибкостью и костностью

                      Просто предпочитаю тратить время на реализацию новых идей вместо изучения очередного "революционного" языка программирования. Я тут уже как-то предлагал одному товарищу назвать хоть одну фичу из новых языков программирования, которой меньше 30 лет...


                      1. 0xd34df00d
                        10.07.2017 19:43

                        Я тут уже как-то предлагал одному товарищу назвать хоть одну фичу из новых языков программирования, которой меньше 30 лет...

                        Снова назову афинные/линейные типы и зависимые типы, например (последним как раз 28 лет, Coq вроде был одним из первых языков с ними).


                        1. yarric
                          10.07.2017 20:33

                          Вики говорит, что NuPRL вышел в 84-м. До сих пор это дело в мейнстримовые языки не вошло.


                          1. 0xd34df00d
                            12.07.2017 19:45

                            А когда там, собственно, завтипы появились? Мне вот сходу нагуглить не удалось.


                            И вам таки фичи из мейнстримовых языков или новые фичи?


                1. 0xd34df00d
                  10.07.2017 19:40

                  Для tensorflow обёртка даже для хаскеля есть.


      1. stepik777
        09.07.2017 15:54

        С и С++ никогда и не были самыми быстрыми языками, а всегда уступали фортрану из-за наличия алиасинга. В С эту проблему попытались решить с помощью нового ключевого слова restrict, но им как-то не особо пользуются.


        1. yarric
          09.07.2017 16:18

          Я не уверен, что FORTRAN можно назвать языком общего назначения. Насколько я знаю это что-то вроде MATLAB того времени.


          1. firk
            10.07.2017 12:55

            Если за критерий брать ориентацию на математические расчёты — да. По той простой причине, что во времена его изобретения у компьютеров других применений почти и не было.
            Если же сравнивать техническую реализацию — то всё же нет, матлаб это скрипты, а фортран — нативный компилятор с максимумом оптимизаций. Синтаксис может по современным понятиям неудобный, но написать на нём можно всё то же самое что и на си.


            1. yarric
              10.07.2017 20:29

              Ну в теории и на MATLAB тогда можно написать всё тоже самое, что и на C (по функциональности) за конечное время. И даже на Brainfuck. Всё-таки целевая сфера применения имеет значение.


          1. TheKnight
            11.07.2017 14:21

            Нет, это не матлаб. Просто на него удобно ложились математические расчеты.


  1. SirEdvin
    08.07.2017 22:38
    -1

    Окей, но почему Smalltalk, а не Python? Ведь его можно подсунуть под все утверждения и он подойдет так же, если не лучше)


    1. Fesor
      09.07.2017 12:59
      +1

      Все утверждения его подсунуть нельзя. Как минимум из-за наличия main рутины под треть утверждений подсунуть его физически нельзя. Да и в целом это немного так смазывает идею трушного ООП, как actor model + message passing + late binding. По факту из "живых" языков подобным сейчас может похвастаться только Erlang. Вот он хорошо вписывается, кроме того что возможно он все же сложноват.


      Python хорошо подходит для обучения, и более того, во всяких там MIT на него уже давно заменили штуки вроде scheme.


      1. SirEdvin
        09.07.2017 17:05
        -2

        Ну, давайте попробуем:


        Smalltalk – один из самых маленьких, простых и элегантных языков программирования, когда-либо созданных. Весь его синтаксис может поместиться на обратной стороне открытки! Это делает Smalltalk очень, очень лёгким в изучении. У Smalltalk крайне низкое, если не несущественное когнитивное трение при кодировании. Вам не нужно задумываться над языком, вы просто решаете вашу проблему.

        Я не особо знаю Smalltalk, но python для меня (и многих, кого я знаю) именно такое.


        Smalltalk имеет великолепные «живое кодирование и отладку» в IDE, которые делают программирование чрезвычайно быстрым и продуктивным. Вы можете внести изменения в текущую программу и сразу увидеть результаты. Это почти полностью исключает цикл edit-compile-test-debug, который затрудняет работу почти со всеми иными языками программирования. И это удивительно просто в использовании. В современном мире программирования нет ничего подобного.

        ipdb, pycharm и так далее. Почему нет?


        Smalltalk – один из самых продуктивных языков программирования. Более чем в два раза производительнее, чем Python и Ruby. Более чем в 3 раза эффективнее JavaScript!

        Чем какой Python? Там сверху кинули бенчмарки, по ним разница не очень то и заметна.


        Несмотря на свою относительную безвестность, Smalltalk – очень практичный промышленный язык! Он коммерчески использовался более трёх десятилетий. Его известные пользователи включают JPMorgan, Desjardins, UBS, Florida Power & Light, Texas Instruments, Telecom Argentina, Orient Overseas Container Lines, Siemens AG и прочие. Проверьте ALLSTOCKER и банкоматы на улицах Москвы.

        У Python тоже довольно большой список.


        Smalltalk прекрасно масштабируем. В начале 2000-х годов объединённые военные силы США использовали Smalltalk для написания программы в миллион строк по моделированию боевых действий под названием JWARS. Фактически он превзошел аналогичное моделирование под названием STORM, написанное на C++ в ВВС США.

        Есть примеры от инстаграм, google и еще ряда других крупных компаний.


        Smalltalk имеет богатое наследие. Это был первый язык программирования для популяризации ООП, и он остается прекрасным примером языка ООП (именно поэтому он породил целое поколение языков ООП, таких как Java, Python, PHP, Ruby, Perl, Objective-C, CLOS, Dart, Scala, Groovy и прочие). Smalltalk – это правильное ООП.

        Правильное ОПП — это демагогия. Поправьте, если я не прав, но в smalltalk есть примитивные типы, в то время, как в python — объекты это все. Мне кажется, что он значительно ближе в правильному ООП.


        Smalltalk продолжает активно развиваться, особенно в рамках проекта Pharo и Inria. И Amber для сети, и Redline для JVM. Smalltalk был модернизирован для двадцать первого века.

        Вы не поверите, но python тоже весьма развивается. Вот недавно вроде как GIL выпилили.


        Кстати, у Smalltalk также есть функции первого класса и замыкания, поэтому он хорош и для функционального программирования!

        Без комментариев.


        1. arielf
          09.07.2017 19:50
          +2

          Поправьте, если я не прав, но в smalltalk есть примитивные типы, в то время, как в python — объекты это все.
          Чего? Ну, в общем, вы не правы.


        1. Fesor
          10.07.2017 00:58

          ipdb, pycharm и так далее. Почему нет?

          попробуйте запустить вашу программу на python и подменить реализацию без полного перезапуска программы.


          кинули бенчмарки

          "эффективность" нельзя выразить бенчмарками. Речь идет о том сколько чего можно сделать за примерно равные промежутки времени. И да, для smalltalk такие исследования проводились. Хотя python должен быть сравним со smalltalk в силу схожей природы, но думаю он все равно будет проигрывать.


          Поправьте, если я не прав, но в smalltalk есть примитивные типы, в то время, как в python — объекты это все.

          1. Из примитивов там есть только SmallInteger (31 бит). Если я правильно помню, он используется для хранения указателей на объекты. А уже Int, String и т.д. это объекты.
          2. и причем тут ООП? Если вы про фразу "все есть объект" — то вы неверно ее понимаете. Для того же smaltalk это тоже справедливо — все есть объект. И под этим подразумевается что у всего есть какое-то поведение которого можно добиться отправив сообщение. Более того, с практической точки зрения нас редко интересуют примитивы. Они лишь строительные блоки. Идея же в том что бы декомпозировать систему в эдакую структуру отдельных объектов, которые просто отправляют сообщения друг-дружке. Хорошая аналогия тут — всеми любимые микросервисы. То есть у нас есть система и все элементы логики разбиты на небольшие самодостаточные модули. Весь стэйт изолирован в пределах модуля, а работа с ним проводится исключительно за счет отправки сообщений. Словом actor model.

          Где-то Алан Кей говорил что "надо было это дело назвать message oriented" а не "object oriented".


          Вот недавно вроде как GIL выпилили.

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


          1. arielf
            10.07.2017 01:10

            В Smalltalk никаких примитивов по умолчанию!


          1. SirEdvin
            10.07.2017 08:19

            попробуйте запустить вашу программу на python и подменить реализацию без полного перезапуска программы.

            Попробовать то можно, вроде как даже работает.


            "эффективность" нельзя выразить бенчмарками. Речь идет о том сколько чего можно сделать за примерно равные промежутки времени. И да, для smalltalk такие исследования проводились. Хотя python должен быть сравним со smalltalk в силу схожей природы, но думаю он все равно будет проигрывать.

            Я, конечно, никак не знаю smalltalk, но то, что на python в скорости программирования на нем, из-за черезчур гибкого синтаксиса очень сложно побить.


            и причем тут ООП? Если вы про фразу "все есть объект" — то вы неверно ее понимаете. Для того же smaltalk это тоже справедливо — все есть объект. И под этим подразумевается что у всего есть какое-то поведение которого можно добиться отправив сообщение. Более того, с практической точки зрения нас редко интересуют примитивы. Они лишь строительные блоки. Идея же в том что бы декомпозировать систему в эдакую структуру отдельных объектов, которые просто отправляют сообщения друг-дружке. Хорошая аналогия тут — всеми любимые микросервисы. То есть у нас есть система и все элементы логики разбиты на небольшие самодостаточные модули. Весь стэйт изолирован в пределах модуля, а работа с ним проводится исключительно за счет отправки сообщений. Словом actor model.

            Actor model — это агентно-ориентированный подход, который в современной класификации считается подтипом объектно-ориентированного.


            Такую модель работы можно спокойно использовать и в python, например так. Просто она далеко не всегда удобна.


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

            А еще добавили опциональную типизацию, асинхронность и в целом провели неплохую работу над исправлениями работы python в python 3.5 и в python 3.6.


            Избавление от изначальных неправильных архитектурных решений языка — это развитие. Такие есть у всех.


      1. SirEdvin
        09.07.2017 17:11

        Smalltalk хорош для науки о данных и численных вычислений, благодаря PolyMath и Roassal (также см. Численные методы с Pharo).

        SciPy, Numpy, SymPy, TensorFlow?


        Smalltalk хорош для Интернета Вещей и робототехники (например, Pharo Pi и ESUG on robotics).

        Можно вот тут посмотреть.


        Smalltalk хорош для ERP (планирование ресурсов предприятия).

        На Python есть odoo и erpnext.


        Smalltalk хорош для машинного обучения и нейронных сетей.

        TensorFlow, Keras, scikit learn


        Smalltalk хорош для обработки естественного языка.

        nlkt?


        Smalltalk хорош для виртуальной реальности (например, 3D Immersive Collaboration).

        Тоже можно.


        Smalltalk можно даже использовать для программирования игрового движка Unreal.

        Пожалуйста.


        Smalltalk используется для борьбы с Эболой!

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


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

        Визуализация данных на python (jupyter, networkx, plotty) тоже весьма на уровне.


        Smalltalk можно использовать для написания кросс-платформенных мобильных приложений (2% в JS, 98% в Smalltalk!).

        Kivy?


        Smalltalk хорош для серверной веб-разработки, благодаря веб-инфраструктуре Seaside.

        Django отличная штука, а без конвееров есть flask и еще куча вариантов.


        1. Fesor
          10.07.2017 01:00

          Это то понятно. Тут скорее про такие штуки:


          Smalltalk имеет великолепные «живое кодирование и отладку» в IDE

          тут по сути только erlang можно рассматривать.


  1. win0err
    09.07.2017 00:20
    -1

    Ох, хватило Смоллтока в универе. Спасибо, но хватит с меня.


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


    1. Fesor
      09.07.2017 13:03
      +1

      нужна немного другая парадигма мышления

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


      Даже если брать языки типа Java/C#/PHP то там эта парадигма довольно хорошо ложится.


      1. erty
        09.07.2017 13:23
        -1

        Именно это делает python столь удачным языком для обучения программированию. В его рамках легко и не принуждённо переключатья между разными парадигмами и минимум времени для изучения именно синтаксиса


        1. Fesor
          09.07.2017 15:23

          Единственный минус — нет live coding цикла. А так python и так активно применяют в обучении.


  1. andreysmind
    09.07.2017 17:13

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


  1. potan
    09.07.2017 18:27
    -1

    Блоки в Smalltalk работают поразному в разных реализациях, и далеко не везде так, как должны работать замыкания. К тому же замыкания в ФП не главное, важнее иммутабельность.
    Я пытался освоить Smalltalk когда еще любил императивные языки и динамическую типизацию, но программировать на нем без среды, в простом текстовом редакторе, очень неудобно.


  1. lovermann
    09.07.2017 19:16

    Язык программирования в определённой степени — такой же продукт, как и другие. И модным его делает маркетинг, раскрутка, продвижение, хайпы, интересные проекты, поддержка, интересное живое комьюнити, количество туториалов в текстовом и видео-формате.


  1. speller
    10.07.2017 09:57

    Составляющие успеха:
    1) Бесплатность
    2) Качество документации
    3) Поддержка платформ
    4) Охват встроенных функций и/или стандартных библиотек, качество реализации ими повседневных задач.
    Имхо.