Re[36]: Facebook и язык D - первый шаг наверх.
От: D. Mon Великобритания http://thedeemon.livejournal.com
Дата: 30.10.13 02:41
Оценка:
Здравствуйте, Erop, Вы писали:

E>Скажем на плюсах будет как-то так: [c]

E>auto i_begin = lazy::untill(lazy::take( xs_begin, 100 ), '\n' );
E> Ы?

Годится. А теперь давай с ветвлением логики завершения в рантайме (аналог твоего вопроса выше), и чтобы "а в итераторах можно обойтись статикой для любого поддипазона последовательности всегда и гарантированно...".
Re[36]: Facebook и язык D - первый шаг наверх.
От: D. Mon Великобритания http://thedeemon.livejournal.com
Дата: 30.10.13 02:46
Оценка:
Здравствуйте, Erop, Вы писали:

E>при чём тут "наша" или "ваша" стандартная библиотека? Речь же о диапазнах и итераторах, а не о стандартной библиотеке?


Ну вот Евгений выше очень радел именно за стандартную библиотеку. Говорил, что это часть языка, и ее проблемы становятся проблемами всего языка. Вон сколько сообщений написал про одну единственную функцию поиска..

E>Кстати, как у Ди с мемоизацией? То есть если я замучу линивый поддиапазон, и потом буду ему save говорить и итерировать сто раз, он сто раз повторит вычисления, или как-то хитрее сделает?


Если просто save, то скорее всего повторит. Ежели там сложные вычисления, то вместо .save пишешь .array и получаешь все мемоизованное.
Re[36]: Facebook и язык D - первый шаг наверх.
От: D. Mon Великобритания http://thedeemon.livejournal.com
Дата: 30.10.13 03:07
Оценка:
Здравствуйте, Erop, Вы писали:

E>Если очень хочется, можешь вообще написать так, что будет просто один в один:

E>Скажем на плюсах будет как-то так: [c]
E>auto i_begin = lazy::untill(lazy::take( xs_begin, 100 ), '\n' );
E>auto i_end = i.end( xz_end );
E>// тут что-то на стандартных алгоритмах на ленивых итераторах
E>auto res = xxx( i_begin, i_end );

Не, погоди. По идее, результаты until и take начало-то одно имеют, а влияют именно на конец итерирования. Стандартный алгоритм будет же итератор с переданным end сравнивать, с чем именно он будет сравнивать и как? Или логика окончания заложена в операцию сравнения для такого итератора? Тогда это уже range, и никакой end ему не нужен по-хорошему..

E>// потом можешь вернуться к исходному итератору, до которого удалось доползти, скажем так:

E>return lazy::base( res );

Если у нас в xxx был filter или map, это не имеет никакого смысла.
Re[30]: Facebook и язык D - первый шаг наверх.
От: alex_public  
Дата: 30.10.13 03:15
Оценка:
Здравствуйте, Evgeny.Panasyuk, Вы писали:

EP>Библиотечный findSplit возвращает три range, два из которых результат takeExactly, а третий оригинального типа.

EP>Допустим тебе в функцию передали BidirectionalRange, внутри ты сделал этот findSplit, и тебе нужно вернуть либо первый range либо последний. Как будешь делать?

Ну да, есть такое. Только ты забыл уточнить пару нюансов:

1. Описанное тобой поведение относится только к не RandomAccess диапазонам, так что удобные встроенные типы (массивы, строки) опять же сюда не попадают. А проблемы есть только у всяких SList, DList и т.п.

2. Указанная проблема является следствием ленивости, но её можно в любой момент устранить сделав .array (например).

EP>А вот на итераторах это элементарно разруливается


На итераторах можно элементарно написать код, который одновременно и ленивый и с ветвлением? )
Re[22]: Facebook и язык D - первый шаг наверх.
От: alex_public  
Дата: 30.10.13 03:27
Оценка:
Здравствуйте, Erop, Вы писали:

E>IMHO, если мы таки за рассчёты-рассчёты, то ничего лучше фортрана либо матлаба (в зависимости от того, что за рассчёты) не придумали. Это я тебе как вычматик говорю...


