Re[9]: Smalltalk для людей. Есть такой?
От: quadrochups ЮАР  
Дата: 30.08.06 10:28
Оценка:
eao197, а я по-вашему откуда? Только это же список — он ни о чём не говорит. Например, описания "Близко к стандарту Smalltalk-80." — и что? А может есть Смоллток-3000, который гораздо круче! Или вот библиотеки — у всех они самодельные, т.е. уже мой код под другую систему не перенести. Значит надо выбирать ту, которая больше всех распространена. Ну и вообще, субъективные впечатления нужны — что удобнее, быстрее и т.п.
Re: Smalltalk для людей. Есть такой?
От: Lorenzo_LAMAS  
Дата: 30.08.06 10:35
Оценка:
ObjC ?
Of course, the code must be complete enough to compile and link.
Re[5]: Smalltalk для людей. Есть такой?
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 30.08.06 10:35
Оценка:
Здравствуйте, quadrochups, Вы писали:

Q>Уже лучше, учту. Там, где я читал про Руби (http://www.msiu.ru/~roganova/Ing_Spring_2003-2004/AboutRuby/www.sophtanet.com.html) про это ни слова.


Я дал вам ссылку на один из лучших источников информации по Ruby, первое издание Programming Ruby (лучше, имхо, только второе издание). В котором все очень понятно, последовательно и доступно излагается. Так что лучше искать проблемы в собственных источниках, а не в языке программирования.

E>>Еще @@ забыли.

E>>$ практически не используется, кроме как для обращения к системным переменным типа $!, $: и пр.
E>>А вот @ и @@ удобны.

Q>Хм... как сказать. Реализация методов класса — это и есть алгоритмы над членами класса. Какой смысл выделять их "плюшками"? А как же прозрачность кода?


Потому что в реализациях алгоритмов используются и параметры, и локальные переменные. Чтобы в них не путаться в других языка программирования используют соглашения об именовании. Например, префиксы m_ (m_start_time) или суффиксы _ (start_time_), или запись через this (this->start_time в C++ или this.start_time в Java). В Ruby эту проблему решили на уровне синтаксиса языка (@start_time и никаких гвоздей).

Q>Дело не в том как называть — здесь вопрос концепции. Если ВСЁ в Руби — объекты, зачем же тогда делать разные псевдосущности? (глобальные переменные, спец-переменные) Я ж потому и говорю про Смоллток, что он является "чистым" и целостным ООЯ. Т.е. достаточно иметь в голове небольшой набор правил, а сами программы пишутся, как говорится, не приходя в сознание.


Теперь докажите, что, например $: или $! не является объектом. Объект самый настоящий, $ просто указывает область его видимости.

Q>>>4. Аксессоры — тоже какая-то мешанина: есть синтаксис с get_/set_ (с какой радости? может это мои методы!), есть его запись через "=", а есть его сокращение через attr_* — вам не кажется, что эта чехарда несколько несерьёзна?


E>>Нет. Я вообще не понял, про какие get_/set_ идет речь.


Q>Это отседа: http://www.msiu.ru/~roganova/Ing_Spring_2003-2004/AboutRuby/www.sophtanet.com.html (глава "Аксессоры")


Тогда вы еще и свой источник не правильно прочитали. В Ruby можно определять методы get_/set_, если это кому-то нравится. Но не принято, вместо этого используются имена name и name=. Но, поскольку в большинстве случаев их реализация тривиальна, то для упрощения их создания добавлены метаметоды attr, attr_reader и пр.

Q>>>Я не хочу хаять Руби в целом — он может быть вполне достойной заменой. Но вот как альтернатива СМОЛЛ-току — смотрится слишком дилетантски.


E>>Да ради бога. Проходя проходи.


Q>Вы не поняли моего вопроса... Я прошу показать, есть ли вразумительная замена Смоллтока, а не то, хороший Руби или плохой. И потом, см. замечание про "сорсы" и "image".


Вы бы определились, что вам нужно. Smalltalk, но с другим синтаксисом? Или другой язык, близкий по духу Smalltalk?

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


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[10]: Smalltalk для людей. Есть такой?
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 30.08.06 10:37
Оценка:
Здравствуйте, quadrochups, Вы писали:

Q>eao197, а я по-вашему откуда?


Не знаю С Луны?

Почему же там не спрашивать? У целевой аудитории, так сказать?


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[6]: Smalltalk для людей. Есть такой?
От: Andrei N.Sobchuck Украина www.smalltalk.ru
Дата: 30.08.06 10:58
Оценка:
Здравствуйте, squiz, Вы писали:

S>Я "трогал" только Smalltalk MT. Не впечатлило


А что именно?
http://www.smalltalk.ru | << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Я ненавижу Hibernate
Автор: Andrei N.Sobchuck
Дата: 08.01.08
!
Re[6]: Smalltalk для людей. Есть такой?
От: quadrochups ЮАР  
Дата: 30.08.06 11:07
Оценка:
E>Так что лучше искать проблемы в собственных источниках, а не в языке программирования.

eao, согласись, глупость сморозил? Как я, ничего не зная о Руби, могу "искать проблемы"? Есть гугля, вот им и пользуюсь. А главное — почему претензия ко мне, а не источнику? Походу, обсуждение (С ТВОЕЙ СТОРОНЫ) скатывается в подростковое кидание понтов. Во взрослом мире это называется "хамство". Пора подрасти?


Q>>Хм... как сказать. Реализация методов класса — это и есть алгоритмы над членами класса. Какой смысл выделять их "плюшками"? А как же прозрачность кода?


E>Потому что в реализациях алгоритмов используются и параметры, и локальные переменные. Чтобы в них не путаться...


А зачем в них путаться? Их использовать надо! Будет конфликт имён — транслятор предупредит, а так — не вижу смысла их разделять.


Q>>Дело не в том как называть — здесь вопрос концепции. Если ВСЁ в Руби — объекты, зачем же тогда делать разные псевдосущности? (глобальные переменные, спец-переменные) Я ж потому и говорю про Смоллток, что он является "чистым" и целостным ООЯ. Т.е. достаточно иметь в голове небольшой набор правил, а сами программы пишутся, как говорится, не приходя в сознание.


E>Теперь докажите, что, например $: или $! не является объектом. Объект самый настоящий, $ просто указывает область его видимости.


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



E>>>Нет. Я вообще не понял, про какие get_/set_ идет речь.


Q>>Это отседа: http://www.msiu.ru/~roganova/Ing_Spring_2003-2004/AboutRuby/www.sophtanet.com.html (глава "Аксессоры")


E>Тогда вы еще и свой источник не правильно прочитали.


Как написано, так и прочёл. Меня не волнует, принято там или нет. Я указал на ТРИ варианта синтаксиса описания аксессоров. Что фактически показывает бестолковое проектирование языка.


Q>>Вы не поняли моего вопроса... Я прошу показать, есть ли вразумительная замена Смоллтока, а не то, хороший Руби или плохой. И потом, см. замечание про "сорсы" и "image".


E>Вы бы определились, что вам нужно. Smalltalk, но с другим синтаксисом? Или другой язык, близкий по духу Smalltalk?


Вы бы сначала поняли вопрос, а потом на него отвечали. Нужны ОБА: и "человеческий" синтаксис, и концептуальная идея. Изучать всякие Питоны/Руби/Джамбы-юмбы можно до бесконечности, все они недалеко друг от дружки ушли. Интересовал именно Смоллток. И вы правильно поняли суть, говоря далее:


E>Имхо, лучше Smalltalk-а только Smalltalk, поэтому принимайте его таким какой он есть.


Вот. Просто в силу того, что я не вращаюсь в Смоллток кругах, я мог пропустить появление какого-то нового, человеческого диалекта, потому и спросил.
В любом случае, спасибо за уделённое внимание.
Re: Smalltalk для людей. Есть такой?
От: vdimas Россия  
Дата: 30.08.06 11:08
Оценка:
Здравствуйте, quadrochups, Вы писали:

Q>Ребят, вопрос такой возник: очень нравится мне идеология Смоллтока (не предмет спора, будем считать это субъективным мнением). Но вот его синтаксис... Я думал, после Перла мне уже ничего не страшно — ан нет, я ошибся. Какой-то он мне кажется жуууткий и нечитабельный. Конечно, привыкнуть можно даже к Лиспу, но мне бы хотелось не коверкать сознание, а просто сесть и работать.

Q>Так вот сам вопрос: есть ли язык по идеологии совпадающий со Смоллтоком, но с более человеческим синтаксисом?

JavaScript, особенно с приставкой .Net
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[9]: Smalltalk для людей. Есть такой?
От: Eugene Beschastnov Россия http://eugenius-nsk.livejournal.com/
Дата: 30.08.06 11:19
Оценка:
Здравствуйте, eao197, Вы писали:

E>Здравствуйте, quadrochups, Вы писали:


Q>>pavel, а какая САМАЯ УДАЧНАЯ реализация Смоллтока существует?


E>Может вам проще в гости на smalltalk.ru сходить?

E>В частности, посмотреть на описания существующих реализаций.

На wiki информации чуть побольше
--
Бесчастнов Евгений
Re: Smalltalk для людей. Есть такой?
От: Eugene Beschastnov Россия http://eugenius-nsk.livejournal.com/
Дата: 30.08.06 11:27
Оценка:
Здравствуйте, quadrochups, Вы писали:

Q>Ребят, вопрос такой возник: очень нравится мне идеология Смоллтока (не предмет спора, будем считать это субъективным мнением). Но вот его синтаксис... Я думал, после Перла мне уже ничего не страшно — ан нет, я ошибся. Какой-то он мне кажется жуууткий и нечитабельный.


А что именно не нравится в синтаксисе? Мне он как раз очень нравится — именованные параметры у методов, практически полное отсутствие синтаксического мусора (только то, что необходимо и практически ничего лишнего) и пр.
--
Бесчастнов Евгений
Re[7]: Smalltalk для людей. Есть такой?
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 30.08.06 11:28
Оценка:
Здравствуйте, quadrochups, Вы писали:

Q>eao, согласись, глупость сморозил? Как я, ничего не зная о Руби, могу "искать проблемы"?


Вот так:

1. В Smalltalk нету МЕТОДОВ, там есть сообщения. Если программа приняла неизвестное сообщение, его можно вежливо обработать. Руби же сразу начинает ругацца — метод должен быть определён заранее.


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

The answer has to do with the way Ruby determines which method should be called when you send a message to an object. When Ruby compiles the method invocation aSong.to_s, it doesn't actually know where to find the method to_s. Instead, it defers the decision until the program is run. At that time, it looks at the class of aSong. If that class implements a method with the same name as the message, that method is run. Otherwise, Ruby looks for a method in the parent class, and then in the grandparent, and so on up the ancestor chain. If it runs out of ancestors without finding the appropriate method, it takes a special action that normally results in an error being raised.[In fact, you can intercept this error, which allows you to fake out methods at runtime. This is described under Object#method_missing on page 355.]


Q>>>Хм... как сказать. Реализация методов класса — это и есть алгоритмы над членами класса. Какой смысл выделять их "плюшками"? А как же прозрачность кода?


E>>Потому что в реализациях алгоритмов используются и параметры, и локальные переменные. Чтобы в них не путаться...


Q>А зачем в них путаться? Их использовать надо! Будет конфликт имён — транслятор предупредит, а так — не вижу смысла их разделять.


Транслятор не предупредит, Ruby динамически типизированный язык, в нем переменные даже заранее декларировать не нужно.

E>>Теперь докажите, что, например $: или $! не является объектом. Объект самый настоящий, $ просто указывает область его видимости.


Q>А зачем мне область видимости? (не говоря о достаточно "странных" именах) Есть объект, есть сообщение. А так вместо однородной кучи переменных я должен думать — спросить проперть у класса или взять глобальную переменную. Зачем меня напрягать? (см. выделенное)


$: -- это объект, вы можете послать ему сообщение. Все в Ruby объект. Даже класс, который вы декларируете -- он тоже является объектом, даже в непосредственно в момент декларации.

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

А писать программы, не приходя в сознание, это сильно.

E>>Тогда вы еще и свой источник не правильно прочитали.


Q>Как написано, так и прочёл. Меня не волнует, принято там или нет. Я указал на ТРИ варианта синтаксиса описания аксессоров. Что фактически показывает бестолковое проектирование языка.


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


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[2]: Smalltalk для людей. Есть такой?
От: quadrochups ЮАР  
Дата: 30.08.06 11:55
Оценка:
EB>А что именно не нравится в синтаксисе?

Ну вот, например, такое:
result := a > b
    ifTrue:[ 'greater' ]
    ifFalse:[ 'less' ]


Сравните с Си:

result = (a > b ? 'greater' : 'less');


Или вот:

!Account class methodsFor: 'instance creation'!

   new
       | r |

       r := super new.
       r init.
       ^r
   ! !


Какие-то восклицательные знаки, палочки, крышечки... ужыз.

Понятно, что привыкнуть и к такому можно, но нафик столько мучений?


EB> Мне он как раз очень нравится — именованные параметры у методов, практически полное отсутствие синтаксического мусора


Вот-вот, эти черты мне тоже импонируют. Но всё же многовато у Смоллтока вот этих вот "знаков препинания".
Re[11]: Smalltalk для людей. Есть такой?
От: Andrei N.Sobchuck Украина www.smalltalk.ru
Дата: 30.08.06 11:59
Оценка:
Здравствуйте, eao197, Вы писали:

E>Почему же там не спрашивать? У целевой аудитории, так сказать?


Вот: http://www.progz.ru/forum/index.php?showforum=48
http://www.smalltalk.ru | << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Я ненавижу Hibernate
Автор: Andrei N.Sobchuck
Дата: 08.01.08
!
Re[3]: Smalltalk для людей. Есть такой?
От: Andrei N.Sobchuck Украина www.smalltalk.ru
Дата: 30.08.06 13:00
Оценка: 1 (1)
Здравствуйте, quadrochups, Вы писали:

Q>Какие-то восклицательные знаки, палочки, крышечки... ужыз.


То, что с восклицательными знаками это формат предназначенный для переноса между образами. Человек такого не видит. Только в GNU ST используется такой формат для ввода человеком. Но что ты с гнутого возьмёш
Так что остаётся только:
 new
       | r |

       r := super new.
       r init.
       ^r


"Палочки" это к переменным.

Q>Понятно, что привыкнуть и к такому можно, но нафик столько мучений?


I Can Read C++ and Java But I Can’t Read Smalltalk
http://www.smalltalk.ru | << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Я ненавижу Hibernate
Автор: Andrei N.Sobchuck
Дата: 08.01.08
!
Re[8]: Smalltalk для людей. Есть такой?
От: Beam Россия  
Дата: 30.08.06 13:19
Оценка:
Здравствуйте, quadrochups, Вы писали:

Q>а какая САМАЯ УДАЧНАЯ реализация Смоллтока существует?


Для Windows: Dolphin Smalltalk
А вообще: Cincom VisualWorks
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Best regards, Буравчик
Re[4]: Smalltalk для людей. Есть такой?
От: Beam Россия  
Дата: 30.08.06 13:32
Оценка: 1 (1) +2 :))
Здравствуйте, Andrei N.Sobchuck, Вы писали:

ANS>Так что остаётся только:

new
    | r |
    r := super new.
    r init.
    ^r



Рефакторим:
new
    ^super new init
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Best regards, Буравчик
Re[6]: Smalltalk для людей. Есть такой?
От: Beam Россия  
Дата: 30.08.06 13:39
Оценка:
Здравствуйте, eao197, Вы писали:

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


Лучше Smalltalk должен быть Smalltalk без классов (на основе прототипов)

P.S. Кстати, кто-нибудь пробовал язык Self? Каково оно?
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Best regards, Буравчик
Re[3]: Smalltalk для людей. Есть такой?
От: Mamut Швеция http://dmitriid.com
Дата: 30.08.06 14:35
Оценка: 1 (1) :)
Q>Какие-то восклицательные знаки, палочки, крышечки... ужыз.

Q>Понятно, что привыкнуть и к такому можно, но нафик столько мучений?


К любому синтаксису, как оказалось, легко привыкнуть (кроме, возможно J ). Просто после определенного момента перестаешь восприинимать синтаксис отдельно от языка, и язык хорошо так и спокойно ложится на синтаксис. А если синтаксис еще и логичный... Тогда вообще щастя И тогда то, что другим кажется мешаниной, тебе кажется очень понятным.

Кстати, если сделать над собой усилие и взглянуть на привычный C/Java/PHP не взглядом программиста, то становится понятно, насколько и там мешанина (из jakarta, Java):
 public static String capitalize(String str, char[] delimiters) {
        if (str == null || str.length() == 0) {
            return str;
        }
        int strLen = str.length();
        StringBuffer buffer = new StringBuffer(strLen);

        int delimitersLen = 0;
        if(delimiters != null) {
            delimitersLen = delimiters.length;
        }

        boolean capitalizeNext = true;
        for (int i = 0; i < strLen; i++) {
            char ch = str.charAt(i);

            boolean isDelimiter = false;
            if(delimiters == null) {
                isDelimiter = Character.isWhitespace(ch);
            } else {
                for(int j=0; j < delimitersLen; j++) {
                    if(ch == delimiters[j]) {
                        isDelimiter = true;
                        break;
                    }
                }
            }

            if (isDelimiter) {
                buffer.append(ch);
                capitalizeNext = true;
            } else if (capitalizeNext) {
                buffer.append(Character.toTitleCase(ch));
                capitalizeNext = false;
            } else {
                buffer.append(ch);
            }
        }
        return buffer.toString();
    }


