сравнение языков программирования

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

Модератор: Olej

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

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

Непрочитанное сообщение Olej » 04 фев 2014, 19:53

Olej писал(а):- C
- C++
- Java
- Python
- JavaScript
- PHP
- Lua
- bash
Ну вот ещё сюда добавим ;-) - Perl.
В самом Perl нет комплексной математики (как типа данных), но в их репозитарии CPAN накопились модули на все случаи жизни, в частности Math::Complex.
Так что здесь я ничего не изобретал, а взял готовое.

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

#!/usr/bin/perl
use strict 'subs';
use Math::Complex;

sub perimeter {
   my @par = @_;
   $suma = 0.0;
   for( $i = 0; $i <= $#par; $i++ ) {
      if( $i == 0 ) { $j = $#par; } 
      else { $j = $i - 1; }
      $suma += abs( $par[ $i ] - $par[ $j ] );
   }
   return $suma;
}

sub square {
   my @par = @_;
   $suma = 0.0;
   foreach $i ( 0 .. $#par - 2 ) {
      $s1 = $par[ $i + 1 ] - $par[ 0 ];
      $s2 = $par[ $i + 2 ] - $par[ 0 ];
      $suma += abs( $s1 ) * abs( $s2 ) *
               abs( sin( arg( $s2 ) - arg( $s1 ) ) ) / 2.;
   }
   return $suma;
}

while( "true" ) {
   print "координаты вершин в формате: X Y (^D конец ввода)\n";
   $i = 0;
   @polygon = ();
   while( "true" ) {
      print( "вершина № ", $i + 1, " : " );
      unless( defined( $line = <STDIN> ) ) {   # ^D - конец ввода
         print "\r";
         last;
      }
      chop( $line );
      @parm = split( /\s+/, $line );
      if( $#parm != 1 or                       # только 2 координаты
          $parm[ 0 ] !~ /\d+\.{0,1}\d*$/ or    # X - нечисловой
          $parm[ 1 ] !~ /\d+\.{0,1}\d*$/ ) {   # Y - нечисловой
         print "ошибка ввода!\n";
         next;
      } 
      $c = cplx( $parm[ 0 ], $parm[ 1 ] );
      push( @polygon, $c );
      $i++;
   }
   $msg = "вершин " . ( $#polygon + 1 ) . " : ";
   foreach $c ( @polygon ) {
      $re = Re( $c );
      $im = Im( $c ); 
      $msg .= "[$re,$im] "; 
   }
   print "$msg\n";
   printf( "периметр = %.2f\n", perimeter( @polygon ) );
   printf( "площадь = %.2f\n", square( @polygon ) );
   print "---------------------------------\n";
}
И вот как оно выглядит:

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

olej@notebook:~/2014_WORK/OWN.BOOKS/ManyLan/ex.draft$ perl triangle.pm
координаты вершин в формате: X Y (^D конец ввода)
вершина № 1 : 1 1
вершина № 2 : 2 1
вершина № 3 : 1 2
вершин 3 : [1,1] [2,1] [1,2] 
периметр = 3.41
площадь = 0.50
---------------------------------
координаты вершин в формате: X Y (^D конец ввода)
вершина № 1 : 1 1
вершина № 2 : 1 2
вершина № 3 : 2 2
вершина № 4 : 2 1
вершин 4 : [1,1] [1,2] [2,2] [2,1] 
периметр = 4.00
площадь = 1.00
---------------------------------
координаты вершин в формате: X Y (^D конец ввода)
вершина № 1 : ^C
Вложения
triangle.pm
(1.67 КБ) 426 скачиваний

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

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

Непрочитанное сообщение Olej » 04 фев 2014, 23:33

Olej писал(а):
Olej писал(а):- C
- C++
- Java
- Python
- JavaScript
- PHP
- Lua
- bash
- Perl.
Итого, мы имеем удовольствие рассмотреть идентичный код (почти), но на 9-ми различных языках программирования.

P.S. В принципе, по мотивам этого расследования ;-) мне уже заказали сегодня обзор из IBM DeveloperWorks.
Осталось сесть и написать. ;-)

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

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

Непрочитанное сообщение Olej » 05 фев 2014, 16:07

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

У меня будет просьба-пожелание к тем, кто заинтересовался этими примерами: прогоните эти примеры в Windows + сообщите сюда ваши ... ощущения :lol: (результаты, естественно).
Мне для этого нужно Windows искать ... да и времени на это не особенно есть. А вопрос - любопытный. Особенно относительно языков, рассматриваемых после C/C++: Java и далее...

Предупреждение:
- файлы прилагаемые нельзя непосредственно выполнять в Windows ...
- т.е. код показанный - можно, а вот сами файлы - не можно :lol:
- потому что в них русскоязычные сообщения записаны в UNICODE кодировке UTF-8 (текстовый редактор Linux)
- их нужно открыть в текстовом редакторе в Windows, и перенабрать там тексты сообщений в требуемой кодировке...
- для консоли Windows это будет CP-866, а для оконных исполняющих систем (например, IDLE для Python) - CP-1251

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

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

Непрочитанное сообщение Olej » 06 фев 2014, 01:12

Olej писал(а): - C
- C++
- Java
- Python
- JavaScript
- PHP
- Lua
- bash
- Perl
Разгребаясь с этими примерами на 9-ти ЯП, я только сейчас, в итоге, обратил внимание на одну очень важную деталь:
- рассмотрены 9 языков широко применяющиеся на сегодня в реальных проектах...
- в рассмотрение не включены другие интересные ЯП, но которые не применяются широко на практике, представляют, скорее, академический интерес: как Pascal, Modula 2/3, Oberon, Haskell и др. (что ещё? предлагайте!)
- из всех охваченных рассмотрением языков только два языка (а точнее правильнее сказать даже один) — C и C++ используют технику «нативной» компиляции в машинный код используемой платформы;
- все остальные 7, в той или иной мере и технике (по разному!), используют виртуальную исполняющую машину (среду выполнения);
- это, очевидно, становится тенденцией последнего десятилетия.

Обратим внимание на то, что все более ранние языковые проекты (Algol, FORTRAN, COBOL, Pascal, PL/1, BCPL - прародитль C и все, все, все) предполагали компиляцию в исполнимый машинный код.

Что ещё осталось в обиходе из компилирующих языков? :-o

Интересно, да? ;-)

P.S. Особенно если учесть ещё и то, что в ВУЗах молодых специалистов подготавливают (... курсовые, практики, ...) именно на компилирующих языках.

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

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

Непрочитанное сообщение Lepton » 06 фев 2014, 14:43

Olej писал(а):
Olej писал(а): Если в bash нет вещественной (и комплексной, соответственно) математики - это вовсе не означает, что на bash нельзя написать такую задачу! :lol:
Сам скрипт на bash может получить данные, сформировать задачу ... а на сами вычисления выбросить эти данные внешнему приложению, которое сделает все расчёты и вернёт результат!
Сказано - сделано...
Писать такие внешние приложения на C вряд ли разумно: их нужно компилировать, а здесь вся "фишка" в скриптовости ... напишу я эти 2 внешних приложения (рассчитать: а). периметр и б). площадь) на ... Python, тем более, что код уже есть - его нужно только оформить.
В итоге:

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

olej@notebook:~/2014_WORK/OWN.BOOKS/ManyLan/ex.9/bash$ ls
perimeter.py  polygon.py  square.py  triangle.sh

- triangle.sh - главное приложение
- когда ему нужно сосчитать, оно вызывает perimeter.py и square.py, передавая им описание координат многоугольника виде параметра командной строки...
- polygon.py - это просто библиотечный модуль Python, чтоб не писать в perimeter.py и square.py 2 раза: он распаковывает полученную командную строку + формирует из неё кортеж ([]) комплексных значений для perimeter.py и square.py (чтоб мне их не переписывать ;-) )
Вот и всё кино...
Как-то так:

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

triangle.sh
|
+---> perimeter.py ---+ 
|                     |
|                polygon.py
|                     |
+---> square.py ------+
Вот сам файл triangle.sh (остальные особого интереса не представляют - это уже было):

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

#!/bin/bash

while [ TRUE ]
declare -a polygon_x
declare -a polygon_y
do
   i=1
   echo "координаты вершин в формате: X Y (^D конец ввода)"
   while [ TRUE ]
   do
      echo -n "вершина № $i : "
      declare -a parm
      read -a parm
      element_count=${#parm[@]}       # число введенных значений
      if [[ $element_count -eq 0 ]]   # ^D - конец ввода
      then
         echo -en "\r\a"
         break
      elif [[ $element_count -ne 2 ]] # неправильное число элементов ввода
      then
         echo "ошибка ввода!"
         continue
      fi
      polygon_x[ $i ]=${parm[0]} 
      polygon_y[ $i ]=${parm[1]}
      i=`expr $i + 1`   
   done
   i=${#polygon_x[@]} 
   echo -n "вершин $i : "
   polystr=""   
   for (( j=1; j <= i ; j++ ))       # двойные круглые скобки и "j" без "$".
   do
      polystr="$polystr [${polygon_x[j]},${polygon_y[j]}] "
   done                     
   echo $polystr
   cmd="./perimeter.py \" $polystr \""
   ret=`eval $cmd`
   echo "периметр = $ret"
   cmd="./square.py \" $polystr \""
   ret=`eval $cmd`
   echo "площадь = $ret"
   echo ---------------------------------
done
Вот его работа:

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

olej@notebook:~/2014_WORK/OWN.BOOKS/ManyLan/ex.draft/bash$ ./triangle.sh
координаты вершин в формате: X Y (^D конец ввода)
вершина № 1 : 1 1
вершина № 2 : 2 1
вершина № 3 : 1 2
вершин 3 : [1,1] [2,1] [1,2]
периметр = 3.41
площадь = 0.50
---------------------------------
координаты вершин в формате: X Y (^D конец ввода)
вершина № 1 : 1 1
вершина № 2 : 1 2
вершина № 3 : 2
ошибка ввода!
вершина № 3 : 2 2
вершина № 4 : 2 1
вершин 4 : [1,1] [1,2] [2,2] [2,1]
периметр = 4.00
площадь = 1.00
---------------------------------
координаты вершин в формате: X Y (^D конец ввода)
вершина № 1 : ^C
P.S. Для выполнения этого приложения нужно всего лишь сгрузить 4 файла (по несколько сот байт) в один каталог - и можно запускать.
Можно обойтись без лишних скриптов, использовав bc (калькулятор командной строки)
Доработанный скрипт ( для треугольников):

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

#!/bin/bash

while [ TRUE ]
declare -a polygon_x
declare -a polygon_y
do
   i=1
   echo "координаты вершин в формате: X Y (^D конец ввода)"
#   while [ TRUE ]
   until [ "$i" = "4" ]
   do
      echo -n "вершина № $i : "
      declare -a parm
      read -a parm
      element_count=${#parm[@]}       # число введенных значений
      if [[ $element_count -eq 0 ]]   # ^D - конец ввода
      then
         echo -en "\r\a"
         break
      elif [[ $element_count -ne 2 ]] # неправильное число элементов ввода
      then
         echo "ошибка ввода!"
         continue
      fi
      polygon_x[ $i ]=${parm[0]} 
      polygon_y[ $i ]=${parm[1]}
      i=`expr $i + 1`   
   done
   i=${#polygon_x[@]} 
   echo -n "вершин $i : "
   polystr=""   
   for (( j=1; j <= i ; j++ ))       # двойные круглые скобки и "j" без "$".
   do
      polystr="$polystr [${polygon_x[j]},${polygon_y[j]}] "
   done  
   echo $polystr
# d1, d2, d3 - длина стороны треугольника; scale - уст. точности вычисления (т.к. bc не округляет числа, а откидывает лишнее)
   d1=$(echo "scale=6; sqrt((${polygon_x[1]}-${polygon_x[2]})^2+(${polygon_y[1]}-${polygon_y[2]})^2)" | bc)
   d2=$(echo "scale=6; sqrt((${polygon_x[1]}-${polygon_x[3]})^2+(${polygon_y[1]}-${polygon_y[3]})^2)" | bc)
   d3=$(echo "scale=6; sqrt((${polygon_x[2]}-${polygon_x[3]})^2+(${polygon_y[2]}-${polygon_y[3]})^2)" | bc)
   echo "Длина сторон: $d1  $d2  $d3"
   ret=$(echo  "scale=2; ($d1+$d2+$d3)" | bc)
   echo "периметр = $ret"
   ret=$(echo "scale=6; sqrt(($ret/2)*($ret/2-$d1)*($ret/2-$d2)*($ret/2-$d3))" | bc)
   echo "площадь = $ret"
   echo ---------------------------------
done
Вывод:

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

$ ./triangle.sh
координаты вершин в формате: X Y (^D конец ввода)
вершина № 1 : 1 1
вершина № 2 : 2 1
вершина № 3 : 1 2
вершин 3 : [1,1] [2,1] [1,2]
Длина сторон: 1  1  1.414213
периметр = 3.414213
площадь = .499997

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

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

Непрочитанное сообщение Olej » 07 фев 2014, 10:42

Olej писал(а): - C
- C++
- Java
- Python
- JavaScript
- PHP
- Lua
- bash
- Perl
Для полноты картины - Ruby:

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

#!/usr/bin/ruby
# coding: utf-8

class Shape                  # класс многоугольника
   def initialize
      @points = []
   end
   def clean
      @points = []
   end
   def add val
      @points[ @points.size ] = val
   end 
   def size
      @points.size
   end 
   def to_s
      msg = ""
      @points.each do |point|
         msg +=  "[" + point.real.to_s + "," + point.imag.to_s + "] "
      end
      msg
   end 
   def perimeter
      summa = 0.0;
      for i in 0..( @points.size - 1 )
         if i == 0 then j = @points.size - 1
         else j = i - 1 
         end
         summa += ( @points[ i ] - @points[ j ] ).abs
      end
      summa
   end 
   def square
      summa = 0.0
      for i in 0..( @points.size - 3 )
         s1 = @points[ i + 1 ] - @points[ 0 ]
         s2 = @points[ i + 2 ] - @points[ 0 ]
         summa += 0.5 * s1.abs * s2.abs * Math.sin( s2.arg - s1.arg ).abs
      end
      summa
   end
end

shape = Shape.new()
while true do
   puts( 'координаты вершин в формате: X Y (^D конец ввода)' )
   i = 1
   shape.clean
   while true do
      print "вершина № #{i.to_s} : "
      if ( ansv = gets ) == nil then
         print "\r"
         break
      end
      ansv.chop
      m = ansv.split(/ /)
      if ( n =  m.size ) != 2 ||
         m[ 0 ] !~ /\d+\.{0,1}\d*$/ ||
         m[ 1 ] !~ /\d+\.{0,1}\d*$/ then
         puts "ошибка ввода!"
         next
      end
      shape.add( Complex( m[ 0 ].to_f, m[ 1 ].to_f ) )
      i += 1 
   end
   printf( "вершин %s : %s\n", shape.size.to_s, shape.to_s )
   printf( "периметр = %.2f\n", shape.perimeter.to_s )
   printf( "площадь = %.2f\n", shape.square.to_s )
   puts "---------------------------------"
end

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

olej@notebook:~/2014_WORK/OWN.BOOKS/ManyLan/ex.draft$ ruby triangle.rb
координаты вершин в формате: X Y (^D конец ввода)
вершина № 1 : 1 1
вершина № 2 : 1 2
вершина № 3 : 2 2
вершина № 4 : 2 1
вершин 4 : [1.0,1.0] [1.0,2.0] [2.0,2.0] [2.0,1.0]
периметр = 4.00
площадь = 1.00
---------------------------------
координаты вершин в формате: X Y (^D конец ввода)
вершина № 1 : 1 1
вершина № 2 : 1 2
вершина № 3 : 2 1
вершин 3 : [1.0,1.0] [1.0,2.0] [2.0,1.0]
периметр = 3.41
площадь = 0.50
---------------------------------
координаты вершин в формате: X Y (^D конец ввода)
вершина № 1 : ^Ctriangle.rb:58:in `gets': Interrupt
from triangle.rb:58:in `gets'
from triangle.rb:58:in `<main>'
Без комментариев ;-) ... - это на большого любителя ;-)
Вложения
triangle.rb
(1.87 КБ) 443 скачивания

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

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

Непрочитанное сообщение Olej » 07 фев 2014, 10:52

Lepton писал(а): Можно обойтись без лишних скриптов, использовав bc (калькулятор командной строки)
Доработанный скрипт ( для треугольников):
Да, это хороший вариант...
Я всегда забываю про командный калькулятор :-? , вспоминаю, когда уже сделаю ... и напомнят.

Но это хороший вариант для простых случаев ... в данном случае для расчёта треугольника.
Но все показанные примеры на интерпретирующих языках (тут даже важно - с динамической типизацией) - они все переделаны так, что просчитывают выпуклый многоугольник с произвольным числом вершин (4, 5, ... 10, ... 100 ... ;-) ). Для такого расширения это с bc не так просто написать (главным образом из-за того, что в bash функции с очень ограниченными возможностями, по возврату ... вроде BASIC ;-) ). Я написал "на попробовать", ... но это очень громоздко получается :-(

Здесь 4 вершины:

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

olej@notebook:~/2014_WORK/OWN.BOOKS/ManyLan/ex.draft/bash.bc$ ./triangle.bc.sh
координаты вершин в формате: X Y (^D конец ввода)
вершина № 1 : 1 1
вершина № 2 : 1 2
вершина № 3 : 2 1
вершин 3 :  [1,1]  [1,2]  [2,1]
периметр = 3.414213
площадь = .499997
---------------------------------
координаты вершин в формате: X Y (^D конец ввода)
вершина № 1 : 1 1
вершина № 2 : 1 2
вершина № 3 : 2 2
вершина № 4 : 2 1
вершин 4 :  [1,1]  [1,2]  [2,2]  [2,1]
периметр = 4
площадь = .999994
---------------------------------
координаты вершин в формате: X Y (^D конец ввода)
вершина № 1 : ^C
Вложения
triangle.bc.sh
(2.89 КБ) 445 скачиваний

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

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

Непрочитанное сообщение Olej » 10 фев 2014, 22:19

Olej писал(а): Разгребаясь с этими примерами на 9-ти ЯП, я только сейчас, в итоге, обратил внимание на одну очень важную деталь:
- рассмотрены 9 языков широко применяющиеся на сегодня в реальных проектах...
- в рассмотрение не включены другие интересные ЯП, но которые не применяются широко на практике, представляют, скорее, академический интерес: как Pascal, Modula 2/3, Oberon, Haskell и др. (что ещё? предлагайте!)
- из всех охваченных рассмотрением языков только два языка (а точнее правильнее сказать даже один) — C и C++ используют технику «нативной» компиляции в машинный код используемой платформы;
- все остальные 7, в той или иной мере и технике (по разному!), используют виртуальную исполняющую машину (среду выполнения);
- это, очевидно, становится тенденцией последнего десятилетия.

Обратим внимание на то, что все более ранние языковые проекты (Algol, FORTRAN, COBOL, Pascal, PL/1, BCPL - прародитль C и все, все, все) предполагали компиляцию в исполнимый машинный код.

Что ещё осталось в обиходе из компилирующих языков? :-o

Интересно, да? ;-)

P.S. Особенно если учесть ещё и то, что в ВУЗах молодых специалистов подготавливают (... курсовые, практики, ...) именно на компилирующих языках.
Возвращаясь к этому вопросу... только теперь стало уже и не "7 из 9-ти", а "8 из 10-ти"...
Вот что, дословно, сказал по этому поводу мой давний коллега:
[18:29:44] : никакого парадокса нет! :)
[18:37:29] : Эффективность исполняемого кода стала перебиваться насущностью скорейшего написания кода и выхода на рынок.
Рынок сформировали интерпретаторами и набором стандартных "предметных областей", где универсальные языки с высокоэффективной генерацией нативного кода НЕ НУЖНЫ (просто - по природе задач).
Я бы даже обобщил и радикализировал: ПРОГРАММИРОВАНИЯ стало меньше. больше - клип-мэйкерство на базе типовых подходов и решений.
С динамическими языками и интерпретаторами!

Кстати, заметьте, что ни ФОРТ, ни Смолтолк такой популярности НЕ набрали! Хотя, отчасти, их тоже можно назвать "интерпрететорами"...
Просто потому, что они - "неправильные" интерпретаторы с точки зрения современного массового разработчика и менеджера: строгости рассуждений при построении моделей следуют! Потому и нравится народу больше динамика в определении типов - критичность ошибки по типизации всегда можно отловить либо обработкой исключения, либо "перезапуском скрипта"...
[18:40:42] : С другой стороны...
[18:48:25] : есть ещё причина: интрпретатор некоей виртуальной машины ЛЕГЧЕ написать и код для неё ЛЕГЧЕ писать - меньше вариантов обработки ошибок. И всё уходит в "прослойку" кода интрпретатора и исполняющей среды. Для компилируемых языков и их сред исполнения требования к внимательному написанию надёжного кода НЕИЗМЕРИМО выше. Поэтому, кстати, варианты Паскаля так нелюбимы молодыми кулхацкерами: ясно, что есть средства, которые призваны повышать надёжность (начиная с синтаксиса), но кул-хацкерами эти средства воспринимаются, как "ограничение свободы"... Беда в том, что и на Си/Си++ среди этой молодёжи ПОЧТИ НИКТО УЖЕ РАБОТАТЬ НЕ МОЖЕТ! И - ГЛАВНОЕ - НЕ СМОЖЕТ УЖЕ!!!

Я, по большому счёту, и не знаю, плохо или хорошо это на самом деле.
ПРоисходит естественная сепарация на слои компетентности: 95-99% работают сборщиками готовых решений для работы в максимально безопасной среде.
А 1-5% - как раз те, кто эти среды и решения создаёт с максимальной "выжимкой" из железа всего, на что оно способно (на низком уровне).
К тому же, быстродействие нонешних "числодробилок" уже таковое, что, подчас скрипты на Перле или Руби работают быстрее на порядок, чем те же программы на Си лет 10-20 назад...

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

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

Непрочитанное сообщение Olej » 12 фев 2014, 22:34

Olej писал(а): Что ещё осталось в обиходе из компилирующих языков? :-o
1. Из представленных решений на 10 языках - эти 10 языков во всех рейтингах называют языками, наиболее используемыми в реальных проектах.

2. Из "ещё" может быть только экзотика...
В частности, из чисто компилирующих языков, например, - Go.

3. Из экзотики нужно посмотреть что там из новых направлений активно развивается? ...
10 перспективных языков программирования, которые могут перевернуть мир ИТ
Исследуемый язык программирования № 2: Ceylon

Гэвин Кинг (Gavin King) отрицает тот факт, что Ceylon, разрабатываемый им язык в Red Hat, должен стать «убийцей Java». Кинг хорошо известен как создатель фреймворка объектно-реляционного отображения Hibernate для Java. Ему нравится Java, но он считает, что в нём ещё многое нужно улучшить.
... но это всё понаписано года 2 назад (оригинал - январь 2012, перевод - середина 2013), и нужно смотреть что там живое...

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

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

Непрочитанное сообщение Olej » 12 фев 2014, 22:40

Olej писал(а): В частности, из чисто компилирующих языков, например, - Go.
Изображение

Go :
Реализации
На данный момент существуют два компилятора Go:
  • 6g (и сопутствующие ему инструменты, вместе известные под названием gc) написан на Си с применением yacc/Bison для парсера
  • Gccgo — ещё один компилятор Go с клиентской частью, написанной на C++, и рекурсивным парсером, совмещённым со стандартным бэк-эндом GCC[7]. Поддержка Go доступна в GCC начиная с версии 4.6.
Всё это (2 реализации) прекрасно доступны в Linux:

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

olej@notebook:~$ aptitude search golang*
p   golang                                             - Go programming language compiler - metapackage
p   golang-dbg                                         - Go programming language compiler - debug files
p   golang-doc                                         - Go programming language compiler - documentation
p   golang-go                                          - Go programming language compiler
p   golang-mode                                        - Go programming language - mode for GNU Emacs
p   golang-src                                         - Go programming language compiler - source files
v   golang-tools                                       -
v   golang-weekly                                      -
v   golang-weekly-dbg                                  -
v   golang-weekly-doc                                  -
v   golang-weekly-go                                   -
v   golang-weekly-src                                  -
v   golang-weekly-tools                                -

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

olej@notebook:~$ aptitude search gccgo*
p   gccgo                                              - Go compiler, based on the GCC backend
p   gccgo-4.6-doc                                      - documentation for the GNU Go compiler (gccgo)
p   gccgo-4.7                                          - GNU Go compiler
p   gccgo-4.7-doc                                      - documentation for the GNU Go compiler (gccgo)
p   gccgo-4.7-multilib                                 - GNU Go compiler (multilib files)
p   gccgo-multilib                                     - Go compiler, based on the GCC backend (multilib files)
Так что ничто не препятствует легко установить и поэкспериментировать и с Go:

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

olej@notebook:~$ gccgo --version
gccgo (Debian 4.7.2-5) 4.7.2
Copyright (C) 2012 Free Software Foundation, Inc.
This is free software; see the source for copying conditions.  There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

Ответить

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

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

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