Автор Тема: Rust атакует.  (Прочитано 30671 раз)

Jordan

  • Sr. Member
  • ****
  • Сообщений: 282
    • Просмотр профиля
Re: Rust атакует.
« Ответ #45 : Апрель 06, 2013, 04:56:21 am »
Но во всех этих новомодных языках есть одна единая беда - там те же проблемы с модульностью, что и в Обероне - эта модульность не для людей.

В Расте ещё и синтаксис отстойный -- все эти фигурные скобочки бесят уже...
такой же уродливо- невзрачный , как и в СИ с плюсами.. но привыкнуть можно... если деньги платить будут.. :) где -то за пару недель.. по субьективным ощущениям...

Я для паскаля использую программу sed, сначала исходник пропускаю через неё, потом компилю. Костыль, конечно.

s/THEN/then begin/g
s/ELSIF/end; else if/g
s/ELSE/end; else begin/g

Для си подобных, сложнее особенно если регистр зафиксирован.

s/IF/if/g
s/THEN/{/g
s/ELSIF/} else if/g
s/ELSE} else {/g

Для си я всё сделал на макросах в отдельном .h файле. Если нужен такой синтаксис просто подключаю к конкретному .c файлу.

Jordan

  • Sr. Member
  • ****
  • Сообщений: 282
    • Просмотр профиля
Re: Rust атакует.
« Ответ #46 : Апрель 06, 2013, 05:00:46 am »
А возможно ли написать компилятор безопасного и совместимого диалекта C++? Оберун с синтаксисом C++. Тогда не нужно создавать новые языки. Типа C-- C minus minus :)

Geniepro

  • Hero Member
  • *****
  • Сообщений: 1955
  • Знайте- истина в том, что повторено трижды подряд!
    • Просмотр профиля
Re: Rust атакует.
« Ответ #47 : Апрель 06, 2013, 03:24:01 pm »
А возможно ли написать компилятор безопасного и совместимого диалекта C++? Оберун с синтаксисом C++. Тогда не нужно создавать новые языки. Типа C-- C minus minus :)
Типа такого уже было, Cyclone, например
to iterate is human, to recurse, divine

Салат «рекурсия»: помидоры, огурцы, салат…

Jordan

  • Sr. Member
  • ****
  • Сообщений: 282
    • Просмотр профиля
Re: Rust атакует.
« Ответ #48 : Апрель 06, 2013, 05:32:36 pm »
Поискал о нём информацию, информации по приминению мало. Есть патчи для gcc на их сайте, всё в исходниках, собранного компилятора для windows нет.

Jordan

  • Sr. Member
  • ****
  • Сообщений: 282
    • Просмотр профиля
Re: Rust атакует.
« Ответ #49 : Апрель 06, 2013, 05:57:44 pm »
Сравнение D и Rust
http://versusit.ru/rust-vs-d

Цитировать
Посмотрим теперь, как будет выглядеть код, выводящий числа от 0 до 10. На Rust это будет так:

fn main() {
   for 100.times {
     io::println("Hello");
   }
}

На D аналогичный код бы выглядел следующим образом:
void main() {
  for (int i = 0; i < 10; i++) {
      writeln("Hello");
 }   
}

   for 100.times {
     io::println("Hello");
   }

Выводит Hello 10 раз, но из написанного это непонятно. Откуда взялось 100 и time?

Geniepro

  • Hero Member
  • *****
  • Сообщений: 1955
  • Знайте- истина в том, что повторено трижды подряд!
    • Просмотр профиля
Re: Rust атакует.
« Ответ #50 : Апрель 06, 2013, 06:08:01 pm »
Поискал о нём информацию, информации по приминению мало. Есть патчи для gcc на их сайте, всё в исходниках, собранного компилятора для windows нет.
Вот ещё проект -- россиянина какого-то: http://home.perm.ru/strannik/
Компилятор, поддерживающий три синтаксиса для одного по сути языка -- сишный, оберонский и паскалевский. Там есть компилятор для винды с примерами в том числе GUI-программ...
to iterate is human, to recurse, divine

Салат «рекурсия»: помидоры, огурцы, салат…

Geniepro

  • Hero Member
  • *****
  • Сообщений: 1955
  • Знайте- истина в том, что повторено трижды подряд!
    • Просмотр профиля
Re: Rust атакует.
« Ответ #51 : Апрель 06, 2013, 06:18:06 pm »
   for 100.times {
     io::println("Hello");
   }

Выводит Hello 10 раз, но из написанного это непонятно. Откуда взялось 100 и time?

Подозреваю, что тут ошибка и должно было быть 10.times.

As a Rubyist, you probably don't know anything about that, so let's talk code first, and get into what exactly all that means later. Here's some code that prints "Hello" 100 times:
Цитировать
fn main() {
  for 100.times {
    io::println("Hello");
  }
}
You may remember this from earlier. This loops 100 times, printing "Hello."
to iterate is human, to recurse, divine

Салат «рекурсия»: помидоры, огурцы, салат…

Jordan

  • Sr. Member
  • ****
  • Сообщений: 282
    • Просмотр профиля
Re: Rust атакует.
« Ответ #52 : Апрель 06, 2013, 06:28:11 pm »
Понятно, укороченный for, меня сбило слово time - время.

Jordan

  • Sr. Member
  • ****
  • Сообщений: 282
    • Просмотр профиля
Re: Rust атакует.
« Ответ #53 : Апрель 06, 2013, 06:38:18 pm »
Раз уж речь зашла о синаксисе хотел спросить, для чего в pascal Вирт использовал операторы
if then begin
end
else begin
end

В следующем языке modula 1 операторы записывались if then else end, почему в паскале сразу не реализовали?

ilovb

  • Hero Member
  • *****
  • Сообщений: 2538
  • just another nazi test
    • Просмотр профиля
    • Oberon systems
Re: Rust атакует.
« Ответ #54 : Апрель 06, 2013, 06:59:23 pm »
В паскале можно написать:

if a < b then print(a);

Наверно казалось, что так проще. А в c/c++ до сих пор так ;)

Geniepro

  • Hero Member
  • *****
  • Сообщений: 1955
  • Знайте- истина в том, что повторено трижды подряд!
    • Просмотр профиля
Re: Rust атакует.
« Ответ #55 : Апрель 06, 2013, 07:39:55 pm »
Понятно, укороченный for, меня сбило слово time - время.
Не понял, где там слово time (время)? Там есть слово times (раз). "100.times" по-видимому означает "100 раз".
Видимо, целые числа являются в Расте объектами и имеют метод (или свойство) times. Документация на их сайте не очень...
to iterate is human, to recurse, divine

Салат «рекурсия»: помидоры, огурцы, салат…

Geniepro

  • Hero Member
  • *****
  • Сообщений: 1955
  • Знайте- истина в том, что повторено трижды подряд!
    • Просмотр профиля
Re: Rust атакует.
« Ответ #56 : Апрель 06, 2013, 07:41:48 pm »
Раз уж речь зашла о синаксисе хотел спросить, для чего в pascal Вирт использовал операторы
if then begin
end
else begin
end

В следующем языке modula 1 операторы записывались if then else end, почему в паскале сразу не реализовали?
Это пошло ещё с алгола -- паскаль ведь был виртовским взглядом на развитие алгола и ответом на алгол-68, который Вирту показался переусложнённым.
to iterate is human, to recurse, divine

Салат «рекурсия»: помидоры, огурцы, салат…

valexey_u

  • Hero Member
  • *****
  • Сообщений: 3013
    • Просмотр профиля
Re: Rust атакует.
« Ответ #57 : Апрель 06, 2013, 08:20:45 pm »
Сравнение D и Rust
http://versusit.ru/rust-vs-d

Цитировать
Посмотрим теперь, как будет выглядеть код, выводящий числа от 0 до 10. На Rust это будет так:

fn main() {
   for 100.times {
     io::println("Hello");
   }
}

На D аналогичный код бы выглядел следующим образом:
void main() {
  for (int i = 0; i < 10; i++) {
      writeln("Hello");
 }   
}
Ни тот ни другой код ЧИСЛА не выводит. Какая-то феерическая чушь написана.

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

В общем, пусть аффтар выпьет йаду.
Y = λf.(λx.f (x x)) (λx.f (x x))

Geniepro

  • Hero Member
  • *****
  • Сообщений: 1955
  • Знайте- истина в том, что повторено трижды подряд!
    • Просмотр профиля
Re: Rust атакует.
« Ответ #58 : Апрель 11, 2013, 12:56:29 pm »
Атака на оптимизацию хвостовой рекурсии растовцам не удалась:

[rust-dev] Tail call optimization
Цитировать
On 10/04/2013 5:43 AM, Artella Coding wrote:
> Hi does rust do tail call optimization? The reason I am asking is that
> the following tail call recursive implementation results in a stack
> overflow. Thanks.

No, and it very likely won't. We have a longstanding bug on this:

https://github.com/mozilla/rust/issues/217

as well as a wiki page and several mailing list threads:

https://github.com/mozilla/rust/wiki/Bikeshed-tailcall
https://mail.mozilla.org/pipermail/rust-dev/2011-August/000689.html
https://mail.mozilla.org/pipermail/rust-dev/2012-January/001280.html
...

The summary of all this is:

   - We all know that tail calls are a virtuous language feature.
     Further elaboration of their virtues is not required. Many of us
     have lisp and ML backgrounds and would quite like them. Their
     absence is heartache and sadness, not arrived-at lightly.

   - Tail calls "play badly" with deterministic destruction. Including
     deterministic drop of ~ boxes. Not to say that they're not
     composable, but the options for composing them are UI-awkward,
     performance-penalizing, semantics-complicating or all of the above.

   - Tail calls also "play badly" with assumptions in C tools, including
     platform ABIs and dynamic linking.

   - Tail calls require a calling convention that is a performance hit
     relative to the C convention.

   - We find most cases of tail _recursion_ convert reasonably well to
     loops, and most cases of non-recursive tail calls encode state
     machines that convert reasonably well to loops wrapped around
     enums. Neither of these are _quite_ as pretty as the
     tail-call-using variants, but they do work and are "as fast"*,
     as well as idiomatic for C and C++ programmers (who are our
     primary audience).

I'm sorry to be saying all this, and it is with a heavy heart, but we
tried and did not find a way to make the tradeoffs associated with them
sum up to an argument for inclusion in rust.

-Graydon

* speed-wise, a switch-in-a-loop state machine is indirect dispatch so
will likely run slower than a state machine encoded by tail calls from
state to state; on the other hand if the way to get this performance
"back" is to turn on tail calls everywhere, we'd be trading one isolated
suboptimal-perf case for a cross-all-programs suboptimal-perf tax. We
don't find this trade acceptable.

Ну что за ниосиляторы такие...

via http://thesz.livejournal.com/1368099.html
to iterate is human, to recurse, divine

Салат «рекурсия»: помидоры, огурцы, салат…

DddIzer

  • Гость
Re: Rust атакует.
« Ответ #59 : Апрель 11, 2013, 03:45:05 pm »
   for 100.times {
     io::println("Hello");
   }

Выводит Hello 10 раз, но из написанного это непонятно. Откуда взялось 100 и time?

Подозреваю, что тут ошибка и должно было быть 10.times.

As a Rubyist, you probably don't know anything about that, so let's talk code first, and get into what exactly all that means later. Here's some code that prints "Hello" 100 times:
Цитировать
fn main() {
  for 100.times {
    io::println("Hello");
  }
}
You may remember this from earlier. This loops 100  times, printing "Hello."
Нет здесь никакой ошибки... ибо четко сказано "Here's some code that prints "Hello" 100 times:"... time - это время, а times - "раз" - так и переводится.. , для англоговорящего звучит естественно. Тут обращать на другое нужно внимание.. - здесь как "вРуби" значение (число 100) является сложным обьектом...  , что для меня , например, достаточно непривычно...