LINUX.ORG.RU

[smalltalk] Помогите выборать

 


0

1

Здравствуйте, решил изучить smalltalk, поковырял сквик немного. Появилась пара вопросов:

1) Какие коренные отличия Pharo от Squeak?

2) Можно ли на них писать декстопные приложения? Реально скрыть «окно» виртуальной машины и оставить на экране лишь программу?

3) Какие есть еще хорошие реализации smalltalk (естественно бесплатные =) )?

4) На сабже что-нибудь более или мене сложное пишется? Или smalltalk остался языком с Ъ идеей и слабой применимостью?

5) Есть серьезные проекты на Squeak/Pharo или лишь Etoy и Seaside их удел?

6) Что можете посоветовать почитать по смаллтолку кроме «классических монументальных трудов»? Желательно более практического характера, без философии (а то большинство книг, которые находил больше склоняются к описанию самого языка, а не то как работать на нем).

Заранее благодарю.


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

Ъ ООП это когда у нас каждая сущность языка - объект(сущность, имеющая состояние, поведение и идентичность, а не просто синтаксис. Ну и принадлежащая к некоторому классу, если говорить о class-based OOP.).

ну и какому классу принадлежит T в CLOS?

а не делать выводы на основе каких-то левых слоупоков.

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

В CLOS диспетчеризация это настолько объемная штука, что ты не осилишь, наверное. Не примитивненький message passing все-таки.

Во-первых, механизм выборки метода там скрыт от пользователя, за исключением возможности изменения порядка проверки аргументов(вообще, это единственный вменяемый путь реализации multiple dispatch - argument ordering), но обычно используется minimum depth discrimination tree. Во-вторых, все остальное, например то, как методы комбинировать и вызывать и вызывать ли вообще, варьируется совершенно произвольно.

Естественно, оптимизаций в современных реализациях CLOS куча, начиная с кеширования, свертки одиночного метода в обычную функцию, и отложенного вычисления эффективного метода, и заканчивая вообще непонятным, но судя по всему, дико адским трешем(как в LW - он кстати обгоняет SBCL по части CLOS).

lovesan

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

ну и какому классу принадлежит T в CLOS?

Очевидно, symbol.

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

Ну допустим делают. Я имел ввиду редко, и это хак.

не, в смоллтоке так делают довольно часто, потому что компилятор есть объект со стандартным интерфейсом (описанном в том же smalltalk-80 стандарте, и новее).

а вот newspeak поверх этого даже свой парсер, аст и макросы прикрутили: http://www.sciencedirect.com/science?_ob=MImg&_imagekey=B75H1-4R1NBCB-2-1...

Gilad Bracha. Executable Grammars in Newspeak.

что вполне логично для языка, в котором модули это тоже объекты, по которым работает паттерн-матчинг http://newspeaklanguage.org/newspeak-documents/

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

Очевидно, тыканье пальцем в код это как-то примитивненько.
Если уж куда-то тыкать, то тыкать надо в AST, семантика которого интерпретируется через базисные формы.
И если уж говорить об интерфейсах, то в лиспе интерфейс задается функциями, в частности обобщенными, а не объектами.
Это такой paradigm shift от примитивного message passing, да. Смотри не лопни.

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

В CLOS диспетчеризация это настолько объемная штука, что ты не осилишь, наверное. Не примитивненький message passing все-таки.

а зачем нам объёмная?

а теперь нарисуй по одной оси всевозможные объектные системы, а по другой — накладные расходы на диспетчеризацию. вот VTable кажется довольно простым, но самым негибким, и Fragile Base Class problem туда же.

«примитивненький messpage passing» — самый гибкий, но и самый медленный.

а между ними — всевозможные варианты. тот же CLOS, dispatch trees, PIC, метатаблицы как в Lua и промежуточные варианты с кешированием или там линеаризацией суперклассов.

Естественно, оптимизаций в современных реализациях CLOS куча

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

а то в современных смоллтоках тоже оптимизации появились. например, в недавнем Objective C рантайме, хоть это и не совсем смоллток, ускорили на порядок. а в смоллтоках оптимизаций больше будет.

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

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

