LINUX.ORG.RU

Избранные сообщения Kuzy

Третий день бьюсь над сегфолтом...

Форум — Development
#include <string.h>
#include <iostream>
using namespace std;
const int ARL=255;
class String{
 char* s[];
 public:
 String(char *s1){
  s=new char[ARL];
  strcpy(s,s1);
 }
 String(){
  cout<<"Введите строку:";
  s=new char[ARL];
  cin>>s;
 }
 ~String(){
  delete[] s;
 }
 int len(){
  for (int i=0;i<ARL;i++)
   if (s[i]==0)
    return i;
  return -1;
 }
 int len(char* s1){
  int l=sizeof(*s1);
  for (int i=0;i<l;i++)
   if (s1[i]==0)
    return i;
  return -1;
 }
 void operator--(){
  int l=this->len();
  int j;
  for(int i=0;i<l;i++){
   ........
  }
 }
..............
};
int main(){
 char* s=new char[255];
 cout<<"Введите начальную строку:"<<endl;
 cin>>s;
 String* s1=new String(s);
 s1->print();
 *s1--;
 s1->print();
...................
 return 0;
}

Первый раз метод len вызывается корректно. При втором - сразу сегфолт. С помощью gdb выяснил, что s почему-то присваивается между этими вызовами адрес 0x21. Где и как - хоть убейте, не пойму. Если s1-- закомментить - не сегфолтится. Пробовал его и со звёздочкой вызывать, и без - результат один и тот же.

 , , , ,

MiniRoboDancer
()

как в хаскеле реализованы списки?

Форум — Development

Для программиста списки в хаскеле иммутабельны. Значит ли это что при любой операции хаскель создаёт реально новый список с копированием элементов или же там внутри есть хитрые оптимизации?

 

true_admin
()

Какашки в Common Lisp

Форум — Development

Предлагаю учёным мужам в этом топике собрать и обсудить проблемы в языке Common Lisp. Кому что не нравится?

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

Не нравится неполная интеграция CLOS в язык: распознавание класса в CLOS для стандартных лисповских типов ещё работает, но не для своих типов, объявленных через deftype.

Ну и вообще CLOS жирноват для 90% задач. Не говоря уж про MOP, который почти никем не используется, а если и используется, то для решения проблем с кривостями CLOS, либо просто книжку AMOP обчитался и повредился умом.

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

Не нравится отсутствие стандартных средств рефлексии/интроспекции лексического окружения. Лексэнвы эти есть во всех реализациях, но стандартного способа работы с ними нету. Нужда в этой фенечке шкурная, и широкими массами не востребована, но всё же.

loop - какашка. Это не лисп. Точка.

Встроенный макроязык в format - тоже какашка. Я каждый раз после двухдневного перерыва лезу в документацию или старый код, чтобы вспомнить, как форматировать число с плавающей запятой. В общем-то, перенаворочен format. И всякой ерунды в него набито, типа автоматического окончания у числительных, но которое работает только для аглицкого языка.

unwind-protect - хорошо, но от попыток человеком сэмулировать продолжения для CL хочется икать. Такие trade-off вполне понятны, но лучше бы unwind-protect ограничили.

Ну и более мелкие ляпы в стандарте, типа (elt sequence index), но (nth index list).

Да, этот пост написан в Емаксе, запущенно под лисповым оконным менеджером человеком, получающем деньги за написание лиспокода :)

mv
()

Накидайте языков с необычными концепциями, альтернативам ООП.

Форум — Development

Одна концепция — один язык.

По мотивам Подскажите ЯП. (комментарий) .

Lisp, форт, пролог и хаскелл будем считать уже названными.

next_time
()

Коллеги, а посоветуйте лит-ры?

Форум — Talks

Вот по этим областям, количество книг не важно =)

- теория множеств

- мат. логика

- теория графов

- лямбда-исчисление

- типизированные теории (ещё раз теория множеств, но уже без парадоксов)

- комбинаторика

- теория вычислимости (complexity theory и theory of computation)

- алгоритмическая теория информации

- конечные автоматы

- теория языков (денотационные семантики, и т.п.)

DiKeert
()

FFI, сложные типы данных, как лучше?

Форум — Development

Думаю по поводу того, как должен выглядеть идеальный FFI (foreign function interface) между языком со сборщиком мусора (например, лиспом) и Си.

Для простых типов всё хорошо. А вот что делать со строками, массивами и структурами?

Фактически варианта всего два: транслировать или оставлять указателем.

Вариант с трансляцией мне не нравится тем, что функция «изменить значение головы списка» превратится в «преобразовать весь список, изменить значение головного эдемента, преобразовать список обратно». Хотя видел решения с идеологией «транслировать всё». Например, cl-virgil.

