Компьютерный форум
Правила
Вернуться   Компьютерный форум > Форум программистов > Языки программирования > Smalltalk
Перезагрузить страницу Замыкание в Смолтоке должно происходить на переменную
Ответ
 
Опции темы Опции просмотра
  (#46 (permalink)) Старый
Dionisiy Dionisiy вне форума
Новичок
 
Сообщений: 6
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 22.06.2007
По умолчанию 09.11.2009, 02:28

Цитата:
Никакие новые классы и методы не дадут использовать удобную стандартную запись математических выражений в языке, т.е., с приоритетом операций и аргументами в скобках, напр: 2*x+3*sin(y)-ln(10). Задачи с математическими формулами покрывают явно больше 0.1% решаемых проблем, так что насчёт 99.9% Вы, сказать помягче, лукавите.

И про байт-код: где бы о нём почитать? Хочу понять, из каких инструкций он состоит.

Интересно, на каком еще языке, без каких либо парсеров, можно реализовать подобные "человеческие DSL"
10 meters / 2 sec * 5 hours
20 august, 2009 year, 22 hour, 5 minutes
60 should be a kind of: Integer






Ответить с цитированием
  (#47 (permalink)) Старый
Cornered_Rat Cornered_Rat вне форума
Member
 
Сообщений: 32
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 02.11.2009
По умолчанию 09.11.2009, 06:03

Ой, ещё один фанат Смолтока, и похоже, не последний. Я чувствую себя виноватым за то, что подрываю их веру. Слепо верящих людей всегда жалко, хотя их можно понять - похожее чувство неадекватной веры возникает, когда тебе нравится девушка - ты веришь, что она самая лучшая, и самая лучшая даже по тем критериям, где она совсем не лучшая, и просто закрываешь глаза на те места, где она совсем отвратительна. Триумф воображения над рассудком. С возрастом зависимость людей от своих эмоций уменьшается, и - о чудо! - люди начинают медленно прозревать, понимая истинную картину мира. Старики называют это мудростью, хотя для обладания ей вовсе не обязательно стареть. Надо лишь беспристрастно взглянуть на окружающий мир и использовать свои мозги. Ой, извините, я отвлёкся от вопросов программирования. Так вот, не пора бы уже перестать слепо верить во всемогущество Смолтока и понять, что у каждого языка своя ниша? В мире вообще не существует универсальных вещей и подходов. Зато есть много хорошо адаптированных под узкие области применения. Смолток - не исключение.

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

Цитата:
На смолтолке подобная рекурсивная реализация факториала будет работать и для миллиона и для миллиарда. Ограничение накладывает только объем доступной оперативной памяти компа
Для миллиадра? Боюсь, Вы не сможете вычислить на Смотоке такой факториал. Люди столько не живут. Одна минута, потраченная на написание кода, обернётся пожизненным ожиданием результата вычислений.
Ответить с цитированием
  (#48 (permalink)) Старый
Eugene Beschastnov Eugene Beschastnov вне форума
Member
 
Сообщений: 43
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 07.03.2004
По умолчанию 09.11.2009, 08:52

Цитата:
Интересно, на каком еще языке, без каких либо парсеров, можно реализовать подобные "человеческие DSL"
10 meters / 2 sec * 5 hours
20 august, 2009 year, 22 hour, 5 minutes
60 should be a kind of: Integer
На Smalltalk ;-)
Определяем meters, sec, hours, august, year, hour, minutes, как методы класса Integer (или Number - как больше нравится), а shouldBeAKindOf: - как метод класса Object (для возможности спросить не только число, но и любой объект). Вот только метод shouldBeAKindOf: даже не нужен, потому что уже есть метод isKindOf: ;-)
Ответить с цитированием
Ads
  (#49 (permalink)) Старый
danio danio вне форума
Member
 
Сообщений: 366
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 02.01.2004
По умолчанию 09.11.2009, 12:12

Cornered_Rat, вас несет :grin:

Начнем с того, что критика Smalltalk на основании того, что в одной из версий [якобы] плохая реализация факториала никак не соответствует тому образу седовласого мудреца познавшему дао, с позиций которого вы пытаетесь тут вещать. У факториала нет ни одного использования (за исключением тестов) в трех реализациях(Dolphin/VisualWorks/Squeak) которые у меня под рукой. Факториал в смоллток нужен только для одной цели - показать, что он может быть посчитан для большого числа прямо сходу, в отличие от широкого класса остальных языков (то есть чисто для понту). Никто в здравом уме голым смоллтоком числа дробить не будет (во всяком, случае в текущих реализациях без использования внешних библиотек).
Далее, ваша мега-супер-пупер версия вычисления факториала сама идет лесом. Вот реальный замер в Дольфине:
Код:
Time microsecondsToRun: [4096 factorial2p]27608
Time microsecondsToRun: [4096 factorial3p]103592
Ну и наконец, людям понятно, что Smalltalk это не идеальный язык, не всюду подходит и у него есть ограничения и недостатки. Но только не надо тут про "триумф воображения на рассудком", если вы сами кропаете на Delphi (как я понимаю, никто вас не заставляет). Даже в вашей мега-супер-пупер реализации виден характерный почерк. Не смешите курей! Слазьте с горы!
Ответить с цитированием
  (#50 (permalink)) Старый
Cornered_Rat Cornered_Rat вне форума
Member
 
Сообщений: 32
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 02.11.2009
По умолчанию 09.11.2009, 13:55

danio, да, не спорю, бывает что меня слегка заносит на поворотах.
Но на образ седовласого мудреца не претендую. И вообще, я начал тему с того, что открыто заявил, что я - новичок в Смолтоке, и зашёл сюда дабы познать дао Смолтока. Однако попутно стало выясняться, что молящиеся на Смолток слишком сильно ему молятся, считая его абсолютным идеалом везде и во всём, да и про вычислительные методы для длинной арифметики народ никогда не слышал. Вот я и пытался пролить свет неведомой им истины на маленькихболтунов. Ой, простите, на смолтокеров (небольшие сложности с переводом, извиняюсь).

А про факториал вопрошающий требовал именно 1024. Я и подобрал ему метод, который складывает числа по три штучки в кучку, причём так удачно, чтобы кучка 1024*1024*1024 помещалась в 32-битовое целое, что ускоряет вычисления по сравнению с кучкованием парами томсона-угура. При увеличении размера чисел баланс производительности изменяется. Но в любом случае это всё "детские" методы с квадратичной сложностью, вычислять ими факториал неразумно, привлекает лишь краткость их кода.

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

Цитата:
Даже в вашей мега-супер-пупер реализации виден характерный почерк.
Так вот и скажите мне, смолток-чайнику, как мне улучшить свой почерк. Я в общем-то, и пришёл сюда за советами бывалых. Слезаю с горы и внимательно Вас слушаю.
Ответить с цитированием
Ads.
  (#51 (permalink)) Старый
Dionisiy Dionisiy вне форума
Новичок
 
Сообщений: 6
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 22.06.2007
По умолчанию 09.11.2009, 14:42

Цитата:
На Smalltalk ;-)
Определяем meters, sec, hours, august, year, hour, minutes, как методы класса Integer (или Number - как больше нравится), а shouldBeAKindOf: - как метод класса Object (для возможности спросить не только число, но и любой объект). Вот только метод shouldBeAKindOf: даже не нужен, потому что уже есть метод isKindOf: ;-)

Я ж и имел в виду, что на смолтолке это возможно, вопрос, где еще есть нечто подобное?
А DSL типа "30 should be an instance of: Integer" пришел как развитие SUNit-овского assert для более человеческого вида. В смолтолке это библиотеки SSpec, Mocketry. Причем в Mocketry данный синтаксис добавляется на уровне прагм:

Instance>>of: aClass
<syntax: #(be an instance of: )>
<syntax: #(be instance of: )>
^ClassSpec for: aClass

Кроме того этот же класс можно использовать и в описании спецификаций поведения через моки:

mock someMessage: (Instance of: Integer) and: Any

Есть ли другие языки, позволяющие прозрачно реализовывать подобный синтаксический сахар без изменения самого языка?
Ответить с цитированием
  (#52 (permalink)) Старый
danio danio вне форума
Member
 
Сообщений: 366
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 02.01.2004
По умолчанию 09.11.2009, 14:59

Цитата:
Есть ли другие языки, позволяющие прозрачно реализовывать подобный синтаксический сахар без изменения самого языка?
Самые гибкие в этом смысле, всегда были языки веток форт и лиспа. Вот, например, очень интересный язык (factor) который можно округленно отнести к гибриду:

http://factor-language.blogspot.com/2007/0...omputation.html

Наверняка, еще где-то есть
Ответить с цитированием
  (#53 (permalink)) Старый
Cornered_Rat Cornered_Rat вне форума
Member
 
Сообщений: 32
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 02.11.2009
По умолчанию 09.11.2009, 16:48

Житейский опыт говорит, что если что-то маленькое старательно натягивать на что-то большое, то оно не налезет, а просто порвётся. Это я снова про Смолток. У него маленькая область примененимости (логически сложные системы без требований высокой производительности), однако чтобы из Смолтока сделать хорошо продаваемый коммерческий продукт, его изо всех сил пытаются натянуть на несвойственную Смолтоку нишу компиляторов, порождающих высокопроизводительный код. Разумеется, пока тянули, его порвали.

Что такое ifTrue: ? Я считал, что это обычное сообщение, посылаемое кому угодно (но не во всех классах определена реакция на него). Могу ли я добавить обработку этого сообщения в класс целых чисел? Вроде этому ничего не мешает. Попробовал. Метод ifTrue: в класс целых чисел добавился, но дольфин выдал в статус-строке предупреждение о том, что толку от этого добавления не будет, потому что селектор "прооптимизирован". И вызов конструкции 777 ifTrue: [] почему-то компилируется в код, не содержащий посылки сообщения ifTrue: (если смотреть дизассемблером), а попытка выполнить этот код вызывает ошибку "Must be boolean". Так что же это получается? Стремление оптимизировать код по скорости привело к тому, что ifTrue: перестал быть селектором сообщения и стал зарезервированным словом языка, обозначающим оператор условного ветвления. Ну и где же обещанная гибкость Смолтока? Это уже неправильный Смолток. Пытались натянуть Смолток на производительность и порвали его. Имхо, тру-Смолток должен выполнять код во много десятков раз медленнее аналогичного "неуправляемого" кода, и никуда от этого не убежать.

P.S. Только не подумайте, что я критикую Смолток. По мере того, как я привыкаю к этому языку, его идеология мне всё больше и больше нравится. Я лишь хочу обратить Ваше внимание на неуклюжесть попыток получить от языка больше, чем то, на что он способен.
Ответить с цитированием
  (#54 (permalink)) Старый
HandleX HandleX вне форума
Member
 
Сообщений: 40
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 03.04.2007
По умолчанию 10.11.2009, 11:43

Цитата:
Что такое ifTrue: ? Я считал, что это обычное сообщение, посылаемое кому угодно (но не во всех классах определена реакция на него). Могу ли я добавить обработку этого сообщения в класс целых чисел? Вроде этому ничего не мешает. Попробовал. Метод ifTrue: в класс целых чисел добавился, но дольфин выдал в статус-строке предупреждение о том, что толку от этого добавления не будет, потому что селектор "прооптимизирован". И вызов конструкции 777 ifTrue: [] почему-то компилируется в код, не содержащий посылки сообщения ifTrue: (если смотреть дизассемблером), а попытка выполнить этот код вызывает ошибку "Must be boolean". Так что же это получается? Стремление оптимизировать код по скорости привело к тому, что ifTrue: перестал быть селектором сообщения и стал зарезервированным словом языка, обозначающим оператор условного ветвления. Ну и где же обещанная гибкость Смолтока? Это уже неправильный Смолток. Пытались натянуть Смолток на производительность и порвали его. Имхо, тру-Смолток должен выполнять код во много десятков раз медленнее аналогичного "неуправляемого" кода, и никуда от этого не убежать.

P.S. Только не подумайте, что я критикую Смолток. По мере того, как я привыкаю к этому языку, его идеология мне всё больше и больше нравится. Я лишь хочу обратить Ваше внимание на неуклюжесть попыток получить от языка больше, чем то, на что он способен.
Ну, оптимизациями балуется компилятор, да. Любой реальная, а не сферическая в вакууме среда, имеет особенности реализации, отличающие её от идеала.
Оптимизации документированы.
Вы так говорите про них, как будто это что-то плохое, вам как фанату скорости оптимизации наоборот нравиться должны
StProgramNode optimizedSelectors медитируем.
Для вашего случая проще привести к Boolean - 777 asBoolean ifTrue: [bla bla bla].
Ещё можно отперформить: 777 perform: #ifTrue: with: [bla bla bla]
Скажите, что это за задача такая, где вот край как нужно использовать #ifTrue: в своих классах, самому потом свой код не сложно читать будет по прошествии некоторого времени?
Ответить с цитированием
  (#55 (permalink)) Старый
Cornered_Rat Cornered_Rat вне форума
Member
 
Сообщений: 32
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 02.11.2009
По умолчанию 10.11.2009, 14:53

Цитата:
Вы так говорите про них, как будто это что-то плохое
Кто-то тут заявлял, что в Смолтоке настолько простой синтаксис, что имеется только 5 ключевых слов А их оказалось намного больше.
Зачем вообще эта путаница с псевдо-сообщениями, когда логичнее ввести человеческий оператор ветвления if-the-else и честно назвать его оператором? Ничего ж не выиграли.

Ну подумаешь, чуть-чуть подрезали программисту крылышки?
Что такое одна всего ложка дёгтя в бочке мёда?
Главное, что получился почти Смолток
Летать будет, но низенько-низенько...

Цитата:
Скажите, что это за задача такая, где вот край как нужно использовать #ifTrue: в своих классах
Скажите, что за реализация языка такая, что ключевое идеологические несоответствие стандарту видно даже новичку? Кстати, а как с этим в других реализациях Смолтока?
Ответить с цитированием
  (#56 (permalink)) Старый
HandleX HandleX вне форума
Member
 
Сообщений: 40
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 03.04.2007
По умолчанию 10.11.2009, 15:55

Цитата:
Кто-то тут заявлял, что в Смолтоке настолько простой синтаксис, что имеется только 5 ключевых слов А их оказалось намного больше.
Зачем вообще эта путаница с псевдо-сообщениями, когда логичнее ввести человеческий оператор ветвления if-the-else и честно назвать его оператором? Ничего ж не выиграли.
Мне выигрыш очевиден -- синтаксис остался прежним, без введения "операторов". Опять же, локальные переменные для чистоты понимания кода можно в блоке завести. Красота. Людям ехать надо, а не на шашечки смотреть -))
И кроме того, очень часто boolean протокол не просто ветвит код, а используется и результат "посылки" как бы вас не коробило от оптимизации.
a := (condition) ifTrue: ['was true'] ifFalse: ['was false'].

Цитата:
Ну подумаешь, чуть-чуть подрезали программисту крылышки?
Что такое одна всего ложка дёгтя в бочке мёда?
Главное, что получился почти Смолток
Летать будет, но низенько-низенько...
Мне оптимизацией ничё не подрезали, у кого-то если психотравма, так это не на этот форум надо...

Цитата:
Скажите, что за реализация языка такая, что ключевое идеологические несоответствие стандарту видно даже новичку? Кстати, а как с этим в других реализациях Смолтока?
Такая вот РЕАЛИЗАЦИЯ, вы что не понимаете, чем именно РЕАЛИЗАЦИЯ отличается от ИДЕАЛА? Особенностями. Тем более, что их можно обойти. Не нравится реализация boolean протокола отцов-основателей -- заведите свой, и будет вам щастье.
Ответить с цитированием
  (#57 (permalink)) Старый
Cornered_Rat Cornered_Rat вне форума
Member
 
Сообщений: 32
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 02.11.2009
По умолчанию 10.11.2009, 16:19

Цитата:
Мне оптимизацией ничё не подрезали
Рад за вас. Хотя чему удивляться: человек не кошка - ко всему привыкает!

А я вижу красивую смолтоковскую идею единообразного мира, в котором живут объекты, и эту идею испортили реализацией. Завидую тем, у кого не развито чувство прекрасного.
Хотя кто знает, может быть и я когда-нибудь скачусь к жизни под девизом "красота спасёт мир, а по$уизм - нервы".
Ответить с цитированием
  (#58 (permalink)) Старый
HandleX HandleX вне форума
Member
 
Сообщений: 40
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 03.04.2007
По умолчанию 10.11.2009, 16:24

Цитата:
А я вижу красивую смолтоковскую идею единообразного мира, в котором живут объекты, и эту идею испортили реализацией. Завидую тем, у кого не развито чувство прекрасного.
Вот честно -- на смоллтоке и сижу, потому что развито чувство прекрасного. Мне он нравится такой... Чуть чуть испорченный, это придаёт ему особый изыск -))))))))))
Ответить с цитированием
  (#59 (permalink)) Старый
Cornered_Rat Cornered_Rat вне форума
Member
 
Сообщений: 32
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 02.11.2009
По умолчанию 10.11.2009, 16:54

Когда нравится слегка испорченное прекрасное, это называется акротомофилия
Ответить с цитированием
  (#60 (permalink)) Старый
HandleX HandleX вне форума
Member
 
Сообщений: 40
Сказал(а) спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Регистрация: 03.04.2007
По умолчанию 10.11.2009, 17:13

Цитата:
Когда нравится слегка испорченное прекрасное, это называется акротомофилия
Идеализм тож может до конца жизни девственником оставить -)))))
Ответить с цитированием
Ads
Ответ