E>И библиотеки там ЛУЧШИЕ, хотя совсем перегрузками операторов не балуются при этом...


E>Тут IMHO, С++ будет очень сильно оверкилл. И Ди, насколько я понимаю, тоже...


Вообще то в роли числодробилки C++ однозначно лучший язык. Если сравнивать с Фортраном, то он предлагает намного более высокоуровневые абстракции и при этом даже чуть быстрее в умелых руках. Однако как мы видим во многих местах до сих пор используют Фортран — тут есть и тот самый консерватизм (как при переходе с C++ на D в других местах) и небольшая доля прагматизма, если мы говорим об учёных, а не программистах (C++ очень сложный, по сравнению с Фортраном).

Если говорить про D в роли числодробилки, то он предлагает ещё более удобные абстракции, менее сложен в обучение (там не обязательно разбираться во всех фичах, чтобы писать приличный код), но при этом немного медленнее и C++ и Фортрана. Так что тут весьма спорный вопрос о его применимости.
Re[31]: Facebook и язык D - первый шаг наверх.
От: Erop Россия  
Дата: 30.10.13 04:32
Оценка:
Здравствуйте, alex_public, Вы писали:

_>Вообще говоря можно в большинстве случаев, т.к. все эти алгоритмы работы с диапазонами в D параметризуются функциями. И until в том числе. Просто я в этом примере использовал дефолтное значение ("a==b"), поэтому этого нюанса не было видно. Кстати, формально говоря в этом примере можно было и не использовать take вообще, а затащить всю нужную тебе логику в until, передав соответствующую сложную функцию. Но это было бы заметно менее красиво. )))


Ну, во-первых, то же самое можно же сделать и с итераторами.
Во-вторых, ничто не мешает написать тогда и цикл, вообще-то...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[23]: Facebook и язык D - первый шаг к правде ;).
От: Erop Россия  
Дата: 30.10.13 04:35
Оценка:
Здравствуйте, alex_public, Вы писали:

E>>Ну, в целом это не тока в языках так. Вещи, идущие от практических нужд, обычно намного гармоничнее, чем идущие от идей о "правльном дизайне", например


_>Нет, оно не так устроено. Хорошо взлетают новые языки, ориентированные на какую-то новую нишу. И взлёт происходит в основном за счёт развития самой ниши (при этом в неё приходят люди, которые по любому будут обучаться работать по другому), а не за счёт перераспределения доли между языками.


Так это же тоже самое. Типа если есть ниша, где из практических соображений нужен новый язык, то на ней он взлетает. А так, из теоретических соображений и ниши всё время плодятся и языки, но не выходит всё каменный цветок жеж...

Если тебе удобнее говорить на языке "ниш", то можно попробовать обсудить что за ниша даст старт Ди?..

_>Достаточно взглянуть на то, что на дико страшном Фортране до сих пор пишут, хотя современный C++ делает его по всем параметрам...


В том-то и фигня, что не делает...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[27]: Facebook и язык D - первый шаг наверх.
От: Erop Россия  
Дата: 30.10.13 04:37
Оценка:
Здравствуйте, jazzer, Вы писали:

J>Сильно зависит. Тот же парсер я с большим удовольствием, скоростью и удобством напишу на Spirit прямо внутри программы (и где он будет естественно с ней взаимодействовать, используя из контекста типы, переменные и прочая), чем буду дергать стороннюю тулзу и размазывать код по ее конфигурационным файлам.


Но, всё-таки, ты при этом синтаксис плюсов-то не поменяешь...
А вот прикинь, что будет какой-то Фреймворк, который меняет синтаксис входного языка компилятора для того, что бы круто-круто описывать GUI декларативно, и будет другой, который мат-формулы позволит шпарить, например. И в какой-то момент тебе понадобится скрестить в одном исходнике оба...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[37]: Facebook и язык D - первый шаг наверх.
От: Erop Россия  
Дата: 30.10.13 04:39
Оценка:
Здравствуйте, D. Mon, Вы писали:

E>>Скажем на плюсах будет как-то так: [c]

E>>auto i_begin = lazy::untill(lazy::take( xs_begin, 100 ), '\n' );
E>> Ы?

DM>Годится. А теперь давай с ветвлением логики завершения в рантайме (аналог твоего вопроса выше), и чтобы "а в итераторах можно обойтись статикой для любого поддипазона последовательности всегда и гарантированно...".


"динамика" в этом подходе -- плата за ленивость же. Если ленивость не нужна, то просто энергично ВЫЧИСЛЯЕШЬ нужные позиции итераторов, как угодно и возвращаешь нужную пару...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[37]: Facebook и язык D - первый шаг наверх.
От: Erop Россия  
Дата: 30.10.13 04:43
Оценка: +2
Здравствуйте, D. Mon, Вы писали:

DM>Ну вот Евгений выше очень радел именно за стандартную библиотеку. Говорил, что это часть языка, и ее проблемы становятся проблемами всего языка. Вон сколько сообщений написал про одну единственную функцию поиска..


Во-первых, ты можешь обсудить это с Евгением.
Во-вторых, IMHO, ди в смысле метапрограммирования круче нынешних плюсов, так что то, что можно на них, можно, наверное, как-то и на Ди. Так что можно отдельно сравнивать подходы, отдельно реализации, и отдельно дизайн языков.

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

DM>Если просто save, то скорее всего повторит. Ежели там сложные вычисления, то вместо .save пишешь .array и получаешь все мемоизованное.


Э-э-э, тогда уж лучше итераторы энергично вычислить, чем копию массива делать, не?
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[28]: Facebook и язык D - первый шаг наверх.
От: jazzer Россия Skype: enerjazzer
Дата: 30.10.13 04:45
Оценка:
Здравствуйте, Erop, Вы писали:

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


J>>Сильно зависит. Тот же парсер я с большим удовольствием, скоростью и удобством напишу на Spirit прямо внутри программы (и где он будет естественно с ней взаимодействовать, используя из контекста типы, переменные и прочая), чем буду дергать стороннюю тулзу и размазывать код по ее конфигурационным файлам.


E>Но, всё-таки, ты при этом синтаксис плюсов-то не поменяешь...


Т.е. против встроенных ДСЛ типа Спирита ты ничего не имеешь и не агитируешь их выносить наружу, правильно?

E>А вот прикинь, что будет какой-то Фреймворк, который меняет синтаксис входного языка компилятора для того, что бы круто-круто описывать GUI декларативно, и будет другой, который мат-формулы позволит шпарить, например. И в какой-то момент тебе понадобится скрестить в одном исходнике оба...


Ну, в принципе, если один дсл глобальный (гуй), то есть задающий общую структуру, внутри которой выражения на хост-языке, а другой локальный на уровне этих самых выражений (формулы) — то я не вижу, почему бы им и не сочетаться...
jazzer (Skype: enerjazzer) Ночная тема для RSDN
Автор: jazzer
Дата: 26.11.09

You will always get what you always got
  If you always do  what you always did
Re[37]: Facebook и язык D - первый шаг наверх.
От: Erop Россия  
Дата: 30.10.13 05:03
Оценка:
Здравствуйте, D. Mon, Вы писали:

DM>Тогда это уже range, и никакой end ему не нужен по-хорошему..


Почему это не нужен? Просто он умеет переходить в состояние, которое считается равным его аналогу полученному из любой позиции базового итератора.
А так все те же поддиапазоны останутся...

DM>Если у нас в xxx был filter или map, это не имеет никакого смысла.


Ну тут надо выбрать -- ленивость или статика...
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[38]: Facebook и язык D - первый шаг наверх.
От: D. Mon Великобритания http://thedeemon.livejournal.com
Дата: 30.10.13 05:07
Оценка:
Здравствуйте, Erop, Вы писали:

DM>>Годится. А теперь давай с ветвлением логики завершения в рантайме (аналог твоего вопроса выше), и чтобы "а в итераторах можно обойтись статикой для любого поддипазона последовательности всегда и гарантированно...".


E>"динамика" в этом подходе -- плата за ленивость же. Если ленивость не нужна, то просто энергично ВЫЧИСЛЯЕШЬ нужные позиции итераторов, как угодно и возвращаешь нужную пару...


И получаешь два прохода (при поиске конца и при использовании) вместо одного. Вместо "всегда и гарантировано" получили "в некоторых случаях". Ладно, понятно.
Re[38]: Facebook и язык D - первый шаг наверх.
От: D. Mon Великобритания http://thedeemon.livejournal.com
Дата: 30.10.13 05:11
Оценка:
Здравствуйте, Erop, Вы писали:

DM>>Если просто save, то скорее всего повторит. Ежели там сложные вычисления, то вместо .save пишешь .array и получаешь все мемоизованное.


E>Э-э-э, тогда уж лучше итераторы энергично вычислить, чем копию массива делать, не?


В смысле? Есть у нас, скажем, xs.map!someComputation.filter!someCondition. Как тут итераторы помогают с мемоизацией, где их тут энергично вычислять?
Re[37]: Facebook и язык D - первый шаг наверх.
От: Evgeny.Panasyuk Россия  
Дата: 30.10.13 05:43
Оценка:
Здравствуйте, D. Mon, Вы писали:

E>>при чём тут "наша" или "ваша" стандартная библиотека? Речь же о диапазнах и итераторах, а не о стандартной библиотеке?

DM>Ну вот Евгений выше очень радел именно за стандартную библиотеку. Говорил, что это часть языка, и ее проблемы становятся проблемами всего языка.

То о чём ты говоришь реализуется на итераторах — и until и takeExactly, и даже ленивое ветвление по {/}.
В топике шла речь про принципиальную ограниченность Range — нормальный find для bidirectional нельзя сделать, вообще никак
Re[39]: Facebook и язык D - первый шаг наверх.
От: Erop Россия  
Дата: 30.10.13 08:14
Оценка:
Здравствуйте, D. Mon, Вы писали:

DM>В смысле? Есть у нас, скажем, xs.map!someComputation.filter!someCondition. Как тут итераторы помогают с мемоизацией, где их тут энергично вычислять?


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

В этом смысле и С++ с мемоизацией в рантайме всё плохо, надо как-то обесепечиить самому.
Я Ди не особо глубоко смотрел, так что просто не знаю, вдруг там есть какая-то поддержка мемоизации, в языке или в библиотеке или в сочетани того и другого...
Если всё так же, как и в плюсах, то воможность перейти от ленивого интервала к энергичному ценна, если же есть надежда на то, что, например, оптимизатор, обеспечит мемоизацию, то, это не так критично было бы...

Вот смотри, пусть у нас есть итератор/интервал букв в тексте, и мы хотим превратить его в итератор слов, в каждом из которых есть итератор букв.
В случае с итераторами всё решается прямо, типа мапом получаем итератор границ слов, потом последовательные границы берём, из каждой добываем оригинальный итератор букв и получаем диапазоны, соответствующие словам. Потом, например, можем поанализировать каждое слово так или этак и выделить границы предложений или там именных групп, например, и опять можем слова в группе итерировать, а можем буквы, а можем ещё что-то...

А как это будет на Ди-образных интервалах?..
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[39]: Facebook и язык D - первый шаг наверх.
От: Erop Россия  
Дата: 30.10.13 08:15
Оценка:
Здравствуйте, D. Mon, Вы писали:

DM>И получаешь два прохода (при поиске конца и при использовании) вместо одного. Вместо "всегда и гарантировано" получили "в некоторых случаях". Ладно, понятно.


А что мешает получить нужные позиции в исходном итераторе за один проход ленивого?..
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[29]: Facebook и язык D - первый шаг наверх.
От: Erop Россия  
Дата: 30.10.13 08:23
Оценка:
Здравствуйте, jazzer, Вы писали:

J>Т.е. против встроенных ДСЛ типа Спирита ты ничего не имеешь и не агитируешь их выносить наружу, правильно?

Я против фич и методов, которые дают всего лишь синтаксический сахар, но не гарантируют при этом непротиворечивости себя в большой программе...

E>>А вот прикинь, что будет какой-то Фреймворк, который меняет синтаксис входного языка компилятора для того, что бы круто-круто описывать GUI декларативно, и будет другой, который мат-формулы позволит шпарить, например. И в какой-то момент тебе понадобится скрестить в одном исходнике оба...


