производительность языков программирования

Вопросы написания собственного программного кода (на любых языках)

Модератор: Olej

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: производительность языков программирования

Непрочитанное сообщение Olej » 30 мар 2015, 19:47

Olej писал(а): Ещё могу показать пару сравнений ... широко известные алгоритмы:

1. "Ханойская башня"
2. Решето Эратосфена для отбора простых чисел: // http://ru.wikipedia.org/wiki/%D0%E5%F8% ... 4%E5%ED%E0

на C:

Код: Выделить всё

#include <stdio.h>
#include <stdlib.h>

// решето Эратосфена 
// http://ru.wikipedia.org/wiki/%D0%E5%F8%E5%F2%EE_%DD%F0%E0%F2%EE%F1%F4%E5%ED%E0

typedef long long data_t;

void eratos( char *arr, ulong size ) {
   ulong i, j;
   for( i = 2; i < size; i++ )              // цикл по всему массиву от первого простого числа "2"
      if( 1 == arr[ i ] ) 
         for( j = i + i; j < size; j += i ) // вычеркивание всех чисел кратных i 
           arr[ j ] = 0;
}

int main( int argc, char **argv ) {
   long n;
   char debug = 0;
   if( argc != 2 )
      printf( "usage: %s [-]<number>\n", argv[ 0 ] ), exit( 1 );
   n = atol( argv[ 1 ] );                   // максимальное число
   if( n < 0 ) n = -n, debug = 1;
   ulong k, j;
   char *a = calloc( n + 1, sizeof( char ) );
   a[ 0 ] = a[ 1 ] = 0;                     // вычёркиваем "0" и "1"
   for( k = 2; k < n; k++ ) a[ k ] = 1;     // остальные размечаем как простые
   eratos( a, n );
   for( k = 0, j = 0; k < n; k++ )
      j += ( a[ k ] != 0 ? 1 : 0 );
   printf( "простых чисел %lu\n", j );
   if( debug ) {
#define INLINE 10
      for( k = 0, j = 0; k < n; k++ )
         if( 1 == a[ k ] ) {
            j++;
            printf( "%lu%s", k, ( 0 == j % INLINE ? "\n" : "\t" ) );
         }
      if( j % INLINE != 0 ) printf( "\n" );
   } 
   free( a );
   return 0;
}
на Go:

Код: Выделить всё

package main
import( "os"; "strconv" )

func main() {
   type data_t int64
   var срез []bool;
   debug := false
   eratos := func () {
      count:= func () data_t {
         var j data_t 
         for i := range срез { if  срез[ i ] { j++ } }
	     return j
      } 
      for i := range срез {
         if срез[ i ] {
            for j := i + i; j < len( срез ); j += i {
               срез[ j ] = false;  // вычеркивание всех чисел кратных i 
            }
         }
      }
      print( "простых чисел ", count(), "\n" );      
   }
   show := func ( s []bool ) {     // диагностика среза
      const inlin = 10
      var j data_t 
      for i := range s { 
         if s[ i ] {
            j++
            print( i, "\t" ) 
            if 0 == ( j % inlin ) { print( "\n" ) }
         }
      }
      if( j % inlin != 0 ) { print( "\n" ) }
   }
   if len( os.Args ) != 2 {
      print( "usage: ", os.Args[ 0 ], " [-]<number>\n" )
      return
   }
   n, _ := strconv.Atoi( os.Args[ 1 ] )
   var длина data_t = data_t( n );
   if длина < 0 { длина, debug = -длина, true }
   срез = make( []bool, длина )
   for i := range срез { if i > 1 { срез[ i ] = true } }
   eratos()
   if debug { show( срез ) }
}

Код: Выделить всё

[Olej@modules erastof]$ time ./erastof_c 50000000
простых чисел 3001134

real    0m1.927s
user    0m1.897s
sys     0m0.018s

[Olej@modules erastof]$ time ./erastof_cl 50000000
простых чисел 3001134

real    0m1.966s
user    0m1.924s
sys     0m0.022s

[Olej@modules erastof]$ time ./erastof_gol 50000000
простых чисел 3001134

real    0m1.611s
user    0m1.585s
sys     0m0.025s

[Olej@modules erastof]$ time ./erastof_go 50000000
простых чисел 3001134

real    0m2.227s
user    0m2.185s
sys     0m0.023s
Это вообще практически одни и те же цифры.
Вложения
erastof.tgz
(2.19 КБ) 409 скачиваний

Аватара пользователя
Lepton
Писатель
Сообщения: 73
Зарегистрирован: 18 окт 2011, 20:26
Контактная информация:

Re: производительность языков программирования

Непрочитанное сообщение Lepton » 03 май 2016, 12:48

Swift — язык программирования от Apple.
В 2015г. Apple анонсировала Swift как открытый язык программирования (с открытым исходным кодом) и теперь Swift доступен на Linux.
http://www.apple.com/ru/swift/
Бинарные версии представлены для Ubuntu 14.04 и Ubuntu 15.10:
https://swift.org/download/#releases
(там же описана и установка)
[fibo.swift]

Код: Выделить всё

func fib(n: Int) -> (Int) {
    if n < 2 {
        return 1
    } else {
        return fib(n - 1) + fib(n - 2)
    }
}

if Process.arguments.count < 2 {  
    print("Ups!")
}
else {  
    let arg = Process.arguments[1]
    var argstr: Int? = Int(arg)
    if argstr != nil {
       let argint: Int! = Int(arg)
       print(fib(argint))
    }
    else {
       print("Ups!")
    }
}

Код: Выделить всё

$ swift --version
Swift version 2.2 (swift-2.2-RELEASE)
Target: x86_64-unknown-linux-gnu

Код: Выделить всё

$ swiftc fibo.swift -o fibo_sw

Код: Выделить всё

$ time nice -9 ./fibo_sw 30

1346269

real  0m0.066s
user  0m0.054s
sys   0m0.012s

$ time nice -9 ./fibo_sw 30

1346269

real  0m0.055s
user  0m0.043s
sys   0m0.012s

$ time nice -9 ./fibo_sw 30

1346269

real  0m0.067s
user  0m0.054s
sys   0m0.012s
Исходник и сам скомпилированный (64-bit) файл вложен
Вложения
fiboSwift.tar
(17 КБ) 256 скачиваний

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: производительность языков программирования

Непрочитанное сообщение Olej » 03 май 2016, 13:05

Lepton писал(а):Исходник и сам скомпилированный (64-bit) файл вложен
Хорошо бы для сравнения дать рядом выполнение того же fibo на Swift и на C, классическом GCC с хорошим уровнем оптимизации (-O3).

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: производительность языков программирования

Непрочитанное сообщение Olej » 03 май 2016, 13:12

Lepton писал(а):Swift — язык программирования от Apple.
В 2015г. Apple анонсировала Swift как открытый язык программирования (с открытым исходным кодом) и теперь Swift доступен на Linux.
http://www.apple.com/ru/swift/
Бинарные версии представлены для Ubuntu 14.04 и Ubuntu 15.10:
https://swift.org/download/#releases
(там же описана и установка)
Интересно...

Вы бы от себя про Swift добавили новой темкой в Инструменты программирования?
... там у нас целый зверинец по языкам программирования! :lol:
(могут быть достаточно интересные дополнения и источники информации по Swift)

Аватара пользователя
Lepton
Писатель
Сообщения: 73
Зарегистрирован: 18 окт 2011, 20:26
Контактная информация:

Re: производительность языков программирования

Непрочитанное сообщение Lepton » 03 май 2016, 15:39

Olej писал(а):
Lepton писал(а):Исходник и сам скомпилированный (64-bit) файл вложен
Хорошо бы для сравнения дать рядом выполнение того же fibo на Swift и на C, классическом GCC с хорошим уровнем оптимизации (-O3).

Код: Выделить всё

$ time nice -9 ./fibo_c 30
1346269

real  0m0.023s
user  0m0.016s
sys   0m0.006s
Тогда

Код: Выделить всё

$ swiftc -O fibo.swift -o fibo_sw
$ time nice -9 ./fibo_sw 30
1346269

