Ребят, вопрос такой возник: очень нравится мне идеология Смоллтока (не предмет спора, будем считать это субъективным мнением). Но вот его синтаксис... Я думал, после Перла мне уже ничего не страшно — ан нет, я ошибся. Какой-то он мне кажется жуууткий и нечитабельный. Конечно, привыкнуть можно даже к Лиспу, но мне бы хотелось не коверкать сознание, а просто сесть и работать.
Так вот сам вопрос: есть ли язык по идеологии совпадающий со Смоллтоком, но с более человеческим синтаксисом?
Для примера (что я считаю "человеческим") могу привести C# (да и вообще любой Си-подобный язык) — на мой взгляд это достаточно краткий и выразительный синтаксис, вполне пригодный для массового программинга.
Здравствуйте, eao197, Вы писали:
Q>>Так вот сам вопрос: есть ли язык по идеологии совпадающий со Смоллтоком, но с более человеческим синтаксисом?
E>Ruby
Есть распространенное мнение, что таки да, Руби.
Впрочем, есть одна как минимум "фича" смолтолка, которой у Руби нет и не будет никогда (это не хорошо и не плохо, но на способ мышления на этом языке сильно влияет): Ruby хранит исходники в традиционной форме текстовых файлов, а Smalltalk — в image.
"Благодаря" этому, например, Smalltalk — это язык, имеющий лучшие в мире IDE (потому что он by design устроен так, что дихотомии design-time/run-time не существует, и в момент написания кода о нем есть вся та информация, что и в момент выполнения). Поэтому действительно полнофункциональный браузеры кода и refactory-браузеры для Ruby создать почти невозможно (т.к. любой класс и любой объект может измениться в рантайме, и простым парсингом исходников это очень тяжело определить и корректно обработать).
AFAIK, Smalltalk чуть ли не единственный язык-среда программирования, который подходит к исходникам не как к "простому тексту, который мы сейчас распрасим-скомпилируем-выполним".
Здравствуйте, Зверёк Харьковский, Вы писали:
ЗХ>Есть распространенное мнение, что таки да, Руби.
А вот я, например, до сих пор не уверен -- то ли Ruby -- это испорченный Perl-ом Smalltalk, то ли это улучшенный Smalltalk-ом Perl. Последний вариант весьма вероятен
ЗХ>Впрочем, есть одна как минимум "фича" смолтолка, которой у Руби нет и не будет никогда (это не хорошо и не плохо, но на способ мышления на этом языке сильно влияет): ЗХ>Ruby хранит исходники в традиционной форме текстовых файлов, а Smalltalk — в image.
А ведь это же поддчеркивается и по данной мной ссылке:
Ruby Sparkles
Take a true object-oriented language, such as Smalltalk. Drop the unfamiliar syntax and move to more conventional, file-based source code. Now add in a good measure of the flexibility and convenience of languages such as Python and Perl.
You end up with Ruby.
ЗХ>"Благодаря" этому, например, Smalltalk — это язык, имеющий лучшие в мире IDE (потому что он by design устроен так, что дихотомии design-time/run-time не существует, и в момент написания кода о нем есть вся та информация, что и в момент выполнения). Поэтому действительно полнофункциональный браузеры кода и refactory-браузеры для Ruby создать почти невозможно (т.к. любой класс и любой объект может измениться в рантайме, и простым парсингом исходников это очень тяжело определить и корректно обработать).
Интересно в irb работать (если она скомпилирована с поддержкой автодополнения): набираешь несколько первых букв и жмешь Tab -- имя расширяется в зависимости от контекста (будь то имя класса или имя метода). Как в Smalltalk-е, только результат ввода нельзя в файл сохранить. Хотя и там не всегда есть помощь от irb, например, в случае:
irb(main):001:0> def func(x)
irb(main):002:1> x.what # <= Что хотел сказать автор?
А вот так понимает:
irb(main):001:0> class My
irb(main):002:1> def what_i_want; bla_bla_bla; end
irb(main):003:1> def what_you_want; bla_bla_bla; end
irb(main):004:1> end
=> nil
irb(main):005:0> x = My.new
=> #<My:0x2c15014>
irb(main):006:0> x.what_
x.what_i_want x.what_you_want # <= Это подсказка от irb.
irb(main):006:0> x.what_
ЗХ>AFAIK, Smalltalk чуть ли не единственный язык-среда программирования, который подходит к исходникам не как к "простому тексту, который мы сейчас распрасим-скомпилируем-выполним".
+1
SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Здравствуйте, eao197, Вы писали:
E>Здравствуйте, quadrochups, Вы писали:
Q>>Так вот сам вопрос: есть ли язык по идеологии совпадающий со Смоллтоком, но с более человеческим синтаксисом?
E>Ruby
Питон тоже, но у него конечно синтаксис не совсем сишный
Здравствуйте, quadrochups, Вы писали:
Q>Ребят, вопрос такой возник: очень нравится мне идеология Смоллтока (не предмет спора, будем считать это субъективным мнением). Но вот его синтаксис... Я думал, после Перла мне уже ничего не страшно — ан нет, я ошибся. Какой-то он мне кажется жуууткий и нечитабельный. Конечно, привыкнуть можно даже к Лиспу, но мне бы хотелось не коверкать сознание, а просто сесть и работать. Q>Так вот сам вопрос: есть ли язык по идеологии совпадающий со Смоллтоком, но с более человеческим синтаксисом?
Q>Для примера (что я считаю "человеческим") могу привести C# (да и вообще любой Си-подобный язык) — на мой взгляд это достаточно краткий и выразительный синтаксис, вполне пригодный для массового программинга.
Здравствуйте, Зверёк Харьковский, Вы писали:
ЗХ>Есть распространенное мнение, что таки да, Руби.
Руби — отличный язык. Хотя есть и концептуальные отличия между ним и Smalltalk.
Так в Руби конструкции типа if, for, while, [] реализованы на уровне синтаксиса, а в Smalltalk — с помощью методов.
С одной стороны это позволяет лечге перейти к Руби от Java/C# и пр., с другой стороны в Smalltalk соблюдается концепция ООП.
Хотя отступление от ООП и имеет определенные минусы, ИМХО, это не мешает создавать хорошие (а заодно и красивые) программы на Руби.
ЗХ>Впрочем, есть одна как минимум "фича" смолтолка, которой у Руби нет и не будет никогда (это не хорошо и не плохо, но на способ мышления на этом языке сильно влияет): ЗХ>Ruby хранит исходники в традиционной форме текстовых файлов, а Smalltalk — в image.
В Smalltalk исходный текст можно тоже хранить в текстовых файлах. Так, при необходимости можно загружать код в image и, наоборот, выгрузить его оттуда в текстовый файл. Т.е. нужные библиотеки/классы лежат в image, а не нужные "на полочке" (на диске).
ЗХ>"Благодаря" этому, например, Smalltalk — это язык, имеющий лучшие в мире IDE (потому что он by design устроен так, что дихотомии design-time/run-time не существует, и в момент написания кода о нем есть вся та информация, что и в момент выполнения). Поэтому действительно полнофункциональный браузеры кода и refactory-браузеры для Ruby создать почти невозможно
Если для Руби реализовать IDE, работающую по принципу Smalltalk, т.е. формировать image, в котором будут файлы Руби, то ничего невозможного в этом нет. Вон та же IDEA подключает к проекту стороннюю библиотеку, и "интегрирует" ее в проект. Если код этих библиотек доступен неуж-то трудно реализовать "полнофункциональный браузер код и refactory-браузер"?
Правда следует учесть, что в IDE smalltalk хранится не только код, но и созданные объекты на текущий момент! То есть создайте любой объект в Workspace, поработайте с ним. Закройте и снова откройте image. И, вперед, продолжайте работать с тем же объектом. Это реализовать труднее, но, в принципе, также возможно и в Руби.
ЗХ>(т.к. любой класс и любой объект может измениться в рантайме, и простым парсингом исходников это очень тяжело определить и корректно обработать).
Не совсем понятно, что имелось ввиду.
Здравствуйте, Beam, Вы писали:
ЗХ>>(т.к. любой класс и любой объект может измениться в рантайме, и простым парсингом исходников это очень тяжело определить и корректно обработать). B>Не совсем понятно, что имелось ввиду.
вот это:
B>Правда следует учесть, что в IDE smalltalk хранится не только код, но и созданные объекты на текущий момент! То есть создайте любой объект в Workspace, поработайте с ним. Закройте и снова откройте image. И, вперед, продолжайте работать с тем же объектом. Это реализовать труднее, но, в принципе, также возможно и в Руби.
Реализовать это возможно, но тяжело, долго, и коммьюнити не слишком стремится этим заниматься. Причины этому недавно в ruby-talk обсуждались (там раз в месяц поднимается тема вроде "Why not to have Smalltalk-like IDE for Ruby?")
IDE IDEю — рознь. Очень стоит потрогать нормальное смолтолковское средство разработки (в котором само средство разработки можно модифицировать так же легко, как и прикладной код), чтобы почувствовать разницу
Здравствуйте, Зверёк Харьковский, Вы писали:
ЗХ>IDE IDEю — рознь. Очень стоит потрогать нормальное смолтолковское средство разработки (в котором само средство разработки можно модифицировать так же легко, как и прикладной код), чтобы почувствовать разницу
S>Я "трогал" только Smalltalk MT. Не впечатлило
Не самая удачная реализация, хотя и есть свои плюсы.
Если будет время и возможность "потрогайте" Dolphin Smalltalk, масса новых интересных (положительных) впечатлений гарантирована!
1. В Smalltalk нету МЕТОДОВ, там есть сообщения. Если программа приняла неизвестное сообщение, его можно вежливо обработать. Руби же сразу начинает ругацца — метод должен быть определён заранее. Я правильно уловил?
2. Не совсем понятна (притянутая из Перла) фича в виде префиксов переменных. В Перле — понятно, это позволяло обходиться без описаний и шикарно манипулировать разнородными сущностями. В Руби сделали $ и @ — довольно глупый выверт.
3. Аналогично, перенесённые из Перл "псевдопеременные" вида $_, $/, etc — для Перла (изначально как обработчика текста) это было простительно, но для нового, ОО языка я считаю это мусором в языке.
4. Аксессоры — тоже какая-то мешанина: есть синтаксис с get_/set_ (с какой радости? может это мои методы!), есть его запись через "=", а есть его сокращение через attr_* — вам не кажется, что эта чехарда несколько несерьёзна?
Я не хочу хаять Руби в целом — он может быть вполне достойной заменой. Но вот как альтернатива СМОЛЛ-току — смотрится слишком дилетантски.
Q>>Для примера (что я считаю "человеческим") могу привести C# (да и вообще любой Си-подобный язык) — на мой взгляд это достаточно краткий и выразительный синтаксис, вполне пригодный для массового программинга.
В>Это?
О, нет!!! Только не этот ужыз! Он хоть и "си-шный", но мешанина полнейшая.
Здравствуйте, quadrochups, Вы писали:
E>>Ruby
Q>Смотрел. Нашёл пару моментов, которые смущают:
Q>1. В Smalltalk нету МЕТОДОВ, там есть сообщения. Если программа приняла неизвестное сообщение, его можно вежливо обработать. Руби же сразу начинает ругацца — метод должен быть определён заранее. Я правильно уловил?
Нет. В Ruby каждый вызов метода -- это отсылка сообщения. Если сообщение (метод) для объекта не определен, то у объекта вызывается метод method_missing, в котором можно это дело вежливо обработать.
Q>2. Не совсем понятна (притянутая из Перла) фича в виде префиксов переменных. В Перле — понятно, это позволяло обходиться без описаний и шикарно манипулировать разнородными сущностями. В Руби сделали $ и @ — довольно глупый выверт.
Еще @@ забыли.
$ практически не используется, кроме как для обращения к системным переменным типа $!, $: и пр.
А вот @ и @@ удобны.
Q>3. Аналогично, перенесённые из Перл "псевдопеременные" вида $_, $/, etc — для Перла (изначально как обработчика текста) это было простительно, но для нового, ОО языка я считаю это мусором в языке.
Он не новый, а 1994 года выпуска. И ноги у него растут из Perl-а.
Для $_ и $/ есть пакет English
Q>4. Аксессоры — тоже какая-то мешанина: есть синтаксис с get_/set_ (с какой радости? может это мои методы!), есть его запись через "=", а есть его сокращение через attr_* — вам не кажется, что эта чехарда несколько несерьёзна?
Нет. Я вообще не понял, про какие get_/set_ идет речь.
Q>Я не хочу хаять Руби в целом — он может быть вполне достойной заменой. Но вот как альтернатива СМОЛЛ-току — смотрится слишком дилетантски.
Да ради бога. Проходя проходи.
SObjectizer: <микро>Агентно-ориентированное программирование на C++.
ЗХ>Впрочем, есть одна как минимум "фича" смолтолка, которой у Руби нет и не будет никогда (это не хорошо и не плохо, но на способ мышления на этом языке сильно влияет): ЗХ>Ruby хранит исходники в традиционной форме текстовых файлов, а Smalltalk — в image.
Я так понимаю, и в Смоллтоке работа происходит с текстом, но при этом программа ещё и выполняется. Так?
ЗХ>Поэтому действительно полнофункциональный браузеры кода и refactory-браузеры для Ruby создать почти невозможно
Не совсем понимаю почему... Вон, даже у Си есть браузер кода В чём проблема?
ЗХ>AFAIK, Smalltalk чуть ли не единственный язык-среда программирования, который подходит к исходникам не как к "простому тексту, который мы сейчас распрасим-скомпилируем-выполним".
Мне тогда не совсем понятен стиль работы программиста — он же должен иметь исходники, отладчик, и т.п. Вы не могли бы кратко описать, как смоллтокист создаёт программу?
ЗХ>>IDE IDEю — рознь. Очень стоит потрогать нормальное смолтолковское средство разработки (в котором само средство разработки можно модифицировать так же легко, как и прикладной код), чтобы почувствовать разницу
S>Я "трогал" только Smalltalk MT. Не впечатлило
Я извиняюсь за оффтопик, цитату с башорга вспомнил:
-Я не могу зайти на ваш сайт!
-Потрите все куки и попробуйте перезайти.
-Потёр. Приятно!
Q>>1. В Smalltalk нету МЕТОДОВ, там есть сообщения. Если программа приняла неизвестное сообщение, его можно вежливо обработать. Руби же сразу начинает ругацца — метод должен быть определён заранее. Я правильно уловил?
E>Нет. В Ruby каждый вызов метода -- это отсылка сообщения. Если сообщение (метод) для объекта не определен, то у объекта вызывается метод method_missing, в котором можно это дело вежливо обработать.
Q>>2. Не совсем понятна (притянутая из Перла) фича в виде префиксов переменных. В Перле — понятно, это позволяло обходиться без описаний и шикарно манипулировать разнородными сущностями. В Руби сделали $ и @ — довольно глупый выверт.
E>Еще @@ забыли. E>$ практически не используется, кроме как для обращения к системным переменным типа $!, $: и пр. E>А вот @ и @@ удобны.
Хм... как сказать. Реализация методов класса — это и есть алгоритмы над членами класса. Какой смысл выделять их "плюшками"? А как же прозрачность кода?
Q>>3. Аналогично, перенесённые из Перл "псевдопеременные" вида $_, $/, etc — для Перла (изначально как обработчика текста) это было простительно, но для нового, ОО языка я считаю это мусором в языке.
E>Для $_ и $/ есть пакет English
Дело не в том как называть — здесь вопрос концепции. Если ВСЁ в Руби — объекты, зачем же тогда делать разные псевдосущности? (глобальные переменные, спец-переменные) Я ж потому и говорю про Смоллток, что он является "чистым" и целостным ООЯ. Т.е. достаточно иметь в голове небольшой набор правил, а сами программы пишутся, как говорится, не приходя в сознание.
Q>>4. Аксессоры — тоже какая-то мешанина: есть синтаксис с get_/set_ (с какой радости? может это мои методы!), есть его запись через "=", а есть его сокращение через attr_* — вам не кажется, что эта чехарда несколько несерьёзна?
E>Нет. Я вообще не понял, про какие get_/set_ идет речь.
Q>>Я не хочу хаять Руби в целом — он может быть вполне достойной заменой. Но вот как альтернатива СМОЛЛ-току — смотрится слишком дилетантски.
E>Да ради бога. Проходя проходи.
Вы не поняли моего вопроса... Я прошу показать, есть ли вразумительная замена Смоллтока, а не то, хороший Руби или плохой. И потом, см. замечание про "сорсы" и "image".