![]() |
|
![]() ![]() ![]() |
|
UniBomb |
|
|||
Новичок ![]() ![]() ![]() Награды: 1 Профиль Группа: Завсегдатай Сообщений: 1754 Регистрация: 24.10.2006 Где: Санкт-Петербург Репутация: нет Всего: 97 |
Artemios,
Ну в принципе да... Просто есть желание по максимуму организовать WYSIWYG по максимуму, но приэтом что бы было комфортно работать... Можно сделать поддержку обоих вариантов... |
|||
|
||||
Иванофф |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 91 Регистрация: 8.9.2006 Репутация: нет Всего: нет |
можно объединить две темы, тогда появиться хоть какая-то конкретика "Компилятор для языка программирования Д" все чаще на подобные вопросы 1) Чего не хватает современным ЯП? 2) Чего лишнего в современных ЯП? появляются ответы 1) Чего не хватает современным ЯП? программистов, которые могут изучить язык и сделать более-менее готовую коммерческую программу. 2) Чего лишнего в современных ЯП? программисты, которые не могут доделать программы до того уровня, чтобы пользователи могли ими пользоваться. |
|||
|
||||
Sardar |
|
||||||||||
![]() Бегун ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 6986 Регистрация: 19.4.2002 Где: Нидерланды, Groni ngen Репутация: нет Всего: 317 |
Ух ты какая регулярная тема снова всплыла
![]()
Я перечислю что бы хотел видеть, но это не значит что этого нет (Ruby например рулит почти по всему, что я назову). Closures и некоторые другие вещи (ну и конечно фуннкции высшего порядка, что будет автоматом):
Функции и бы отдельно от closure's реализовать, для эффективности, всё таки не всегда контекст привязанный нужен. Конечно интересны (мне ![]()
Блоки могут сделать код похожим на "спагетти", т.к. это ограниченый аналг goto, но ИМХО очень удобно и при реализации с умом будет эффективней чем closure. Конечно же блоки это обьекты, но они не могут быть возвращеы как closure из функции. Человеческие коллекции. Т.е. не всё под одну гребёнку, а возможность эффективно писать выбирая ArrayList (список на массиве), LinkedList (связанный список), LinkdHashMap (ассоциативный массив) и т.д. как в Java. Естественно подогнать это всё под удобный синтаксис, пример списка я дал в примере closure. Конструкцию match как в Ocaml (спосоставление по типу). Это мощная вешь, с которй можно пойти дальше добавив операторы apply и pass. Конечно нужны тогда "жёсткие типы" (статическая типизация), что есть гуд. Также нужны алгебраические типы ну и прочее:
В паре слов не обьяснить конечно же, смотрим Ocaml и Haskell. Алгебраические типы позволят собирать какие угодно структуры, удобно в контейнерах и т.д. С помощью match + apply + pass можно проходить пол любым структурам (по деревьям идеально). Вообщем это очень круто ![]() Расширение компилятора с помощью core интерфейсов. Это такой более продвинутый аналог перегрузки операторов и т.п.:
Много... так долго можно продолжать ![]() В любом случае не нужно препроцессора, всё остальное по вкусу. -------------------- Опыт - сын ошибок трудных © А. С. Пушкин Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik Оценить мои качества можно тут. |
||||||||||
|
|||||||||||
adejneka |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 105 Регистрация: 8.7.2005 Где: Москва, Россия Репутация: нет Всего: 11 |
Простите за глупый вопрос, но чем блоки отличаются от dynamic-extent замыканий?
|
|||
|
||||
Sardar |
|
|||
![]() Бегун ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 6986 Регистрация: 19.4.2002 Где: Нидерланды, Groni ngen Репутация: нет Всего: 317 |
adejneka, возможно тем что к значениям переменных не имеет никакого отношения, т.е. переменные связываються статично со своим значением и не могут быть редекларированны в блоке ниже. Блоки что я предложил есть ничто иное чем "безопасный" goto или "функция в функции". Блок можно вызвывать снова и снова, строя например рекурсию внутри конкретной функции, это как приватные функции, не видимые вне функции/метода.
Но блок не функция, он не принимает никаких аргументов, а видит все переменные выше по контексту. Поэтому нельзя просто вызвать любой блок, а только те, что определены в текущем контексте(блоке) или выше. Внутри блока действуют break и continue, заставляющие соотвественно прыгнут в начало или в конец текущего блока (или "родительского" блока по имени). Если предложить, что continue передаёт управление не блоку (он есть выражение), а на начало statement'а, то можно строить условия и циклы одним if'ом:
От такого код будет менее читабелен, но можно будет писать без дублирования участков кода, что облегчит не только работу оптимизатора, но и даст морально-эстетическое наслаждение программисту ![]() -------------------- Опыт - сын ошибок трудных © А. С. Пушкин Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik Оценить мои качества можно тут. |
|||
|
||||
regis |
|
||||||||
Бывалый ![]() Профиль Группа: Участник Сообщений: 232 Регистрация: 12.12.2005 Где: Москва, Россия Репутация: нет Всего: 7 |
Как раз желательно определиться вот с этим: будет ли это просто учебный пример, или язык, ориентированный на практическое применение. И кстати: если уж речь идет о чисто учебном примере, то призывать других принимать в этом участие как-то нелогично (поскольку учится человек всегда сам ;) ). Если же речь идет о практической разработке, то опять встает вопрос о конкретике, который я уже задавал. В наши дни "язык программирования" вообще -- настолько общее, неконкретное понятие, что это уже ничего не говорит. Если хочется просто поразрабатывать что-нибудь системное (заодно приобрести не только знания, но и какую-то известность), то позволю себе чуть саморекламы: а вы с моим проектом (AWL) знакомы? Там творческим личностям пока есть много возможностей для приложения усилий (и, кстати, вполне реальный шанс прославиться).
Речь уже идет о какой-то интерактивной программе? Не совсем понял: если встал вопрос о редактировании, предполагается, что это некий диалговый инструмент, а не просто ЯП.
Честно говоря, здесь важнее концепция: синтаксис, в конце концов, дело наживное. ![]()
Так пока что критиковать-то и нечего. ![]() Это сообщение отредактировал(а) regis - 25.12.2006, 12:40 --------------------
В. В чем разница между hardware и software?О. В отличие от второго, по первому можно двинуть кулаком или пнуть ногой. |
||||||||
|
|||||||||
regis |
|
||||||||||||||||
Бывалый ![]() Профиль Группа: Участник Сообщений: 232 Регистрация: 12.12.2005 Где: Москва, Россия Репутация: нет Всего: 7 |
Здесь возникло сразу несколько вопросов:
Кстати, недурной пример на использование замыканий. Но что, действительно существует браузер, поддерживающий Ruby вместо JS?
Так, как я понял, цикл foreach своему телу передает два параметра -- сам элемент коллекции и его номер?
Хмм-вроде это уже реализовано. Только синтаксис вот такой:
[/QUOTE]
Хмм, а не могли бы пояснить: в чем разница между всеми этими структурами данных? "Список на массиве", например? А вообще, спасибо, идеи весьма интересные. Над некоторыми явно стоит подумать. Это сообщение отредактировал(а) regis - 25.12.2006, 13:41 --------------------
В. В чем разница между hardware и software?О. В отличие от второго, по первому можно двинуть кулаком или пнуть ногой. |
||||||||||||||||
|
|||||||||||||||||
Sardar |
|
||||||
![]() Бегун ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 6986 Регистрация: 19.4.2002 Где: Нидерланды, Groni ngen Репутация: нет Всего: 317 |
К сожалению нет, но язык Ruby существует и является ИМХО очень мощной вещью. Правда я больше поклонник С подобного синтаксиса, но это мелочи ![]()
Цикла нет вообще. В примере создаётся дефолтовая коллекция (список), у которого определён метод foreach. Как и любой метод он может принимать любые аргументы, но вот один специальный аргумент передаётся не как обычно (в "()"), а блоком за конструкцией и это всегда должен быть closure. Фича впервые увиденная мной в Ruby, по сути посто syntatic sugar, но как удобно! Получаеться любой метод или функция может принять любые аргументы + специальный "блок" - аргумент, что всегда является closure. Для такого специального аргумента можно создать специальное ключевое слово yield(), что будет вызывать closure если оно есть или ничего не делать если его нет. В скобках можно передать параметры. Естественно что какие параметры и сколько определяет сам метод. Просто пример как это может реализоваться (выдуманный Java подобный язык):
Как видим блок/closure можно передать и в аргументах, но компилер нам просто предлагает более красивый синтаксис. Также это означает что каждый метод/функция принимают как минимум один аргумент - собственно сам блок. В окружении где есть общий тип и допустимо изменяемое количество аргументов это не проблема. В примере кстати даны пара примеров как расширять синтаксис компилера без препроцессора (который сам по себе является чистым злом). Допустим LinkedList реализует некий интерфейс ArrayAccess, позволяющий к классу или к обьекту обращаться как к массиву, вызывая соответствующие методы. Также Closure может быть системным классом от Function, который релизует интерфейс Callable. Любой обьект реализующий Callable может быть вызван как функция (допустим вызывается метод call, навязываемый интерфейсом). Ну а наследовав от Closure или имплементировав интерфейс (допустим) Yieldable можно вести себя как closure и быть переданным в любую функцию как блок. Возможно покажется немного мозгодробильно, но ИМХО это очень хороший подход к использованию полного синтаксиса компилера любым класом/обьектом. -------------------- Опыт - сын ошибок трудных © А. С. Пушкин Процесс написания своего велосипеда повышает профессиональный уровень программиста. © Opik Оценить мои качества можно тут. |
||||||
|
|||||||
maggot |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 21 Регистрация: 15.1.2007 Репутация: нет Всего: нет |
Ну как, сделали компилятор?
|
|||
|
||||
![]() ![]() ![]() |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Технологии: Разные | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |