2014-05-10 6 views
10

मैं हास्केल में एक (वास्तव में मेरा पहला) बड़े पैमाने पर प्रोग्राम लिख रहा हूं और अपने कार्यक्रम को मॉड्यूल में तोड़ने की कोशिश कर रहा हूं, ताकि इसे बनाए रखना आसान हो। हास्केल में, मॉड्यूल नाम निर्देशिका संरचना पर निर्भर प्रतीत होते हैं। यह पूरी तरह से ठीक है जब तक कि मुझे प्रोग्राम के लिए निर्देशिका संरचना की एक और परत एम्बेड नहीं करना पड़ेगा। मैं नीचे एक बहुत ही सरल उदाहरण देता हूं:हास्केल मॉड्यूल में निर्देशिका डालने का बेहतर तरीका

हमें बताएं कि हम निम्नलिखित निर्देशिका संरचना के साथ एक हास्केल प्रोग्राम से शुरुआत कर रहे हैं।

  • नाम में [वर्ग कोष्ठक] निर्देशिका का प्रतिनिधित्व करते हैं, में {घुंघराले कोष्ठक}
  • नाम मॉड्यूल का प्रतिनिधित्व करते हैं, (सामान्य कोष्ठक) में
  • नाम फ़ाइल मॉड्यूल के भीतर जुड़े नामों का प्रतिनिधित्व
[src] 
    - (Main.hs) {Main} 
    - (PRBS.hs) {PRBS} 
    - [Hardware] 
     - (DataDef.hs) {Hardware.DataDef} 
     - (ShiftRegister.hs) {Hardware.ShiftRegister} 

यह सब ठीक है। मैं जहां चाहूं सब कुछ आयात कर सकता हूं। हालांकि, अब कहते हैं कि मैं बहुत की तरह, अमूर्त की एक अन्य स्तर पर बनाना चाहते हैं:

[src] 
    - (Main.hs) {Main} 
    - [Firmware] 
     - (PRBS.hs) {Firmware.PRBS} 
     - [Hardware] 
      - (DataDef.hs) {Firmware.Hardware.DataDef} 
      - (ShiftRegister.hs) {Firmware.Hardware.ShiftRegister} 

सूचना अब कि हार्डवेयर में सभी मॉड्यूल के नाम बदल दिया है। अब मुझे प्रत्येक फ़ाइल के भीतर मॉड्यूल नाम बदलना होगा, और अन्य सभी फाइलों में जहां फाइल आयात की जाएंगी। मैंने केवल तीन उदाहरणों में दिखाए गए तीन फाइलें हैं। यदि निर्देशिका संरचना एम्बेडेड निर्देशिकाओं के साथ सैकड़ों फाइलें समाप्त होती है, तो कोड को बनाए रखना असंभव हो सकता है। इसके अलावा, अगर किसी भी समय, मैं एक निर्देशिका (और इसकी उपनिर्देशिका को वर्तमान निर्देशिका प्रणाली में किसी विशेष बिंदु पर कॉपी करना चाहता हूं), तो मुझे पहले की सभी पिछली निर्देशिकाओं को समझने की आवश्यकता है, और प्रत्येक के भीतर मैन्युअल नाम मैन्युअल रूप से बदलना है फ़ाइल।

चूंकि कई बड़ी परियोजनाओं में हास्केल का उपयोग किया जाता है, इसलिए मुझे बहुत यकीन है कि मुझे यहां कुछ याद आ रही है। इस quagmire से बाहर निकलने में मुझे कोई मदद की सराहना की जाएगी!

+0

मैं एक उपकरण या दृष्टिकोण है कि इस के आसपास काम करता है के बारे में पता नहीं है, लेकिन ऐसा लगता है कि यह होगा लगता है जब आप इस तरह की संरचना बदलते हैं तो मॉड्यूल नामों को दोबारा अद्यतन करने के लिए लिखने के लिए एक मजेदार छोटा कार्यक्रम बनें। – bheklilr

+1

हा हा, मुझे लगता है कि _little_ की आपकी परिभाषा सिर्फ फोर्स में परेशानी का कारण बनती है। – ssm

+3

विशिष्टता के लिए: यह जीएचसी में है, लेकिन पूरे रूप में हास्केल नहीं है। वास्तव में कल्पना बिल्कुल नहीं कहती है कि संकलक को मॉड्यूल कैसे मिलना चाहिए। मुझे संदेह है कि जीएचसी की खोज क्षमताओं का विस्तार करने वाला एक अच्छी तरह से किया गया पैच स्वीकार कर लिया जाएगा ... लेकिन हैकिंग शुरू करने से पहले टिप्पणियों की मांग करना सुनिश्चित करें, क्योंकि यह निश्चित रूप से कुछ है जिस पर पहले से चर्चा की गई है और अच्छे में ध्यान देने योग्य है डिज़ाइन। –

उत्तर

1

आप पर्ल और पार्टी है और वह सब पा सकते हैं और हैं, तो आप कुछ इस तरह कर सकते हैं:

find Firmware/Hardware/ -name '*.hs' -exec perl -i.bak -pe \ 
     's/^module (Hardware\.\S+)/module Firmware.$1/' \ 
     {} \; 
diff Firmware/Hardware/DataRef.hs{,.bak} 
संबंधित मुद्दे