Просмотр сообщений

В этом разделе можно просмотреть все сообщения, сделанные этим пользователем.


Темы - valexey_u

Страницы: [1] 2 3 ... 7
1
Общий раздел / Fortran Web Framework
« : Декабрь 21, 2016, 04:22:38 pm »
Собственно вот, зарелизился: https://fortran.io/

Теперь можно лепить сайты на фортране :-)

2
Ну, простые тесты на производительность уже были, это уже скучно. Теперь давайте что-то более сложное, что-то более приближенное к реальности.

Если на некотором ЯП результаты этого теста будут очень плохи, значит скорее всего на этом ЯП и ядро СУБД нормально реализовать не получится (либо это потребует очень больших усилий). Т.е. этот тест для, так называемых, ЯП претендующих на звание системных. По сути, тест на профпригодность ЯП на звание системного.

Итак задача:

Есть файл input в нем содержится массив целых беззнаковых 32битных чисел (ака uint32_t) в бинарном little endian виде. После завершения выполения приложения, должен быть файл output где в том же формате был бы записан отсортированный по возрастанию этот массив.

Теперь детали:
  • На машине 128 Мб памяти (и нет свопа).
  • Файл большой - в ОЗУ точно не поместится
  • На диске есть место для временных файлов
  • Операционная система - скорее всего какой-то *nix.
  • Диск SSD, не HDD
  • Машина скорее всего 64битная, но может быть и 32битной
  • Машина двуядерная

Теперь следствия нюансов:
Решение может быть реализовано под наиболее вероятную конфигурацию машины (64 bit'ный *nix). Но возможность писать кроссплатформенно также ценится, поэтому будет две номинации:
  • Самое быстрое решение
  • Самое быстрое кроссплатформенное решение

В данном случае кроссплатформенность означает, что программа должна собираться и работать как минимум под *nix и windows (в крайнем случае - под linux и windows).

Теперь про сборку: должна быть возможность собирать программу автоматически, то есть из bash/bat-скрипта либо через makefile. Если программа кроссплатформенная, то она должна под обоими платформами собираться без правки исходников руками, то есть тоже просто запуском скрипта/make. Естественно при этом на систему можно руками поставить весь, необходимый для сборки, дополнительный софт.

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

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

Задача не проста, поэтому я не ожидаю что будет много решений, но надеюсь хотя бы на 2-3 участников. Для тестирования я выделю отдельную машину и буду там прогонять все решения раз или два раза в неделю (полный прогон тестов длится долго) в автоматическом режиме.

PS. У меня пока есть кривенькое решение на C++. Максимум что я еще смогу самостоятельно реализовать - ocaml и go. При этом за OCaml я не поручусь.
PPS. Правила проведения тестов вероятно будут дополняться.

UPD: Исходники решений слать и смотреть можно тут: https://github.com/valexey/bigbench
Правила засылки исходники такие:

Делаем бранч репозитория

Создаем папку со своим username or nickname, в ней подкаталог с названием решения (вдруг у будет несколько вариантов и захочется протестить их все), а в нём, кроме исходников, либо makefile либо build.sh чтобы собрать решение можно было в автоматическом режиме.

Затем засылаем пулреквестом в этот репозиторий: https://github.com/valexey/bigbench

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

UPD 2: Текущие результаты (картинка обновляется при каждом прогоне тестов):

3
Общий раздел / Your Language Sucks
« : Ноябрь 16, 2016, 10:36:49 pm »
Замечательная страничка: https://wiki.theory.org/YourLanguageSucks

Ну и перевод: https://habrahabr.ru/post/315152/

К сожалению на ней не упомянут Оберон. Считаю, что это упущение и нужно дополнить статью (благо это вики, так что, теоретически, это возможно).

Итак, почему же Оберон отстой?

4
Продолжаем нашу рубрику неочевидных ошибок в программах на разных ЯП. На этот раз у нас будет строго статически типизированный функциональный язык - Ocaml.

Итак, вот функция, которая успешно компилируется, запускается, но выдает неверный результат (должна искать индекс минимального элемента массива):

let min_index a =
  let min i m =
    let m = if a.(i) < a.(m) then i else m in
    if (Array.length a) = (i+1) then
      m
    else
      min (i+1) m
  in
  min 0 0

Надо найти ошибку и ее исправить.

5
Общий раздел / Future BlackBox.
« : Сентябрь 16, 2016, 07:40:11 pm »
В продолжение темы: http://oberspace.dyndns.org/index.php/topic,685.msg21597.html#msg21597

Выходит, что твой кросскомпилер Оберон->C более эффективен, чем компилятор Блекбокса? Тебе надо срочно перевести Блекбокс на твой компилятор ))) Всё русское оберон-сообщество тебе огромное спасибо скажет. Правда, не заплатит ни копейки )))
Ценю Ваш юмор.
Но если серьёзно, то, по-моему, лучше создать новую ОС-среду, полностью написанную сообществом и лишённую недостатков Блэкбокса.

