LINUX.ORG.RU

Какие-то нестандартные реализации/расширения уже знакомых концепций тоже считаются.

next_time ★★★★★
() автор топика

Ходят слухи, что ООП в смолтолке какое-то незамутненное и правильное. DBC в Эйфель можешь посмотреть ещё.

RedPossum ★★★★★
()

Erlang — идеология параллельно выполняющихся процессов, концепция «let if fail».

OCaml — в данном случае не ради ФП (для этого есть Haskell), а ради системы модулей, в том числе первоклассных.

Miguel ★★★★★
()

и хаскелл будем считать уже названными

Хаскел - это не альтернатива ООП. это те же яйца только сбоку просто до хомячья это пока не доперло.

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

Ходят слухи, что ООП в смолтолке какое-то незамутненное и правильное

Всего лишь «всё объект» и тот же мессадж пассинг

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

ради системы модулей, в том числе первоклассных

Тогда добавлю Racket — в данном случае не ради первоклассных модулей (OCaml назвали), а ради разнообразных замыканий (обычные, escape, serializable) и нелокальных макросов (макрос может раскрываться не только в точке вызова, но и менять toplevel своего модуля).

monk ★★★★★
()

tcl — любая команда или функция = строка.

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


Алан Kей все время говорил про какое то позднее связывание, говорил, что он знает только два языка которые способны на метапрограммирование лисп-1.5 и смоллток. Что он имел в виду? что это такое?

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

и тот же мессадж пассинг

Читал где то что Алан Кей призывал абстрагироваться от объектов и сконцентрироваться именно на передаче сообщений. Что он имел в виду, опять же? Где об этом почитать?

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

Ну, имеется в виду на заточенность под метапрограммирование. Это не точная цитата, конечно.

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

Я имею в виду, почему он призывал «забыть» об объектах и сконцентрироваться на сообщениях. Сам по себе передача сообщений (реализация) тривиальна.

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

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

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

Вот такого он точно не говорил

Оригинал к сожалению не нашел, но вот что пишет знающий чувак:

What Alan Kay refers to as late-binding relates to self-describing systems in that the dispatch mechanism itself is expressed in terms of metaobjects. That's exactly the same as the eval-apply metacircular evaluator in Lisp. This is what Alan Kay means when he says that Smalltalk and (the original) Lisp are the only two languages he knows of that are late-bound.

Вот тут: http://carcaddar.blogspot.ru/2009/03/i-think-i-finally-understand-what-alan.html

И что такое позднее связывание? Это ленивость или что то принципиально другое?

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

И что такое позднее связывание?

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

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

Да, кстати, пользуясь случаем, хотел спросить, как squeak или что-то другое, можно запустить в режиме репла в консоли, чтобы чистапоиграца. Желательно под опенбсд64

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

Простой ответ - никак. Есть ещё мой http://dmitrymatveev.co.uk/shampoo/ но для емакса. Протокол открыт, впрочем, можешь и CLI-клиент нарисовать. На Сквик официально не портирован, работает только в Pharo (и то в несвежей)

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

Всего лишь «всё объект»

А разве концепция «все объект» не соответствует в большей степени духу prototype-based языков, таких как self, js, lua? Ведб в смоолтоке есть классы.

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

Ну и пускай выполняет в Self, JS и тд. Это, опять же, дальнейшее развитие идей ещё 70х гг., «зафиксированных» в Smalltalk-80.

yoghurt ★★★★★
()
Последнее исправление: yoghurt (всего исправлений: 1)
Ответ на: комментарий от anonymous

вопрос о «в какой момент(ы) на протяжение существования текста(процесса(состояния вычислителя) им порождённого) происходит замена имени значением(тоже в некотором смысле именем - ведь числа в компе это лиш наборы бит) ну и насколько уровней в глубь »

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

кури Акторы - там очень всё крассиво , и помогает в сочетании с физикой(теми теориями в которой скорость взаимодействия конечна- т.е локальность взаимодейстий «близкодействие») понять обе теории

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

