LINUX.ORG.RU

Почему не стал мейнстримом Smalltalk?

 , , , ,


1

6

Добрый день ЛОР.

Скоро праздники. Скоро пятница. Поэтому решил создать тред вот с каким вопросом - почему Smalltalk стал так не популярен? Ведь у языка было (и есть) все, чтобы стать мейнстримом, он мог занять ту нишу, в которую потом засели ObjectPaskal/Delphi/VB/C#! Что ему мешает выбиться «в люди»? Почему на том же Pharo нет ни одной серьезной программы с GUI и ориентированной на пользователя?

★★

Последнее исправление: CYB3R (всего исправлений: 1)

Ответ на: комментарий от buddhist

Даже я, как не самый большой любитель жабы, скажу, что это толсто.

Ну да. JVM - это очень толсто. Я как-то раз наблюдал, как стойка интерпрайзных серверов с жабой проломила пол и ушла на два этажа вниз, пока не дошла до подвала.

hateyoufeel ★★★★★
()
Ответ на: комментарий от esandmann

Рефал в код для JVM компилируется

Как человек, довольно близкий к разработке трансляторов Рефала, скажу, что он сейчас плоховато во что угодно компилируется.

buddhist ★★★★★
()
Ответ на: комментарий от silver-bullet-bfg

Вполне можно поймать «ханойскую башню из блинов», если строгости не хватило.

anonymous
()
Ответ на: комментарий от silver-bullet-bfg

С++ позволяет стрелять себе в ногу каждые 5 секунд, на нем написанные программы часто текут и тормозят из-за кривых рук, сам язык сложен и имеет много «тайных знаний» (которые на практики - глюки старого маразматика, которые он не учел). Delphi - ругали за привитие плохого стиля программирования, программы при кривой сборке весили чуть более чем дох*я. Поэтому железа, ИМХО, не причина.

Бред. Хотя бы потому, что был Си.

Kuzy ★★★
()
Ответ на: комментарий от silver-bullet-bfg

Поясни.

Пояснил.

Применимость Grep'a показатель класса языка.

Правильно. Язык, в котором grep неприменим - говно.

Ну и кто мешает грепать GNU Smalltalk?

Никто не мешает, но здесь, вроде, шла речь про Pharo?

Miguel ★★★★★
()
Ответ на: комментарий от silver-bullet-bfg

С++ позволяет стрелять себе в ногу каждые 5 секунд,

С++ позволяет выстрелить себе в ногу. В smalltalk это сложнее, но если Вы стреляете, то весь квартал првращается в радиоактивный пепел.

на нем написанные программы часто текут и тормозят из-за кривых рук,

Внезапно, это утверждение верно для любого языка.

сам язык сложен и имеет много «тайных знаний» (которые на практики - глюки старого маразматика, которые он не учел).

4.2

maverik ★★
()
Ответ на: комментарий от maverik

С++ позволяет выстрелить себе в ногу. В smalltalk это сложнее, но если Вы стреляете, то нога отвечает doesNotUnderstand.

ilammy ★★★
()
Ответ на: комментарий от maverik

Это Смолток. Тут всё может о себе чего-то рассказать.

ilammy ★★★
()
Ответ на: комментарий от maverik

> нога отвечает

Я так и знал, что без веществ тут не обошлось.

Отож! SmallTalk же.

anonymous
()
Ответ на: комментарий от yoghurt

В лиспе ключевых слов два - правая и левая скобочка.

В форте ключевых слов три: :, ; и пробел. Но два из них можно переопределить при необходимости.

userid2
()
Ответ на: комментарий от userid2

На самом деле, всё что между скобок можно выкнуть, тогда программа на лиспе выглядит особо изящно:

(((())()(())())(())((((()(()
                          ))()())))()
                            )
stopitplease
()
Ответ на: комментарий от silver-bullet-bfg

Обидно просто, что развитие получили всякие Delphi/Java/C++ и прочее УГ, а хорошие и годные языки, со стройной и красивой концепцией заняли лишь маленькие секторы.