J>Ну, в принципе, если один дсл глобальный (гуй), то есть задающий общую структуру, внутри которой выражения на хост-языке, а другой локальный на уровне этих самых выражений (формулы) — то я не вижу, почему бы им и не сочетаться...


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

Скажем подход, что типа мы делаем генераторы кода для DSL'ий, и каждый из генераторов запускаем непротиворечивым образом, например на файлы с другим расширением, или, там, внутри явно вызванных макросов, будет работать, скорее всего.

но, насколько я понял Влада с его концепцией языков 21-го века, он призывает проектировать язык так, что мы можем написать такой хедер или модуль или что-то ещё, что позволит писать часть кода на Си, например, или на паскале.
Потом кто-то напишет библу, которая вносит нам во входной язык Си, а кто-то такую, кто вносит паскаль. В паскале текст в {} -- это комментарий, а в Cи -- блок кода. А что получится в нашем входном языке, когда мы попробуем подключить обе библиотеки? Как там будет рулится, текст в скобках -- это бок или комментарий?
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[23]: Facebook и язык D - первый шаг наверх.
От: Erop Россия  
Дата: 30.10.13 08:27
Оценка: +1
Здравствуйте, alex_public, Вы писали:

_>Вообще то в роли числодробилки C++ однозначно лучший язык. Если сравнивать с Фортраном, то он предлагает намного более высокоуровневые абстракции и при этом даже чуть быстрее в умелых руках. Однако как мы видим во многих местах до сих пор используют Фортран — тут есть и тот самый консерватизм (как при переходе с C++ на D в других местах) и небольшая доля прагматизма, если мы говорим об учёных, а не программистах (C++ очень сложный, по сравнению с Фортраном).



Это главная проблема С++, как числодробилки. Что бы решить сложную вычматематическую задачу нужен не спец в С++, а спец в вычматах. А таким спецм фортран ПОНЯТНЕЕ и УДОБНЕЕ.
В числодробилках хитрые абстракции нужны редко, а вот боевая итерация по каким-то матрицам + возможность компилятора это всё векторизовать на любой платформе более или менее самостоятельно нужна практически всегда.
поэтому-то в руках вычматематика фортран и лучше. Конечно, если ты посадишь кодить числодробилку не математика, а спеца по плюсам там или Ди, он накодит лучше, но не то. Потому что он спец не в том.

_>Если говорить про D в роли числодробилки, то он предлагает ещё более удобные абстракции, менее сложен в обучение (там не обязательно разбираться во всех фичах, чтобы писать приличный код), но при этом немного медленнее и C++ и Фортрана. Так что тут весьма спорный вопрос о его применимости.


IMHO он просто не нужен. Нет никакой выгоды. А накладные расходы больше.
Все эмоциональные формулировки не соотвествуют действительному положению вещей и приведены мной исключительно "ради красного словца". За корректными формулировками и неискажённым изложением идей, следует обращаться к их автором или воспользоваться поиском
Re[30]: Facebook и язык D - первый шаг наверх.
От: jazzer Россия Skype: enerjazzer
Дата: 30.10.13 08:34
Оценка:
Здравствуйте, Erop, Вы писали:

E>но, насколько я понял Влада с его концепцией языков 21-го века, он призывает проектировать язык так, что мы можем написать такой хедер или модуль или что-то ещё, что позволит писать часть кода на Си, например, или на паскале.

E>Потом кто-то напишет библу, которая вносит нам во входной язык Си, а кто-то такую, кто вносит паскаль. В паскале текст в {} -- это комментарий, а в Cи -- блок кода. А что получится в нашем входном языке, когда мы попробуем подключить обе библиотеки? Как там будет рулится, текст в скобках -- это бок или комментарий?

Но ты же где-то будешь явно указывать, что вот сейчас у нас пошел Си, а сейчас — Паскаль, правильно?
Т.е. одна макра будет с синтаксисом c_code[int main(){}], а другая — с синтаксисом paskal_code[procedure Main {comment} begin ... end]
Ну и пусть себе живут рядом в одном коде
jazzer (Skype: enerjazzer) Ночная тема для RSDN
Автор: jazzer
Дата: 26.11.09

You will always get what you always got
  If you always do  what you always did
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.