Re[12]: Насколько важен синтаксис языка?
От: eao197 Беларусь http://eao197.blogspot.com
Дата: 05.09.06 14:08
Оценка:
Здравствуйте, FDSC, Вы писали:

FDS>Всё равно, если удобство есть, то "майнстрим" всё примет, как принял, например, ALGOL-60 или FORTRAN, а затем и C++ и Java


Дык в то-то и загвоздка, что мейнстрим не выбирает самые удачные решения, а всего-лишь достаточно хорошие
Автор: eao197
Дата: 03.07.06
. Уж не знаю, как там дела обстояли с Algol-ом и Fortran-ом, но вот C++ пример весьма показательный (например, если сравнивать с Eiffel, который появился всего парой лет позже и является языком того же класса).


SObjectizer: <микро>Агентно-ориентированное программирование на C++.
Re[11]: Насколько важен синтаксис языка?
От: Геннадий Васильев Россия http://www.livejournal.com/users/gesha_x
Дата: 05.09.06 14:13
Оценка: +3 -1
Здравствуйте, FDSC, Вы писали:

FDS>>>Почему вам это сообщение показалось смешным?

ГВ>>Этот постинг улыбнул меня своей пионерской наивностью. Я даже не нашёлся, что ответить.
FDS>И что вы тут видите такого наивного?

Главным образом, предположение о волне стартапов. Тут по-соседству дискуссия очень ясно это осветила. Мне, в общем, добавить нечего.
<< Под музыку: a-Ha — Take on me >>
<< При помощи Януса: 1.2.0 alpha rev. 650 >>
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Re[18]: Насколько важен синтаксис языка?
От: Eugene Beschastnov Россия http://eugenius-nsk.livejournal.com/
Дата: 05.09.06 14:19
Оценка:
Здравствуйте, FDSC, Вы писали:

FDS>Здравствуйте, Курилка, Вы писали:


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



FDS>>>но тогда у нас получается, что этот блок кода просто очередные фигурные скобки, как и в других языках и никаких преимуществ

К>>Что ты имеешь в виду под фигурными скобками? {} как в сях и шарпе?
К>>В них можно передавать параметры?

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


FDS>Я так и не понял, в чём разница


FDS>
FDS>DataTable msgTable = msgs.Tables["message"]; if (msgTable.Absent)  return 0;
FDS>


FDS>
ANS>>
ANS>>msgTable := msgs tables at: 'messages' ifAbsent: [^0].
ANS>>
FDS>


Разница в том, что 1) блок можно передавать в качестве аргумента в функцию 2) существуют блоки с параметрами (синтаксис у них такой — [ :param1 :param2 | тело блока ]).
Всё это вместе позволяет создавать методы более высокого уровня абстракции (а значит, уменьшает дублирование кода). "at:ifAbsent:" — пример как раз такого метода более высокого уровня абстракции. Он выполняет набор действий "взять из коллекции объект по указанному ключу, а если он отсутствует — выполнить указанные действия".
--
Бесчастнов Евгений
Re[12]: Насколько важен синтаксис языка?
От: Mirrorer  
Дата: 05.09.06 14:23
Оценка: +1
Здравствуйте, FDSC, Вы писали:


FDS>Не понял умора?

FDS>Всё равно, если удобство есть, то "майнстрим" всё примет, как принял, например, ALGOL-60 или FORTRAN, а затем и C++ и Java

Вопрос во времени. Когда появилась lambda в Лиспе, а когда в мейнстриме ?
... << RSDN@Home 1.1.4 PINK FLOYD — Shine On You Crazy Diamond (Part One)>>
Re[13]: Насколько важен синтаксис языка?
От: FDSC Россия consp11.github.io блог
Дата: 05.09.06 14:34
Оценка: +1 -2 :)
Здравствуйте, eao197, Вы писали:

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


FDS>>Всё равно, если удобство есть, то "майнстрим" всё примет, как принял, например, ALGOL-60 или FORTRAN, а затем и C++ и Java


