Skip to content

Russian translations #659

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 12 commits into from
Mar 29, 2017
Merged

Russian translations #659

merged 12 commits into from
Mar 29, 2017

Conversation

returned-to-life
Copy link
Contributor

Hi everyone!
I have noticed that there is not Russian translations here, so I want to add some. To begin with I want to make a translation of Parallel Collections part. Here is the example of quality, if there is not any troubles with or the with the idea itself, I want to proceed with some more translations.
Thank you in advance!

Copy link
Contributor

@DarkDimius DarkDimius left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

A very high quality translation, I would welcome more Russian translations of such quality.

I've suggested some minor changes below. All those are minor but make reading easier for me.


В попытке помочь в программировании многопоточности в стандартную библиотеку Scala были включены параллельные коллекции, которые скрыли от пользователей низкоуровневые подробности параллелизации, дав им привычную высокоуровневую абстракцию. Надежда была (и остается) на то, что скрытая под уровнем абстракции параллельность позволит на шаг приблизиться к ситуации, когда среднестатистический разработчик будет повседневно использовать в работе надежно исполняемый параллельный код.

Идея проста: коллекции -- хорошо понятная и часто используемая программистами абстракция. И в силу своей структурности, они могут быть эффективно стать параллельными, оставив эту трансформацию прозрачной. Позволив пользователю "подменить" последовательные коллекции на те, что обрабатываются параллельно, решение Scala делает большой шаг вперед к охвату большего количества кода возможностями параллельной обработки.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

" они могут быть эффективно стать" -

быть лишнее, да и в целом звучит странно


## Мотивация

Пока производители процессоров в последние годы дружно переходили от одноядерных к многоядерным архитектурам, научное и производственное сообщества не менее дружно признали, что навыки параллельного программирования по-прежнему трудно привить широким массам.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Спасибо, за оценку и комментарии!
А если оставить ближе к тексту? "признали, что многопоточное программирование по-прежнему трудно сделать популярным"?


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

В попытке помочь в программировании многопоточности в стандартную библиотеку Scala были включены параллельные коллекции, которые скрыли от пользователей низкоуровневые подробности параллелизации, дав им привычную высокоуровневую абстракцию. Надежда была (и остается) на то, что скрытая под уровнем абстракции параллельность позволит на шаг приблизиться к ситуации, когда среднестатистический разработчик будет повседневно использовать в работе надежно исполняемый параллельный код.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

В попытке помочь в программировании многопоточности

чтобы упростить написание многопоточных программ?

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Да.


В попытке помочь в программировании многопоточности в стандартную библиотеку Scala были включены параллельные коллекции, которые скрыли от пользователей низкоуровневые подробности параллелизации, дав им привычную высокоуровневую абстракцию. Надежда была (и остается) на то, что скрытая под уровнем абстракции параллельность позволит на шаг приблизиться к ситуации, когда среднестатистический разработчик будет повседневно использовать в работе надежно исполняемый параллельный код.

Идея проста: коллекции -- хорошо понятная и часто используемая программистами абстракция. И в силу своей структурности, они могут быть эффективно стать параллельными, оставив эту трансформацию прозрачной. Позволив пользователю "подменить" последовательные коллекции на те, что обрабатываются параллельно, решение Scala делает большой шаг вперед к охвату большего количества кода возможностями параллельной обработки.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

И в силу своей структурности, они могут быть эффективно стать параллельными, оставив эту трансформацию прозрачной.

я предложение в переведенной форме не понял, пока не посмотрел оригинал

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

А я начала сомневаться, что поняла оригинал. Со второй попытки: "Упорядоченность коллекций позволяет эффективно и прозрачно (для пользователя) обрабатывать их параллельно."


list.par.map(_ + 42)

Библиотека параллельных коллекций Scala тесно связана с "последовательной" библиотекой коллекций Scala (представлена в версии 2.8), во многом потому, что последняя служила вдохновением к ее дизайну. Он предоставляет параллельную "ответную часть" к ряду важных структур данных из библиотеки (последовательных) коллекций Scala, в том числе:
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