А какие собственно недостатки у ББ? Ну, то есть такие, чтобы критичные были. Да, у него древний и убогий компилятор с багами (да ещё и с кодом который сложно править, отлаживать и модифицировать), да доисторический сборщик мусора, и да там сильно протекает абстрагирование от хост-системы. Ну и реализация некоторых стандартных компонентов оставляет желать лучшего, а поддержка редактирования исходников довольно убога.

Но так ли всё это важно?

Наверно единственное чего действительно ББ не хватает, и без чего чем дальше, тем сложнее жить - это поддержка AMD64. Правда фикс этого требует серьезных изменений в компиляторе.

Остальное же возможно править инкрементально, без революций.

6
Общий раздел / Найдите ошибку, если она есть.
« : Сентябрь 14, 2016, 08:40:16 pm »
Имеем вот такой код на С++:

#include <vector>
#include <iostream>

using namespace std;

struct bor
{
    int mp[2];
    int cnt;
    bor(): mp({0,0}), cnt(0)
    {}
};
vector<bor> tr;
int go()
{
    tr.push_back(bor());
    cerr << "go " << tr.size() << ' ' << tr.size() - 1 << endl;
    return tr.size() - 1;
}

string s;
int add(int v, int i, int zn)
{
    cerr << "in " << v << ' ' << tr.size() <<' ' << i <<' ' << s.size() << endl;
    if (i == static_cast<int>(s.size()))
    {
        tr[v].cnt += zn;
        return tr[v].cnt;
    }
    int x = s[i] - '0';
    x = x % 2;
    if (tr[v].mp[x] == 0)
    {
       cerr << "go in " << endl;
       cerr << tr.size() <<' ' << tr[v].mp[x] << endl;
         tr[v].mp[x] = go();
       cerr << tr.size() <<' ' << tr[v].mp[x] << endl; 
         cerr << "go out " <<  endl;
    }
    return add(tr[v].mp[x], i + 1, zn);
}

int main()
{
    go();
    s = "01";
    add(0, 0, 1);
}

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

7
Общий раздел / Праздничный наброс от MS
« : Сентябрь 12, 2016, 04:20:37 pm »
10 фактов о C#:

https://habrahabr.ru/company/microsoft/blog/309774/

Цитировать
5. С# является первым компонентно-ориентированным языком программирования.

8
Собственно я тут с ocaml играюсь, соответственно хотел удостовериться что он более-менее применим на императивных алгоритмов (коих большинство на моих задачах - изображение обработать, обработать данные с датчика (десятки и сотни миллионов элементов в массиве и проч), что не будет внезапных просадок производительности раз эдак в 10 по сравнению с плюсами.

Посему соорудил простейший тест - обычная сортировка пузырьком массива из 40000 элементов (int), массив первоначально отсортирован в обратном порядке, следовательно максимальное число перестановок потребуется.

Ну а поскольку сложно удержаться и не потестить другие ЯП, в итоге было потестировано: ocaml, c++, go, haskell (спасибо geniepro за все варианты кода), component pascal / blackbox.

Итоги выложил на github: https://github.com/valexey/bubble_test

По итогам скажу, что ocaml меня не разочаровал - производительность всего на 20 процентов ниже плюсовой, и достигается очень просто в отличие от haskell'я, где нужно побегать и попрыгать, чтобы он не сливал позорно более чем в 10 раз плюсам.

Ну а Компонентный Паскаль с отключенными проверками на выход за пределы массива, отстает от С++ более чем в 4 раза. См. табличку :-)