E>Дык в то-то и загвоздка, что мейнстрим не выбирает самые удачные решения, а всего-лишь достаточно хорошие
Автор: eao197
Дата: 03.07.06
. Уж не знаю, как там дела обстояли с Algol-ом и Fortran-ом, но вот C++ пример весьма показательный (например, если сравнивать с Eiffel, который появился всего парой лет позже и является языком того же класса).


Скорее всего "майнстрим" выбирает самые лучшие решения. Вопрос только в том, что считать самым лучшим
Re[19]: Насколько важен синтаксис языка?
От: FDSC Россия consp11.github.io блог
Дата: 05.09.06 14:35
Оценка:
Здравствуйте, Eugene Beschastnov, Вы писали:

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


FDS>>Здравствуйте, Курилка, Вы писали:


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



FDS>>>>но тогда у нас получается, что этот блок кода просто очередные фигурные скобки, как и в других языках и никаких преимуществ

К>>>Что ты имеешь в виду под фигурными скобками? {} как в сях и шарпе?
К>>>В них можно передавать параметры?

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


FDS>>Я так и не понял, в чём разница


FDS>>
FDS>>DataTable msgTable = msgs.Tables["message"]; if (msgTable.Absent)  return 0;
FDS>>


FDS>>
ANS>>>
ANS>>>msgTable := msgs tables at: 'messages' ifAbsent: [^0].
ANS>>>
FDS>>


EB>Разница в том, что 1) блок можно передавать в качестве аргумента в функцию 2) существуют блоки с параметрами (синтаксис у них такой — [ :param1 :param2 | тело блока ]).

EB>Всё это вместе позволяет создавать методы более высокого уровня абстракции (а значит, уменьшает дублирование кода). "at:ifAbsent:" — пример как раз такого метода более высокого уровня абстракции. Он выполняет набор действий "взять из коллекции объект по указанному ключу, а если он отсутствует — выполнить указанные действия".

В таком случае, VladD2 полностью прав, когда говорит, что это по типу goto. Причём это небезопасное использование goto.
Re[6]: Насколько важен синтаксис языка?
От: VladD2 Российская Империя www.nemerle.org
Дата: 05.09.06 14:36
Оценка:
Здравствуйте, pavel74, Вы писали:

P>у любого другого инструмента есть плюсы и минусы, главное их адекватно оценивать.


От. Золотые слова. А то вот я в всое время наслушавшись хвалебных песен о Долфине скачал его шестую версию и... был сильно разочарован. Возможно если бы мне не сказали, что это мега-круто, то я бы и не был так разочарован. Но когда тебе говорят о мега-крутости, а на поверку в среде нет даже комплит-ворда, то чувствуешь себя обманутым.

Что до моих слов о "трепе"... Извини за выражение, но по сути подобрать другое слово было тяжело. Разговоры о том, как что-то будет круто на практике — это одно. А вот использование чего-то на практике — это дургое. В условиях реальной работы многие восторженные мысли уходят, а проблемы выявляются.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Re[20]: Насколько важен синтаксис языка?
От: Andrei N.Sobchuck Украина www.smalltalk.ru
Дата: 05.09.06 14:39
Оценка:
Здравствуйте, FDSC, Вы писали:

FDS>В таком случае, VladD2 полностью прав, когда говорит, что это по типу goto. Причём это небезопасное использование goto.


Ты пример приведи, того что тебя пугает. И станет сразу видно правильно ты понимаеш или нет
http://www.smalltalk.ru | << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Я ненавижу Hibernate
Автор: Andrei N.Sobchuck
Дата: 08.01.08
!
Re[7]: Насколько важен синтаксис языка?
От: Andrei N.Sobchuck Украина www.smalltalk.ru
Дата: 05.09.06 14:45
Оценка: :)
Здравствуйте, VladD2, Вы писали:

VD>От. Золотые слова. А то вот я в всое время наслушавшись хвалебных песен о Долфине скачал его шестую версию и... был сильно разочарован. Возможно если бы мне не сказали, что это мега-круто, то я бы и не был так разочарован. Но когда тебе говорят о мега-крутости, а на поверку в среде нет даже комплит-ворда, то чувствуешь себя обманутым.


Судя по стенаниям, ты ждал женскую грудь, а получил коровье вымя.