"ответную часть"

аналог? альтернативу?

* `ParRange`
* `ParTrieMap` (`collection.concurrent.TrieMap` впервые в версии 2.10)

В дополнение к общей архитектуре, библиотека параллельных коллекций Scala дополнительно делит со своей последовательной "половиной" _расширяемость_. Другими словами, как и в случае с обычными последовательными коллекциями, пользователи могут внедрять свои собственные типы коллекций, автоматически наследуя все предопределенные (параллельные) операции, доступные для других параллельных коллекций в стандартной библиотеке.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

библиотека параллельных коллекций Scala расширяема также как и последовательные коллекции, представленные в стандартной библиотеке.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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


Больше информации о конвертировании можно найти в разделах [преобразования]({{ site.baseurl }}/overviews/parallel-collections/conversions.html) и [конкретные классы параллельных коллекций]({{ site.baseurl }}/overviews/parallel-collections/concrete-parallel-collections.html) этого руководства.

## Семантика
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Поведение?

Хотя я тут очень неуверен что будет лучше.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

По контексту я склонялась к варианту "Реализация". И тоже была не уверена.

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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

Думаю лучше оставить "семантика".

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Согласна :)

1. **Операции, производящие побочные эффекты, могут нарушать детерминизм**
2. **Неассоциативные операции могут нарушать детерминизм**

### Операции, производящие побочные эффекты.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

производящие

имеющие?

@returned-to-life
Copy link
Contributor Author

Thanks for a high grade and helpful comments! I've made a fix according to suggestions. Now I wonder if I am allowed/supposed to publish other subparts of the parallel collections guide in the same pull request. Is it acceptable to commit them not in order of their original sequence? I suppose that merge will be useful only after completion of all eight of them, so there is no problem in being a bit out-of-order...

@heathermiller
Copy link
Member

Hi @returned-to-life! It's no problem at all for you to complete these translations in any order you like 🙂 And yes, you're right we should wait until all are ready to merge.

Many thanks btw for doing this! We really appreciate it!

@jvican
Copy link
Member

jvican commented Feb 13, 2017

@returned-to-life Are you planning to keep on translating this guide? 😄 I think it could be encouraging if we merge this as-is and then you submit another PR with more high-quality translations. It's up to you, though, so you decide!

@heathermiller
Copy link
Member

heathermiller commented Feb 13, 2017

@jvican, It'd be best not to merge as-is because it would cause there to be lots of broken links for the other parts of this guide. Normally the policy is that we wait for the document to be completed before we merge a new translation.

@returned-to-life
Copy link
Contributor Author

@jvican, I'm definitely about to proceed with translations :) Lately I was a bit offlined, so I couldn't commit results regularly, but I think I'll push a two more subparts till the weekend. To my opinion, it's better to publish whole guide when it complete; it is more comfortable to reader to know that all necessary is ready...

@heathermiller, thanks for support! By the way, I have a few little questions about the meaning of some sentences, will it be ok to ask them there?

@heathermiller
Copy link
Member

By the way, I have a few little questions about the meaning of some sentences, will it be ok to ask them there?

Of course @returned-to-life! Happy to help however I can 😄

@returned-to-life
Copy link
Contributor Author

@heathermiller, please!

In the second sentence of 'Parallel Array', here, we meet an 'underlying array':

This means that the elements can be accessed and updated efficiently by modifying the underlying array.

What does 'underlying array' means here? Some structural element that hidden under abstraction level or something closer to 'hardware', like byte array where data stored? Does it correct to say that main idea was that much easier to make a new parallel array than to modify an old one?
Does it refers to the same conception, that 'underlying array' further in the same subpart, I mean:

The underlying array is only allocated and filled in parallel after the total number of elements becomes known.

... or 'underlying array' here is something different?

@SethTisue
Copy link
Member

What does 'underlying array' means here? Some structural element that hidden under abstraction

yes. the parallel array is a wrapper around an underlying ordinary array.

Does it correct to say that main idea was that much easier to make a new parallel array than to modify an old one?

hmm... not sure what you mean?

Does it refers to the same conception, that 'underlying array' further in the same subpart, I mean:

The underlying array is only allocated and filled in parallel after the total number of elements becomes known.
... or 'underlying array' here is something different?

same

@shaitarov
Copy link

Hello!

If there is still some work for Russian translation, I would be more than happy to help.

Thank you in advance.

@returned-to-life
Copy link
Contributor Author

returned-to-life commented Mar 6, 2017

@SethTisue, thank you very much, you really saved me from a mistake!

hmm... not sure what you mean?

It was said in suggestion that the answer on a previous question is "no". For now it seems much clearer to me, so I can't say myself what exactly I mean :)

@returned-to-life
Copy link
Contributor Author

returned-to-life commented Mar 6, 2017

@shaitarov, hi! Thank you for an offer of help! It seems like there is a lot of work for Russian translations :)
The question is, do you want to help me with the parallel collections or make translation of some other material?
Currently I have second and 6th subparts almost ready (I'm planning to commit them during the coming holidays). 7th and 8th were not touched yet (but they are smaller and I think I won't have any troubles with them, commit planned to March 20th (It seems that I'm pretty slow, doesn't it?)).
If you want to translate some other guide or tutorial, I think it will be better to make a separate pull request, so it will be easier to merge.

@shaitarov
Copy link

shaitarov commented Mar 6, 2017

@returned-to-life, thank you very much for prompt response! If you need help with parallel collections part, I can help you to finish it. However, if you are fine with your part, I can start working on other parts. I just asked to make sure that our work will not overlap.

P.S. Also can I contact you in any other ways like skype or slack?

@returned-to-life
Copy link
Contributor Author

@shaitarov, I'm fine with my part, thanks! It seems I'm on a finish curve now :) You definitely can contact me via skype; but the truth is, I more frequently online in github.com than in skype.

P.S. Just in case: as_markina.

@returned-to-life
Copy link
Contributor Author

returned-to-life commented Mar 21, 2017

It seems like ready! Thanks to all for the support, it was really encouraging!

@returned-to-life
Copy link
Contributor Author