Вариант «всё хранить указателями с тэгами» приводит к наличию в языке двух наборов типов. Строки языка и строки FFI, структуры языка и структуры FFI, массивы языка и массивы FFI. С разными функциями для работы с ними. Получаем протекающую абстракцию... вроде опять плохо.

Если кто-нибудь сталкивался с подобной проблемой, то по какому пути шли и почему?

 ,

monk
()

Не могу понять

Форум — Development

Почему при построении категории, где объекты - типы данных, а морфизмы - функции, из варианта типизированного лямбда-исчисления на комбинаторах получается замкнутая симметричная моноидальная категория (подобно Hilb, где где объекты - конечномерные гильбертовы пространства с обычным тензорным произведением, а морфизмы - линейные операторы), но не декартова, каковой является Set?

 ,

Ndulu
()

Человеческое метапрограммирование

Форум — Development

Подскажите кто-нибудь ЯП с развитой метасистемой, только нормальный, а не лисп.

Ndulu
()

Смотрите, какая интересная библиотека для си.

Форум — Development

http://libcello.org

Для Ъ, пример кода на сишечке:

/* Another Example Cello Program */

#include "Cello.h"

int main(int argc, char** argv) {

  /* Tables require "Eq" and "Hash" on key type */
  var prices = new(Table, String, Int);
  put(prices, $(String, "Apple"),  $(Int, 12)); 
  put(prices, $(String, "Banana"), $(Int,  6)); 
  put(prices, $(String, "Pear"),   $(Int, 55));

  /* Tables also supports iteration */
  foreach (key in prices) {
    var price = get(prices, key);
    print("Price of %$ is %$\n", key, price);
  }

  /* "with" automatically closes file at end of scope. */
  with (file in open($(File, NULL), "prices.bin", "wb")) {

    /* First class function object */
    lambda(write_pair, args) {

      /* Run time type-checking with "cast" */
      var key = cast(at(args, 0), String);
      var val = cast(get(prices, key), Int);

      try {
        print_to(file, 0, "%$ :: %$\n", key, val);
      } catch (e in IOError) {
        println("Could not write to file - got %$", e);
      }

      return None;
    };

    /* Higher order functions */
    map(prices, write_pair);
  }

  delete(prices);
}

 , бег на костылях,

PolarFox
()

FrierFox. Ненужных фич тред. Попытка № 2.

Форум — Desktop

Accessibility - не нужно. Есть vimperator.

user_pref("accessibility.typeaheadfind", false);
user_pref("accessibility.typeaheadfind.autostart", false);
user_pref("browser.fixup.alternate.enabled", false);
user_pref("keyword.enabled", false);
user_pref("browser.search.suggest.enabled", false);
user_pref("browser.urlbar.autoFill", false);
user_pref("browser.urlbar.autoFill.typed", false);
user_pref("browser.urlbar.autocomplete.enabled", false);

Анимации не нужны.

user_pref("browser.fullscreen.animateUp", 0);
user_pref("browser.tabs.animate", false);
user_pref("alerts.disableSlidingEffect", true);

Auto update не нужно.

user_pref("app.update.auto", false);
user_pref("lightweightThemes.update.enabled", false);
user_pref("extensions.update.enabled", false);
user_pref("browser.search.update", false);

HTML5 не нужен.

user_pref("browser.history.allowPopState", false);
user_pref("browser.history.allowPushState", false);
user_pref("browser.history.allowReplaceState", false);
user_pref("dom.event.clipboardevents.enabled", false);
user_pref("dom.indexedDB.enabled", false);
user_pref("dom.workers.enabled", false);
user_pref("geo.enabled", false);
user_pref("html5.offmainthread", false);
user_pref("media.autoplay.enabled", false);
user_pref("media.navigator.enabled", false);
user_pref("media.ogg.enabled", false);
user_pref("media.opus.enabled", false);
user_pref("media.peerconnection.aec_enabled", false);
user_pref("media.peerconnection.enabled", false);
user_pref("media.peerconnection.use_document_iceservers", false);
user_pref("media.raw.enabled", false);
user_pref("media.wave.enabled", false);
user_pref("media.webm.enabled", false);
user_pref("webgl.disable-extensions", true);
user_pref("webgl.disabled", true);
user_pref("layout.3d-transforms.enabled", false);
user_pref("layout.css.flexbox.enabled", false);
user_pref("network.websocket.enabled", false);
user_pref("dom.network.enabled", false);
user_pref("dom.webnotifications.enabled", false);
user_pref("full-screen-api.enabled", false);
user_pref("dom.battery.enabled", false);
user_pref("dom.vibrator.enabled", false);

Гуглоподелки не нужны.