real  0m0.052s
user  0m0.040s
sys   0m0.011s
Или еще лучше :lol:

Код: Выделить всё

$ swiftc -Ounchecked fibo.swift -o fibo_sw
$ time nice -9 ./fibo_sw 30
1346269

real  0m0.037s
user  0m0.027s
sys   0m0.011s

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: производительность языков программирования

Непрочитанное сообщение Olej » 13 дек 2016, 13:01

Виктория писал(а): Алгоритмы сортировки, может быть? Пузырьковая сортировка и метод Гаусса часто используются в обработке числовых данных, всем известны и вроде не являются уж совсем простыми.
По поводу алгоритмов сортировки ... чтобы не изобретать всё от нуля...
Вот здесь: Heapsort
Heapsort is one of the best general-purpose sort algorithms, a comparison sort and part of the selection sort family. Although somewhat slower in practice on most machines than a good implementation of quicksort, it has the advantages of worst-case O(n log n) runtime and being an in-place algorithm. Heapsort is not a stable sort.
Это описание сортировки кучей. С приложением реализации на нескольких :-o языках (C, C++, Lisp, D, Erlang, Java ... 2 реализации ;-) , Ocaml, Pascal, Python .. 2 реализации, Rexx, Ruby, Seed7).
Но там же показаны такие же реализации для 10 методов сортировки.
Related content:
- Bogosort
- Bubble sort
- Heapsort
- Introsort
- Insertion sort
- Merge sort
- Quicksort
- Selection sort
- Shell sort
- Sort an array

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: производительность языков программирования

Непрочитанное сообщение Olej » 24 дек 2016, 13:21

Lepton писал(а): Разновидность языка Basic с платным компилятором (Linux, Windows, MacOS X, AmigaOS)
Попалось на глаза ... известнейшее открытое письмо классика IT Э.В.Дейкстра в комитет IEEE, в котором он предлагал подвергать уголовной ответственности тех, кто обучает программированию на языке BASIC:
Студентов, ранее изучавших Бейсик, практически невозможно обучить хорошему программированию. Как потенциальные программисты они подверглись необратимой умственной деградации.

Это написано больше 30 лет назад!

Аватара пользователя
Lepton
Писатель
Сообщения: 73
Зарегистрирован: 18 окт 2011, 20:26
Контактная информация:

Re: производительность языков программирования

Непрочитанное сообщение Lepton » 29 дек 2016, 16:04

Olej писал(а):
Lepton писал(а): Разновидность языка Basic с платным компилятором (Linux, Windows, MacOS X, AmigaOS)
Попалось на глаза ... известнейшее открытое письмо классика IT Э.В.Дейкстра в комитет IEEE, в котором он предлагал подвергать уголовной ответственности тех, кто обучает программированию на языке BASIC:
Студентов, ранее изучавших Бейсик, практически невозможно обучить хорошему программированию. Как потенциальные программисты они подверглись необратимой умственной деградации.

Это написано больше 30 лет назад!
Причем тут Purebasic?, где от старого BASIC уже ничего не осталось, или это намек для флуда из цикла "Священных войн"? ;-)
Кстати, у Дейкстра есть и другой афоризм:
Средства не виноваты в том, что их безграмотно используют.

Аватара пользователя
Olej
Писатель
Сообщения: 21338
Зарегистрирован: 24 сен 2011, 14:22
Откуда: Харьков
Контактная информация:

Re: производительность языков программирования

Непрочитанное сообщение Olej » 29 дек 2016, 17:22

Lepton писал(а): Причем тут Purebasic?, где от старого BASIC уже ничего не осталось, или это намек для флуда из цикла "Священных войн"? ;-)
Я уже не помню, что там в Purebasic осталось от старого BASIC.
И никаких священных войн ... просто попалась цитата, которую я потерял, и её нужно где-то сохранить. ;-)

Но это к вопросу, что привычки, усвоенные в плохом инструменте программирования потом ... "не вырубишь и топором".
То же, что и к BASIC, вполне можно, с таким же успехом (или почти) применить и к COBOL, FORTRAN и др.


Ответить

Вернуться в «Программирование»

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и 7 гостей