@heathermiller, @jvican, for now I suppose that guide translation is ready to merge. What is next? Should I ask someone Russian for review? (By the way, I've noticed that my pull request was excluded from compilation, is it bad?)

@jvican
Copy link
Member

jvican commented Mar 22, 2017

@returned-to-life Oh, it's actually pretty weird that CI is not running here. I'll look into it!

Next step is to have someone else review the bits you added. Can you have another look @DarkDimius?

Thank you for this work @returned-to-life! 😄

@jvican jvican closed this Mar 22, 2017
@jvican jvican reopened this Mar 22, 2017
@jvican
Copy link
Member

jvican commented Mar 22, 2017

Oh, I've just realised why CI is not running. We changed CI to Drone and you haven't rebased over master, so Drone is not finding the configuration file in this branch. Can you do so? Drone will pick it up and run.

@returned-to-life
Copy link
Contributor Author

@jvican, thanks!
I thought I could, but not quite sure now...

@jvican
Copy link
Member

jvican commented Mar 22, 2017

Interesting, it seems there's an encoding problem: https://platform-ci.scala-lang.org/scala/scala.github.com/144.

@returned-to-life
Copy link
Contributor Author

Quite possible. I made sure that 1-6 were in UTF-8, but can't say that for sure for 7 and 8, that is, "performance". I'm fixing...

@returned-to-life
Copy link
Contributor Author

Now this doesn't looks like a proper rebase anyway... Doesn't it better to close this one and create another pull request?...

@jvican
Copy link
Member

jvican commented Mar 22, 2017

Sure, if you wish so! I think it will ease review. Though you don't need to close the PR, you can git push --force.

To fix this, you can undo the git merge by resetting hard before 61e4ed5 and then cherry-picking every of your commits over the latest master. Make sure you do a backup before that 😉.

@returned-to-life
Copy link
Contributor Author

@jvican, thank you very much! (Yesterday I've stumbled over that --force, naturally)
@DarkDimius, could you please review it?

Copy link
Contributor

@DarkDimius DarkDimius left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I had a pass through the text. It looks good.
Most suggestions are changing literal translations to Russian algorithms terminology.

Aside from this I question if "overviews/parallel-collections/performance.md" should be translated:

  • it relies on classes that has long since been deprecated in standard library;
  • it is a very advanced topic and people who want to do it will have to read English sources anyway.

num: 5
---

Так же, как и обычная библиотека коллекций Scala, библиотека параллельных коллекций содержит большое количество операций, для которых, в свою очередь, существует множество различных реализаций. И так же, как последовательная, параллельная библиотека избегает повторений кода путем реализации большинства операций посредством собственных "шаблонов", которые достаточно объявить один раз, а потом гибко наследовать в различных реализациях параллельных коллекций.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

я убрал бы "Так же"

Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

+ "а потом гибко наследовать" - меня тут коробит. Я бы убрал "гибко".

Copy link
Contributor Author

@returned-to-life returned-to-life Mar 23, 2017

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

(here and further such a comment means: entirely agree, thank you, correction scheduled for following commit)


Так же, как и обычная библиотека коллекций Scala, библиотека параллельных коллекций содержит большое количество операций, для которых, в свою очередь, существует множество различных реализаций. И так же, как последовательная, параллельная библиотека избегает повторений кода путем реализации большинства операций посредством собственных "шаблонов", которые достаточно объявить один раз, а потом гибко наследовать в различных реализациях параллельных коллекций.

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

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Я бы изменил время в предложении чтобы убрать "неуверенность".
может стать -> станет
становится -> убрал
могут просто унаследовать -> унаследуют

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.


## Ключевые абстракции

Упомянутые выше "шаблонные" трейты реализуют большинство параллельных операций в терминах двух ключевых абстракций -- разделителей (`Splitter`) и компоновщиков (`Combiner`).
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

компоновщиков -> я не знаю есть ли для этого существующий термин.
При отсуствии терминов я бы предпочел не переводить.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

На самом деле я насчет этого долго сомневалась. Пришла к тому, что раз combiner и splitter - термины из контекста Scala, то где, если не здесь, подбирать русские аналоги? Насчет полезности последних можно, конечно спорить, но мне субъективно приятнее, когда они есть. (Например, мне неудобно читать тексты на русском про future. Устоявшегося перевода я не нашла, хотя понятие уже есть, и не в одном языке программирования (мне нравится словечко "фьючерс", но от него ощутимо веет финансами)).

Поэтому для меня вопрос стоял в форме "как именно лучше перевести", а не "переводить или не переводить". Возможно, я не права.


### Разделители

Задача разделителя `Splitter`, как и предполагает имя, заключается в том, чтобы неочевидным образом разбить параллельную коллекцию на разделы. А основная идея-- в том, чтобы разбивать коллекцию на более мелкие части, пока их размер не станет подходящим для последовательной обработки.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

неочевидным образом -> оригинал имел ввиду "нетривиальные" == "непустые"

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

упс... да, действительно. спасибо!

def split: Seq[Splitter[T]]
}

Что интересно, разделители `Splitter` реализованы через итераторы-- `Iterator`, а это подразумевает, что помимо разделения, они позволяют фреймворку перебирать элементы параллельной коллекции (то есть, наследуют стандартные методы трейта `Iterator`, такие, как `next` и `hasNext`.) Уникальность этого "разделяющего итератора" в том, что его метод `split` разбивает текущий объект `this` (мы помним, что `Splitter`, это подтип `Iterator`а) на другие разделители `Splitter`, каждый из которых перебирает свой, **отделенный** набор элементов когда-то целой параллельной коллекции. И так же, как любой нормальный `Iterator`, `Splitter` становится недействительным после того, как вызван его метод `split`.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

фреймворку -> я бы убрал. позволяют всем, а не только фреймворку.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.


def dup = new ParStringSplitter(s, i, ntl)

И наконец, методы `split` и `psplit`, которые используются для создания разделителей, перебирающих подмножества элементов текущего разделителя. Для метода `split` действует соглашение, что он возвращает последовательность разделителей, перебирающих непересекающиеся подмножества элементов текущего разделителя, ни одно из которых не является пустым. Если текущий разделитель содержит один или менее элементов, `split` возвращает саму последовательность этого разделителя. Метод `psplit` должен возвращать последовательность разделителей, перебирающих точно такое количество элементов, которое задано значениями размеров, указанных параметром `sizes`. Если параметр `sizes` требует отделить меньше элементов, чем содержит текущий разделитель, то дополнительный разделитель со всеми остальными элементами размещается в конце последовательности. Если в параметре `sizes` указано больше элементов, чем содержится в текущем разделителе, для каждого размера, на который не хватило элементов, будет добавлен пустой разделитель. Наконец, вызов `split` или `psplit` делает текущий разделитель недействительным.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

}