user_pref("browser.safebrowsing.enabled", false);
user_pref("network.http.spdy.enabled", false);

Datareporting не нужен. Захочу - сообщу.

user_pref("datareporting.healthreport.service.enabled", false);
user_pref("dom.enable_performance", false);
user_pref("dom.ipc.plugins.flash.subprocess.crashreporter.enabled", false);

HEХ ненужна. Она отключается, наверняка, сама на неподдерживаемых системах, но почему-то в конфиге все остается включено.

user_pref("device.sensors.enabled", false);
user_pref("toolkit.telemetry.server", "http://localhost/NOT-EXIST/");
user_pref("network.IDN.use_whitelist", false);
user_pref("network.dns.disablePrefetch", true);
user_pref("network.prefetch-next", false);
user_pref("network.stricttransportsecurity.preloadlist", false);
user_pref("network.allow-experiments", false);

Безопасность и приватность не нужны по мнению Mozilla.

user_pref("security.mixed_content.block_active_content", true);
user_pref("security.mixed_content.block_display_content", true);
user_pref("network.http.sendRefererHeader", 0);
user_pref("network.http.sendSecureXSiteReferrer", false);
user_pref("network.protocol-handler.*", false);
user_pref("dom.ipc.plugins.enabled", false);
user_pref("network.proxy.socks_remote_dns", true);

JavaScript не нужен. Нужен только быдлокодерам, которые не умеют делать полнофункциональные сайты с поддержкой noscript-браузеров.

user_pref("javascript.enabled", false);

FireFox не нужен

user_pref("pdfjs.disabled", true);

 ,

trupiko
()

Метапрограммирование - проблемы и пути их решения.

Форум — Development

Пичал я тут на днях токенайзел для C++-кода, но всё это меня добило я решил поделится.

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

Шблонную магию плюсов я не люблю, ибо она ущербна чуть более, чем полностью и тут я вспомнил, что оказывается в плюсах хотели ввести компилтайм функции, аля constexpr и подумалось мне - во, плюсы затащат и как всегда я в очередной раз убедился в ущербности плюсов и так и не понял логики тех, кто это запилил.

Чтобы не быть голословным пишем что-то типа

constexpr uint64_t f(uint64_t a, uint64_t b) {
  return a + b; 
}
Всё ок, но пишем что-то сложнее, аля:

uint64_t m[] = {0, 1, 2, 3, 4};
constexpr uint64_t f(uint64_t a, uint64_t b) {
  return m[a] + m[b]; 
}

Бида( или это моё неосиляторство плюсов?), дак зачем они запилили эту фичу, если она может лишь галимую примитивщину? Шаблоны ещё ущербней. В чем приемущество? Зачем?

А теперь у меня вопрос к вам, уважаемы батьки и отцы - что мне делать? Я хочу запонять массивы написав генератор, причем и в компилтайме тоже. Я хочу юзать libc, я хочу всё, а у меня нет ничего, почему?

Т.е. я не хочу каких-то макропроцессоров и скриптовых языков - я хочу, чтобы, если я написал constexpr - оно должно до последнего пытаться собрать то, что я написал и уже только тогда, когда оно реально это не сможет - отвалиться.

У меня есть 3 пути: терпеть, пилить свой язык и конпелятор самому( что долго и нудно) и ваш совет.

 , ,

superhackkiller1997
()

Какие ЯП вас в своё время впечатлили и чем?

Форум — Development

С кратким комментарием — что именно произвело впечатление. Вот меня, например, в следующем порядке поразили:

1) Haskell в институте — системой типов, по сравнению с другими языками казалось неземной красотой, что можно написать всякие Show a, Num a.

2) Prolog тоже в институте — первый опыт настоящей декларативности — пишешь не то, что нужно делать, а что нужно получить и доступные для этого действия. Описал задачу, а система сама все решила.

3) Forth — тем, что самый мощный язык может быть написан в несколько сотен строк.

4) Io и Lua — Io чистотой и элегантностью концепции, а Lua тем, что интерпретатор мощного (на уровне JS) и простого языка может ещё и быстро работать.

5) Lisp — дата-код-дата, полноценная среда для вычислений в компайл-тайме и рантайме.

Ну и по-мелочи:

1) Python — 2D-синтаксисом.

2) colorForth — цветной синтаксис.

3) Katahdin — тем, что можно не очень сложно объединить кучу языков под крышей одного рантайма в пределах одного файла или строки.

4) D — тем, что из C++, в принципе, мог получиться нормальный язык.

5) Pascal ещё в школе, тем что можно было работать с динамической памятью, использовать арифметику указателей и вообще все эти двусвязные списки и т.п.

Может потом ещё что вспомню...

 

y-combinator
()