VD>Что до моих слов о "трепе"... Извини за выражение, но по сути подобрать другое слово было тяжело. Разговоры о том, как что-то будет круто на практике — это одно. А вот использование чего-то на практике — это дургое. В условиях реальной работы многие восторженные мысли уходят, а проблемы выявляются.


Именно. Но плюсов всё равно больше.

ЗЫ. И комплит-ворд в Дольфине есть, и броузер кода удобный, и рефакторинг работает, и на ST там всё написано кроме ВМ и виндовых контролов.

ЗЫЫ. Не похоже на Студию, запустить и работать не получится — согласен.
http://www.smalltalk.ru | << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Я ненавижу Hibernate
Автор: Andrei N.Sobchuck
Дата: 08.01.08
!
Re[21]: Насколько важен синтаксис языка?
От: FDSC Россия consp11.github.io блог
Дата: 05.09.06 14:46
Оценка:
Здравствуйте, Andrei N.Sobchuck, Вы писали:

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


FDS>>В таком случае, VladD2 полностью прав, когда говорит, что это по типу goto. Причём это небезопасное использование goto.


ANS>Ты пример приведи, того что тебя пугает. И станет сразу видно правильно ты понимаеш или нет



Метод1(ЕслиОУжас)
...
msgTable := msgs tables at: 'messages' ifAbsent: ЕслиОУжас;


----

ЕслиОУжас(ЕслиБлин)

....

msgTable := msgs tables at: 'users' ifAbsent: ЕслиБлин;
....
^что-то

----------

ЕслиБли()

Метод1(ЕслиОУжас)


В конечном итоге вообще не понятно, что кто вернёт, откуда и куда и не получиться ли зацикливания.
Re[9]: Насколько важен синтаксис языка?
От: Odi$$ey Россия http://malgarr.blogspot.com/
Дата: 05.09.06 14:51
Оценка: 3 (1)
Здравствуйте, Дарней, Вы писали:

VD>>В общем, это не нормальное положение вещей. Они дейсвительно протеворечат принкципам мэйнстрима. У нас на сайте даже есть статьи о библиотеке автор которой попытался создать замену регексам на Яве. Думаю это не с праста. Путь откровенно говря не очень верный, но посылки...


Д>а ты не помнишь, где это было?


http://rsdn.ru/?article/?678
Автор(ы): Alexander Babaev
Дата: 22.05.2005
В статье предлагается Pure Java API для произвольной обработки строк. При этом показывается, как пользоваться такого рода библиотекой на конкретном примере разработанной автором библиотеки. Также сравнивается подход автора с классическим.

... << RSDN@Home 1.2.0 alpha rev. 654>>
Re[22]: Насколько важен синтаксис языка?
От: Andrei N.Sobchuck Украина www.smalltalk.ru
Дата: 05.09.06 14:55
Оценка:
Здравствуйте, FDSC, Вы писали:

FDS>В конечном итоге вообще не понятно, что кто вернёт, откуда и куда и не получиться ли зацикливания.


copilation failed. То есть не понял в (псевдо-)коде ничего.
http://www.smalltalk.ru | << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Я ненавижу Hibernate
Автор: Andrei N.Sobchuck
Дата: 08.01.08
!
Re[16]: Насколько важен синтаксис языка?
От: Eugene Beschastnov Россия http://eugenius-nsk.livejournal.com/
Дата: 05.09.06 14:58
Оценка: 10 (1)
Здравствуйте, FDSC, Вы писали:

FDS>>>>>Меня испугало то, что можно выйти откуда угодно. Это значит, что вызвав некоторую функцию я не буду уверен, что она вернёт управление


EB>>>>Гхм... А как ты относишься к exception-ам?


FDS>>>Положительно


EB>>Извини, но я вижу в твоих словах некоторое противоречие.


FDS>Тут нет никаких противоречий. Exception возвращает управление вызывающей функции, а не к чёрту на кулички.

Ну, exception-ы бывают и unchecked.

FDS>А если функция просто куда-то не туда передаст управление, ищи её потом свищи.