так всё-таки, где там семантика, если это объект? она жёстко и однозначно задана, если это объект или «интерпретируется», и таким образом ad hoc?

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

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

Это значит, что ООП смоллтолка является обобщением и расширением ООП CL.

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

ну допустим, что семантика лиспа — это объект. но объект чего? виртуальной рантайм лисп-машины. который строится ad hoc и не имеет чётко внятного интерфейса, потому что что-то закопано глубоко в реализации.
чему можно противопоставить тот же MOP или рефлексию. тоже объект, то есть, класс — но с чотко очерченным интерфейсом.

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

Жестко задана только базисная семантика, то есть специальные операторы и формы с вызовом функций. Но AST может состоять не только из базисных форм, а и из макросов, а их семантика интерпретируется в зависимости от состояния лисп-системы.

Т.е. образом семантика нераскрытого AST это объект, который является некоторой совокупностью семантик макросов и базовых форм, входящих в AST. Менять ее можно меняя значения макро-узлов AST.

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

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

и вот тут минималистичность и языка, и реализации выходит на первый план. потому что мы все хотим не просто язык, а платформу которая есть нечто больше чем реализация, нечто больше чем просто язык.
минималистичность = простой и понятный интерфейс у этого объекта, виртуальной машины языка, в compile-time и в run-time.

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

что для CL нельзя вывести однозначную формальную семантику, и соответственно, нельзя называть его формальным языком.

значит, тогда семантика лиспа — не объект, или, по крайней мере, не в объектной системе CLOS?

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

Это вы хотите, а мы хотим писать код, да еще так, что удобно было.

Интерфейс CL = compile, compile-file и eval, всё как бы.

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

Этот объект это сама лисп-система в данный конкретный момент времени, то есть совокупность всех остальных объектов. Ее интерфейс это все функции, доступные пользователю.

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

Ее состояние это совокупность состояний всех объектов.

А идентичность бессмысленна, т.к. этот объект синглтон.
Соответственно, бессмысленен вопрос о ее классе, например.

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

ну то есть, рекурсивная виртуальная машина, VVM.

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

Не имеет смысла вводить класс для объекта, который существует в единственном числе что бы мы не делали.

anonymous
()

ЛОР торт!

C приходом Лавсана и аноминуса тред скатился в годный. Всем чмоке :)

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

Я его не тыкал. По сути GemStone/S предоставляет распределенный персистенс и, соответственно, прозрачное обращение к объектам, которые живут на разных гемах.

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

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

Ты про EMACS слышал?

Emacs - это такой текстовый редактор с претензией на IDEйность, половина которого написана на Си? Даже если мы выкинем из списка IDE (всё-таки есть LispWorks, вероятно, написанные на лиспе), то останутся операционные системы, системы управления базами данных, сервера приложений, почтовые сервера, веб-сервера, сервера обмена мгновенными сообщениями, игры, браузеры, почтовые клиенты, клиенты обмена мгновенными сообщениями, компиляторы, системы обработки аудио, системы обработки графики, системы обработки видео, системы 3D-моделирования и так далее, которые никто не разрабатывает на Лиспе.

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

interactive theorem prover'ы — труЪ-нонконформизм?

ТСу нужен язык, максимально непожий на мейнстрим, понятно же. (Если бы его интересовала практика - не стал бы интересоваться Smalltalk'ом.) В этом смысле вышеописанное подходит просто идеально.

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

прикол в том, что всё это есть)

Где? Пруфы, иначе - п*здобол.

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

Макросы четырех видов
Condition System
CLOS с метаобъектным протоколом
высокопроизводительные реализации и оптимизирующие компиляторы
CL полноценный функциональный язык и в этом плане перекрывает все мейнстримные и многие немейнстримные языки.
ООП это когда у нас каждая сущность языка - объект
CL синтаксис и семантика языка также являются объектами языка

50% баззвордов + 50% розовых мечт.

чтобы сравнивать два языка, нужно знать их оба

Но ведь ты только что сам сказал, что «CL перекрывает все мейнстримные и многие немейнстримные языки». Таким образом, ты сравнил CL и все мейнстримные и многие немейнстримные языки. Значит, ты знаешь все мейнстримные и многие немейнстримные языки? Или ты просто лицемерное бздиловатое пиздло с двойными стандартами?

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