«There are only two kinds of languages: the ones people complain about and the ones nobody uses». Жизненно, да?

Pavval ★★★★★
()
Ответ на: комментарий от silver-bullet-bfg

Правильнее сказать - зачем нужны плюсы, если есть Smalltalk?

Зачем нужен батон, если есть говно?

Pavval ★★★★★
()
Ответ на: комментарий от anonymous

ура! коллективно нашли виновника! тред можно закрывать и предъявы писать уже в Сунь

Ты еще не всё осознал. Oracle купила Sun, чтобы закопать джаву и возродить Smalltalk.

Pavval ★★★★★
()
Ответ на: комментарий от Pavval

Как то слабо они лопатами машут :-/ Оно всё не закапывается и не закапывается.

anonymous
()
Ответ на: комментарий от silver-bullet-bfg

С++ позволяет стрелять себе в ногу каждые 5 секунд, на нем написанные программы часто текут и тормозят из-за кривых рук

можно подумать, на сабже нельзя писать быдлокод...

emulek
()

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

anonymous
()

ещё он с с/с++ миром интегрировался довольно костыльно. в итоге получилась «вещь в себе» (хотя как минимум у пары коммерческих смоллтоков с этим всё нормально было).

Ведь у языка было (и есть) все, чтобы стать мейнстримом, он мог занять ту нишу, в которую потом засели ObjectPaskal/Delphi/VB/C#! Что ему мешает выбиться «в люди»?

это какую это нишу? а то не понятно как-то. если туда ещё Яву, то если ниша «ынтерпрайс», то в 90х смоллток был вполне себе энтерпрайзен (пруфлинк — книжка GoF по паттернам). сюда же ОО СУБД на смоллтоке, и БД поделия.

если ниша «поделки для рабочего стола», то тут футпринт минимального хелловорда (пустое окошко с кнопкой + VM + GUI библиотека) по сравнению с ... --- не такой уж минимальный (хотя вполне на уровне LispWorks, например с CAPI — ~2.5-3.5 Mб)

Что ему мешает выбиться «в люди»?

что ты под этим понимаешь ? вот например, энтерпрайзное Xanadu http://udanax.xanadu.com/gold/download/ или http://udanax.xanadu.com/green/download/index.html

исходники на SmallTalk (какой-то коммерческий) + C++.

вот оно же, оттранслированное на Java.

вообще, в некоторых местах смоллток популярен. например, Helvetia, NewSpeak от автора Java, в Factor, и т.п.

а вообще, вот

anonymous
()

Я пробовал на вкус для себя разные языки программирования, там были и в том числе и такие, с какой-то идеей в основе: lisp, smalltalk, forth, erlang, haskell.

<<Когда-то очень давно, Smalltalk>> В общем-то красивая идея, все объекты и общаются только посредством сообщений. Сел разбираться, подумав - «Это же прекрасная идея, вот только интересно, а что если объект 1 пошлет сообщение объектам 2 и 3, а они в свою очередь пошлют сообщение объекту 4. Какое четвертый примет раньше, от второго или третьего? Стал думать, потом пошел искать в книжке какую-нибудь главу о многопоточном или паралельном программировании... Её не было, смаллталк использовал одно ядро процессора и просто выполнял все последовательно. Вот так открытие, я то думал что с такой концепцией идея раскидывать объекты по ядрам должна была возникнуть сама собой, но нет, оно перекидывалось сообщениями на одном ядре с самим собой. Подумав что в мире есть более интересные вещи чем пинг-понг со стенкой, я просто бросил его и пошел дальше»