По-моему, с твоей стороны есть некоторое недопонимание. Если ты просто вызываешь какую-то функцию, то тебе управление тебе нормально вернётся (разумеется, если не было exception-а). А вот если ты выполняешь блок (не передаёшь его в качестве параметра, а именно выполняешь там, куда передал) — тогда да, управление может не вернуться (потому что, как я уже говорил, блок исполняется в том контексте, где было создан, а не где был запущен на выполнение). Запускается на выполнение блок вызовом у него метода "value" (в случае, если блок без параметров) или "value:", "value:value:", "value:value:value:" и т.д. (если блок требует аргументов).

В качестве примера опишу два метода, один из которых вызывает другой с блоком в качестве параметра (всё, что в двойных кавычках — комментарии):
startingMethod  "Здесь мы описываем создаваемый метод - указываем его имя и параметры. 
                 В данном случае имя метода - startingMethod, а параметров у него нету"

    | aBlock |    "Здесь мы указываем, что у нас в методе используется локальная переменная aBlock"

    aBlock := [^123]. "Здесь мы присваиваем переменной aBlock блок, который возвращает число 123. 
                       ВАЖНО: блок здесь создаётся, но не выполняется."

    self methodThatWorksWithBlock: aBlock. "Здесь мы вызываем у самого себя метод methodThatWorksWithBlock: с параметром aBlock"
methodThatWorksWithBlock: aBlock  "Здесь мы описываем создаваемый метод - указываем его имя и параметры. 
                                   В данном случае имя метода - methodThatWorksWithBlock: , и у метода есть один параметр - aBlock"

    | blockResult |  "Здесь мы указываем, что у нас в методе используется локальная переменная blockResult"

    blockResult := aBlock value.  "Здесь мы выполняем блок aBlock, пришедший нам в качестве параметра, 
                                   а результат выполнения записываем в переменную blockResult. 
                                   ВАЖНО: блок выполняется в том контекстве, где он было создан - 
                                   т.е. в нашем случае в контексте метода startingMethod. 
                                   При этом, если в блоке был выполнен оператор выхода из метода, 
                                   то из метода value мы _не_ возвращаемся."

    ^blockResult  "Возвращаем blockResult"
--
Бесчастнов Евгений
Re[9]: Насколько важен синтаксис языка?
От: Eugene Beschastnov Россия http://eugenius-nsk.livejournal.com/
Дата: 05.09.06 15:03
Оценка:
Здравствуйте, Eugene Beschastnov, Вы писали:

Хех, немножко накосячил
EB>... Метод "at:ifAbsent:" (который, кстати, является стандартным и имеется у всех типов коллекций) ...

Разумеется, "у всех типов коллекций, для которых он имеет смысл" . Т.е. если из коллекции нельзя достать объект по ключу или по индексу, то и метода такого у этой коллекции нету.
--
Бесчастнов Евгений
Re[23]: Насколько важен синтаксис языка?
От: FDSC Россия consp11.github.io блог
Дата: 05.09.06 15:29
Оценка:
Здравствуйте, Andrei N.Sobchuck, Вы писали:

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


FDS>>В конечном итоге вообще не понятно, что кто вернёт, откуда и куда и не получиться ли зацикливания.


ANS>copilation failed. То есть не понял в (псевдо-)коде ничего.


Ну, я хотел сказать, что если мы объявили делегат, и return приведёт к выходу не из этой функции, а из какой-то другой, то мы можем сделать так, что функция получит выход сама на себя. Ну или другие последствия, как при передачи простой метки в функцию для скачка.
Re[3]: Насколько важен синтаксис языка?
От: vvotan Россия  
Дата: 05.09.06 15:35
Оценка: +1 :)))
Здравствуйте, Mirrorer, Вы писали:


M>Английский

M>I am teacher.
M>Я есть учитель.

На самом деле "I am a teacher", то есть "Я есть экземпляр класса "учитель" "
--
Sergey Chadov

... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
Re[17]: Насколько важен синтаксис языка?
От: FDSC Россия consp11.github.io блог
Дата: 05.09.06 15:53
Оценка:
Здравствуйте, Eugene Beschastnov, Вы писали:

EB>В качестве примера опишу два метода, один из которых вызывает другой с блоком в качестве параметра (всё, что в двойных кавычках — комментарии):

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

