Главное меню
Мы солидарны с Украиной. Узнайте здесь, как можно поддержать Украину.

Кобол 21 века

Автор Алексей Гринь, августа 27, 2009, 12:07

0 Пользователи и 1 гость просматривают эту тему.

Алексей Гринь

Как же не хватает типов данных ФЯ во всяких этих C++ или C#.

Вот например нужен мне временный тип в одном месте -- только в одном, который может содержать ИЛИ строку, ИЛИ массив строк, ИЛИ быть нулём -- что-то одно -- чтобы этот тип параметризировать как V в Dictionary<K, V>. В С#'ах и прочих шедеврах быдломысли, где траблы с алгебраическими типами данных, мне придётся описывать несколько классов:

Цитироватьenum DicValueType
{
  Null,
  String,
  StringArray
}

struct DicValue
{
    public DicValueType Type;
   
   public String AsString;
   public String[] AsStringArray;
}

Можно ещё через наследование сделать*, но будет больший костыль.

В обычном си этот костыль обычно делается через юнионы, но это только экономит память, но не количество буков (нельзя делать анонимные юнионы, к примеру):

Цитироватьtypedef struct
{
  enum ValueType type;
  union
  {
     char** as_str;
     char* as_str_arr;
  } p;
} DicValue;

Вот реально, по сравнению с языками с нормальной типизацией, эта писанина кажется прыжком обратно в 80-ые. Кобол какой-то раздутый с goto'ами. Потому что в функциональщине это обычно описывается примерно так:

data DicValue = Null | AsString String | AsStringArray [String]

Лол.

В ходе попытки написания синтаксического парсера человеческих языков на C# (номальная работа со строками была нужна), мне столько раз приходилось так костылить, эх... Могёт, на Окамле попробовать? На Хаскеле боязно.



* Хотя нет, наследование нельзя. Для экономии памяти я в C# использую для таких случаев structs, которые живут только в стеке, без выделения на куче, но они не наследуются.
肏! Τίς πέπορδε;

Nevik Xukxo


Алексей Гринь

Цитата: Неодобренный в силу технических проблем ЧукчоПричёмтуткобол?

Hello, World в сравнении:

Цитата: C#include <stdio.h>

int main(void) {

   printf("Hello World");
   return 0;
}

Цитата: COBOL
000100 IDENTIFICATION DIVISION.
000200 PROGRAM-ID. HELLOWORLD.
000300
000400*
000500 ENVIRONMENT DIVISION.
000600 CONFIGURATION SECTION.
000700 SOURCE-COMPUTER. RM-COBOL.
000800 OBJECT-COMPUTER. RM-COBOL.
000900
001000 DATA DIVISION.
001100 FILE SECTION.
001200
100000 PROCEDURE DIVISION.
100100
100200 MAIN-LOGIC SECTION.
100300 BEGIN.
100400     DISPLAY " " LINE 1 POSITION 1 ERASE EOS.
100500     DISPLAY "Hello world!" LINE 15 POSITION 10.
100600     STOP RUN.
100700 MAIN-LOGIC-EXIT.
100800     EXIT.
肏! Τίς πέπορδε;

злой

Кобол: Наводите ПИСТОЛЕТ COLT 45 на НОГА.СТОПА, ТОГДА помещаете РУКА.КИСТЬ.ПАЛЕЦ на ПИСТОЛЕТ.КРЮЧОК и ПОЖАЛУЙСТА, НАЖИМАЕТЕ. ТОГДА возвращаете ПИСТОЛЕТ в КОБУРУ. ПОЖАЛУЙСТА, ПРОВЕРЬТЕ, нуждаются ли шнурки в повторном связывании.

А ведь на этом чуде написано ядро Oracle`а...
Entre los individuos, como entre las naciones, el respeto al derecho ajeno es la paz.   - Benito Juárez

Алексей Гринь

Скачал 20 мегов, думал F# установить (OCaml под .NET, уи-и-и), а он оказывается в отношении среды несовместим с Visual C# Studio 2008 Express, надо или полноценную версию студии брать, или 380 мб дополнительных качать для Visual Studio 2008 Shell. Как-то не хочется :'(
肏! Τίς πέπορδε;

Быстрый ответ

Обратите внимание: данное сообщение не будет отображаться, пока модератор не одобрит его.

Имя:
Имейл:
Проверка:
Оставьте это поле пустым:
Наберите символы, которые изображены на картинке
Прослушать / Запросить другое изображение

Наберите символы, которые изображены на картинке:

√36:
ALT+S — отправить
ALT+P — предварительный просмотр