заканчивая вообще непонятным, но судя по всему, дико адским трешем

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

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

ты знаешь все мейнстримные и многие немейнстримные языки

да

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

Охуеть. В плюсиках или жабке мультиметоды появились? Когда? Как? Ну-ка покажи.

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

не суперкомпилятор(ты значение этого слова то знаешь вообще?), а именно метарекурсивная виртуальная машина

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

да

Ahaha oh wow, tell me moar. Or maybe you'll just show me your code?

В плюсиках или жабке мультиметоды появились?

Я имел в виду не степень обвешанности баззвордами, а производительность.

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

Если ты такой умный, то почему такой нищий?

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

Для тебя мультиметоды это баззворд?
Удачи, че.

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

Дерьмово он там себя показывает.

РНР ранее расшифровывался как Personal Home Page Tools. Хорошо он там себя показывает. Он создавался для цели простого создания простых сайтов. В этом он прекрасно себя показывает. Гипернагруженные приложения на нем не написать, но в целом для «визитки» лучше и не надо.

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

А зачем? Имеющаяся достаточно быстрая, по крайней мере я не видел задачи, где тикль бы провисал. ИМХО он и так достаточно производителен.

Да там даже пакетного менеджера уровня quicklisp то нету.

А зачем? Пакетный менеджер далеко не главное в языке, тем более уровня «ынтерпрайза», каковым является тикль.

CL полноценный функциональный язык

Давно? Я что-то пропустил видимо. На сколько помню он не «чистый», следовательно просто позволяет писать в функциональном стиле.

Назвать CLOS костылем это просто верх невежества.

Разве? CL изначально не ООП язык. По твоей логике можно и Tcl назвать верхом Ъ-ООП, в нем ведь есть XOTcl тот же.

Я лично знаком с Factor

Много кода на Factor написал? Может человек так же с CL как и ты с фактором. Он высказал свое мнение, ты начал лить на него тоны г*а.

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

Это твой критерий хорошего языка? :) Лисп совершенен? Тогда мне с вами в разные палаты.

гибкости объектной системы, то в CL они выше чем в смоллтолке

Когда стал?

а не делать выводы на основе каких-то левых слухов.

ТС как я понял из треда сказал некий человек, который активно пишет на лиспе. Вполне возможно, что он (как и любой нормальный представитель конкретного языка) стал лучше тебя осознавать проблемы лиспа (они есть у любого языка) и сказал об этом ТС. Лисп не лучший язык мира. Ты лучше знаешь лисп - тебе он ближе, но хватит его уже совать во все подряд места (читаю ЛОР периодически давно очень), ну не панацея он. По большому счету лисп - нишевый язык, предназначенный для построения сложных систем в продакшене. Но и то его постепенно оттуда теснит Java и прочие молодые языки, которые набиты батарейками. И lisp уже не станет популярен. Предприятие не будет искать работника под язык.

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

Давно?

Изначально. Меньше читай русскоязычные Ъ ф.п. блоги. Чистота не критерий отношения языка к функциональным. Иначе и OCaml и Scheme также не функциональные, что смешно звучит.

CL изначально не ООП язык.

Как раз таки изначально он ОО-язык.

Много кода на Factor написал?

Одну простую библиотеку парсер-комбинаторов и парочку гуевых программ.

Это твой критерий хорошего языка? :)

Критерий - выразительная мощность.

Лисп совершенен?

Почти. Но это глупый вопрос. CL - наиболее практичный и удобный в использовании высокоуровневый язык программирования на текущий момент времени, вот и все.

Когда стал?

Опять же, изначально, вот не поверишь. CLOS это развитие ранних объектных систем лиспов, некоторые из которых тут уже упомянули(FLAVORS тот же), а эти ранние системы пришли из смоллтолка.

который активно пишет на лиспе.

А я вот ему не верю. Потому что он написал херню.

стал лучше тебя осознавать проблемы лиспа

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

Лисп не лучший язык мира.

См. выше.

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