9
Общий раздел / Oberon 2016
« : Май 01, 2016, 02:02:44 pm »
Вышел новое сообщение о языке (1 мая 2016 года): https://www.inf.ethz.ch/personal/wirth/Oberon/Oberon07.Report.pdf

Вот дифф относительно старого: http://paste.lisp.org/display/315134

--- old.txt 2016-05-01 14:25:17.925910136 +0200
+++ new.txt 2016-05-01 14:25:17.925910136 +0200
@@ -1,5 +1,5 @@
                    The Programming Language Oberon
-                                 Revision 1.10.2013 / 4.3.2016
+                                 Revision 1.10.2013 / 1.5.2016
                                             Niklaus Wirth
                      Make it as simple as possible, but not simpler. (A. Einstein)
 
@@ -26,7 +26,7 @@
 to serve as a reference for programmers, implementors, and manual writers. What remains unsaid
 is mostly left so intentionally, either because it is derivable from stated rules of the language, or
 because it would unnecessarily restrict the freedom of implementors.
-This document describes the language defined in 1988/90 as revised in 2007/11.
+This document describes the language defined in 1988/90 as revised in 2007 / 2016.
 
 2. Syntax
 A language is an infinite set of sentences, namely the sentences well formed according to its
@@ -138,11 +138,10 @@
 A data type determines the set of values which variables of that type may assume, and the
 operators that are applicable. A type declaration is used to associate an identifier with a type. The
 types define the structure of variables of this type and, by implication, the operators that are
-applicable to components. There are two different structures, namely arrays and records, with
+applicable to components. There are two different data structures, namely arrays and records, with
 different component selectors.
-        TypeDeclaration = identdef "=" StrucType.
-        StrucType = ArrayType | RecordType | PointerType | ProcedureType.
-        type = qualident | StrucType.
+        TypeDeclaration = identdef "=" type.
+        type = qualident | ArrayType | RecordType | PointerType | ProcedureType.
 Examples:
         Table          =      ARRAY N OF REAL
         Tree           =      POINTER TO Node
@@ -387,9 +386,10 @@
 hold:
 1. The constant NIL can be assigned to variables of any pointer or procedure type.
 2. Strings can be assigned to any array of characters, provided the number of characters in the
-  string is not greater than that of the array. If it is less, a null character (0X) is appended. Single-
-  character strings can also be assigned to variables of type CHAR.
+  string is less than that of the array. (A null character is appended). Single-character strings can
+  also be assigned to variables of type CHAR.
 3. In the case of records, the type of the source must be an extension of the type of the destination.
+4. An open array may be assigned to an array of equal base type.
 Examples of assignments (see examples in Ch. 7):
         i := 0
         p := i = j
@@ -718,7 +718,7 @@
         ADC(m, n)       INTEGER              INTEGER             add with carry C
         SBC(m, n)       INTEGER              INTEGER             subtract with carry C
         UML(m, n)       INTEGER              INTEGER             unsigned multiplication
-        COND(n)         INTEGER              BOOLEAN             IF Cond(8) THEN ...
+        COND(n)         INTEGER              BOOLEAN             IF Cond(n) THEN ...
 
 Proper procedures:
         Name            Argument types                           Function
@@ -743,9 +743,8 @@
     string = """ {character} """ | digit {hexDigit} "X".
     ConstDeclaration = identdef "=" ConstExpression.
     ConstExpression = expression.
-    TypeDeclaration = identdef "=" StrucType.
-    StrucType = ArrayType | RecordType | PointerType | ProcedureType.
-    type = qualident | StrucType.
+    TypeDeclaration = identdef "=" type.
+    type = qualident | ArrayType | RecordType | PointerType | ProcedureType.
     ArrayType = ARRAY length {"," length} OF type.
     length = ConstExpression.
     RecordType = RECORD ["(" BaseType ")"] [FieldListSequence] END.