Опции темы
Опции просмотра

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Trackbacks are Вкл.
Pingbacks are Вкл.
Refbacks are Выкл.


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
так должно быть или нет???? Пархоменко Вадим Процессоры 3 01.09.2011 13:49
файлы или что должно находиться в папке aleks.tarasow Любые вопросы от новичков 3 04.08.2011 16:23
Здесь должно быть название темы! natalya00000 Любые вопросы от новичков 2 06.06.2011 16:39
Считается, что никакое число не должно начинаться с нуля dastM Lisp 6 24.02.2011 11:06
Реализация замыкание контекста на с++ denis120 С/С++ 15 17.01.2011 02:14
Объекто-ориентированный анализ с примерами на Смолтоке Вася Чайко Smalltalk 1 14.08.2008 15:05
Приер XML + XSL. Должно выводиться одно, выводистя другое oneword XML & WML 10 15.08.2007 16:16
Помогите найти ошибку(и) - говорят, что должно работать... wampu Prolog 7 02.08.2007 09:32
Есть число float a=0.01 как его умножить на 0,33% должно получиться 0,000033 freeway C++ Builder 8 23.05.2007 11:39
В edit1 набираю 123 нажимаю на кноку должно появится в label 321 как реализовать ROLF Delphi 5 19.10.2006 01:03
При выборе радио- кнопки должно выходить текст Mad_tea C++ Builder 7 06.07.2005 16:34



Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.
Нardforum.ru - компьютерный форум и программирование, форум программистов