CL гораздо лучше подавляющего мейнстримных языков подходит для того, для чего они сейчас используются - от геймдева до морд к БД.
На самом деле, не подходит он только для низкоуровнего программирования, ввиду относительно жирных рантаймов, и для мелкой скриптоты(хотя и то). Всё.
Более того, за лисп-подобными языками будущее (http://love5an.livejournal.com/370396.html).

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

Никто его не теснит нигде. Наоборот, он только набирает популярность после долгого забытия вследствие AI-winter в конце 80х - начале 90х. Батарейки это все херня, на самом деле, и дело наживное. К тому же, это только для всякой скриптоты важно - ни в одном более-менее серьезном приложении батарейки практически не используют, и городят свое, за вычетом какой-то базы.

И lisp уже не станет популярен.

А вот это ты ошибаешься. Лет 5 назад, кстати, то же самое говорили про Python.

Предприятие не будет искать работника под язык.

Эм. Ты на улицу когда-нибудь выходил? Ну, типа, вообще-то сейчас все так и делают - есть какая-то кодобаза, и под нее ищут программистов. Серьезно, меньше читай ЛОР и больше выходи в свет, ну типа, добрый совет, от души, все такое.


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

Реально, вот пойди и зацени CL. Просветлей, и потом еще когда-нибудь поговорим, возможно.

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

Изначально

Пруф? Если нет - то Tcl резко записываю в Ъ-ФП, а С++ в Ъ-ООП.

Как раз таки изначально он ОО-язык.

Пруф, plz. Иначе можно, как отметил i_overdose, Tcl - тоже изначально объектно-ориентированный. Да и как язык может ПОЛНОСТЬЮ поддерживать две различные парадигмы? Частично - легко. Полностью - мягко говоря сомнительно.

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

На самом деле, не подходит он только для низкоуровнего программирования, ввиду относительно жирных рантаймов, и для мелкой скриптоты(хотя и то). Всё.

Пруф на ОС на лиспе (EMacs можешь не вспоминать, там много кода на сях), на игру уровня хотя бы TES3. Ну а про морды к БД как то даже не удобно. Писать их можно на чем угодно.

Наоборот, он только набирает популярность после долгого забытия вследствие AI-winter в конце 80х - начале 90х.

То же самое я читал в одной статейке про Prolog и возвращающуюся популярность к этому швейцарскому ножу.

Более того, за лисп-подобными языками будущее (http://love5an.livejournal.com/370396.html).

Твой блог не есть источник истины.

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

И сурово пишут на ASM. Все остальное тоже от лукавого. Делая даже свои тулкиты для гуя. И не используют графическую систему самой ОС.

А вот это ты ошибаешься.

А 15 лет назад о Prolog так говорили.

Эм. Ты на улицу когда-нибудь выходил? Ну, типа, вообще-то сейчас все так и делают - есть какая-то кодобаза, и под нее ищут программистов. Серьезно, меньше читай ЛОР и больше выходи в свет, ну типа, добрый совет, от души, все такое.

Правильно, при этом изначально кодобаза писалась на языках, которые будет понимать среднестатистический выпускник пуза любого «мухосранска». Зачем разрабатывать ПО, которое поддерживать смогут в стране от силы 1000 человек и которые запросят over 100k, если можно сделать то же самое на любом мейнтримовом языке, программистов на которых как муравьев и они готовы работать за еду? По моему это ты давно в пещере молишься на скобочки.

Одну простую библиотеку парсер-комбинаторов и парочку гуевых программ.

Так и запишем, ничего серьезного. Побаловался и забыл.

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

Человек лишь отметил, что твои комменты чаще всего - религиозен и этим по его мнению. Причем в неинтеллигентной форме, в отличие от себя. И да, если ты один инструмент заведомо ставишь выше другого - объективности 0, ты фанатик.

З.Ы.: человек который критически высказался мне о лиспе в отличии от тебя не оставляет тонны постов на лоре и в своем блоге, он зарабатывает деньги)

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

Реально, вот пойди и зацени CL. Просветлей, и потом еще когда-нибудь поговорим, возможно.

Просветление != лисп. Религия != Истина

Alda
() автор топика
10 сентября 2012 г.
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.