<<Когда-то давно, Erlang>> Шел я, шел, и пришел. Эрланг... хм, какой-то странный прологовский синтаксис, функциональщина, процессы, передача сообщений, паттерн...?! Стоп, передача сообщений? Ну-ка глянем, опачки, да ведь это оно родимое, процессы - это похоже объекты (хотя в обсуждениях эрланга никогда не упоминают что это ОП, никогда), передача сообщений - это, с оговорками (в виде большого размера сообщений), передача сообщений. Далее смотрим, ага, планировщик сам раскидывает все по ядрам, ищем какие нибудь графики производительности, хм..., ага вот на 20 ядрах отдает 1900%, отлично потеря в 5% за такую простую многопоточность просто ерунда. Тогда почему же его не слышно и не видно? Сырой? Нет, промышленного уровня, да и 30 лет ему почти. Интуиция ошибается? Вопрос. Попробуем на вкус, а дальше видно будет. Непривычно. Очень непривычно. Вообще все непривычно. Но работает, и хорошо работает. Окей, понятно, идем дальше.

<<Некоторое время спустя>> Фейсбук покупает WhatsApp за 16 миллиардов. Серверное ПО WhatsApp написано на Erlang, в них было установлено по 96 ГБ оперативной памяти, и каждый мог обрабатывать от 1 до 2,8 млн соединений, что на несколько порядков выше классической проблемы C10k.

<<Спустя некоторые размышления>> А интуиция то была права, язык похоже что надо, везде появились библиотеки с акторами, а-ля эрланг, и даже языки (Go, Cloud Haskell и может быть Rust).

<<Сейчас, «Почему не стал мейнстримом Smalltalk?»>> В общем-то выше описано почему не стал, медленный, необычный на то время, с возможностями которые тогда были не нужны, и отсутствием возможностей которые нужны сейчас, умер, не до конца, стал зомби. И как другие зомби-языки охотится за неокрепшими мозгами-разумами программистов. А вот идея-то, иль часть идеи, жива, переродилась в модель акторов она, но только та часть что объекты и общение посылкой сообщений между ними.

anonymous
()
Ответ на: комментарий от anonymous

«Это же прекрасная идея, вот только интересно, а что если объект 1 пошлет сообщение объектам 2 и 3, а они в свою очередь пошлют сообщение объекту 4. Какое четвертый примет раньше, от второго или третьего? Стал думать, потом пошел искать в книжке какую-нибудь главу о многопоточном или паралельном программировании... Её не было, смаллталк использовал одно ядро процессора и просто выполнял все последовательно. Вот так открытие, я то думал что с такой концепцией идея раскидывать объекты по ядрам должна была возникнуть сама собой, но нет, оно перекидывалось сообщениями на одном ядре с самим собой.

Нет никакого смысла считать 2+2*2 в два ядра. Чего-то более сложное параллелится руками.

Ну а так, если очень хочется, для кучи ядер есть GemStone/S.

yoghurt ★★★★★
()
Ответ на: комментарий от silver-bullet-bfg