10
Общий раздел / Oberon rev. 2015 (февраль)
« : Февраль 26, 2015, 12:28:08 pm »
Собственно 22 февраля вышла новая ревизия ЯП Оберон. Брать как обычно тут: http://www.inf.ethz.ch/personal/wirth/Oberon/Oberon07.Report.pdf

Подробные изменения пока не смотрел.

Такжа в качестве бонуса вышел тьюториал по ЯП Оберону: http://www.inf.ethz.ch/personal/wirth/Oberon/PIO.pdf (на титульной странице написано что это 2014 год, но думаю это опечатка, ибо совпадает и месяц и день).

11
Урочище Флуда / Ополченцам капец
« : Декабрь 04, 2014, 06:17:54 am »
Собственно: http://d-russia.ru/deputaty-planiruyut-zapretit-najm-it-specialistov-bez-profilnogo-diploma-neponyatno-kak-byt-s-profilnym-ministrom.html

"Депутаты планируют запретить найм IT-специалистов без профильного диплома – непонятно, как быть с профильным министром"

Нус, кто тут не имеет профильного диплома по IT-специальности? :-) То есть всякие там физики/математики - сразу в пролете. Вперед доучиваться!

12
Общий раздел / Вопросы по OberonJS
« : Сентябрь 17, 2014, 07:31:51 pm »
Цитата: Роман М.
  • Как провести грань между мелким скриптингом и приложением? Если можно, привести наглядные примеры.
  • Расскажите что-нибудь из опыта отладки заковыристых мест при одновременной работе с OberonJS и JavaScript.
  • Каковы преимущества использования OberonJS перед TypeScript касательно статической проверки типов.
  • Каковы перспективы использования Asm.js?

(оригинал вопроса тут: http://forum.oberoncore.ru/viewtopic.php?f=30&t=5215

13
Общий раздел / 14 сентября, обероновстреча.
« : Сентябрь 15, 2014, 03:10:38 pm »
Собственно да, было. И я там был, что-то рассказывал про oberonjs в полубессознательном состоянии после перелетов из США и дороги из НН.

Презентация тут: http://oberspace.dyndns.org/Oberonjs.pdf

14
Общий раздел / Project Oberon Compiler online.
« : Сентябрь 15, 2014, 03:08:45 pm »
В рамках проведения нечеловеческого эксперимента над oberonjs, портировал и собрал Виртовский компилятор из Project Oberon 2013-2014.

И выложил его онлайн.

Порт пока не полный, порт пока местами глючит, ибо есть еще что поправить в рантайме и кодогенерации oberonjs.

Ах, да, ссылка вот: http://oberspace.dyndns.org/PO_2013_compiler.html

15
Общий раздел / Project Oberon on FPGA
« : Сентябрь 13, 2014, 02:17:55 pm »
В продолжение вот этой темы http://oberspace.dyndns.org/index.php/topic,597.0.html но уже конкретно про этот PO на железе.

Я таки собрал референсную реализацию компьютера Вирта (на Spartan-3), и, после долгого подбора правильной PS/2 мыши и клавиатуры (Оберон-комп работает далеко не со всеми), все же завел полноценно железку.

На будущее - как показала практика, в продаже сейчас есть по крайней мере одна модель ps/2 мышки, которая точно подходит Оберон-компу: Genius NetScroll 100. Мышки Defender на работают все абсолютно, а у мышей от Microsoft не работает колесо как третья кнопка. USB-мышь Logitech-classic не заработала через переходник.

Ниже фоточки:

Первый пробный запуск, еще без мышки и клавиатуры вообще:




В поисках правильной мышки:



Правильная мышка найдена!



Так что теперь буду изучать как оно работает по задумке Вирта, так сказать, в оригинале. Ну и потихоньку портировать на что-то более доступное и современное, а то этот Spartan-3 уже днем с огнем не найти.

PS. Насколько я знаю, ilovb также сумел это все запустить.

Страницы: [1] 2 3 ... 7