Бтв, раз пошла такая пьянка о метаобъектных протоколах.

Я пытался (ментально) осилить это понятие. Догуглся до статьи про eigenclasses, но у авторов Руби головного мозга. Пока что обобщением удалось всё свести к следующим аксиомам:

  • между объектами есть два типа отношений: инстанциирование и наследование;
  • изначально существует три объекта-класса: Object, Slot и Method, представляющие, соответственно, объекты, поля и методы; последние два, естественно, наследники Object;
  • плюс есть пачка примитивных методов и слотов, которые формируют предопределённые методы и слоты классов Object, Slot и Method.

Таким образом, класс — это просто такой объект, у которого есть метод instantiate, который каким-то образом возвращает новый объект.

Но когда я на бумаге пытаюсь нарисовать стрелочками схему этого всего и осмыслить, как же написать примитивные методы, что на самом деле должен возвращать Class-of для тех трёх примитивных классов, и как сделать так, чтобы всё это не тормозило как интерпретатор интерпретатора интерпретатора, запущенный на эмуляторе виртуальной машине под гипервизором, мой маленький мозг взрывается.

Есть где ещё почитать на эту тему?

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

позднее связывание это процес замены «имени» «значением» при исполнении(как вариант при джите), а не как в раннем - при компиляции - в этом смысле макроссы(в части замены текста кода)(их раскрытие) можно считать сверхраним связыванием .

т.е чем больше позднего связывание тем больше «интерпретации» во время исполнения -

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

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

Таким образом, класс — это просто такой объект, у которого есть метод instantiate, который каким-то образом возвращает новый объект.

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

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

у тя граф не получится - ибо у тя и рёбра тоже обьекты .

т.е как два графа где первый характерезует какие виды рёбер могут быть во втором - то тогда да - в этом вообще проблема всех аутореферентных систем.

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

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

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

qulinxao ★★☆
()
Последнее исправление: qulinxao (всего исправлений: 1)
Ответ на: комментарий от new_1

Не, ну по идее instantiate не обязательно является исключительной особенностью Object и не обязательно только он возвращает объекты. Но я не могу осмыслить, как сюда пользователю можно добавить тот же clone. Только в виде ещё одной данной свыше аксиомы (примитивного метода).

Я не могу сообразить, какого набора методов будет достаточно в качестве основания (мета)объектной системы. Чтобы её выразительность не ограничивалась набором примитивов-аксиом.

Но какой-то Гёдель на плече мне шепчет, что это нереально...

ilammy ★★★
()

как ни странно golang - как инкарнация 21 века вечно манящей идеи о создании переносимого ассемблера.

qulinxao ★★☆
()

REBOL - язык для создания диалектов (DSL). Такой лиспотикль, заточенный под распределенную обработку.

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

если доверять А.Кею то смолток80 был просто одной из реализаций которая получив самое массовое распространения привела к несколько искажённой у публике оценке что есть сущьностно смолточным , а что частность реализации.

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

могло оказатся по причине производительности и процесе R&D в тот момент незнания как эфективно(что потом появилось в селфе) реализовать - поэтому классы всё таки отличались от просто обьектов - но вот классы классов уже были того же «класса» что и «обычные» классы .

qulinxao ★★☆
()
Последнее исправление: qulinxao (всего исправлений: 1)
Ответ на: комментарий от ilammy

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

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

если точнее

в смолтоке (1)всякий класс обьект (2)не всякий обьект класс.

для прототипного языка необходимо, что бы всякий обьект мог быть классом(т.е прототипом) для «своих» обьектов.

qulinxao ★★☆
()
Последнее исправление: qulinxao (всего исправлений: 2)
Ответ на: комментарий от ilammy

Есть где ещё почитать на эту тему?

Рекомендую почитать про io language. И про сам язык, и исходники. Тогда твой мозг гарантировано взорвётся. :)

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

anonymous
()
  • унификация путей и протоколов сообщения - REBOL
  • программы как доказательства - Agda
  • лингвистическая функциональность - J
jtootf ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.