ObjC это то же самое, что C. Не вижу никаких проблем. Ок. Приведи мне пример простого окна, где есть кнопка, вызывающая далог с выбором выхода или продолжения работы, такой, чтобы код без правок работал под Mac/Win/*nix. Не можешь? ЧЯНТД?

1. GNUStep с дубовым GUI

2. Cocotron с кросскомпиляцией из яббла.

anonymous
()
Ответ на: комментарий от menangen

++ не нужен для этого. нужен минималистичный самодостаточный objc рантайм, ну или тёплая ламповая сишечка и C(l)OS (почти как CLOS), напильник, рашпиль, и свой реактивный (типа McCLIM) фреймворк поверх этого всего.

как раз лет через 5 реально допилить, ага. ради окошка с кнопкой, ЛОЛ.

anonymous
()
Ответ на: комментарий от anonymous

идея акторов

а ещё метаклассы и рефлексия.

anonymous
()
Ответ на: комментарий от yoghurt

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

anonymous
()
Ответ на: комментарий от anonymous

А может быть нет никакого смысла в посылке сообщений, если она на самом деле не нужна?

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

yoghurt ★★★★★
()
Ответ на: комментарий от yoghurt

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

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

Анонимус выше верно сказал. Идеи живы, а язык - зомби.

anonymous
()
Ответ на: комментарий от anonymous

так а сейчас она практически везде реализуема. Причем кучей разных способов

Сейчас почти все почти везде реализуемо, причем кучей разных способов :) Вопрос только в удобстве.

yoghurt ★★★★★
()
Ответ на: комментарий от yoghurt

ну я это и имел ввиду. инструментов для сообщений полно.

Вот для чего б я использовал ST, так это для обучения. Я когда то именно благодаря ему понял как надо правильно архитектурить приложения.

anonymous
()
Ответ на: комментарий от anonymous

Причем кучей разных способов

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

phill
()

Я все таки полез изучить получше smalltalk и залез с головой книжку и стал читать, спустя некоторое время после продирания через классы, метаклассы и классы метаклассов мой глаз зацепился за следующую часть книги: <<То, что мы рассмотрели, не отвечает на главный вопрос: как объект, получивший сообщение, находит метод, который надо выполнить? Остано-вимся подробно на механизмах поиска по сообщению необходимого метода и его выполнения. Итак, как уже отмечалось, выполнение любого действия в системе Смолток осуществляется с помощью посылки объекту сообще-ния. Получив сообщение, получатель ищет метод с соответствующим сооб-щению шаблоном, начиная поиск обычно со своего класса. Если объект — класс, то метод ищется среди методов класса, а если объект — экземпляр класса, то среди методов экземпляра класса. Если метод с соответствую-щим шаблоном находится в классе получателя, то он выполняется, и как результат его выполнения обязательно возвращается некоторый объект, ко-торый информирует того, кто послал сообщение, что выполнение метода завершилось с содержащимся в возвращаемом объекте результатом. А если метода с нужным шаблоном нет в классе? Тогда к работе под-ключается иерархия классов, а точнее, цепочка суперклассов для класса объекта-получателя. Если в классе подходящего метода нет, метод ищет-ся в ближайшем его суперклассе. Если нужного метода нет в суперклассе, то поиск продолжается в следующем по иерархии суперклассе и так да-лее, пока не доберемся до класса Object.>> Ага, что то мне это напоминает, подумал я. Рекомендуемый способ построения процессов в эрланге. Хм... Дальше, а что будет если представить это в функционально виде? Получится что-то типа функция(объект) получив какое то значение проверяет может ли она его обработать и если нет то передает в вышестоящую функцию(класс объекта) и так далее вверх по цепочке функций. Как интересно. Глянем.

fun1 expr1 -> ans1(отличается от ans1 в fun2) expr_all -> fun2(expr_all)

fun2 expr1 -> ans1 expr2 -> ans2 expr_all -> fun(n)

Вызываем функцию(передаем сообщение объекту) fun1 и подаем такую функцию(метод) который подходит под exp1, получаем выполнение того что находится в fun1(ans1). Окей. Пробуем вызвать функцию(метод) expr2 через функцию(объект) fun1, оно не находит нужной функции(метода) в fun1 и идет дальше, а вот там есть уже нужная нам функция(метод) expr2. Работает. Можно еще понять что нельзя получить функцию(метод) expr1 из функции(объекта) fun2, потому что оно уже вернет нам expr1 из fun1. Что мы сделали? А вот что: fun2 это такой объект с двумя методами, от него мы наследовали объект fun1 с одним измененным методом expr1.

anonymous
()

Работает, но выглядит как то странно. Да в общем-то теперь можно создавать такие цепочки функций, как бы наследуя от предыдущих, в общем то удобно если надо изменить одну функцию(метод) из десяти. В общем-то понятны и идеи можно с таким «наследованием» очень быстро создавать похожие на прототип объекты. И проблемы: методы конечного объекта могут быть размазаны ровным слоем через 10 классов. Ну ладно, еще одна парадигма в моей голове. Но, постойте-ка, а что это все таки такое если подумать? Хм... множества, объекты это множества функций, а ведь есть язык построенный на этом - Prolog! Точно, в рамках этого языка описанные выше функции выглядят совершенно естественно, только...

fun1 expr1 -> ans1 expr1 -> ans2

Только вот там есть и такое, эта «функция» если подать ей expr1 вернет вам два «значения», что же делать? А вот что там есть механизм отсечений и с помощью него можно сделать так что бы программа не выполнялась дальше если дошла до места отсечения

fun1 expr1 -> ans1, !. (! - это место отсечения, делает дальнейшие записи с expr1 бесполезными) expr1 -> ans2 expr2 -> ans3 (Но не делает бесполезными другие записи, эта например выполнится если не выполнится expr1) (Пожалуй еще не поздно сказать что это все псевдосинтаксис из смеси языков которые я изучал, в основном смесь функциональных).

Получаем уже аналогичную функциональным языкам запись и проясняем для себя почему она такая странная для функционального программирования. Но что же мы получили в итоге? Smalltalk это Prolog с отсечениями? Такое объектное программирование это иерархическое множество функций? Похоже на то. Но опять же Prolog имеет гораздо более мощную систему для работы с множествами, а это дает лучшую возможность собирать «классы» и комбинировать их, собственно вся идея языка построена на работе с множествами и логическом программировании. Собственно вопрос остается в том способен ли Prolog изменять структуру своей программы или нет, и если способен то он будет гораздо более мощным инструментом. Тут я припоминаю что пролог написанный на лиспе занимает строк 30-40, а в лиспе это точно возможно, изменять структуру программ в рантайме, да и плюсом пойдет система макросов которая ложится поверх всего остального синтаксиса. Грубо говоря пролог на лиспе точно мощнее смаллталка.

(Для себя решил что «дело со смаллталком» закрыто. Надо лучше рассмотреть пролог, а еще лучше его современные инкарнации: акторный пролог и mercury(логическое + функциональное программирование)).

Посмотрел еще на многопоточность смаллталка, она в общем - «никакая», все практически в ручную.

В общем: язык оказался на проверку почти прологом, причем в прологе такое «объектное программирование» местами даже мощнее, вопрос только в рантайме, многое ли там позволяется, а пролог на лиспе вероятно сильно выше уровнем.

anonymous
()

Мда, поломалось все форматирование.

Забыл еще добавить что пролог и смаллталк здорово еще похожи синтаксисом.

anonymous
()
Ответ на: комментарий от anonymous

Странно видеть просто интересные выкладки анонимуса. Обычно это увязано с «опусканием» оппонентов в лице регистрантов или других анонимусов.

Virtuos86 ★★★★★
()
Ответ на: комментарий от yoghurt

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

anonymous
()
Ответ на: комментарий от anonymous

Зачем извращаться и пилить говно, когда можно запросто взять няшный Qt и пилить сколько хочешь окошек и кнопок, дёргая их хоть из Питона или даже JavaScript. А для Obj-C и так есть все средства для написания оконных приложений на яблоке. Яблоко, оно же лучше для десктопа, чем линукс, по статистике, оно у бОльшего количества пользователей стоит.

menangen ★★★★★
()
Ответ на: комментарий от menangen

Ага. А теперь возьми статистику по Win и умри от осознания своей ущербности с заявлениями про ябло. Кому нужен ObjC без вменяемых кроссплатформенных библиотек? Кому нужен ущербный С++ уже не раз поднимался вопрос. Просто лучше, чем кресты не было, поэтому сейчас на нем написано много легаси кода. А свой жабоскрипт используй и дальше для декстопа. Скажи когда появится хотя бы одна программа уровня AutoCAD написанном на нем

silver-bullet-bfg ★★
() автор топика
Ответ на: комментарий от silver-bullet-bfg

Много кода написано и на Си, т.ч. Не надо про ущербности ныть. Твоя вин не юникс. Макось - сертиф. юникс, в отличии от клона: линукс бейзед операционок. Вменяемые кроссплатформенные библиотеки есть. И они легко юзаются через Си и Objective-C - учи матчасть. Что за крики, ты хоть раз пробовал кодить что-нить на сях? Куча всего есть, юникод, сеть, гуи - бери юзай, тока без соплей.

menangen ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.