EB>    | aBlock |    "Здесь мы указываем, что у нас в методе используется локальная переменная aBlock"

EB>    aBlock := [^123]. "Здесь мы присваиваем переменной aBlock блок, который возвращает число 123. 
EB>                       ВАЖНО: блок здесь создаётся, но не выполняется."

EB>    self methodThatWorksWithBlock: aBlock.
 "Здесь мы вызываем у самого себя метод methodThatWorksWithBlock: с параметром aBlock"
EB>
EB>methodThatWorksWithBlock: aBlock  
"Здесь мы описываем создаваемый метод - указываем его имя и параметры. 
EB>  В данном случае имя метода - methodThatWorksWithBlock: , и у метода есть один параметр - aBlock"

EB>    | blockResult |  "Здесь мы указываем, что у нас в методе используется локальная переменная blockResult"

EB>    blockResult := aBlock value.  "Здесь мы выполняем блок aBlock, пришедший нам в качестве параметра, 
EB>                                   а результат выполнения записываем в переменную blockResult. 
EB>                                   ВАЖНО: блок выполняется в том контекстве, где он было создан - 
EB>                                   т.е. в нашем случае в контексте метода startingMethod. 
EB>                                   При этом, если в блоке был выполнен оператор выхода из метода, 
EB>                                   то из метода value мы _не_ возвращаемся."

EB>    ^blockResult  "Возвращаем blockResult"
EB>


Спасибо, теперь я уверен, что понимаю всё правильно. Некоторые вопросы сразу сняты.

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

Пожалуй всё. Мне даже понравилась такая возможность, её иногда нехватает.
Re[4]: Насколько важен синтаксис языка?
От: FDSC Россия consp11.github.io блог
Дата: 05.09.06 16:00
Оценка: :)))
Здравствуйте, vvotan, Вы писали:

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



M>>Английский

M>>I am teacher.
M>>Я есть учитель.

V>На самом деле "I am a teacher", то есть


"Я есть неопределённый экземпляр класса "учитель" "
Re[24]: Насколько важен синтаксис языка?
От: Курилка Россия http://kirya.narod.ru/
Дата: 05.09.06 17:07
Оценка:
Здравствуйте, FDSC, Вы писали:

FDS>Здравствуйте, Andrei N.Sobchuck, Вы писали:


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


FDS>>>В конечном итоге вообще не понятно, что кто вернёт, откуда и куда и не получиться ли зацикливания.


ANS>>copilation failed. То есть не понял в (псевдо-)коде ничего.


FDS>Ну, я хотел сказать, что если мы объявили делегат, и return приведёт к выходу не из этой функции, а из какой-то другой, то мы можем сделать так, что функция получит выход сама на себя. Ну или другие последствия, как при передачи простой метки в функцию для скачка.


Где ты метку взял? Тебе везде goto мерещится?
Блоки смолтолковские и рубивские — это лямбды по сути, никаким образом не метки, и лямбды возвращают управление в том месте, где они были вызваны.
Re[9]: Насколько важен синтаксис языка?
От: VladD2 Российская Империя www.nemerle.org
Дата: 05.09.06 17:11
Оценка: +2
Здравствуйте, Mirrorer, Вы писали:

M>На безрыбье как говорится..


Вот, вот. И удобство тут не причем.

M>Может оно конечно и nicer, но пахнет регэксами..


Это не лучший вариант. EBDF бывает разным. Но даже так это пахнет только если что-то простое. На сложном ты сразу увидишь разницу.

M>+1 Но что-то мне подсказывает что мейнстрим далеко не сразу примет альтернативу, даже если она появится..


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

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


А не заставляет задуматься тот факт, что после очередной порции рекламы Смолтока сразу же появляются впоросы вроде этого
Автор: quadrochups
Дата: 29.08.06
?

M> Я не считаю его хуже или лучше. Просто он другой, и его не принял мейнстрим. Но регэксы принял

M>Вот этого я не могу понять...

Скажем так. Принял плохо и только потому что нет альтернативы. Уверен, что если бы альтернатива была бы и была бы понятнее, то регексы пошли бы в помойку.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.