## Как мне реализовать собственный компоновщик? В общих чертах?
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

мне -> я бы убрал.
В общих чертах? -> тоже

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.


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

1. Конкатенация и объединение. Некоторые структуры данных позволяют реализовать эти операции эффективно (обычно с логарифмической сложностью), и если требуемая коллекция представлена такой структурой данных, ее компоновщик может быть самой такой коллекцией. Особенно хорошо этот подход работает для пальчиковых деревьев (finger trees), веревочных деревьев (ropes) и различных видов куч.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

подвешенных деревьев (finger trees)
ropes -> я в литературе не встречал понятие "веревочные деревья". По моему опыту используется слово "веревка".

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.


Кроме этого, результат может включать в себя потраченное на стороне JVM время на осуществление операций автоматического управления памятью. Время от времени выполнение программы прерывается и вызывается сборщик мусора. Если исследуемая программа размещает хоть какие-нибудь данные в куче (а большинство программ JVM размещают), значит сборщик мусора должен запуститься, возможно, исказив при этом результаты измерений. Можно нивелировать влияние сборщика мусора на результат, запустив измеряемую программу множество раз, и тем самым спровоцировав большое количество циклов сборки мусора.

Одной из распространенных причин ухудшения производительности является оборачивание и разворачивание (boxing и unboxing), неявно происходящее в случаях, когда примитивный тип передается аргументом в обобщенный (generic) метод. Чтобы примитивные типы можно было передать в метод с параметром обобщенного типа, они во время выполнения преобразуются в представляющие их объекты. Этот процесс замедляет выполнение, а кроме того порождает необходимость в дополнительном выделении памяти и, соответственно, создает дополнительный мусор в куче.
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

оборачивание и разворачивание -> упаковка и распаковка примитивов.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.


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

В стандартной библиотеке Scala предопределен трейт `scala.testing.Benchmark`, спроектированный с учетом приведенных выше соображений. Ниже приведен пример тестирования производительности операции `map` многопоточного префиксного дерева:
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

scala.testing.Benchmark is deprecated. Should this part be translated at all?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

If it's already translated, we can leave it and think about removing this section in all the tutorial soon. /cc @SethTisue

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

logged as #752

@returned-to-life
Copy link
Contributor Author

@DarkDimius, thank you very much, comments were extremely helpful!

I need to think about some of them, however...

@returned-to-life
Copy link
Contributor Author

@DarkDimius, thank you once again! Now everything is fine, to my opinion. (Sorry for the bunch of letters (if they were sent) I've just understood, what that "show outdated" thing was).

@SethTisue
Copy link
Member

@DarkDimius feel free to hit "merge" on this if you think it's ready now.

@DarkDimius
Copy link
Contributor

LGTM. Thanks for your contribution, @returned-to-life!

@DarkDimius DarkDimius merged commit 1277a87 into scala:master Mar 29, 2017
@SethTisue
Copy link
Member

Thanks for your contribution, @returned-to-life!

seconded! I don't know Russian, but I can see what a substantial contribution this is. greatly appreciated.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

6 participants