Здравствуйте, Курилка, Вы писали:
К>Так вот — хотелось бы рассмотреть вопрос: насколько синтаксис языка определяет его удобство для использования?
Прочитал я сейчас определение синтаксиса (естественного языка) и осознал, что в зону его влияния не входят слова языка (т.е. лексика), а входят лишь правила построения связной речи.
Может в этом и есть секрет таких языков как Lisp, Smalltalk, J, ... (продолжите список)? Ведь в них как раз и имеется минимальный синтаксис, который:
* позволяет связывать различные слова друг с другом
* не пытается залезть на уровень лексики (минимальное количество ключевых слов)
Я не силен в науке о русском языке (кстати, как называется?), так что поправьте если что.
Здравствуйте, FDSC, Вы писали:
FDS>>>Что же это за преимущества, которые не дают экономических преимуществ при разработке ПО? ГВ>>Где я отрицал возможность получения экономических преимуществ? FDS>Вы сказали, что не будет волны стартапов, а это значит, что нет экономических преимуществ, так как иначе все им бы пользовались.
Окстись! Слово-то такое "Lisp" слышали не все, а пользоваться им умеют и не боятся ещё более редкие представители. Из этих редких единиц ещё более редкие единицы действительно будут стартапить. Не все же спят и видят, как бы заняться собственным стартапом. Откуда тут "волна" стартапов выпрыгнет?
FDS>Собственно, вот логика. Если вас логика не устраивает, объясните почему (вы её уже назвали "наивной", но всё же)
Наивность тут проявляется в упрощении: полагается, что многие знают Лисп и многие же рвутся стартапить. На самом деле это далеко не так.
На основании этих упрощённых рассуждений делается вывод о мнимости качеств Lisp, SmallTalk и прочих подобных. Ну не ерунда?
<< Под музыку: silent >>
<< При помощи Януса: 1.2.0 alpha rev. 650 >>
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Здравствуйте, FDSC, Вы писали:
FDS>Можете дать какую-нидуь ссылку на Лисп (компилятор и, хотя бы, стандарт, а лучше книгу на русском), а то у меня от поиска в интернете крышу сносит
<< Под музыку: silent >>
<< При помощи Януса: 1.2.0 alpha rev. 650 >>
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Здравствуйте, FDSC, Вы писали:
FDS>Он считается некорректным, потому что со сслыкой на опыт невозможно спорить по причине того, что опыт у всех разный.
Не подсказывай.
<< Под музыку: silent >>
<< При помощи Януса: 1.2.0 alpha rev. 650 >>
Я знаю только две бесконечные вещи — Вселенную и человеческую глупость, и я не совсем уверен насчёт Вселенной. (c) А. Эйнштейн
P.S.: Винодельческие провинции — это есть рулез!
Здравствуйте, FR, Вы писали:
VD>>Хм. А как что же их тогда объявлять? Или ты предлагаешь вообще их не объявлять? Последнее приводит к ошибкам. Это натуральные грабли. Одна опечатка и ищи ошибку часами.
FR>Не заметил, опять?
Прости, что?
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, Eugene Beschastnov, Вы писали:
EB>Ну не получается . Ни у меня, ни у кого другого, использующего Smalltalk (замечу — именно использующего). Что мы не так делаем?
Не делаете полезной раоты в составе более менее большой команды? Я угадал?
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, FDSC, Вы писали:
FDS>Наверное, это сродни тому, что я не делаю опечаток в названии переменных в скриптовых языках (там, где переменные не нужно объявлять) — кто-то может так делать, кто-то нет. Но согласитесь, VladD2 привёл классный пример, кто даст гарантию, что какой-нибудь "умник" так не сделает
Я дам гарантию, что так сделают и не раз.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, FDSC, Вы писали:
FDS>Можете дать какую-нидуь ссылку на Лисп (компилятор и, хотя бы, стандарт, а лучше книгу на русском), а то у меня от поиска в интернете крышу сносит
Хороших книг по Лиспу я вообще не знаю. Читал пару, например, но обе мне показались редкосным дерьмом. Люди просто неумеют донести мысли до других. Есть неплохие материалы на www.softcraft.ru (если не ошибся с срдесом).
FDS>Да, например в мае на C#, правда она у меня динамически компилировалась прямо в runtime в зависимости от ввода пользователя. Это было ужасно и я не знаю, как это сделать лучше... Вообще, с генерацией кода у меня всё плохо, но по ней совершенно нет ничего понятно написанного.
Вот макросы — это способ сделать это не просто лучше, а почти идиально. Правда в компайлтайме, но все же.
FDS>С макросами не так всё — я просто не понимаю как так можно что-то писать и я не вижу нормальной (строгой) документации по макросам.
Документация есть. Зайти да nemerle.org или просто прочти статьи на нашем стайте.
FDS> У меня от них просто в глазах рябит (впечатление похуже, чем когда открываешь исполняемый файл в текстовом редакторе — там хоть что-то понятно).
Давай конкретно. Что не понятно?
FDS>Я имею ввиду модификатор mutable. Насколько я понимаю, без него переменная — не переменная, а константа (точнее readonly поле).
Что-то вроде. Но фишка в том, что как раз чаще всего переменные не требуется изменять. Понимаю, что это не просто понять после императивного языка, но это так. И явное выражение намерения изменять значение переменной только улучшает читаемость программы.
FDS>"Одна опечатка и ищи ошибку часами." — я не поклонник скриптовых языков, но когда на них пишу таких ошибок почему-то не допускаю (именно в скриптах ). Уже много о них читал и всё время удивлялся.
Значит мало пишешь. К тому же учити, что надо учитывать что писать можешь не только ты. А искать опечатки за другими не боагодарная работа. А ведь ее так легко переложить на компилятор.
FDS>Не очень понял, какие вещи нужно попытаться использовать, да ещё если они непонятны? Можно приблизительный списочек: я попытаюсь.
Пожалуйста. По убыванию "прикольности".
1. Сопоставление с образцом (в том числе и в foreach) и алгеброические типы (variant-ы).
2. Локальные функции.
3. Лямбды.
4. Вывод типов.
5. Кортэжи (tuples).
6. Готовые макросы (например, чтобы объявить свойство можно просто пометить поле атрибутом Accessor).
7. Отсуствие граблей (например, оператора as).
8. Частичное применение функций и операторов.
9. Сплайсебл-строки.
10. Собственные макросы.
11. Бесплатная концевая рекурсия.
12. Краткий синтаксис работы со спискам и встроенные в зяык списки.
Пунктов еще много, но уже этих более чем достаточно. Да если честно.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, Beam, Вы писали:
B>Давайте поговорим о повторном использовании и читаемости кода.
Давайте, и начнем с принципов структурного программирования. ОК?
Что ты о них думаешь?
Примеры поскипаны.
B>На мой взгляд этот код читается легче, чем на Java.
Это не те примеры. На мой взгляд они читаются не лучше чем примеры на Яве, но дело не в этом.
Дело в том, что мы говорили о другом. Мы говорили о возможности создания программ в которых функция не обязательно возвращает управление после вызова и в кторых выражения могут не врнуть результат. Это называется противоречием принципам структурного программирования и многие годы сильно не приветсвуется более-менее серьезными командами программистов.
B> Да и возможности повторного использования у него выше.
Не правда. Бьюсь об заклад, что на том же Nemerle напишу код который в среднем будет превосходить по выразительности, краткости и понятности Смолтоковский. Об производительности и говорить не приходится.
B>Все это возможно в Smalltalk и невозможно в Java благодаря наличию блоков кода (BlockClosure).
Возможно я не понят. Я не против блоков кода, а-ка лямбды или анонимные методы. Идея передовать куски кода в другие фунции мне очень нравится и я ее сам постоянно исползую (правда не в Смолток, а в Немерле и C#). Мне не нравится идея неструктурированной передачи управления.
B>Радует, что в C# добавили такие возможности (я говорю про лямбду в C# 3),
Анонимные методы из C# 2.0 немногим хуже. Они не умеют вывоить типы и чуть-чуть более громоздки, но по слити это тоже самое.
B> а там глядишь и Java подтянется в этом плане.
Возможно. Хотя в Яве уже есть анонимные классы и вложенные класы которые тоже решают похожие задачи. Не так красиво, но решают.
B>Только интересно, примет ли это все mainstream? Наверное ДА — вон сколько шума вокруг LINQ.
Примет. По крайней мере те кто захотят.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, Beam, Вы писали:
B>Зачем добавлять ключевые слова в язык, если этой функциональности можно добиться с помощью делегатов?
Какие ключевые слова? Селект? Это анлог фунции.
Что до дямбд, то в C# 3.0
x => x * 2
==
delegate (int x){ return x * 2; }
да, первый вариант короче, но это не более чем синтаксическое сокращение. По сути они равнозначны.
B>Добавьте к этому возраст Java и тогда станет видно, что много.
Ага. А к Яве добавим всех его наследников. Это тупиковый путь.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, Andrei N.Sobchuck, Вы писали:
ANS>Здравствуйте, VladD2, Вы писали:
VD>>Пугает вот этот исходный пример. Управление из середины выражения уходит по непредсказуемому пути. Это конечно может оказаться очень удобным при кодировании в некоторых случаях, но это будет создавать головную боль у любого кто изучает этот код.
ANS>Блин, реально не пойму о каком непредсказуемом пути идёт реч.
Это плохо. Значит опыт 70-ых годов прошлого столетия прошел мимо тебя.
ANS> Если в блоке есть нелокальный возврат, то выход проискодит из места определения блока.
Ага. Это нарушает структрированность кода и протеворечит предположениям тех кто читает код.
ANS> То есть код работает так же как и код, который ты привёл.
Я привел? Это ты про что?
ANS> Это указано в спецификации метода. Если тебя пугает то, что метод делает не то, что должен делать, то не стоит пользоваться ни одним ЯП вообще.
Меня пугает предположение о том, что функция может не вернуть управления и то, что в середине выражения (суть которого вычисление результата) может быть возврат управления, что приводит к тому, что выражение потнетциально может быть не вычисленно.
Большинство языков намерянно не позволяют сделать этого. И годрость возможностью наплевать на "опыт предков" мне не нравится.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, Andrei N.Sobchuck, Вы писали:
VD>>В функциональных языках return то не приветствуется, а тут вольный выход из любой точки выражения. По-моему, то чистой воды грабли.
ANS>В ST которые реализовывали для JVM и .Net ВМ нелокальный возврат реализовывали через механизм исключений. То есть, этот код эквивалентен созданию своего уникального класса исключения, определению блока try..catch, который ловит это уникальное исключение _перед_ вызовом метода с блоком, и бросанию этого исключения при активации блока.
ОК. Подойди к любому квалифицированному C#- или Java-программисту или архитектуру и проконсультируйся у него по пводу того что он думает об исползовании исключений и их обработки для реализации логики приложения. Уверяю тебя стандартная реакция будет "руки (мягко говоря) надо отрывать тем уродом (тоже мягко говоря) которые это делают".
Ислючения придуманы для того чтобы отделить обработку нестандартны (ошибочных) ситуаций от нормального хода вычислений. Когда в программе что-то не так нам дается возможность вгглянуть на нее со стороны и как бы сказать. Ёпрст, что то мы тут на косячили. Давайте как попробуем востановить корректное состояние программы и продолжить работать или просто запишим в чем дело и закончим выполнение.
Но вот реализация логики на исключениях делает прогрмму весма трудной для изучения. Вообще надо стремиться чтобы прграмма была наиболее прямолинейна. Естествнно не в ущерб функциональности. Те же блоки кода — это возможность разнообразия прямолинейности. Мы вольны прямолинейно реализовать алгоримт, а его детали вынести в блоки кода которые задать потом.
ANS> Плюс ошибка при попытке бросить исключение, если управление уже вышло из нашего уникального try..catch.
То есть, создали проблему и успешно боримся с ней?
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, FR, Вы писали:
FR>То что там окна MFC'шные не обязательно значит что среда написана на C++. Как пример есть биндинг MFC на питон, и на питоне можно писать используя MFC. И даже есть IDE написаное на питоне используя MFC — PythonWin.
Да, да. Шрирлиц все равно скажет, что апельсины приносил...
Не надо много умностей. Мы слышим от фанатов Смолток о том, что среды этого языка написаны на Смолток, а на повреку там МФЦ-шный код. Что тут умничать? Все же очевидно.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Объясню почему я не согласен с этим сообщением, в отличии от толп товаришей.
Это сообщение подменяет тему. Примеры из него невинныи и впоросов не вызвают. Но цель его доказать невреную посылку.
Речь шао не о блоках кода и их полезности, а о неструкторной передаче управления.
Вернись к исходным примерам в которых выход из бока или приводитк к тому, что функция никтогда не возвращает упаравления, или к тому что выражение может не вернуть результат, апередать управление в другое место в любой своей точке просто из-за появления там "рышки" (символа ^).
Ты серьзно считаешь, что применение таких техник оправдано элюзорным уменьшением объема кода?
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, Andrei N.Sobchuck, Вы писали:
К>>К примеру, что будет если блок вернуть из метода? А в блоке будет возврат из этого метода (который уже завершился)?
ANS>Ран-тайм исключение.
И тебе это нравится?
А вот лямбды можно возрващать сколько хочешь и никаких проблем не будет.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, Eugene Beschastnov, Вы писали:
EB>Вот и я не помню ни одной ошибки (ни у себя, ни у кого-либо другого) из-за того, что в блоке выполнялся нелокальный возврат.
А я вижу что уже не хочу читить написанный тобой код, так как он непредсказуем (не структурирован).
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
Здравствуйте, Eugene Beschastnov, Вы писали:
EB>Кстати, замечу, что этот exception бросается, только если именно нельзя вернуться. При этом контекст, где был определён блок, не теряется и, если в блоке нет оператора "^", то он замечательно и корректно выполняется.
Блок без оператора "^" является классической Лямбдой с лексическим замыканием и присутствует во многих языках (в том же C#, например). А с ним является граблями ждущими своего часа.
... << RSDN@Home 1.2.0 alpha rev. 637>>
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.