Какие-то скобочки (да еще трех типов), точки с запятыми, точки...
... << RSDN@Home 1.2.0 alpha rev. 655>>


dmitriid.comGitHubLinkedIn
Re[4]: Smalltalk для людей. Есть такой?
От: Poisson Россия  
Дата: 30.08.06 16:36
Оценка:
Здравствуйте, quadrochups, Вы писали:

ЗХ>>AFAIK, Smalltalk чуть ли не единственный язык-среда программирования, который подходит к исходникам не как к "простому тексту, который мы сейчас распрасим-скомпилируем-выполним".


Q>Мне тогда не совсем понятен стиль работы программиста — он же должен иметь исходники, отладчик, и т.п. Вы не могли бы кратко описать, как смоллтокист создаёт программу?

Может, проще самому попробовать?

Тем не меннее.. Исходников в привычном представлении как таковых нет. Весь код хранится в двух видах — тексты методов и байт-код. Причет и то, и другое хранится в специальных файлах, куда простым редактором лазать не рекомендуется.

Вся работа осуществляется через IDE. Опуская детали — программист видит список всех классов и список методов выбранного класса. Отредактировав выбранный метод (создав новый), программист жмет кнопку Accept, и ,опа, — метод сразу же компилируется.

Отладчик и прочие полезные тулзы (в частности, инспектор объектов) разумеется есть. Более того, в отладчике довольно удобно писать код, что особенно полезно при применении TDD — написал тест, вызывающий метод myMethod (еще несуществующий), запустил тест — вывалился отладчик с сообщением "message 'myMethod' not understood". Прямо в отладчике создал метод, написал в нем чего-нибудь, и продолжил выполнение. Если написал чего-нибудь хорошее, то и тест пройдет.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re: Smalltalk для людей. Есть такой?
От: Poisson Россия  
Дата: 30.08.06 16:46
Оценка: :))) :))
Здравствуйте, quadrochups, Вы писали:

Q>Ребят, вопрос такой возник: очень нравится мне идеология Смоллтока (не предмет спора, будем считать это субъективным мнением). Но вот его синтаксис... Я думал, после Перла мне уже ничего не страшно — ан нет, я ошибся. Какой-то он мне кажется жуууткий и нечитабельный.

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

Насчет читабельности... вот, например, из народного творчества. Примерчик программы на языке КороткийБазар (проверено на VisualWorks Smalltalk)

скокаСлов
    | файло слов|
    файло:= 'c:\stats.log' какФайло чемЧитать.
    
    [слов := 0.
      [файло кончилось] покаВранье: [
             файло чеДальше являетсяДыркой еслиНеВрешь: [слов := слов + 1]]
          ] 
    палюбому: [файло прихлопнуть].
    ^слов


Меня вот довольно долго больше напрягало отсутствие в ST исходников в традиционном смысле, но потом привык и работать стало вполне комфортно.
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[4]: Smalltalk для людей. Есть такой?
От: Зверёк Харьковский  
Дата: 30.08.06 19:23
Оценка: +1
Здравствуйте, quadrochups, Вы писали:

ЗХ>>Поэтому действительно полнофункциональный браузеры кода и refactory-браузеры для Ruby создать почти невозможно


Q>Не совсем понимаю почему... Вон, даже у Си есть браузер кода В чём проблема?


Потому что в любом месте кода может быть написано что-нибудь такое:
#...работаем с каким-нибудь там obj....

if blah-blah #какое-то чудовищно сложное условие
  obj.define_method(:my_cool_method) do ... end
end


И, соответственно, всякие типичные задачи "весь список методов объекта", "переименовать метод", "разделить метод на несколько" и т.п. — они не то чтобы идут лесом, но очень сильно усложняются.

Не говоря уж об упомянутом method_missing
obj.my_cool_method #ага, здесь можно сделать вывод, что у obj есть my_cool_method!

#а фиг там. у obj просто определен какой-нибудь такой method_missing:
def method_missing(meth,*arg)
  if meth =~ /.../ #проверили имя метода каким-нибудь чудовищным регекспом, и решили, как на него ответить

  if arg.size == ... #проверили кол-во аргументов и решили, отвечать ли на такой метод

  else
     super           #таки он нам не понравился, вызвали изначальный method_missing
  end
end


Чтобы браузить и рефакторить такие вещи, их нужно ээээ... исполнять в design-time, если понятно, о чем я. Smalltalk это делает; Ruby — нет.
FAQ — це мiй ай-кью!
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.